SlideShare una empresa de Scribd logo
1 de 20
ANALISIS DE ALGORITMOS

PROGRAMACIÓN
DINÁMICA

Juan Esteban Puerta Cano
Robinson Cardona
INSTITUCIÓN EDUCATIVA
TECNOLOGICO DE
ANTIOQUIA
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.




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.
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).
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.

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:
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.

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.


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.

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.

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.
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.


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.
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.
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…

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).
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, 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;
}
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]].

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).


Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Presentación: Programación Dinámica
Presentación: Programación DinámicaPresentación: Programación Dinámica
Presentación: Programación Dinámica
 
Programac..
Programac..Programac..
Programac..
 
Programacion Dinamica Intro
Programacion Dinamica IntroProgramacion Dinamica Intro
Programacion Dinamica Intro
 
61178886 i-o-ii-principal
61178886 i-o-ii-principal61178886 i-o-ii-principal
61178886 i-o-ii-principal
 
Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámica
 
Asignacion
AsignacionAsignacion
Asignacion
 
Programación deterministica
Programación deterministicaProgramación deterministica
Programación deterministica
 
Programación dinámica
Programación  dinámicaProgramación  dinámica
Programación dinámica
 
Programación dinámica
Programación dinámicaProgramación dinámica
Programación dinámica
 
PROGRAMACION DINAMICA
PROGRAMACION DINAMICAPROGRAMACION DINAMICA
PROGRAMACION DINAMICA
 
Pro no num Prog dinamica
Pro no num Prog dinamicaPro no num Prog dinamica
Pro no num Prog dinamica
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Presentacion programacion dinamica
Presentacion programacion dinamicaPresentacion programacion dinamica
Presentacion programacion dinamica
 
Programacion dinamica 22
Programacion dinamica 22Programacion dinamica 22
Programacion dinamica 22
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámica
 
Programación dinámica
Programación dinámicaProgramación dinámica
Programación dinámica
 
Optimizacion
OptimizacionOptimizacion
Optimizacion
 
Programacion
ProgramacionProgramacion
Programacion
 
Programación dinámica (apuntes)
Programación dinámica (apuntes)Programación dinámica (apuntes)
Programación dinámica (apuntes)
 

Destacado (16)

Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Triggers
TriggersTriggers
Triggers
 
Tecnicas de Agrupamiento
Tecnicas de AgrupamientoTecnicas de Agrupamiento
Tecnicas de Agrupamiento
 
tipos de prueba
tipos de pruebatipos de prueba
tipos de prueba
 
cobertura de caminos
cobertura de caminoscobertura de caminos
cobertura de caminos
 
cobertura de bucles
cobertura de buclescobertura de bucles
cobertura de bucles
 
Pruebas de penetración nmap
Pruebas de penetración nmapPruebas de penetración nmap
Pruebas de penetración nmap
 
Bases de datos para la toma de decisiones
Bases de datos para la toma de decisionesBases de datos para la toma de decisiones
Bases de datos para la toma de decisiones
 
Ascenso a la Colina
Ascenso a la ColinaAscenso a la Colina
Ascenso a la Colina
 
Busqueda Ascenso Colinas
Busqueda Ascenso ColinasBusqueda Ascenso Colinas
Busqueda Ascenso Colinas
 
Métodos de switching
Métodos de switching Métodos de switching
Métodos de switching
 
Unidad2 Bases De Datos Para L Toma De Desiciones
Unidad2 Bases De Datos Para L Toma De DesicionesUnidad2 Bases De Datos Para L Toma De Desiciones
Unidad2 Bases De Datos Para L Toma De Desiciones
 
Algoritmos aproximados - El problema de la mochila 0-1
Algoritmos aproximados - El problema de la mochila 0-1Algoritmos aproximados - El problema de la mochila 0-1
Algoritmos aproximados - El problema de la mochila 0-1
 
Toma de decisiones
Toma de decisionesToma de decisiones
Toma de decisiones
 
pruebas de cajas blanca
 pruebas de cajas blanca pruebas de cajas blanca
pruebas de cajas blanca
 
PROBLEMA DE LA MOCHILA
PROBLEMA DE LA MOCHILAPROBLEMA DE LA MOCHILA
PROBLEMA DE LA MOCHILA
 

Similar a Programación dinámica

Similar a Programación dinámica (20)

6 dynamic programming
6 dynamic programming6 dynamic programming
6 dynamic programming
 
Diapositiva prog no numerica 2 algoritmo voraces
Diapositiva prog no numerica 2 algoritmo voracesDiapositiva prog no numerica 2 algoritmo voraces
Diapositiva prog no numerica 2 algoritmo voraces
 
Optimizacion Osvelis Ruiz
Optimizacion Osvelis RuizOptimizacion Osvelis Ruiz
Optimizacion Osvelis Ruiz
 
2 algoritmos voraces
2 algoritmos voraces2 algoritmos voraces
2 algoritmos voraces
 
Optimizacion Diusty Mijares
Optimizacion Diusty MijaresOptimizacion Diusty Mijares
Optimizacion Diusty Mijares
 
El Problema del Agente Viajero_f.pptx
El Problema del Agente Viajero_f.pptxEl Problema del Agente Viajero_f.pptx
El Problema del Agente Viajero_f.pptx
 
Programación dinámica
Programación dinámicaProgramación dinámica
Programación dinámica
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámica
 
Avarap
AvarapAvarap
Avarap
 
Programación lineal
Programación linealProgramación lineal
Programación lineal
 
Diapositivas argenis leon osf
Diapositivas argenis leon osfDiapositivas argenis leon osf
Diapositivas argenis leon osf
 
Argenis leon sl
Argenis leon slArgenis leon sl
Argenis leon sl
 
Diapositivas argenis leon osf
Diapositivas argenis leon osfDiapositivas argenis leon osf
Diapositivas argenis leon osf
 
II Unidad
II UnidadII Unidad
II Unidad
 
II Unidad
II UnidadII Unidad
II Unidad
 
Programacion d inamica
Programacion d inamicaProgramacion d inamica
Programacion d inamica
 
Algoritmos computacionales
Algoritmos computacionalesAlgoritmos computacionales
Algoritmos computacionales
 
Algoritmos computacionales
Algoritmos computacionalesAlgoritmos computacionales
Algoritmos computacionales
 
Programación no lineal
Programación no linealProgramación no lineal
Programación no lineal
 

Más de Juan Esteban Puerta Cano (16)

Portafolio Telematica
Portafolio TelematicaPortafolio Telematica
Portafolio Telematica
 
Formato presentacion de propuesta Bases de datos avanzadas
Formato presentacion de propuesta Bases de datos avanzadasFormato presentacion de propuesta Bases de datos avanzadas
Formato presentacion de propuesta Bases de datos avanzadas
 
Minero de Datos
Minero de DatosMinero de Datos
Minero de Datos
 
Tecnicas de Diseño de Algoritmos
Tecnicas de Diseño de AlgoritmosTecnicas de Diseño de Algoritmos
Tecnicas de Diseño de Algoritmos
 
Capa de presentacion
Capa de presentacionCapa de presentacion
Capa de presentacion
 
Bi conceptos
Bi conceptosBi conceptos
Bi conceptos
 
Migracion de datos
Migracion de datosMigracion de datos
Migracion de datos
 
Adsl 2
Adsl 2Adsl 2
Adsl 2
 
Trabajo red telematica
Trabajo red telematicaTrabajo red telematica
Trabajo red telematica
 
7 técnicas estáticas
7   técnicas estáticas7   técnicas estáticas
7 técnicas estáticas
 
técnicas estáticas
técnicas estáticastécnicas estáticas
técnicas estáticas
 
Exposicion metodos de recoleccion de requerimientos final
Exposicion metodos de recoleccion de requerimientos finalExposicion metodos de recoleccion de requerimientos final
Exposicion metodos de recoleccion de requerimientos final
 
planificación de pruebas
  planificación de pruebas  planificación de pruebas
planificación de pruebas
 
niveles de prueba
niveles de pruebaniveles de prueba
niveles de prueba
 
proceso de pruebas
proceso de pruebasproceso de pruebas
proceso de pruebas
 
Introducción Pruebas Software
Introducción Pruebas SoftwareIntroducción Pruebas Software
Introducción Pruebas Software
 

Programación dinámica

  • 1. ANALISIS DE ALGORITMOS PROGRAMACIÓN DINÁMICA Juan Esteban Puerta Cano Robinson Cardona INSTITUCIÓN EDUCATIVA TECNOLOGICO DE ANTIOQUIA
  • 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.   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. 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. 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. 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. 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. 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. 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. 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. 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. 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.  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. 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. 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. 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. Definicion recursiva de B(k,w): Para resolver el problema de la mochila nos quedaremos con el máximo de ambos valores:
  • 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. 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. 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). 