La Programación Dinámica Y El Problema de la Mochila Rafael García IMDEA Networks rafael.garcia@imdea.org www.informagica.org Descripción del Problema Aplicaciones Sucesión de Fibonacci Fibonacci Recursivo función fibonacci(n) si n <= 2 entonces retorna 1 si no retorna fibonacci(n-1) + fibonacci(n-2) f(7) = f(6) + f(5) f(6) = f(5) + f(4) f(5) = f(4) + f(3) Programación Dinámica SP ← vector(n) función fib(n) si n <= 2 entonces retorna 1 si no si SP[n] = 0 entonces SP[n] ← fib(n-1) + fib(n-2) retorna SP[n] Algoritmo de la Mochila Pesos Máximos 0 1 2 3 4 5 0 0 0 1 0 2 0 3 0 0 0 0 0 Número de Objetos 4 0 5 0 6 0 Algoritmo de la Mochila 0 1 2 3 4 5 0 0 0 1 0 1 2 0 1 3 0 1 4 0 1 5 0 1 6 0 1 0 0 2 2 3 3 3 3 3 3 1€ 1 Kg ? 0 0 2€ 1 Kg 2€ 2 Kg El Algoritmo de la Mochila repetir desde i←0 hasta n repetir desde j←0 hasta PM si P[i] > j entonces SP[i][j] ← SP[i-1][j] si no si V[i]+SP[i-1,j-P[i]] > SP[i-1,j] entonces SP[i,j] ← V[i] + SP[i-1,j-p[i-1]] si no SP[i,j] ← V[i-1, j] Para Saber Más www.or.deis.unibo.it/knapsack.html www.informagica.org