1 / 27

Complejidad

Complejidad. Programación II 17-18 de febrero de 2009. 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. Funciones iterativas.

merle
Download Presentation

Complejidad

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

  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 23 = 8) • Ej: log(1024) = 10 (porque 210 = 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. Torres de Hanoi

  8. Torres de Hanoi

  9. Torres de Hanoi

  10. Torres de Hanoi 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)

  12. Torres de Hanoi • Eliminar la dependencia de T() • k=n T(n-k) = T(0) = a • T(n) = (2k – 1)b + 2ka = (a+b)2k – 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 V1 y V2 • Ecuación de recurrencia: • T(n) = a, n = 0 • T(n) = b + cn + 2T(n/2)

  14. Ejemplo: Mergesort • n/2k = 1  k = log(n) • T(n) = bn + cnlog(n) + an • ¿Notación asintótica?

  15. Ordenación • Algoritmos de ordenación básicos: O(n2) • 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

  17. Estudio: Fibonacci funcion F(n:natural) devuelvenatural 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

  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,6n) • ¡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 = = n n

  23. Estudio: Fibonacci • Podemos calcular el exponente de la matriz de manera recursiva = = n par = n impar 0 n n 2 n 2 n n 2 n 2

  24. Estudio: Fibonacci funcion Exp(n:natural) devuelvematriz 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) devuelvenatural 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,6n) • Fibonacci iterativo: O(n) • Fibonacci recursivo c/ exponente: O(logn)

More Related