La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Complejidad Programación II 17-18 de febrero de 2009.

Presentaciones similares


Presentación del tema: "Complejidad Programación II 17-18 de febrero de 2009."— Transcripción de la presentación:

1 Complejidad Programación II 17-18 de febrero de 2009

2 Complejidad Complejidad T(n): número de operaciones elementales en función de la medida n Hace referencia al caso peor Notación asintótica: término de T(n) que crece más rápido en función de n O(logn)logarítmica O(n)lineal O(nlogn)casi-lineal O(n 2 )cuadrática

3 Funciones iterativas Secuencia: la complejidad se suma Condicional: la complejidad en el caso peor es el máximo de las dos opciones Bucles: la complejidad es el producto del número de iteraciones y la complejidad interior del bucle (incluida la condición)

4 Funciones recursivas Establecer la ecuación de recurrencia: – T(n) en el caso base – T(n) en el caso recursivo En el caso recursivo, T(n) depende de T(f(n)) (p.ej. f(n)=n-1, f(n)=n/2) Expandir T(f(n)) hasta que la expresión para T(n) sólo depende del caso base

5 Logaritmos log(n) = el exponente a la que 2 se ha de elevar para obtener n Ej: log(8) = 3 (porque 2 3 = 8) Ej: log(1024) = 10 (porque 2 10 = 1024) Aritmética: log(xy) = log(x) + log(y) Ej: log(1024*1024*1024) = 10+10+10 = 30 Consecuencia: log(n) = número de veces que se ha de dividir n entre 2 para tener 1

6 Torres de Hanoi

7

8

9

10 accion MoverTorre(n:natural; X,Y,Z:barra) si (n > 0) entonces MoverTorre(n-1, X, Z, Y); MoverDisco(X, Y); MoverTorre(n-1, Z, Y, X); fsi faccion

11 Torres de Hanoi Ecuación de recurrencia: – T(n) = a, n = 0 – T(n) = b + 2T(n-1) LlamadasT(n) 1b + 2T(n-1) 23b + 4T(n-2) k(2 k -1)b + 2 k T(n-k)

12 Torres de Hanoi Eliminar la dependencia de T() k=n  T(n-k) = T(0) = a T(n) = (2 k – 1)b + 2 k a = (a+b)2 k – b ¿Notación asintótica?

13 Ejemplo: Mergesort Medida: n = D – E Depende de la complejidad de Combina Los bucles de Combina se repiten un número de veces igual al número total de elementos de V 1 y V 2 Ecuación de recurrencia: – T(n) = a, n = 0 – T(n) = b + cn + 2T(n/2)

14 Ejemplo: Mergesort n/2 k = 1  k = log(n) T(n) = bn + cnlog(n) + an ¿Notación asintótica? LlamadasT(n) 1b + cn + 2T(n/2) 23b + 2cn + 4T(n/4) k(2 k -1)b + kcn + 2 k T(n/2 k )

15 Ordenación Algoritmos de ordenación básicos: O(n 2 ) – Algoritmo de la burbuja (Bubble Sort) – Ordenación por inserción (Insertion Sort) – Ordenación por selección (Selection Sort) Mergesort: O(nlogn) Quicksort???

16 Ecuaciones de recurrencia ProblemaT(n) (caso base) T(n) (caso recursivo) O(f(n)) Factorialab + T(n-1)n Búsqueda binaria ab + T(n/2)logn Torres de Hanoi ab + 2T(n-1)2n2n Mergesortab + cn + 2T(n/2)nlogn

17 Estudio: Fibonacci funcion F(n:natural) devuelve natural si (n <= 1) entonces devuelve 1; sino devuelve F(n-2)+F(n-1); fsi ffuncion

18 Estudio: Fibonacci Ecuación de recurrencia: – T(n) = a, n <= 1 – T(n) = b + T(n-1) + T(n-2), n > 1 Llam.T(n) 1b + T(n-1) + T(n-2) 22b + 2T(n-2) + T(n-3) 34b + 3T(n-3) + 2T(n-4) 47b + 5T(n-4) + 3T(n-5) k(F(k+1)-1)b + F(k)T(n-k) + F(k-1)T(n-k-1)

19 Estudio: Fibonacci k = n-1  T(n-k) = T(1) = T(n-k-1) = T(0) = a T(n) = (F(n)-1)b + F(n-1)T(1) + F(n-2)T(0) Notación asintótica: T(n) = ¡O(F(n))! Aproximación: O(F(n)) = O(1,6 n ) ¡Complejidad exponencial!

20 Estudio: Fibonacci Versión iterativa funcion F(n:natural) devuelve natural variable f1,f2,tmp:natural; f1 := f2 := 1; mientras (n > 1) hacer tmp := f2; f2 := f1 + f2; f1 := tmp; n := n – 1; fmientras devuelve f2; ffuncion

21 Estudio: Fibonacci ¿Complejidad versión iterativa?

22 Estudio: Fibonacci La actualización de F(i),F(i+1) se puede ver como la multiplicación con una matriz = Por lo tanto, obtenemos= 01 11 F(i) F(i+1) F(i-1) F(i) F(n) F(n+1) 01 11 F(0) F(1) n 01 11 n 1 1

23 Estudio: Fibonacci Podemos calcular el exponente de la matriz de manera recursiva = = n par = n impar 10 01 0 1 1 0 1 1 0 1 1 01 11 0 1 1 n2n2 01 11 n2n2 0 1 1 0 n n 0 1 1 n2n2 n2n2

24 Estudio: Fibonacci funcion Exp(n:natural) devuelve matriz de natural variable A,B:matriz (2x2) de natural; si (n = 0) entonces devuelve [[1,0],[0,1]]; sino A := Exp(n div 2); B := A * A; // multiplicacion de matrices 2x2 si (n mod 2 > 0) entonces B := B * [[0,1],[1,1]]; fsi devuelve B; fsi ffuncion

25 Estudio: Fibonacci funcion F(n:natural) devuelve natural variable A:matriz (2x2) de natural; A := Exp(n); devuelve A(1,1) + A(1,2); ffuncion

26 Estudio: Fibonacci ¿Complejidad Exp(n)? ¿Complejidad F(n)?

27 Estudio: Fibonacci Fibonacci recursivo original: O(1,6 n ) Fibonacci iterativo: O(n) Fibonacci recursivo c/ exponente: O(logn) n=10n=100n=1000 O(1,6 n )1102,6*10 20 1,3*10 204 O(n)101001000 O(logn)3710


Descargar ppt "Complejidad Programación II 17-18 de febrero de 2009."

Presentaciones similares


Anuncios Google