Optimizacion Dinamica
Optimizacion Dinamica
Optimizacion Dinamica
Decir que un problema tiene subproblemas superpuestos es decir que se usa un mismo
subproblema para resolver diferentes problemas mayores. Por ejemplo, en la sucesión
de Fibonacci (F3 = F1 + F2 y F4 = F2 + F3) calcular cada término supone calcular
F2. Como para calcular F5 hacen falta tanto F3 como F4, una mala implementación
para calcular F5 acabará calculando F2 dos o más veces. Esto sucede siempre que
haya subproblemas superpuestos: una mala implementación puede acabar desperdiciando
tiempo recalculando las soluciones óptimas a problemas que ya han sido resueltos
anteriormente.
Esto se puede evitar guardando las soluciones que ya hemos calculado. Entonces, si
necesitamos resolver el mismo problema más tarde, podemos obtener la solución de la
lista de soluciones calculadas y reutilizarla. Este acercamiento al problema se
llama memoización (no confundir con memorización; en inglés es llamado memoization,
véase en). Si estamos seguros de que no volveremos a necesitar una solución en
concreto, la podemos descartar para ahorrar espacio. En algunos casos, podemos
calcular las soluciones a problemas que de antemano sabemos que vamos a necesitar.
Subproblemas superpuestos
Subestructuras óptimas
Memorización
La programación toma normalmente uno de los dos siguientes enfoques:
Principio de optimalidad
Cuando hablamos de optimizar nos referimos a buscar alguna de las mejores
soluciones de entre muchas alternativas posibles. Dicho proceso de optimización
puede ser visto como una secuencia de decisiones que nos proporcionan la solución
correcta. Si, dada una subsecuencia de decisiones, siempre se conoce cuál es la
decisión que debe tomarse a continuación para obtener la secuencia óptima, el
problema es elemental y se resuelve trivialmente tomando una decisión detrás de
otra, lo que se conoce como estrategia voraz. En otros casos, aunque no sea posible
aplicar la estrategia voraz, se cumple el principio de optimalidad de Bellman que
dicta que «dada una secuencia óptima de decisiones, toda subsecuencia de ella es, a
su vez, óptima». En este caso sigue siendo posible el ir tomando decisiones
elementales, en la confianza de que la combinación de ellas seguirá siendo óptima,
pero será entonces necesario explorar muchas secuencias de decisiones para dar con
la correcta, siendo aquí donde interviene la programación dinámica.