Python——动态规划

目录

  • 准备知识
    • 递归
  • 什么是动态规划
    • 动态规划题目的解题思想
  • 动态规划分类
  • 参考资料

准备知识

递归

python递归

什么是动态规划

官方解释:动态规划与分治法相似,都是通过组合子问题的解来求解原问题答案,将问题划分为互不相交的子问题,递归的求解子问题,最后合并子问题的答案,得到原问题的答案。

翻译成人话就是:计算并存储小问题的解,并将这些解组合成大问题的解。

动态规划题目的解题思想

首先是将大问题进行拆分,动态规划题目我们可以把题目要求的解作为一个大的问题,然后对这个大问题进行划分,分成一步一步的可以通过递推或者递归实现的。这个小问题往往是一个值,这个值我们通常是用一维数组或者是二维数组来保存的

如果你成功将一个大问题拆分成了小问题,也就是说你已经知道了只有一种情况时最小结构的解是什么,那么你就可以以这个最小的结构为基础向上推导,进而得到一种不同层级解之间的关系。这有点像数学归纳法。就是把你拆分的一步步之间的关系使用数学的推导公式来表示出来,这个公式用递归是很容易实现的。

最后既然动态规划要使用到递归,那么就不得不考虑边界问题了。所以边界问题也是动态规划必须考虑的。

所以总结一下,要想解决一个动态规划问题,下面的三要素是必须的:

  1. 最优子结构,上文提到的拆分到的最小的那一步。
  2. 边界 ,涉及到递归必须考虑的问题。
  3. 状态转移方程 ,拆分过程中不同步之间的关系。

乍看之下,动态规划其实蛮暴力的,使用动态规划往往需要经过繁琐的计算,最后才一举解决问题,有点像武侠小说中经常看到的那种先蓄力在发动的绝招一样。但是解决动态规划问题是必须要注意的一点是,小问题的解一旦被计算出来,就要存储起来,不要重复计算

动态规划分类

动态规划分类(完整版)

参考资料

告别动态规划,连刷 40 道题,我总结了这些套路,看不懂你打我(万字长文)
豁然开朗经典算法之「动态规划」
动态规划分类(完整版)

你可能感兴趣的:(算法,python,动态规划,开发语言)