Exposicion metodos de recoleccion de requerimientos final
Programación dinámica
1. PROGRAMACIÓN DINAMICA
POR
JUAN ESTEBAN PUERTA CANO
ROBINSON CARDONA
DOCENTE
RICARDO BOTETRO
ASIGNATURA
ANALISIS DE ALGORITMOS
FECHA DE ENTREGA
31 DE OCTUBRE
INTITUCIÓN UNIVERSITARIA
TECNOLOGICO DE ANTIOQUIA
FACULTAD DE INGENIARIA
MEDELLÍN
2013-II
2. CONTENIDO
TÍTULO ....................................................................Error! Bookmark not defined.
INTRODUCCIÓN .....................................................Error! Bookmark not defined.
PLANTEAMIENTO DEL PROBLEMA ..................................................................... 5
OBJETIVOS ............................................................................................................ 5
PROGRAMACIÓN DINAMICA……………………………………………………….6
EJEMPLOS…………………………………………………………………………...10
PREGUNTAS…………………………………………………………………………18
CONCLUSIONES…………………………………………………………………….19
3. TITULO
PROGRAMACIÓN DINÁMICA
INTRODUCCCIÓN
Esta técnica 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ñopequeño.
Luego, utilizando dichas soluciones, encuentra soluciones a problemas de
mayor tamaño.
Clave: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 la fuerza bruta, que resuelve el mismo subproblema una y otra
vez.
Memorización
Para evitar calcular lo mismo varias veces.
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óndinámica:
1. Caracterizar la estructura de una soluciónóptima.
2. Definir de forma recursiva la soluciónóptima.
3. Calcular la solución optima de forma ascendente.
4. 4. Construir la solución optima a partir de los datosalmacenados al obtener
soluciones parciales.
Algoritmos greedy:
Se construye la solución incrementalmente, utilizando un criterio de
optimización local.
Programacióndiná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 independientesy se combinan
las soluciones deesos 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 e1e2...ek...en
entonces:
e1e2...ek es solución al problema P considerando los k primeros elementos.
ek+1...en 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.
Un poco de historia:Bellman, años 50…
Enfoque inspirado en la teoría de control:
Se obtiene la política óptima para un problema de control con n etapas
basándose en una políticaóptima
para un problema similar, pero de n-1 etapas.
Etimología: Programación dinámica = Planificación temporal
En una época “hostil” a la investigación matemática, Bellman
busco un nombre llamativo que evitase posibles confrontaciones:
“it's impossible to use dynamic in a pejorative sense”
“something not even a Congressman could object to”
Richard E. Bellman: “Eye of the Hurricane: An Autobiography”
5. Principio de Optimalidad de Bellman
[Bellman, R.E.: “DynamicProgramming”. Princeton UniversityPress, 1957]
“Una política optima tiene la propiedad de que, sean cuales sea el estado inicial
y la decisión inicial, las decisiones restantes deben constituir una solución
Optima con respecto al estado resultante de la primera decisión”.
En Informática, un problema que puede descomponerse de esta forma se dice
que presenta subestructuras optímales (la base de los algoritmos greedy y de
la programacióndinámica).
Principio de Optimalidad de Bellman
[Bellman, R.E.: “DynamicProgramming”. Princeton UniversityPress, 1957]
El principio de optimalidad se verifica si toda soluciónóptima a un problema
está compuesta por soluciones óptimas de sus subproblemas.
! Ojo!
El principio de optimalidad no nos dice que, si tenemos las soluciones óptimas
de los subproblemas, entonces podamos combinarlas para obtener la solución
óptima del problema original…
PLANTEAMIENTO DEL PROBLEMA:
Este trabajo se realiza con el propósito de conocer la programación dinámica,
sus algoritmos, sus técnicas y los pasos para realizar la programación
dinámica.
Saber que es la programación dinámica, sus generalidades, sus características
y la planificación de los algoritmos.
OBJETIVOS
Identificar los algoritmos dinámicos.
Identificar las técnicas para realizar la programación dinámica.
Identificar sus características y las generalidades.
Aprender a planificar los algoritmos.
Identificar que es la programación dinámica y cuando se debe realizar.
6. 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.
La programación dinámica es un método ascendente. Se resuelven primero
los subejemplares más pequeños y por tanto más simples. Combinando las
soluciones se obtienen las soluciones de ejemplares sucesivamente más
grandes hasta llegar al ejemplar original.
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 (Cont.)
El desarrollo de un algoritmo usando la técnica deprogramación dinámica
puede ser dividido en lossiguientes pasos:
1. Caracterizar la estructura de una soluciónoptima.
2. Definir recursivamente el valor de una soluciónoptima.
3. Calcular el Valor de una solución óptima demanera abajo hacia arriba
(bottom-up).
4. Construir una solución optima a partir de lainformación calculada.
Generalidades (Cont.)
Utilizando programación dinámica se solucionanproblemas 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 tiene distintas acepciones en la literatura
Consideraremos aquí la Programación Dinámica comouna generalización de
la técnica de Divide y Vencerás(posiblemente en su versión de Reducción) con
o sinmemoria
7. Generalización: considerar un conjunto de alternativasu opciones distintas al
dividir el problema ensubproblemas
Dado un problema X a resolver mediante Programación
Dinámica, sea A×= {a1, a2…..} el conjunto de alternativasposibles para dividir X
en otros subproblemas.
La solución a un problema Xserá el resultado de laelección de una de las
alternativas, a € A× ,y de resolverlos problemas resultantes de dicha elección,
quedenotaremos por X1^a,X2^a,…..Xk^a.
En general, el número de subproblemas puededepender de la alternativa
escogida.
Si, para un problema dado, siempre ocurre que k=1 (sólo un subproblema),
denominamos a la técnicaPROGRAMACIÓN DINÁMICA CON REDUCCIÓN
Según lo anterior,
Para resolver un problema X, se consideran variasalternativas
Cada alternativa considerada supondrá resolver variossubproblemas. Además,
el número de subproblemaspodría variar para cada alternativa.
Cuando k=1 (sólo un subproblema para cadaalternativa), como en el caso de
Divide y Vencerás,denominaremos a la técnica Programación Dinámicacon
Reducción.
Según vimos, la solución a un problema mediante Dividey Vencerás adopta la
forma:
donde X representa el problema de tamaño n, Xi lossubproblemas de tamaño
ni, con ni <n, c la función quecombina las soluciones de los subproblemas (en
elcontexto del problema a resolver) y S0 la solución delcaso base.
8. El esquema de un problema que se resuelve porProgramación Dinámica
comparte elementos con elanterior, pero es más general. Su forma es:
Cada problema tiene asociado un tamaño n(X) y los tamaños de los
subproblemas deben ser menores que eltamaño del problema original:n(Xl^a)
<n(X), conI € [1, k]ya € AX
SiendoSi^a = f (Xi^a), i € [1,k] k las soluciones de lossubproblemasXi^a , la
operaciónS^adel problema asumiendoX^aescogida la alternativa. A la
operación c ladenominaremos combinaSoluciones
La operacióncAa€Ax (X,S^a)construye la solución s delproblema original X a
partir de las soluciones obtenidaspara cada alternativa. A la operación
cAladenominaremos combina Alternativas.
Las operaciones c y cAtienen distintos comportamientoscon respecto a los
subproblemas que no tienen solución
El operador c devuelve el valor cuando alguno de lossub-problemas no tiene
solución:
La operación cAdevuelve
cuando no existe soluciónpara ninguna alternativa:
La Programación Dinámica puede usar memoria comoen la técnica de Divide y
Vencerás con Memoria. Elesquema que hace explícito este uso de la memoria
es:
PD con Memoria y solución de un conjunto de problemas
9. El problema generalizado anterior también devuelve lassoluciones a todos los
subproblemas que se han tenidoque resolver.
Esto nos permite aprovechar los posibles subproblemascompartidos y resolver
un conjunto de problemas engeneral.
Un conjunto de problemas lo podemos caracterizar porun rango de valores
de una o varias propiedades de unproblema.
Un problema lo representaremos por (SX,n). El conjuntode problemas estará
formado por una secuencia deproblemas Xi cada uno de los cuales está
indexado porun índice i=1,..n.
Usando el esquema anterior la solución de un conjuntode problemas fc(SX,n)
es de la forma
Si solo tenemos un problema de partida:
El conjunto de problemas más las relaciones entreproblemas y subproblemas
definen implícitamente ungrafo dirigido bipartito.
Los dos tipos de vértices: vértices problemas y vértices alternativas.
Cada vértice problema contiene un problema delconjunto de problemas.
Cada vértice alternativa contiene un problema más unaalternativa escogida de
entre su conjunto dealternativas.
El tipo de grafo que se forma es un grafo AND-OR.
Los vértices OR tienen asociado un problema X.
Los vértices AND un par problema-alternativa (X,a).
Si el contexto lo permite a los vértices AND sólo leasociamos la alternativa
puesto que el vértice antecesorya indicará el problema original.
En estos grafos las hojas de este son casos base oproblemas cuyo conjunto de
alternativas es vacío.
10. Las soluciones pueden ser caracterizadas por unsubgrafo del grafo And/Or.
Este subgrafo tiene como vértice maximal al problemacuya solución queremos
caracterizar, todas las hojasson casos base, de cada vértice OR parte una y
sólouna de las aristas existentes en grafo original y de cada
vértice AND parte cada una de las aristas existentes enel grafo original.
Si no es posible obtener un subgrafo con lascaracterísticas anteriores el
problema no tiene solución.
En cada caso la solución buscada será de un tipodeterminado que habrá que
especificar.
Si el problema es de optimización, para caracterizarlo,habrá que indicar,
además, una propiedad de lasolución a optimizar.
En cualquier caso para identificar de forma única lasolución es suficiente con
indicar cuáles la alternativaelegida para cada problema.
Por cuestiones de eficiencia, en general, es preferibleprimero buscar el
subgrafo que define la soluciónrecordando (en la memoria del algoritmo) la
alternativaescogida y el valor de la propiedad de la solución aoptimizar.
Posteriormente reconstruir el valor de lasolución pedida.
Al par formado por la alternativa elegida, valor de lapropiedad relevante de la
solución lo llamaremossolución parcial.
11. Para cada problema debemos indicar la forma dereconstruir la solución a partir
de la solución parcial.
La Planificación de una línea de ensamble de Automóviles
La Corporación Colonel Motors produce automóviles en una fábrica que tiene
dos líneas deensamble.
La Planificación de una línea de ensamble de Automóviles
El chasís del automóvil entra en cada línea de ensamble, se adicionan al
chasís las partes necesarias encada estado del proceso, que nos lleva a
construirfinalmente el automóvil.
Cada línea de ensamble tiene n estados, numeradasj = 1, 2,..., n.
Un estado es representado por el j-íesima estado de la línea i, donde i es
1
o 2.
El j-íesimo estado de la línea 1 (S1, j) realiza lamisma función que el j-íesimo
estado de la línea 2(S2, j).
Cada estado ejecuta su labor a diferentes horas con diferentes tecnologías,
además el tiempo requeridopor cada estado varia, incluso entre los estados
de una misma línea de ensamble.
La Planificación de una línea de ensamble de Automóviles
El tiempo requerido por un estado Si, j en el ensamblese representa por ai, j.
Normalmente, una vez que un chasis entra a una línea de ensamble, pasa
únicamente a través de esa línea de ensamble.
El tiempo para transferir un chasís de una línea deensamble i a un estado Si,j
es denotado por ti,j ,donde i = 1, 2 y j = 1, 2, ..., n − 1.
En general, el problema es:
Determinar que estados elegir de la línea 1 y que estados elegir de la línea 2
en orden, tal que se minimice eltiempo total que toma la construcción de un
automóvil.
12. La Planificación de una línea de ensamble de Automóviles
En el ejemplo siguiente el tiempo total para construirun automóvil se encuentra
eligiendo los estados 1, 3 y 6 de la línea 1 y los estados 2, 4 y 5 de la línea 2.
La Planificación de una línea de ensamble de Automóviles
Si tenemos una lista con los estados de la línea 1 y los estados de la línea 2, el
costo computacional en tomar un chasís para la construcción del automóvil es
Ө(n).
Infortunadamente existe 2^n posibles rutas para elegir los estados y el costo de
calcular todas las rutas y escoger la mínima esΩ (2^n).
Etapa 1: Búsqueda de soluciones al problema
La primera etapa del paradigma de programación dinámica es la característica
de la estructura de la solución óptima.
Se inicia el problema de la línea de ensamble en el estado S1,j :
Si j= 1, solo hay un ruta posible para el chasís.
Si j = 2, 3, ..., n existen dos opciones, las cuales son:
1. Supongamos que la ruta más corta al estado S1, jes a través del estado
S1,j−1.
2. Supongamos que la ruta más corta al estado S1,j es a través del estado
S2,j−1.
13. Podemos decir entonces que para la planificación de una línea de ensamble,
una soluciónoptima a unproblema (encontrar una buena ruta a través de los
estados Si,j) contiene dentro de ella una soluciónoptimaa los subproblemas
(encontrar una buena ruta a travésde S1,j−1 o S2,j−1).
La propiedad de las subestructuras óptimases unos de las más importantes en
la aplicabilidad dela programación dinámica.
Utilizamos las subestructurasoptimas para demostrarque podemos construir
una solución óptima a un problema a través de las soluciones óptimas de los
Subproblemas.
Podemos concluir que una ruta corta para llegar alestado S1, j es a través del
estado j − 1 de la línea 1 o2:
Buscar la ruta más corta al estado S1, j−1 y entoncesir directamente al estado
S1, j , o
Buscar la ruta más corta al estado S2, j−1 y moverse de la línea 2 a la línea 1 y
de esta forma llegar alestado S1, j.
Utilizando razonamiento simétrico, la ruta más corta alestado S2,j es :
Buscar la ruta más corta al estado S2, j−1 y entoncesir directamente al estado
S2,j , o
Buscar la ruta más corta al estado S1, j−1 y moverse de la línea 2 a la línea 1 y
de esta forma llegar alestado S2, j.
Etapa 2: Una solución recursiva
La segunda etapa de la programacióndinámica es definir recursivamente el
valor de una solución óptima en términos de las soluciones óptimas delos
subproblemas.
fi[j] denota el tiempo que toma un chasís desde elpunto inicial al estado Si, j .
La meta es determinar lamejor ruta en la fabricación del automóvil, el cual se
denota por F*.
La fórmula para la mejor ruta es la siguiente:
F*= min (F1 [n] + x1+, f2 [n] + x2) (1)
La solución sencilla de F1 [1] y f2 [2] es:
F1 [1] = e1 + a1, 1 (2)
f2 [1] = e2 + a2, 1 (3)
Realizamos los cálculos de fi[j] para j = 2, 3, ..., n
(i = 1, 2) y obtenemos la ecuación recursiva:
fi[j] ={e1 + a1,1 si j = 1
min (f1 [j − 1] + a1, j , f2[j − 1] + t2,j−1 + a1, j) si j >= 2 }
f2[j] ={e2 + a2,1 si j = 1
min (f2 [j − 1] + a2, j , f1[j − 1] + t1, j−1 + a2,j) si j >=2 }
fi[j] contiene los valores de la soluciones óptimas a lossubproblemas.
En li[j] se guarda la ruta trazada (línea 1 o 2)desde un estado j − 1 para llegar al
estado Si, j.
l*es la línea donde el estado n es utilizado en lafabricación del automóvil.
Etapa 3: Calculo del tiempo
14. A continuación mostraremos el algoritmo recursivo delas ecuaciones
anteriormente mencionadas:
Los datos de entrada al algoritmo son ai, j, ti, j, eiy n que es el número de
estados en cada línea deensamble.
Fastest way (a, t, e, x, n)
1 f1 [1] ← e1 + a1, 1
2 f2 [1] ← e2 + a2, 1
3 for j ← 2 to n
4 do if f1 [j − 1] + a1, j<=f2 [j − 1] + t2, j−1 + a1, j
5 thenf1 [j] ←f1 [j − 1] + a1, j
6 l1[j] ← 1
7 else f1 [j] ←f2 [j − 1] + t2, j−1 + a1, j
8 l1 [j]← 2
9 if f2 [j − 1] + a2, j <= f1 [j − 1] + t1, j−1 + a2, j
10 then f2 [j] ← f2 [j − 1] + a2, j
11 l2 [j] ← 2
12 else f2 [j] ← f1 [j − 1] + t1, j−1 + a2, j
13 l2 [j] ← 1
14 if f1 [n] + x1 <=f2 [n] + x2
15 then f*= f1 [n] + x1
16 l* = 1
17 else f* = f2 [n] + x2
18 l* = 2
Las iteraciones del ciclo for desde la línea del 3-13toman tiempo Ө(n).
Etapa 4: Construcción de una buena ruta
Para calcular los valores de fi[j], f*, li[j] yl*, necesitamosconstruir la secuencia
de estados utilizando lamejor ruta para la fabricación del automóvil.
El siguiente procedimiento imprime los estados utilizadosen la mejor ruta.
Print _stations(l,n)
1 I ← l_
2 print ”line ”i”, station”n
3 for j ← n downto 2
4 do i ← li[j]
5 print ”line ”i”, station”j − 1
Ejemplo:
Consideremos el cálculo de números combinatorios. El algoritmo sería:
Función C(n, k)
si k=0 o k=n entonces devolver 1
si no devolver C(n-1, k-1) + C(n-1, k)
Ocurre que muchos valores C(i, j), con i <n y j <k se calculan y recalculan
varias veces.
Un fenómeno similar ocurre con el algoritmo de Fibonacci.
15. 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 cadaobjeto i tiene un beneficio
bi y un peso wi positivos.
Objetivo: Seleccionarlos elementos que nosgarantizan un beneficio
máximo pero conun peso global menoro 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 mejorsolución obtenida a partir
de los elementos de S k parauna mochila de capacidad w.
Ahora bien, la mejor selección de elementos delconjunto Sk para una mochila
de tamaño w se puededefinir en función de selecciones de elementos de Sk-1
para mochilas de menor capacidad…
Como calculamos B(k,w)?
O bien la mejor opción para Sk coincide con la mejorselecció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 mejorselección de elementos
de Sk-1 con peso máximo w−wk (el beneficio para Skserá el beneficio que
seobtení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):
16. Para resolver el problema de la mochila nosquedaremos con el maximo 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
seleccionanlos objetos correspondientes a la solución optima parak-1 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 ky los objetos correspondientes a
la solución optimapara k-1 objetos y una mochila de capacidad w-w[k]:
la solución para B[k-1][w-w[k]].
Eficiencia del algoritmo
Tiempo de ejecución: Θ(n W)
“Pseudopolinomico” (no es polinomico sobre el tamaño de la entrada; esto es,
sobre el numero de objetos).
El problema de la mochila es NP.
NOTA: Existe un algoritmo polinomico deorden O (n2v*) que proporciona una
solución aproximada al 0.01% del optimo [Kleinberg
&Tardos, “Arbitrarily Good Approximations: The Knapsack Problem”].
Ejemplo
Mochila de tamaño W=11
Numero de objetos n=5
17. Solución optima {3,4}
Caminos mínimos: Algoritmo de Floyd
Problema:
Calcular el camino más corto que une cada par devértices de un grafo,
considerando que no hay pesosnegativos.
Posibles soluciones:
Por fuerza bruta (de orden exponencial).
Aplicar el algoritmo de Dijkstra para cada vértice.
Algoritmo de Floyd (programación dinámica).
Definición recursiva de la solución:
Dk(i,j): Camino más corto de i a j usando solo los kprimeros vértices del grafo
como puntos intermedios.
Expresión recursiva:
Caso base:
Algoritmo de Floyd (1962): Θ(V3)
for (i=0; i<n; i++)
for (j=0; j<n; j++)
D[i][j] = coste(i,j);
for (k=0; k<n; k++)
for (i=0; i<n; i++)
for (j=0; j<n; j++)
18. if (D[i][k] + D[k][j] < D[i][j] )
D[i][j] = D[i][k] + D[k][j];
Preguntas
1 Cuáles son las características que debe presentar un problema para poder
aplicar la programación dinámica?
R: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ñopequeño.
Luego, utilizando dichas soluciones, encuentra soluciones a problemas de
mayor tamaño.
2Que significado tiene la palabra memorización en la programación dinámica?
R: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 la fuerza bruta, que resuelve el mismo subproblema una y otra
vez.
3 Para qué sirve la memorización en la programación dinámica?
R:Para evitar calcular lo mismo varias veces.
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).
4Cual es el uso de la programación dinámica?
R:
1. Caracterizar la estructura de una soluciónóptima.
2. Definir de forma recursiva la soluciónóptima.
3. Calcular la solución optima de forma ascendente.
19. 4. Construir la solución optima a partir de los datosalmacenados al obtener
soluciones parciales.
5 Programación Dinámica?
R:La programación dinámica es un método ascendente. Se resuelven primero
los subejemplares más pequeños y por tanto más simples. Combinando las
soluciones se obtienen las soluciones de ejemplares sucesivamente más
grandes hasta llegar al ejemplar original.
Conclusiones
La programación dinámica se 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).