.
Probablemente este miércoles podamos empezar a trabajar en clase con los problemas de la hoja de programación dinámica. Pero únicamente lo haremos si los habéis trabajado antes vosotros…
Para plantear una solución de programación dinámica, normalmente, deben seguirse los pasos siguientes:
- Definir de manera precisa una función parametrizada tal que, para algunos valores de sus parámetros, nos aporte la solución del problema originalmente propuesto.
- Escribir una ecuación recurrente (o relación de recurrencia) para esa función parametrizada, detallando para qué valores de sus parámetros es válida la ecuación, y escribir los casos base de la función (casos particulares de sus parámetros para los que se puede expresar el valor de la función sin necesidad de recurrencias).
- Detallar qué tabla es necesaria para almacenar los valores de la función parametrizada, y qué orden puede seguirse para calcularla. Detallar si se precisa alguna otra tabla auxiliar para reconstruir la solución para la que la función alcanza el óptimo.
- Escribir en pseudocódigo el algoritmo para rellenar la tabla de los valores óptimos de la función parametrizada y, si se solicita, escribir el algoritmo para construir la solución para la que se alcanza el óptimo del problema original.
Ejemplo de aplicación de estos pasos para el problema de “Multiplicación de una secuencia de matrices” (transparencias 31 a 40 de clase):
- Función m(i,j) = número mÃnimo de multiplicaciones de escalares necesarias para multiplicar la subsecuencia de matrices Mi, …, Mj.
El problema originalmente propuesto es calcular m(1,n). - m(i,i) = 0, para i = 1..n (casos base).
m(i,j) = min1≤k<j {m(i,k)+m(k+1,j)+di-1dkdj}, para todos los i, j tales que 1≤i<j≤n. - Matriz triangular superior para almacenar los m(i,j), con 1≤i≤j≤n. Puede calcularse por diagonales, empezando por la diagonal principal y, desde ahÃ, hacia arriba.
Matriz auxiliar de iguales dimensiones para almacenar los Ãndices k para los que se consigue el mÃnimo de la ecuación recurrente para cada uno de los m(i,j). Es la matriz km[i,j] en el algoritmo de la transparencia nº 38. - Algoritmos de la página 38 y de la página 40 de las transparencias.
¿Tenéis alguna idea para la función parametrizada (punto (1) de los anteriores) de alguno de los problemas de la hoja? El foro de Moodle es un buen sitio para compartir ideas…