动态规划
动态规划设计思路:
1. 寻找最优子结构
2. 证明分隔的剩下部分(通常是2个部分)也能满足最优子结构
3. 设计动态规划方程式,函数
4. 证明方法正确性
5. 迭代计算得出结果
算法实现
算法中最直观的是自顶向下迭代,但是这样会形成一个2^n次方的时间复杂度的算法,可以使用备忘录和自底向上递归来实现。
通常最优子结构将整个问题分解为2部分,2部分中每部分都有最优子结构,依次迭代产生最终结果。
贪心算法
个人理解:贪心(贪婪)算法是动态规划算法的一种特殊算法。
1.寻找寻找最优子结构
2.设计递归算法
3.证明我们做出的是一个贪心选择,只剩下一个子问题(和动态规划的最大区别)
4.证明贪心选择总是安全的
5.递归,实现算法
最大的区别在于做出贪心选择,贪心选择之后,只剩下一个子问题。这样我们可以设计出时间复杂度O(N)的算法。