Вы находитесь на странице: 1из 21

Programacin Dinmica

TALLER DE PROGRAMACION INF 143


MAYO - 2017
PROGRAMACION DINAMICA

La programacin dinmica es un mtodo de diseo de


algoritmos que estn compuestos de dos niveles de
optimizacin:
Elimina trabajo redundante en subproblemas idnticos utilizando
una tabla para almacenar resultados (Memoisacion).
Elimina la recursividad encontrando un orden en el cual los
elementos de la tabla pueden ser llenados de manera iterativa.
El termino dinmico significa que las tablas se llenan poco a
poco y no de una sola vez
Para que se usa la Programacin
dinmica ?
DP se utiliza principalmente para resolver
problemas de optimizacin y de conteo. Si tu
Encontrar un problema que dice "minimizar esto" o
"maximizar eso" o "contar las maneras de Hacer
eso", entonces hay una (alta) probabilidad de que
sea un problema de DP.
Condiciones
Principio de Optimalidad

Un problema de optimizacin satisface el


principio de Optimalidad de Bellman si en una
sucesin optima de decisiones o elecciones, cada
subseccin es a su vez optima.
Es Decir, si miramos una subsolucion de la
solucin optima, debe ser solucin del
subproblema asociado a esa subsolucion.
Solapamiento entre subproblema

Al plantear la solucin recursiva del problema un


mismo subproblema se resuelve mas de una vez
Ejemplo Programacin Dinmica
Fibonacci
Serie de Fibonacci
1, 1, 2, 3, 5, 8, 13, 21, 34.

Ecuacin Recurrente

1 1
=
1 + 2 . .
O = (2 ) rbol recursivo
INTRATABLE !! F(n)

F(n-1) F(n-2)

F(n-2) F(n-3) F(n-3) F(n-4)

F(n-3) F(n-4) F(n-4) F(n-5) F(n-4) F(n-5) F(n-5) F(n-6)


F(6)

F(5)
F(4)

F(4) F(3) F(3) F(2)

F(3) F(2) F(2) F(1) F(2) F(1) F(1) F(0)

F(2) F(1) F(1) F(0) F(1) F(0) F(1) F(0)

F(1) F(0)
Para que hacer de nuevo?
Programacin Dinamica

1. Mtodo de Memoizacion
2. Mtodo Iterativo
Mtodo de Memorizacin
O
F(n)

F(n-1) F(n-2)

F(n-2) F(n-3)

F(n-3) F(n-4)

F(n-4) F(n-5)
F(6)

F(5)
F(4)

F(4) F(3)

F(3) F(2)

F(2) F(1)

F(1) F(0)
METODO GENERAL

Aspectos a definir en un algoritmo de


programacin dinmica:

Ecuacin recurrente : para calcular la solucin


de los problemas grandes en funcin de los
problemas mas pequeos
Determinar los casos base

Definir las tablas utilizadas por el algoritmo y


como son rellenadas

Como se recompone la solucin a partir de los


valores de la tabla
METODO GENERAL

La programacin dinmica se suele utilizar en


problemas de optimizacin, donde una solucin
esta formada por una serie de decisiones

Igual que la tcnica divide y vencers, resuelve


el problema original combinando las soluciones
para subproblemas mas 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 mas pequeos.
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 mas 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 mas grandes.
EJERCICIO UVA 10036
DIVISIVILIDAD
GRACIAS POR SU ATENCION

Вам также может понравиться