La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y análisis de algoritmos

Presentaciones similares


Presentación del tema: "Diseño y análisis de algoritmos"— 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: Algoritmo1 Algoritmo2 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?? 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: Algoritmo1 Algoritmo2 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: Si los datos son primos Si los datos no son primos Si los datos son primos Si los datos no son primos datos son primos La regla se mantiene, pero ahora se aplica a cada clase de entrada 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 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: Acotamiento inferior: 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 : 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. 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). 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 e inconvenientes de la recursividas 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

12 Analisis, casos prácticos
Cálculo de complejidad para recurrencias -Ventajas e inconvenientes de la recursividas 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.

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

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

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


Descargar ppt "Diseño y análisis de algoritmos"

Presentaciones similares


Anuncios Google