Documente Academic
Documente Profesional
Documente Cultură
ser usadas para encontrar las soluciones ptimas del problema en su conjunto. Por
ejemplo, el camino ms corto entre dos vrtices de un grafo se puede encontrar
calculando primero el camino ms corto al objetivo desde todos los vrtices
adyacentes al de partida, y despus usando estas soluciones para elegir el mejor
camino de todos ellos. En general, se pueden resolver problemas con subestructuras
ptimas siguiendo estos tres pasos: Dividir el problema en subproblemas ms
pequeos .Resolver estos problemas de manera ptima usando este proceso de tres
pasos recursivamente. Usar estas soluciones ptimas para construir una solucin
ptima al problema original. Los subproblemas se resuelven a su vez dividindolos ellos
mismos en subproblemas ms pequeos hasta que se alcance el caso fcil, donde la
solucin al problema es trivial. Decir que un problema tiene subproblemas
superpuestos es decir que un mismo subproblema es usado para resolver diferentes
problemas mayores. Por ejemplo, en la sucesin de Fibonacci, F3 = F1 + F2 y F4 = F2
+ F3 — calcular cada trmino supone calcular F2. Como ambos F3 y F4 hacen
falta para calcular F5, una mala implementacin para calcular F5 acabar calculando
F2 dos o ms veces. Esto ocurre siempre que haya subproblemas superpuestos: una
mala implementacin puede acabar desperdiciando tiempo recalculando las soluciones
ptimas a subproblemas que ya han si do resueltos anteriormente. Esto se puede
evitar guardando las soluciones que ya hemos calculado. Entonces, si necesitamos
resolver el mismo problema ms tarde, podemos obtener la solucin de la lista de
soluciones calculadas y reutilizarla. Este acercamiento al problema se llama
memorizacin (en ingls "memorizing"). Si estamos seguros de que no volveremos a
necesitar una solucin en concreto, la podemos descartar para ahorrar espacio. En
algunos casos, podemos calcular las soluciones a problemas que sabemos que vamos a
necesitar de antemano. En resumen, la programacin dinmica hace uso de:
Subproblemas superpuestos Subestructuras ptimas Memorizacin La programacin
dinmica toma normalmente uno de los dos siguientes enfoques: Top-down: El
problema se divide en subproblemas, y estos subproblemas se resuelven recordando
las soluciones en caso de que sean necesarias nuevamente. Es una combinacin de
memorizacin y recursin.Bottom-up: Todos los subproblemas que puedan ser
necesarios se resuelven de antemano y despus son usados para resolver las
soluciones a problemas mayores. Este enfoque es ligeramente mejor en consumo de
espacio y llamadas a funciones, pero a veces resulta poco intuitivo encontrar todos los
subproblemas necesarios para resolver un problema dado. Originalmente, el trmino
de programacin dinmica se refera a la resolucin de ciertos problemas y
operaciones fuera del mbito de la Ingeniera Informtica, como tambin lo haca la
programacin lineal.
Aquel contexto no tiene relacin con la programacin en absoluto; el nombre es una
coincidencia. El trmino tambin se usaba en los aos 40 por Richard Bellman, un
matemtico americano, para describir el proceso de resolver problemas donde hace
falta calcular la mejor solucin consecutivamente. Algunos lenguajes de programacin
funcionales, sobre todo Haskell, pueden usar la memorizacin automticamente sobre
funciones con un conjunto concreto de argumentos, para acelerar su proceso de
evaluacin. Esto slo es posible en funciones que no tengan efectos secundarios, algo
que ocurre en Haskell pero no tanto en otros lenguajes.
PROGRAMACION DINAMICA
En informtica, programacin dinmica es un mtodo para reducir el tiempo de ejecucin
de un algoritmo mediante la utilizacin de su problemas superpuestos y subestructuras
optimas como se describe a continuacin.
Una subestructura optima significa solucionar subproblemas para encontrar una solucin