complejidad programación ii 17-18 de febrero de 2009
TRANSCRIPT
![Page 1: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/1.jpg)
Complejidad
Programación II17-18 de febrero de 2009
![Page 2: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/2.jpg)
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 nO(logn) logarítmicaO(n) linealO(nlogn) casi-linealO(n2) cuadrática
![Page 3: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/3.jpg)
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)
![Page 4: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/4.jpg)
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
![Page 5: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/5.jpg)
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
![Page 6: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/6.jpg)
Torres de Hanoi
![Page 7: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/7.jpg)
Torres de Hanoi
![Page 8: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/8.jpg)
Torres de Hanoi
![Page 9: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/9.jpg)
Torres de Hanoi
![Page 10: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/10.jpg)
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
![Page 11: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/11.jpg)
Torres de Hanoi
• Ecuación de recurrencia:– T(n) = a, n = 0– T(n) = b + 2T(n-1)
Llamadas T(n)1 b + 2T(n-1)2 3b + 4T(n-2)k (2k-1)b + 2kT(n-k)
![Page 12: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/12.jpg)
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?
![Page 13: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/13.jpg)
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)
![Page 14: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/14.jpg)
Ejemplo: Mergesort
• n/2k = 1 k = log(n)• T(n) = bn + cnlog(n) + an• ¿Notación asintótica?
Llamadas T(n)1 b + cn + 2T(n/2)2 3b + 2cn + 4T(n/4)k (2k-1)b + kcn + 2kT(n/2k)
![Page 15: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/15.jpg)
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???
![Page 16: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/16.jpg)
Ecuaciones de recurrencia
Problema T(n)(caso base)
T(n)(caso recursivo)
O(f(n))
Factorial a b + T(n-1) nBúsquedabinaria
a b + T(n/2) logn
Torres deHanoi
a b + 2T(n-1) 2n
Mergesort a b + cn + 2T(n/2) nlogn
![Page 17: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/17.jpg)
Estudio: Fibonaccifuncion F(n:natural) devuelve naturalsi (n <= 1) entonces
devuelve 1; sino devuelve F(n-2)+F(n-1);
fsiffuncion
![Page 18: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/18.jpg)
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)1 b + T(n-1) + T(n-2)2 2b + 2T(n-2) + T(n-3)3 4b + 3T(n-3) + 2T(n-4)4 7b + 5T(n-4) + 3T(n-5)k (F(k+1)-1)b + F(k)T(n-k) + F(k-1)T(n-k-1)
![Page 19: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/19.jpg)
Estudio: Fibonacci
• k = n-1T(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!
![Page 20: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/20.jpg)
Estudio: Fibonacci
• Versión iterativafuncion 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;
fmientrasdevuelve f2;
ffuncion
![Page 21: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/21.jpg)
Estudio: Fibonacci
• ¿Complejidad versión iterativa?
![Page 22: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/22.jpg)
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
= =
0 1
1 1
F(i)
F(i+1)
F(i-1)
F(i)
F(n)
F(n+1)
0 1
1 1
F(0)
F(1)
n 0 1
1 1
n 1
1
![Page 23: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/23.jpg)
Estudio: Fibonacci
• Podemos calcular el exponente de la matriz de manera recursiva
=
= n par
= n impar
1 0
0 1
0 1
1 1
0 1
1 1
0 1
1 1
0 1
1 1
0 1
1 1
n2
0 1
1 1
n2
0 1
1 1
0
n
n 0 1
1 1
n2
n2
![Page 24: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/24.jpg)
Estudio: Fibonaccifuncion 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
![Page 25: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/25.jpg)
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
![Page 26: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/26.jpg)
Estudio: Fibonacci
• ¿Complejidad Exp(n)?• ¿Complejidad F(n)?
![Page 27: Complejidad Programación II 17-18 de febrero de 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062808/5665b4351a28abb57c8fff86/html5/thumbnails/27.jpg)
Estudio: Fibonacci
• Fibonacci recursivo original: O(1,6n)• Fibonacci iterativo: O(n)• Fibonacci recursivo c/ exponente: O(logn)
n=10 n=100 n=1000
O(1,6n) 110 2,6*1020 1,3*10204
O(n) 10 100 1000
O(logn) 3 7 10