La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Capítulo 6. ANÁLISIS DE ALGORITMOS

Presentaciones similares


Presentación del tema: "Capítulo 6. ANÁLISIS DE ALGORITMOS"— Transcripción de la presentación:

2 Capítulo 6. ANÁLISIS DE ALGORITMOS
ALGORÍTMICA estudia: Diseño de algoritmos: esquemas para resolver problemas. Divide y vencerás, avance rápido, programación dinámica, Backtracking, Branch & Bound Análisis de algoritmos: recursos necesarios para resolver el problema con el algoritmo elegido. Ocupación de memoria, tiempo de ejecución. De manera que se pueda decidir qué algoritmo es mejor para nuestro problema y entrada. Objetivo: Dado un problema concreto encontrar la “mejor” forma de resolverlo.

3 Introducción: PROGRAMACIÓN
Estructura de datos programación modelización Tipo abstracto de datos Modelo matemático Estructura de datos Problema real Algoritmo en lenguaje natural Programa en seudolenguaje Programa ejecutable algorítmica

4 Algoritmo Conjunto de reglas para resolver un problema. Debe ser: Definible. En seudocódigo, pero pueda dar lugar a un programa. De un conjunto de datos de entrada producir unos datos de salida, en un número finito de pasos (tiempo de ejecución finito). Además debemos diseñar algoritmos eficientes: que el tiempo para acabar sea “razonable”. Determinista si para la misma entrada produce siempre la misma salida. No determinista en caso contrario (redondeos, probabilistas, paralelos, …)

5 Ejemplos de ALGORITMOS
Algoritmo de Euclides Dados dos enteros a y b, a>b obtener el m.c.d. Hacer r:=a mod b Si r=0 devolver b En otro caso 3.1. a:=b 3.2. b:=r 3.3. Volver al paso 1 Algoritmo de al-Khawarizmi Resolver x2+bx=c Tomar la mitad de b Multiplicarlo por sí mismo Sumarle c Tomar la raíz cuadrada Restarle la mitad de b

6 Análisis de algoritmos
Estudio de los recursos que necesita la ejecución de un algoritmo. diseñar algoritmos eficientes: que usan pocos recursos: memoria tiempo otros (memoria secundaria, tiempo de programación, …) Pero también importante que los resultados sean correctos. Dependiendo del campo de trabajo puede ser más importante la corrección o la eficiencia. No confundir con análisis de un problema. Hay otros criterios importantes: facilidad de mantenimiento, portabilidad, reutilización, ...

7 Análisis de algoritmos
Para decidir: qué algoritmo programar qué algoritmo utilizar en resolver un problema para una cierta entrada detectar fallo en programa que no funciona bien

8 Factores que influyen en la medición de recursos
Factores externos al algoritmo: Ordenador, otras tareas usando el procesador, sistema operativo, lenguaje de programación, compilador, opciones de compilación, implementación del algoritmo, ... Tamaño del problema: volumen de los datos de entrada Fórmula del tiempo u ocupación de memoria en función de ese tamaño. Contenido de los datos. Para un mismo tamaño de entrada puede influir la distribución de los datos caso más favorable, tm(n) y mm(n) más desfavorable, tM(n) y mM(n) y promedio, tp(n) y mp(n)

9 Análisis de algoritmos
Se intenta obtener: el tiempo de ejecución para un cierto tamaño de entrada, t:N→R+, t(n) Contando el número de instrucciones que se ejecutan o algún tipo de instrucción la ocupación de memoria para un cierto tamaño de entrada, m:N→R+, m(n) Que es la memoria necesaria para que pueda ejecutarse Como influyen factores externos al algoritmo lo que normalmente se estudia la forma en que crece t(n) y m(n), y se utilizan notaciones asintóticas: , O, , o Con las que se acota la función o se obtiene la forma en que crece

10 Análisis a priori – a posteriori
Identificar cómo programarlo. Ver si merece la pena usar ese algoritmo u otro. Determinar el mejor de dos algoritmos. Determinar el tamaño de problema que se puede resolver. A posteriori: Determinar causa de mal funcionamiento. Decidir qué programa usar en la solución de un problema con un cierto tamaño y forma de la entrada.

11 Ej: Cálculo del factorial
fact(n): si n=1 devolver 1 en otro caso devolver (fact(n-1)*n) tiempo: t(n)=t(n-1)+a=t(n-2)+2*a= ... =t(1)+(n-1)*a memoria: m(n)=m(n-1)+c=m(n-2)+2*c= ... =m(1)+(n-1)*c

12 Ej: Torres de Hanoi Hanoi(origen,destino,pivote,discos): si discos=1
moveruno(origen,destino) en otro caso Hanoi(origen,pivote,destino,discos-1) Hanoi(pivote,destino,origen,discos-1)

13 Ej: Torres de Hanoi Número de movimientos: t(1)=1
t(n)=2t(n-1)+1, si n>1 Expandiendo la recurrencia: t(n) = t(n-1) = 2 (2t(n-2)+1) +1 = t(n-2) = 22 (2t(n-3)+1) +1+2 = 23 t(n-3) …. 2n-1 t(1)+1+2+…+ 2n-2 = 2n-1

14 Tiempo promedio tp(n) = S(n) t() * p()
Conteo de instrucciones afectadas por probabilidad: Ej: búsqueda secuencial con centinela i=0 a[n+1]=x repetir i=i+1 hasta a[i]=x tp(n)=2+2*p/n+4*p/n+...+2*n*p/n+(2*n+2)*(1-p)= 2n+4-p(n+1)

15 Ej: Algoritmo de Euclides
Calcular m.c.d(m,n), con m>n repetir r = resto(m/n) m = n n = r hasta r =0 mcd = m t(m,n) = a , si m múltiplo de n t(m,n) = b+t(n,resto(m/n)) , si m no es múltiplo de n

16 Comparación de algoritmos
1.1 fin=false 1.2 mientras no fin 1.3 fin=true 1.4 para i=1,2,…n-1 1.5 si xi>xi+1 cambiar fin=false 2.1 para i=1,2,…,n-1 2.2 para j=i+1,…,n 2.3 si xi>xj cambiar

17 1. 1. fin=false 1. 2. mientras no fin 1. 3. fin=true 1. 4
1.1 fin=false 1.2 mientras no fin 1.3 fin=true 1.4 para i=1,2,…n si xi>xi cambiar fin=false Caso más favorable: Entrada 1,2,3,4: 1.1 , 1.2, 1.3 , 1.4 (i=1) , 1.5 1.4 (i=2) , 1.5 1.4 (i=3) , 1.5 1.4 (sale) 1.2 (sale) Total 11 instrucciones Entrada 1,2,…,n: 1.1 , 1.2, 1.3 , 1.4 (i=1) , 1.5 1.4 (i=2) , 1.5 1.4 (i=n-1) , 1.5 1.4 (sale) 1.2 (sale) Total 2n+3 instrucciones

18 2. 1. para i=1,2,…,n-1 2. 2. para j=i+1,…,n 2. 3. si xi>xj 2. 4
2.1 para i=1,2,…,n para j=i+1,…,n si xi>xj cambiar Caso más favorable: Entrada 1,2,…,n: 2.1 (i=1), 2.2 (j=2), 2.3 2.2 (j=n), 2.3 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 2.1 (i=n-1), 2.2 (j=n), 2.3 2.1 (sale) Total n2+n-1 instrucciones Entrada 1,2,3,4: 2.1 (i=1), 2.2 (j=2), 2.3 2.2 (j=3), 2.3 2.2 (j=4), 2.3 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 2.1 (i=3), 2.2 (j=4), 2.3 2.1 (sale) Total 19 instrucciones

19 1. 1. fin=false 1. 2. mientras no fin 1. 3. fin=true 1. 4
1.1 fin=false 1.2 mientras no fin 1.3 fin=true 1.4 para i=1,2,…n si xi>xi cambiar fin=false Caso más desfavorable: Entrada 4,3,2,1: 1.1 , 1.2 , 1.3 , 1.4 (i=1) , 1.5 , 1.6 (3421) , 1.7 1.4 (i=2) , 1.5 , 1.6 (3241) , 1.7 1.4 (i=3) , 1.5 , 1.6 (3214) , 1.7 1.4 (sale) 1.2 , 1.3 , 1.4 (i=1) , 1.5 , 1.6 (2314) , 1.7 1.4 (i=2) , 1.5 , 1.6 (2134) , 1.7 1.4 (i=3) , 1.5 1.4 (sale) … ¿instrucciones?

20 2. 1. para i=1,2,…,n-1 2. 2. para j=i+1,…,n 2. 3. si xi>xj 2. 4
2.1 para i=1,2,…,n para j=i+1,…,n si xi>xj cambiar Caso más desfavorable: Entrada 4,3,2,1: 2.1 (i=1), 2.2 (j=2), 2.3 , 2.4 (3421) 2.2 (j=3), 2.3 , 2.4 (2431) 2.2 (j=4), 2.3 , 2.4 (1432) 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 , 2.4 (1342) 2.2 (j=4), 2.3 , 2.4 (1243) 2.1 (i=3), 2.2 (j=4), 2.3 , 2.4 (1234) 2.1 (sale) ¿instrucciones?

21 Estudio experimental Realizarlo y comparar con el teórico para detectar posibles errores y mejoras. Experimentos para distintos tamaños de problema. Experimentos para caso más favorable y desfavorable. Para tiempo promedio generando entradas aleatorias (rand). Experimentos con partes distintas del programa. Realizar experimentos repetidos. Comparar las gráficas con las teóricas (ajustes por mínimos cuadrados), teniendo en cuenta variaciones por uso de la memoria. Si la comparación con el estudio teórico no es satisfactoria revisar el algoritmo o los experimentos.


Descargar ppt "Capítulo 6. ANÁLISIS DE ALGORITMOS"

Presentaciones similares


Anuncios Google