动态规划算法(Dynamic Programming)——从入门到精(fang)通(qi)
【代码来自《算法导论》 P196】
一、动态规划方法的基本步骤
1- 描述问题的最优解(optimal solution)结构特征;
2- 递归定义最优解值;
3- 自底向上计算最优解值;
4- 从已计算得到的最优解值信息中构造最优解。
二、动态规划的要素
1、最优子结构性质
(1)重要性
所解问题必须具有最优子结构性质才能用动态规划方法求解。
(2)定义
最优子结构性质是指:一个问题的最优解中所包含的所有子问题的解都是最优的。
即 如果问题的解是最优的,则所有子问题的解也是最优的。
(3)证明
如何证明某一问题具有最优子结构性质?
a. 检查问题的解所面临的选择;
b. 假定某种选择为一最优解;
c. 分析这种选择将产生多少子问题;
d. 证明子问题的解也是最优的。
(4)注意
当问题不具有最优子结构性质时,不能滥用最优子结构性质。
2、重叠子问题
(1)重要性
虽然问题分解后是否存在重叠子问题不是应用动态规划方法的必要前提