继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第十七天 动态规划基础

zengxing358
关注TA
已关注
手记 46
粉丝 2
获赞 0

学习课程:算法与数据结构高手养成-求职提升特训课

章节名称:第5章 动态规划基础 Dynamic Programming Basics

讲师:吉他熊

课程内容:

DP之所以快:每个重叠子问题,只计算一次

DP的两种模型:记忆化搜索,递推+枚举


如何找出重叠子问题

明确目标状态(能够构成解的状态)

定义子问题(从当前状态到目标状态的最优代价)

确认子问题的重复性


递推的优缺点

优点:只需要循环,不用担心栈溢出

缺点:不够直观(如何确定子问题求解顺序,如何确定一个子问题与其他哪些子问题相关)


DP三要素:阶段、状态、决策

http://img4.mukewang.com/632c566800019fe415480856.jpg

DP的核心:行为

三要素并不是割裂的,是有机统一的

将三要素联系起来的单一要素:行为

行为产生变化,变化了才有问题,才需要求解


行为的三种常见类别

取舍:给出若干个选项,选择其中一个或多个,加入当前方案,或从当前方案去掉

移动:自身属性不变,相对时空位置发生改变

更改:更改自身属性


http://img4.mukewang.com/632c578e0001bc3e15120842.jpg

http://img1.mukewang.com/632c57e300010ab314970850.jpg


http://img4.mukewang.com/632c583800011ff214110826.jpg

http://img4.mukewang.com/632c586e00013f2614810851.jpg

决策的注意事项

决策的变化范围不能超出阶段的限制范围

一部分状态的值无法考决策计算,而是作为初始状态,需要考初始化给他们赋值


重叠子问题是“DP效率更高的原因”,而不是“DP能得到正确结果的原因”

最优子结构+无后效性=DP能得到正确结果

最优子结构+无后效性+重叠子问题=DP能高效地得到正确结果


最优子结构

一个问题的最优解,一定由它的子问题的最优解得来


判断最优子结构

不具备最优子结构——子问题无法判断最优/存在反例


判断无后效性

唯一准则:状态之间没有循环依赖


学习收获:

DP问题很多阶段可以省略,但在分析问题的时候,这些阶段的过程不可以省掉,“学会走路前,不要急着跑”;否则很难理解或者很难去分析并解决下一个类似的DP问题

不要在分析的时候图省事,随便省略阶段,否则可能会将问题错判为不具有最优子结构

要注意区分状态定义具有后效性与问题本身具有无后效性;状态定义的后效性可以通过增加新的阶段来消除依赖;增加新的阶段意味着重叠子问题的减少,从而降低DP效率


打卡截图:

http://img1.mukewang.com/632c5544000178d215160856.jpg

http://img4.mukewang.com/632c56200001654115220862.jpg

http://img2.mukewang.com/632c5dd4000164da15080848.jpg


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP