Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Progdin
Progdin
El mtodo de programacin dinmica sirve para resolver problemas combinando e o a las soluciones de subproblemas. Normalmente es usada para resolver problemas de optimizacin. o Al construir un algoritmo usando la estrategia de programacin dinmica es o a necesario: 1. Caracterizar la estructura de una solucin optima. o 2. Denir recursivamente el valor de una solucin ptima. o o 3. Computar el valor de una solucin en forma bottom-up. o 4. [Opcional] Construir una solucin ptima a partir de la informacin computada. o o o
30
31
P (n) =
32
m[i, j] =
Supongamos que s[i, j] es la forma en que, al nivel ms alto, se divide el producto a de Ai, Ai+1, . . . , Aj , de manera ptima. Entonces, o
Jorge Baier Aranda, PUC 33
m[i, j] =
Si se observan cuidadosamente estas expresiones, nos daremos cuenta que es posible resolver el problema de forma recursiva tradicional, pero muchos clculos a se debern rehacer. Esto signica que existe superposicin de problemas. a o
34
Bottom-Up: Lo ms fcil
La estrategia bottom-up consiste en resolver primero los subproblemas ms a pequeos, almacenar su solucin, y luego resolver los problemas ms complejos, n o a usando los resultados almacenados. Es claro que calcular m[i, i] es muy sencillo... cul tipo de problema es el que le a sigue en complejidad? Resp: calcular m[i, i + 1], con 1 i < n.
35
El algoritmo
Matrix-Chain-Order(p) 1 n length[p] 1 2 for i 0 to n 3 do m[i, i] 0 4 for l 2 to n 5 do for i 1 to n l + 1 6 do j i + l 1 7 k = s[i, j] = argmin ik<j {m[i, k] + m[k + 1, j] + pi1pk pj } 8 m[i, j] = m[i, k] + m[k + 1, j] + pi1pk pj 9 return m, s
36
37
38