He usado la técnica de la programación dinámica varias veces, sin embargo, hoy un amigo me preguntó cómo definiría mis subproblemas, me di cuenta de que no tenía forma de proporcionar una respuesta formal objetiva. ¿Cómo define formalmente un subproblema para un problema que resolvería utilizando la programación dinámica?
algorithms
dynamic-programming
Daniel Gratzer
fuente
fuente
Respuestas:
El principio de la programación dinámica es pensar de arriba hacia abajo (es decir, recursivamente) pero resolver de abajo hacia arriba. Entonces, una buena estrategia para diseñar un DP es formular el problema de forma recursiva y generar subproblemas de esa manera.
fuente
Como señaló @Suresh, una vez que sepa que DP puede resolver su problema (es decir, exhibe una subestructura óptima y subproblemas superpuestos), puede pensar en una solución recursiva de dividir y conquistar.
Por supuesto, dividir y conquistar será muy poco eficiente porque cada subproblema encontrado en el árbol de recursión asociado se resolverá nuevamente, incluso si ya se ha encontrado y resuelto. Aquí es donde DP difiere: cada vez que encuentra un subproblema, lo resuelve y almacena su solución en una tabla. Más tarde, cuando encuentre nuevamente ese subproblema, accederá en su solución en lugar de resolverlo nuevamente. Dado que la cantidad de subproblemas superpuestos generalmente está limitada por un polinomio, y el tiempo requerido para resolver un subproblema también es polinomial (de lo contrario, DP no puede proporcionar una solución rentable), en general se obtiene una solución polinómica.O (1)
Por lo tanto, pensar en una solución de divide y vencerás te dará una idea de lo que puede ser un subproblema para tu problema en particular.
fuente
Mi experiencia es encontrar una manera de "reducir la enumeración redundante con la ayuda de almacenar valores útiles ya enumerados". Por cierto, la programación dinámica es muy popular en el ICPC (Concurso internacional de programación colegial. Cualquiera puede tener sus propios sentimientos sobre DP después de practicar varios problemas de ICPC.
fuente