La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 3: Análisis de algoritmos (parte I)

Presentaciones similares


Presentación del tema: "Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 3: Análisis de algoritmos (parte I)"— Transcripción de la presentación:

1 Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 3: Análisis de algoritmos (parte I)

2 MTP: Metodología y Tecnología de la Programación 2 Introducción  El análisis de algoritmos consiste en determinar las funciones t n que describen alguna propiedad de interés, habitualmente  Tiempo consumido  Espacio utilizado  Etc. (casos particulares)  El análisis posee dos perspectivas distintas  Cómo debe realizarse, esto es, cómo determinar las funciones t n  Qué tipo de análisis es conveniente realizar, esto es, desde qué punto de vista deseamos conocer una determinada propiedad del algoritmo  Se describirá en la Parte II de la presente unidad didáctica

3 MTP: Metodología y Tecnología de la Programación 3 Determinación de las funciones t n  Lamentablemente, no existe una fórmula o procedimiento de tipo general que permita identificar las funciones t n de un algoritmo  La identificación exitosa de dichas funciones es altamente heurística y depende, en gran medida, de la experiencia  En general, para identificar la función t n, deberemos  Identificar la operación básica de interés  Recordemos que una operación básica es aquella tal que el trabajo total realizado por el algoritmo (en tiempo o espacio) es proporcional al número de veces que se ejecuta dicha instrucción  Identificar el parámetro “n” de entrada  Analizar, desde dentro hacia fuera, las estructuras de control que producen la ejecución repetida de dicha operación básica

4 MTP: Metodología y Tecnología de la Programación 4 Ejemplo function busquedaLineal(a:array[1..n] of integer; x:integer):integer; var i:integer; begin i := 1; while i x do i:= i+1; if i > n then busquedaLineal:= 0 else busquedaLineal:= i end; n Posibles operaciones básicas Estructuras de control involucradas

5 MTP: Metodología y Tecnología de la Programación 5 Análisis en función de las estructuras de control  Se deben considerar  Instrucciones simples  Secuencia  Estructuras de control  Alternativas  If  Switch  Repetitivas  For / While / Repeat  Invocación procedimental

6 MTP: Metodología y Tecnología de la Programación 6 Análisis: Secuencia  Una instrucción cualquiera tiene una complejidad  t n (instrucción) = 1 si  Coindice con la operación básica y  No es una estructura de control o invocación procedimental  En caso contrario, t n (instrucción) = 0 (en realidad, es una constante de valor más o menos alto, pero no es relevante a efectos de análisis  Un bloque de código de la forma: tiene como t’ n (bloque) = t’ n (instrucción-1)+ t’ n (instrucción-2)+... t’ n (instrucción-n) BEGIN instrucción-1; instrucción-2;... instrucción-n END;

7 MTP: Metodología y Tecnología de la Programación 7 Análisis: Alternativa (IF)  Una alternativa (IF) tiene la forma: t n (IF) = max{t’ n (condicion) + t’ n (acción-then), t’ n (condicion) + t’ n (acción-else)} IF condicion then accion-then else accion-else;

8 MTP: Metodología y Tecnología de la Programación 8 Ejemplo  Marcamos con la operación básica t n (IF) = max{t’ n (condicion) + t’ n (acción-then), t’ n (condicion) + t’ n (acción-else)} = max{t’ n ( i > n ) + t’ n ( busquedaLineal:= 0 ), t’ n ( i > n ) + t’ n ( busquedaLineal:= i )} = max{1 + 0, 1 + 0} = 1 if i > n then busquedaLineal:= 0 else busquedaLineal:= i

9 MTP: Metodología y Tecnología de la Programación 9 Análisis: Alternativa (SWITCH)  Es similar a un IF. Se indica únicamente por claridad  Una alternativa (SWITCH) tiene la forma: t n (IF) = max{t’ n (condicion) + max{t’ n (bloque-i)}, t’ n (condicion) + t’ n (acción-else)} SWITCH condicion OF caso-1: bloque-1; caso-2: bloque-2;... caso-n: bloque-n; else accion-else END;

10 MTP: Metodología y Tecnología de la Programación 10 Análisis: Repetitivas (FOR/WHILE/REPEAT)  Son reducibles a bucles WHILE  Únicamente se estudiará este caso  Un bucle (WHILE) tiene la forma: t n (WHILE) = iteracciones * (t’ n (condicion) + t’ n (bloque))  Nótese que “iteracciones” puede o no depender de n, por lo que esta expresión es simplicifable WHILE condicion DO BEGIN bloque END;

11 MTP: Metodología y Tecnología de la Programación 11 Ejemplo  Marcamos con la operación básica t n (WHILE) = iteracciones * (t’ n (condicion) + t’ n (bloque)) = n * (t’ n ( i x ) + t’ n ( i:= i+1 )) = n * (0 + 1) = n function busquedaLineal(a:array[1..n] of integer; x:integer):integer; var i:integer; begin... while i x do i:= i+1;

12 MTP: Metodología y Tecnología de la Programación 12 Análisis: Invocación procedimental  Una invocación procedimental implica la ejecución de un subprograma  Hay que distinguir dos casos  El subprograma no es directa o indirectamente recursivo  t n (invocación) = t’ n (subprograma)  El programa es directa o indirectamente recursivo  Realizar un análisis del subprograma utilizando técnicas de recurrencia

13 MTP: Metodología y Tecnología de la Programación 13 Ejemplo  Las operaciones básicas están dentro de ambos subprogramas (cada uno tendrá una operación básica particular) t nk ( previofactorial ) = t’ k ( busquedaLineal ) + t’ n ( factorial ) = k + t’ k ( factorial ), siendo t’ k ( factorial ) = 1+t’ k-1 ( factorial ) y t’ k = k t’ 1 = 1 function previofactorial (a:array[1..k], i:integer):integer; var n:integer; begin n := busquedaLineal(a, i); previoFactorial := factorial(n) end;

14 MTP: Metodología y Tecnología de la Programación 14 Notas finales  En ocasiones, no se busca determinar la complejidad temporal o espacial del algoritmo, sino la función de complejidad de alguna operación particular  Ejemplo: Numero de comparaciones  Solución: Varias operaciones básicas  t n = 2n+1 function busquedaLineal(a:array[1..n] of integer; x:integer):integer; var i:integer; begin i := 1; while i x do i:= i+1; if i > n then busquedaLineal:= 0 else busquedaLineal:= i end;

15 MTP: Metodología y Tecnología de la Programación 15 Notas finales: Utilización de un testigo  Una alternativa al análisis puramente teórico del algoritmo es la utilización de un testigo o barómetro  Por ejemplo:  Tiene el inconveniente de que no deduce la expresión analítica de la función de complejidad  Hay soluciones function busquedaLineal(a:array[1..n] of integer; x:integer):integer; var i:integer; begin i := 1; while i x do begin i:= i+1; WRITE(‘*’) end; if i > n then busquedaLineal:= 0 else busquedaLineal:= i end;

16 MTP: Metodología y Tecnología de la Programación 16 Notas finales: Utilización de un testigo  Utilizando un testigo, y tabulando los resultados (numero de iteracciones) para distintos valores de n, se pueden identificar funciones que definen conjuntos O,  y, en algunos casos, , a los que pertenece la función de complejidad del algoritmo  La estrategia es calcular los valores iteracciones/f(n), siendo f(n) una o varias funciones (por ejemplo, las funciones destacadas) de interés  Si:  iteracciones/f(n) tiende a un valor constante, la función de complejidad del algoritmo es  (f(n))  iteracciones/f(n) tiende a 0, la función de complejidad del algoritmo es O(f(n))  iteracciones/f(n) tiende a infinito, la función de complejidad del algoritmo es  (f(n))

17 MTP: Metodología y Tecnología de la Programación 17 Notas finales  Existen dos casos en que la estrategia enunciada NO FUNCIONA  CASO 1: Que la operación básica no refleje, realmente, el trabajo realizado por el algoritmo (inadvertidamente)  Ejemplo:  Solución: re-considerar la operación básica, considerar varias operaciones básicas, suponer invocación procedimental function Fibiter (n:integer):integer; var i,j, k:integer; begin i:=1;j:=0;k:=1; while k<= n do begin j:=i+j; i:=j-i; k:= k+1 end; Fibiter:= j end; Las operaciones de suma pueden consumir un tiempo proporcional a n (suponer, por ejemplo, aritmética entera exacta, aumentando la función de complejidad dell algoritmo

18 MTP: Metodología y Tecnología de la Programación 18 Notas finales  Habitualmente, t n se identifica para el CASO PEOR de la ejecución de una determinada función  Los conceptos de todos los casos, caso mejor, caso medio y caso peor se estudiarán más adelante  No obstante, en algunos casos el análisis del CASO PEOR es excesivamente pesimista  Incluso para el caso peor  Aumenta considerablemente el orden de las funciones de complejidad  Concretamente, en ciertas ocasiones, es necesario aplicar un análisis amortizado en las invocaciones procedimentales  Lo estudiaremos más adelante

19 MTP: Metodología y Tecnología de la Programación 19 Notas finales  Por último, es conveniente señalar que, salvo casos extraordinarios en los que estemos interesados en las funciones t n concretas, utilizaremos los conjuntos O,  y  deducibles a partir de t n  Normalmente, utilizaremos alguna de las funciones destacadas 1, log n, n, n log n, n 2, n k, a n, b n, n!  Se podrán deducir las funciones concretas a partir de las propiedades de los conjuntos O,  y  y de la experiencia


Descargar ppt "Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 3: Análisis de algoritmos (parte I)"

Presentaciones similares


Anuncios Google