Programación dinámica

  • 1,598 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,598
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
45
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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).