常用算法之动态规划
一、动态规划
三个特征:
(1) 最有子结构(optimal substructure)
如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质;
(2) 无后效性
有两层含义:
- 子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解决策的影响;
- 某阶段的状态一旦确定,则后面各阶段不再受该阶段决策过程的影响,而只与该阶段的结果有关。
(3) 重叠子问题(overlapping subproblems)
指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。需要对子问题的结果(Subproblem solutions)作记忆化存储(Memoized)。