算法 之 动态规划
3个性质:
- 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
- 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。
- 有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)
解题思路
- 判断是否可以使用动态规划解题
- 找到状态转移方程,到这基本上就算是解决了问题
- 代码实现
- 只使用递归实现,这样没有充分利用动态规划特性(子问题的接可以重复使用)
- 递归 + 缓存,缺点是占用额外内存
- 滚动数据实现。(如:爬楼梯)