终于讲到动态规划了~该来的总会来的……
作为算法的一大核心,我大动态规划的影响力不可谓不大。很多工业级的算法里,都清晰可见动态规划的模样。
你问我为何这么普及?道理很简单。丫的动态规划也是一种思想!!!
相信刚开始学算法的同学都有过被贪心虐的死去活来的时候,那种策略的论证过程,有时明明就是只差一点点,但是就是做不出……
如果你喜欢这种感觉,那么恭喜你,动态规划也是充斥着这种没着没落的感觉…… 如果你不喜欢~反正也上了算法这条贼船,多学点东西总是没坏处的~
动态规划思想
好了,不废话了。如果之前接触过贪心问题的话,对于问题的子问题化、分别求解和组合出最后结果的整个思想肯定不陌生。动态规划使用相同的思想,也是将待求解的问题分解为若干个子问题,按顺序求解子问题,同时前一子问题的解,为后一子问题的求解提供了有用的信息。
- 与贪心算法、分治法类似,在求解子问题时只保存针对当前子问题的最优解。
- 由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个数组中。
- 值得注意的是,适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
动态规划适用条件
既然说动态规划是一种思想,那么就要讨论下动态规划的成立条件。
- 总问题可划分为多个子问题。
- 通过子问题的最优解可以获得整个问题的最终最优解。<