Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porTercero Archibeque Modificado hace 9 años
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.