动态规划和贪心算法笔记

动态规划

动态规划设计思路:

1.  寻找最优子结构
2.  证明分隔的剩下部分(通常是2个部分)也能满足最优子结构
3.  设计动态规划方程式,函数
4.  证明方法正确性
5.  迭代计算得出结果

算法实现

 算法中最直观的是自顶向下迭代,但是这样会形成一个2^n次方的时间复杂度的算法,可以使用备忘录和自底向上递归来实现。

通常最优子结构将整个问题分解为2部分,2部分中每部分都有最优子结构,依次迭代产生最终结果。

贪心算法

个人理解:贪心(贪婪)算法是动态规划算法的一种特殊算法。

  1.寻找寻找最优子结构
  2.设计递归算法
  3.证明我们做出的是一个贪心选择,只剩下一个子问题(和动态规划的最大区别)
  4.证明贪心选择总是安全的
  5.递归,实现算法

最大的区别在于做出贪心选择,贪心选择之后,只剩下一个子问题。这样我们可以设计出时间复杂度O(N)的算法。

你可能感兴趣的:(动态规划和贪心算法笔记)