2. El problema del camino más largo es, dado un grafo, encontrar un camino simple de longitud máxima. A diferencia del problema del camino más corto, que se puede solucionar en tiempo polinómico en grafos sin ciclos negativos, este problema es NP-completo, lo que quiere decir que la solución óptima no se puede encontrar en tiempo polinómico a menos que P=NP. El problema del camino más largo tiene una solución de programación dinámicaeficiente en un grafo dirigido acíclico utilizando selección topológica. También se puede solucionar en un grafo dirigido acíclico invirtiendo los pesos y utilizando el algoritmo de Bellman-Ford (este enfoque no funciona en general porque crea ciclos de peso negativo). La programación dinámica es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestosy subestructuras óptimas Una subestructura óptima significa que se pueden usar soluciones óptimas de subproblemas para encontrar la solución óptima del problema en su conjunto
3. E l principio de optimalidad de Bellmanque 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. Contemplar un problema como una secuencia de decisiones equivale a dividirlo en subproblemas más pequeños y por lo tanto más fáciles de resolver como hacemos en Divide y Vencerás, técnica similar a la de programación dinámica. La programación dinámica se aplica cuando la subdivisión de un problema conduce a: Una enorme cantidad de subproblemas. Subproblemas cuyas soluciones parciales se solapan. Grupos de subproblemas de muy distinta complejidad.
4. •Métodos ascendentes (programación dinámica) Resolvemos primero los problemas pequeños (guardando las soluciones en una tabla). Después los vamos combinando para resolver los problemas más grandes. Partiendo de los problemas pequeños avanzamos hacia los más grandes. Una descomposición es correcta si cumple el Principio de optimalidad de Bellman: La solución óptima de un problema se obtiene combinando soluciones óptimas de subproblemas O bien: cualquier subsecuencia de una secuencia óptima debe ser, a su vez, una secuencia óptima.
5. Pasos para aplicar programación dinámica: 1)Obtener una descomposición recurrente del problema: - Ecuación recurrente. - Casos base. 2) Definir la estrategia de aplicación de la fórmula: - Tablas utilizadas por el algoritmo. - Orden y forma de rellenarlas. 3) Especificar cómo se recompone la solución final a partir de los valores de las tablas. Punto clave: obtener la descomposición recurrente. Requiere mucha “creatividad”...