La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y análisis de algoritmos Análisis de Algoritmos III.

Presentaciones similares


Presentación del tema: "Diseño y análisis de algoritmos Análisis de Algoritmos III."— Transcripción de la presentación:

1 Diseño y análisis de algoritmos Análisis de Algoritmos III

2 Temario Analisis, casos prácticos –Operaciones sobre big O –Notación Asintótica –Cálculo de complejidad para recurrencias

3 Analisis, casos prácticos Operaciones sobre big O - Suma: Si algoritmo1 se comporta con una cierta complejidad y la misma entrada es usada por el Algoritmo 2 con otra complejidad, cual es el comportamiento del conjunto?? Algoritmo1Algoritmo2 Ejemplo: tiene tres algoritmos que se ejecutan uno despues de otro, usando la misma Entrada, calcule la compljidad todal si:

4 Analisis, casos prácticos Operaciones sobre big O - Suma, caso general: El mismo caso anterior, pero ahora los algoritmos se comportan con una complejidad Bajo ciertas cirscunstancias y con otra bajo otras cirscunstancias. Cuál es la complejidad del todo. Ejemplo: Algoritmo1Algoritmo2 Si los datos son primos Si los datos no son primos Si los datos son primos Si los datos no son primos La regla se mantiene, pero ahora se aplica a cada clase de entrada datos son primos datos no son primos

5 Analisis, casos prácticos Operaciones sobre big O - Multiplicacion de funciones: Si se tienen dos funciones de un cierto orden, cuál es el orden del producto de dichas funciones?: De esta regla se desprende el siguiente corolario: Demostración:si ocupamos la regla de multiplicación para las siguientes funciones Se obtiene pero se sabe que Ejemplo: calcular

6 Analisis, casos prácticos Notación Asintótica -Acotamiento inferior: A parte de la introducción del gran O como manera de identificar clases de funciones que Acotan superior,emte a otras, se pueden definir otros tipos de acotamiento que serán Señalados por sus propios símbolos: La idea es eoncontrar una clase de funciones g que esté siempre acotada por f, es una especie de inversa del gran O. Se puede decir entonces que f(n) está acotada inferiormente por la clase de funciones g(n) tal que exista un m reales positivos y un k enteros positivos y se cumpla Entonces gran omega rpresenta todas las funciones que dominan a g Ejemplo: Corolario: -Acotamiento estricto: La idea es eoncontrar una clase de funciones g que sea de la misma clase que f, simplemente, las dos funciones son del mismo orden, formalmente: Ejemplo, polinomios del mismo grado:

7 Analisis, casos prácticos Notación Asintótica -Jerarquía: Repasemos la jerarquía de algunas funciones, en base a las nuevas definiciones -Propiedad de transitividad de O: Entonces -Propiedad de simétrica de:

8 Analisis, casos prácticos Cálculo de complejidad para recurrencias -Introdución: Recursividad: técnica por la cual un problema se define en términos de sí mismo. Tiene valores o condiciones iniciales, operación en término de sí mimo y condición de parda: Ejemplo: definición del factorial n>=0: 0!=1 n!=n*(n-1)! Si n>0 (criterio de parada n=1) Es una herramienta potente, útil y sencilla. Ciertos problemas se adaptan de manera natural a las soluciones recursivas. Clasificación de funciones recursivas Según desde dónde se haga la llamadarecursiva: Recursividad directa:la función sel llama a sí misma Recursividad indirecta: la función A llama a la función B y ésta llama a A Según el número de llamadas recursivas generadas en tiempo de ejecución: Función recursiva lineal o simple : se genera una única llamada interna Función recursiva no lineal o múltiple : se generan dos o más llamadas internas.

9 Analisis, casos prácticos Cálculo de complejidad para recurrencias -Introdución: Clasificación de funciones recursivas Según el punto donde se realice la llamada recursiva : Final (Tail Recursion):la llamada recursiva es la última instrucción de la función. No Final : Se hace alguna operación al volver de la llamada recursiva. Las funciones recursivas finales suelen ser más eficientes (en la constante multiplicativa en cuanto al tiempo y sobre todo en cuanto al espacio) que las no finales. (Algunos compiladores pueden optimizar automáticamente estas funciones transformándolas en iterativas) Diseño de funciones recursivas: El problema original se puede transformar en otro problema similar mas simple Forma directa de solucionar problemas fácilmente definidos. Ejemplo:cálculo del factorial de un número entero no negativo.

10 Analisis, casos prácticos Cálculo de complejidad para recurrencias -Introducción Diseño de funciones recursivas : 1.Análisis por casos del problema: Debe existir al menos una condición de termino en la cual no es necesaria una llamada recusiva. Son los casos triviales que se solucionan directamente. Si n=0 o n=1, el factorial es 1. 2.Convergenciade las llamadas recursivas: Cada llamada recursiva debe realizarce cada vez con datos más pequeños, de forma que se alcance la condición de término. factorial(n)=n*factorial(n-1). 3.Principio de inducción: Si las llamadas recursivas funcionan bien, la función completa funciona bien. factorial(0)=1,factorial(1)=1 para n>1, si se supone correcto el cálculo del factorial de (n-1), entonces factorial(n)=n*factorial(n-1) {correcto}

11 Analisis, casos prácticos Cálculo de complejidad para recurrencias Ventajas: Solución de problemas de manera natural, sencilla, comprensible y elegante. Ejemplo: dado un número entero no negativo, escribir su equivalente en binario: procedimiento pasarbinario(N:entero); inicio si N<2 entonces escribir(N) sino pasabinario(N DIV 2) escribir(N MOD 2) fin Facilidad para comprobar que la solución es correcta -Ventajas e inconvenientes de la recursividas

12 Analisis, casos prácticos Cálculo de complejidad para recurrencias Desventajas: Solución de problemas es más ineficiente en tiempo y espacio que las versiones iterativas, debido a la llamada a subprogramas, la creación de variables dinámicas en la pila, etc. Para tamaño de problemas grande, la capacidad de la pila puede sobrepasarce En general cualquier función recursiva se puede transformar en una función iterativa. Ventaja de la función iterativa: más eficiente en tiemo y espacio Desventaja:en algunos casos puede ser muy complicada. Si la eficiencia es un parámetro crítico y la función se va a ejecutar frecuentemente, conviene usar una solución iterativa. La recursividad se puede simular con el uso de pilas para transformar un programa recursivo en iterativo. Las pilas se usan para almacenar los valores de los parámetros del subprograma, las variables locales y los resultados de la función. -Ventajas e inconvenientes de la recursividas

13 Analisis, casos prácticos Cálculo de complejidad para recurrencias Ejemplo cálculo del factorial de 3 -Ventajas e inconvenientes de la recursividas n fact n 3 n 2 6 -Cálculo de la complejidad En un algoritmo recursivo la función g(n) que establece su tiempo de ejecución será llamada T(n), esta será una ecuación de recurrencia donde en la expresón aparece la propia función T. Para resolver este tipo de ecuaciones hay que encontrar una expresión no recursiva de T.

14 Analisis, casos prácticos Cálculo de complejidad para recurrencias Ejemplo: factorial, funcion factorial(n:entero):entero; inicio si n<=1 entonces factorial:=1 sino factorial:= n*factorial(n-1) fin Sea T(n) el tiempo de ejecución en el peor caso. Se escribe una ecuación de recurrencia que acota a T(n) superiormente como: - Cálculo de la complejidad, si n<=1, si n>1 Donde es el tiempo de ejecución en el caso trivial n<=1 Si n>=1, el tiempo requerido por la función puede dividirse en dos partes: -T(n-1):la llamada recursiva a factorial con n-1

15 Analisis, casos prácticos Cálculo de complejidad para recurrencias -:el tiempo de evaluar la condición (n>1) y multiplicar n Para resolver las ecuaciones de recurrencia se suelen usar tres métodos: 1.Suponer una solución f(n), y usar la recurrencia para demostrar por inducción que T(n)=f(n) 2.Sustituir las recurrencias por su igualdad hasta llegar a cierto T(n0) que sea conocido 3.Usar soluciones generales para ciertas ecuaciones de recurrencia conocidas Usaremos el segundo método. Para el ejemplo: - Cálculo de la complejidad Si k=n-1 entonces

16 Analisis, casos prácticos Cálculo de complejidad para recurrencias Ejemplo: funcion rec(n:entero):entero; inicio si n<=1 entonces rec:=1 sino rec:= rec(n-1)+rec(n-1) fin - Cálculo de la complejidad, si n<=1, si n>1 T(n)=2T(n-1)+1= =2(2T(n-2)+1)+1 = 2T(n-2)+(2-1) =2T(n-k)+(2-1) Para k=n-1 22 kk

17 Analisis, casos prácticos Cálculo de complejidad para recurrencias Ejemplo: funcion rec2(n:entero):entero; inicio si n<=1 entonces rec2:=1 sino rec:= 2*rec(n DIV 2) fin - Cálculo de la complejidad, si n<=1, si n>1 T(n)=T(n/2)+1= = T(n/2 )+1+1=T(n/2 ) =T(n/2 )+k Para formar T(1) es necesario resolver n/2 =1, lo que da 22 k k


Descargar ppt "Diseño y análisis de algoritmos Análisis de Algoritmos III."

Presentaciones similares


Anuncios Google