Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Fibonacci
1,1,2,3,5,8,13,21,.
Programacin Dinmica
Adaptado de
Algorithm Design Goodrich and Tamassia
1 si n = 0,1
fib(n) =
fib(n -1) + fib(n - 2) o.c.
Programacin Dinmica 1
Programacin Dinmica 2
Fib(4) Fib(3)
Mucho ms eficiente!
Fib(3) Fib(2) Fib(2) Fib(0)
Fib(1) Fib(0)
Programacin Dinmica 3 Programacin Dinmica 4
Multiplicacin ptima de
Solucin usando memoizacin Matrices
Problema:
int fib(int n){ n Cmo multiplicar una secuencia de matrices
int * fibTab = new int[n]; de manera ptima?
for(int i=0;i<=n;i++)
f
Repaso: Multiplicacin de matrices
fibTab[i]= -1;
n C = A*B B
return lookupFib(fibTab,n);
}
n A is de and B is e f
j
int lookupFib(int fibTab[],int n){ e -1 e
if (fibTab[n]!= -1) return fibTab[n]; C[i, j ] = A[i, k ] * B[k , j ]
fibTab[n]=lookupFib(fibTab,n-1)+ k =0
lookupFib(fibTab,n-2); e
return fibTab[n]; n O(def ) time
} A C
d i i,j d
n C is 9 100
n C is 10 5
n D is 100 99
n D is 5 10
n Idea voraz #2 da A*((B*C)*D)), el cual produce
n Idea voraz #1 da (A*B)*(C*D), que produce 109989+9900+108900=228789 ops
500+1000+500 = 2000 ops n (A*B)*(C*D) produce 9999+89991+89100=189090 ops
n A*((B*C)*D) produce 500+250+250 = 1000 ops Una estrategia voraz definitivamente no funciona.
Tcnica General de
Programacin Dinmica
Aplica a un problema que inicialmente pareciera
requerir una gran cantidad de tiempo
(posiblemente exponencial) y que debe
cumplir:
n Subproblemas simples: los subproblemas puden
ser definidos en trminos de pocas variables.
n Optimalidad de subproblemas: El ptimo global
puede ser definido en trminos de subproblemas
ptimos
n Sobrelapamiento de subproblemas: Los
problemas no son independientes (por lo tanto, la
solucin debe construirse de abajo hacia arriba).
Programacin Dinmica 15