为了通过动态编程解决,编程问题需要满足哪些条件?为了找到答案,你做了什么推理?
一旦你得出它确实有DP解决方案的结论,那么你将如何继续创建解决它的DP算法?创建此类算法背后的逻辑是什么?
答案 0 :(得分:0)
问题必须满足两个条件才能通过动态编程解决。引用Introduction to Algorithms,第15章:
最佳子结构如果问题的最优解包含在其中的子问题的最优解。
当递归算法重复重复同一问题时,我们说优化问题有重叠的子问题。
在The Algorithm Design Manual第8章中,作者描述了通过动态编程解决问题所涉及的三个步骤:
- 将答案表示为递归关系或递归算法。
- 显示您的重现所采用的不同参数值的数量受(希望很小的)多项式的限制。
- 指定重复评估的顺序,以便在您需要时始终可以获得所需的部分结果。
醇>
与往常一样,wikipedia包含对该主题的广泛讨论,如果您想深入挖掘。