动态规划专题学习之一-概述分析

概述

动态规划用来解决一些最优化问题,它通过充分利用问题的最优子结构与重复子问题性质来快速求解,应用广泛,思想深刻,也常搭配其他算法与数据结构,灵活度高,思维难度较大(我认为)。

三要素

状态

表示当前的信息

转移

状态之间的转化

决策

是否进行转移的判断,选择最优的转移

思想

基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。

适用范围

简单理解为:①对于原问题,存在子问题到原问题的转化②子问题在同一个问题下不重复,在不同问题下重叠(动态规划时间复杂度小的关键,此处也可以线段树的构建方式类比)

最优化原理(最优子结构性质)

一个问题的最优解包含其子问题的最优解

无后效性

同一个原问题的一个子问题的解不影响另一个子问题的解。换句话说,每个状 态都是过去历史的一个完整总结。(若想做到这点,可以采取记忆化搜索,即备份型递归,自顶至底地寻找最优解,一旦找到,记录在表中(这里和线段树的查询操作很像:一旦找到一个区间被包含,则直接判断,不再递归),也可以用递推方式,即自底向上(此处类似线段树的构建),但要注意循环的顺序,要将各阶段按照一定的次序排列好,这直接关系到答案的正误,顺序的判
断要根据状态转移方程)
注意:有时换一个划分状态或阶段的方法就满足无后效性了,这样的问题仍然可以用动态规划。

子问题的重叠性

当一个问题的求解要反复求解相同的子问题时,可考虑能否使用动态规 划算法。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。该性质并不是动态规划适用的必要条件,但是
如果没有这条性质,动态规划算法同其他算法相比就不具备优势。


此部分有所引用


设计方式

1.判断能否使用动态规划算法,若能,考虑其时空复杂度。
2.刻画一个最优解的结构特征,找到状态
3.递归的定义最优解的值,找到转移方程和决策
4.计算最优解的值,通常自底向上
5.利用计算出的值构造最优解

解题思路

模型匹配法

最先考虑的就是这个方法了。挖掘问题的本质,如果发现问题是自己熟悉的某个基本的模型,
就直接套用,但要小心其中的一些小的变动,现在考题一般都是基本模型的变形套用时要小心条
件,三思而后行。

三要素法

仔细分析问题尝试着确定动态规划的三要素,不同问题的却定方向不同:
先确定阶段的问题:数塔问题,和走路问题
先确定状态的问题:大多数都是先确定状态的。
先确定决策的问题:背包问题。
一般都是先从比较明显的地方入手,至于怎么知道哪个明显就是经验问题了,多做题就会发现。

寻找规律法

这个方法很简单,耐心推几组数据后,看他们的规律,总结规律间的共性,有点贪心的意思。

边界条件法

找到问题的边界条件,然后考虑边界条件与它的领接状态之间的关系。这个方法也很起效。

放宽约束和增加约束

这个思想是在陈启锋的论文里看到的,具体内容就是给问题增加一些条件或删除一些条件使问题变的清晰。

时间复杂度的分析

一般为 状态数×决策复杂度×转移复杂度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值