0
ANALISIS DE ALGORITMOS

PROGRAMACIÓN
DINÁMICA

Juan Esteban Puerta Cano
Robinson Cardona
INSTITUCIÓN EDUCATIVA
TECNOLOGICO...
QUE ES PROGRAMACIÓN
DINÁMICA






Es una técnica que se aplica sobre
problemas que presentan las siguientes
caracterís...




Enfoque ascendente (bottom-up):
Primero se calculan las soluciones
óptimas para problemas de tamaño
pequeño.
Luego, ...
Para que sirve la
Memorización mismo varias veces.
 Para evitar calcular lo









Cuando se calcula una solución,...
Uso de la programación
dinámica:
Caracterizar la estructura de una
solución óptima.
 Definir de forma recursiva la soluci...
Programación dinámica:


Se descompone el problema en subproblemas
solapados y se va construyendo la solución con
las sol...
Dado un problema P con n elementos,
si la secuencia optima es
e1,e2...ek...en entonces:
 e1,e2...ek es solución al proble...
En otras palabras:


La solución óptima de cualquier
instancia no trivial de un problema es
una combinación de las soluci...
Programación Dinámica
Frecuentemente para resolver un problema
complejo se tiende a dividir este en
subproblemas más peque...
Esta es la idea de la programación
dinámica: no calcular dos veces lo
mismo y utilizar normalmente una tabla
de resultados...
Generalidades


El desarrollo de un algoritmo usando la
técnica de programación dinámica puede ser
dividido en los siguie...
Generalidades







Utilizando programación dinámica se
solucionan problemas de optimización
como:
El problema de pl...


La programación dinámica se emplea
a menudo para resolver problemas de
optimización que satisfacen el
principio de opti...
El problema de la mochila
Tenemos un conjunto S
de n objetos, en el que
cada objeto i tiene un
beneficio bi y un peso wi
p...
Dado el conjunto S de n objetos, sea Sk
el conjunto de los k primeros objetos (de
1 a k):
 Podemos definir B(k,w) como la...
Como calculamos B(k,w)?


La mejor opción para Sk coincide con la
mejor selección de elementos de Sk-1
con peso máximo w ...
Definicion recursiva de B(k,w):

Para resolver el problema de la mochila
nos quedaremos con el máximo de
ambos valores:
Calculo ascendente de B(k,w)
















Usando una matriz B de tamaño (n+1) x (W+1):
int[][] knapsack (W...
Como calculamos la solución
optima a partir de B(k,w)?
Calculamos la solución para B[k][w]
utilizando el siguiente algorit...
Conclusión Programación
Dinámica
Aplica a un problema que inicialmente parece
requerir una gran cantidad de tiempo, de
mag...
Upcoming SlideShare
Loading in...5
×

Programación dinámica

746

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
746
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
32
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Programación dinámica "

  1. 1. ANALISIS DE ALGORITMOS PROGRAMACIÓN DINÁMICA Juan Esteban Puerta Cano Robinson Cardona INSTITUCIÓN EDUCATIVA TECNOLOGICO DE ANTIOQUIA
  2. 2. QUE ES PROGRAMACIÓN DINÁMICA    Es una técnica que se aplica sobre problemas que presentan las siguientes características: Subproblemas optímales: La solución óptima a un problema puede ser definida en función de soluciones óptimas a subproblemas de tamaño menor. Solapamiento entre subproblemas: Al plantear la solución recursiva del problema, un mismo problema se resuelve más de una vez.
  3. 3.   Enfoque ascendente (bottom-up): Primero se calculan las soluciones óptimas para problemas de tamaño pequeño. Luego, utilizando dichas soluciones, encuentra soluciones a problemas de mayor tamaño. Memorización Almacenar las soluciones de los subproblemas en alguna estructura de datos para reutilizarlas posteriormente. De esa forma, se consigue un algoritmo más eficiente, que resuelve el mismo subproblema una y otra vez.
  4. 4. Para que sirve la Memorización mismo varias veces.  Para evitar calcular lo      Cuando se calcula una solución, esta se almacena. Antes de realizar una llamada recursiva para un subproblema Q, se comprueba si la solución ha sido obtenida previamente. Si no ha sido obtenida, se hace la llamada recursiva y, antes de devolver la solución, esta se almacena. Si ya ha sido previamente calculada, se recupera la solución directamente (no hace falta calcularla). Usualmente, se utiliza una matriz que se rellena conforme las soluciones a los subproblemas son calculados (espacio vs. tiempo).
  5. 5. Uso de la programación dinámica: Caracterizar la estructura de una solución óptima.  Definir de forma recursiva la solución óptima.  Calcular la solución optima de forma ascendente.  Construir la solución optima a partir de los datos almacenados al obtener soluciones parciales. 
  6. 6. Programación dinámica:  Se descompone el problema en subproblemas solapados y se va construyendo la solución con las soluciones de esos subproblemas.  Divide y vencerás:  Se descompone el problema en subproblemas independientes y se combinan las soluciones de esos subproblemas.  Para poder emplear programación dinámica, una secuencia óptima debe cumplir la condición de que cada una de sus subsecuencias también sea optima:
  7. 7. Dado un problema P con n elementos, si la secuencia optima es e1,e2...ek...en entonces:  e1,e2...ek es solución al problema P considerando los k primeros elementos.  ek+1...es solución al problema P considerando los elementos desde k+1 hasta n. 
  8. 8. En otras palabras:  La solución óptima de cualquier instancia no trivial de un problema es una combinación de las soluciones óptimas de sus subproblemas.  Se busca la solución óptima a un problema como un proceso de decisión “multietapico”. Se toma una decisión en cada paso, pero esta depende de las soluciones a los subproblemas que lo componen. 
  9. 9. Programación Dinámica Frecuentemente para resolver un problema complejo se tiende a dividir este en subproblemas más pequeños, resolver estos últimos (recurriendo posiblemente a nuevas subdivisiones) y combinar las soluciones obtenidas para calcular la solución del problema inicial.  Puede ocurrir que la división natural del problema conduzca a un gran número de subejemplares idénticos. Si se resuelve cada uno de ellos sin tener en cuenta las posibles repeticiones, resulta un algoritmo ineficiente; en cambio si se resuelve cada ejemplar distinto una sola vez y se conserva el resultado, el algoritmo obtenido es mucho mejor. 
  10. 10. Esta es la idea de la programación dinámica: no calcular dos veces lo mismo y utilizar normalmente una tabla de resultados que se va rellenando a medida que se resuelven los subejemplares.  Esta técnica es típicamente aplicada para resolver problemas de optimización.  Problemas con muchas soluciones.  Cada solución tiene asociado un valor.  Se busca una solución con un valor óptimo(Máximo o mínimo), entre las muchas soluciones con valor optimo que pueden existir. 
  11. 11. Generalidades  El desarrollo de un algoritmo usando la técnica de programación dinámica puede ser dividido en los siguientes pasos: 1. Caracterizar la estructura de una solución optima. 2. Definir recursivamente el valor de una solución optima. 3. Calcular el Valor de una solución óptima de manera abajo hacia arriba (bottom-up). 4. Construir una solución óptima a partir de la información calculada.
  12. 12. Generalidades      Utilizando programación dinámica se solucionan problemas de optimización como: El problema de planificación en una fábrica de automóviles. Multiplicación de una sucesión de matrices. Construir un árbol de búsqueda binaria que se óptimo. Otros ejemplos: la subcadena más larga, triangulación de polígonos convexos.
  13. 13.  La programación dinámica se emplea a menudo para resolver problemas de optimización que satisfacen el principio de optimalidad: en una secuencia óptima de decisiones toda subsecuencia ha de ser también óptima.
  14. 14. El problema de la mochila Tenemos un conjunto S de n objetos, en el que cada objeto i tiene un beneficio bi y un peso wi positivos. Objetivo: Seleccionar los elementos que nos garantizan un beneficio máximo pero con un peso global menor o igual que W.
  15. 15. Dado el conjunto S de n objetos, sea Sk el conjunto de los k primeros objetos (de 1 a k):  Podemos definir B(k,w) como la ganancia de la mejor solución obtenida a partir de los elementos de S k para una mochila de capacidad w.  Ahora bien, la mejor selección de elementos del conjunto Sk para una mochila de tamaño w se puede definir en función de selecciones de elementos de Sk-1 para mochilas de menor capacidad… 
  16. 16. Como calculamos B(k,w)?  La mejor opción para Sk coincide con la mejor selección de elementos de Sk-1 con peso máximo w (el beneficio máximo para S k coincide con el de Sk1), o bien es el resultado de añadir el objeto k a la mejor selección de elementos de Sk-1 con peso máximo w−wk (el beneficio para Sk será el beneficio que se obtenía en Sk-1 para una mochila de capacidad w−wk mas el beneficio bk asociado al objeto k).
  17. 17. Definicion recursiva de B(k,w): Para resolver el problema de la mochila nos quedaremos con el máximo de ambos valores:
  18. 18. Calculo ascendente de B(k,w)              Usando una matriz B de tamaño (n+1) x (W+1): int[][] knapsack (W, w[1..n], b[1..n]) { for (p=0; p<=W; p++) B[0][p]=0; for (k=1; k<=n; k++) { for (p=0; p<w[k]; p++) B[k][p] = B[k-1][p]; for (p=w[k]; p<=W; w++) B[k][p] = max ( B[k-1][p−w[k]]+b[k], B[k-1][p] ); } return B; }
  19. 19. Como calculamos la solución optima a partir de B(k,w)? Calculamos la solución para B[k][w] utilizando el siguiente algoritmo:  Si B[k][w] == B[k-1][w], entonces el objeto k no se selecciona y se seleccionan los objetos correspondientes a la solución optima para k1 objetos y una mochila de capacidad w: la solución para B[k-1][w].  Si B[k][w] != B[k-1][w], se selecciona el objeto k y los objetos correspondientes a la solución optima para k-1 objetos y una mochila de capacidad w-w[k]:  la solución es B[k-1][w-w[k]]. 
  20. 20. Conclusión Programación Dinámica Aplica a un problema que inicialmente parece requerir una gran cantidad de tiempo, de magnitud (Posiblemente exponencial) y debe cumplir:  Subproblemas Simples: Los subproblemas pueden ser definidos en términos de pocas variables.  Optimalidad de Subproblemas: El óptimo global puede ser definido en términos de subproblemas óptimos.  Sobrelapamiento de Subproblemas: Los problemas no son independientes (por lo tanto, la solución debe construirse de abajo hacia arriba). 
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×