Leetcode-Task02:动态规划


动态规划常常适用于 有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。

2 动态规划

通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划将复杂的问题分解成一系列相对简单的子问题,只解决一次子问题并存储它的解决方案(solution),下一次遇到同样的子问题时无需重新计算它的解决方案,而是简单地查找先前计算的解决方案,从而节省计算时间。动态规划适用于有最优子结构(Optimal Substructure)和重叠子问题(Overlapping Subproblems)性质的问题。

2.1 动态规划思想

  • 若要解一个给定问题,需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子问题,利用到动态规划的思想可以极大减少计算量。
  • 动态规划法仅仅解决每个子问题一次,具有天然剪枝的功能,从而减少计算量**
  • 一旦某个给定子问题的解已算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表

2.2 动态规划模板基本步骤

每一步骤都要考虑,没有就跳过

  • 确定动态规划状态
  • 写出状态迁移方程(画出状态迁移表)
  • 考虑初始化条件
  • 考虑输出状态
  • 考虑对时间,空间复杂度的优化(Bonus)

2.3 优秀动态规划文章

###2.3.1【优秀文章1】
https://www.jiqizhixin.com/articles/2019-09-29-5 搞ACM和OI竞赛;
动态规划更是诸多面试官特别喜欢考的一种题型,这点就够了。动态规划既是经典算法里面的,也是机器学习里面有重要应用的一种优化算法。
思想:动态规划算法的核心就是将大问题拆成重复的小问题,同时记住已经解决了的小问题的解
这篇文章主要介绍动态规划在机器学习里面用到的算法。不建议看。

2.3.2 【动态规划讲解练习题】

https://people.cs.clemson.edu/~bcdean/dp_practice/
靠自己看视频练习

2.3.3 【吴师兄的五分钟学算法系列】 微信公众号系列

【来源1】:

  1. 重要概念
    阶段:对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题时,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
    状态:状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
    决策:决策表示当求解过程中处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
    策略:由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
    最优策略:在所有策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
    状态转移方程:状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
  2. 使用场景
    能采用动态规划求解问题的一般具有3个性质:
    最优化:如果子问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。子问题的局部最优解将导致整个问题的全局最优。换句话说:就是问题的一个最优解中一个包含子问题的的一个最优解。
    无后效性:即在某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关,与其他阶段的状态无关,特别是与未来发生的阶段的状态无关。
    重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。
  3. 算法流程
    划分阶段:按照问题的时间或者空间特征
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值