Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacin Dinmica1693
Programacin Dinmica1693
1. Mtodo general.
2. Anlisis de tiempos de ejecucin.
3. Ejemplos de aplicacin.
3.1. Problema del cambio de monedas.
3.2. Problema de la mochila 0/1.
Mtodo general
La programacin dinmica se suele utilizar en
problemas de optimizacin, donde una solucin est
formada por una serie de decisiones.
Igual que la tcnica divide y vencers, resuelve el
problema original combinando las soluciones para
subproblemas ms pequeos.
Sin embargo, la programacin dinmica no utiliza
recursividad, sino que almacena los resultados de los
subproblemas en una tabla, calculando primero las
soluciones para los problemas pequeos.
Con esto se pretende evitar la repeticin de clculos
para problemas ms pequeos.
Mtodo general
Ejemplo. Clculo de los nmeros de
Fibonacci.
Con mtodo recursivo
Fibonacci (n: integer)
Si n<2 Devolver 1
Sino Devolver Fibonacci (n-1) + Fibonacci (n-2)
Problema: Muchos clculos estn repetidos, tiempo de ejec.
exponencial.
Solucin: Calcular los valores de menor a mayor empezando
por 0, e ir guardando los resultados en una tabla.
T[0] = 0; T[1] = 1
para i = 2,3, ...,n
T[i] = T[i-1] + T[i-2]
Devolver T[n]
Se utiliza la misma frmula que en la versin anterior, pero de forma
ms inteligente. El tiempo de ejecucin es (n).
Mtodo general
Los algoritmos divide y vencers estn dentro de
los mtodos descendentes.
Empezar con el problema original y descomponer
en pasos sucesivos en problemas de menor
tamao.
Partiendo del problema grande, descendemos hacia
problemas ms sencillos.
La programacin dinmica, por el contrario, es un
mtodo ascendente:
Resolvemos primero los problemas pequeos
(guardando las soluciones en una tabla) y despus
vamos combinando para resolver los problemas
ms grandes.
Mtodo general
La programacin dinmica se basa en el Principio de
Optimalidad de Bellman: cualquier subsecuencia de
una secuencia ptima debe ser, a su vez, una secuencia
ptima.
Para cada problema deberamos comprobar si es
aplicable el principio de optimalidad.
Ejemplo.
2
B
9
AD
3
C
7
Camino ptimo de A a D: A-C-D, de longitud 10
Camino ptimo de A al siguiente nivel: A-B, de longitud 2,
y despus B-D de longitud 9. Total: A-B-D, de longitud 11
Cumple el Principio de Optimalidad?
Mtodo general
Aspectos a definir en un algoritmo de programacin dinmica:
1. Ecuacin recurrente, para calcular la solucin de los
problemas grandes en funcin de los problemas ms
pequeos.
2. Determinar los casos base.
3. Definir las tablas utilizadas por el algoritmo, y cmo son
rellenadas.
4. Cmo se recompone la solucin global a partir de los
valores de las tablas.
para i = 1,2,...,n
D[i, 0] = 0
para i = 1,2,...,n
para j = 1,2,...,P
{Tener en cuenta si el valor }
D[i, j] = mink=0,1,...,Q/ci {D(i-1, Q-k* ci)+k} { cae fuera de la
tabla}
Ejemplo. n= 3, P= 8, c= (1, 4, 6)
trmino.