A veces, podemos enfrentar problemas complejos en los que tienen lugar las repeticiones del mismo subproblema en la recursión. Para evitar cálculos múltiples del subproblema y ahorrar tiempo de cálculo, se utiliza el método llamado programación dinámica, donde los problemas se resuelven dividiéndolo en una colección de subproblemas más simples, resolviendo cada uno de esos subproblemas una sola vez y almacenando sus soluciones y reutilízalo. La presencia de problemas superpuestos es una característica clave de la programación dinámica. Además, las soluciones óptimas a los subproblemas contribuyen a la solución óptima del problema dado.
Hay dos atributos clave que debe tener un problema para que la programación dinámica sea aplicable:
• Subestructura óptima
- ¿Debo comenzar a aprender estructuras de datos y algoritmos en lugar de nuevos lenguajes de programación?
- ¿Cuál fue tu algoritmo favorito del que aprendiste mucho?
- Cómo instalar la siguiente compresión tar.gz
- ¿Cuáles son los ejemplos de implementación de algoritmos de clasificación en Android?
- ¿Cómo se le ocurrió al autor la fórmula (programación dinámica) en la editorial CIELRCPT - Editorial (Ciel y Receipt)?
• Subproblemas superpuestos.
Hay dos enfoques para resolver la programación dinámica.
1. Enfoque de arriba hacia abajo (Memoization): comienza con un problema central, luego lo divide en subproblemas y resuelve estos subproblemas de manera similar. En este enfoque, el mismo subproblema puede ocurrir varias veces, y luego uno puede memorizar o almacenar fácilmente las soluciones a los subproblemas en una tabla. Cada vez que intentamos resolver un nuevo subproblema, primero verificamos la tabla para ver si ya está resuelta. Si se ha registrado una solución, podemos usarla directamente; de lo contrario, resolvemos el subproblema y agregamos su solución a la tabla.
2. Enfoque de abajo hacia arriba (Tabulación): Encuentra la solución comenzando desde el (los) caso (s) base (s) y avanza hacia arriba. Resuelve todos los problemas secundarios; porque lo hace de abajo hacia arriba. Esta técnica llena una tabla y también evita un subproceso superpuesto de recalculación que se conoce como tabulación.