为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 【九月打卡】第十七天 动态规划基础

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

2022.09.22 21:08 20浏览

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

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

讲师:吉他熊

课程内容:

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

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


如何找出重叠子问题

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

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

确认子问题的重复性


递推的优缺点

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

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


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

https://img4.sycdn.imooc.com/632c566800019fe415480856.jpg

DP的核心:行为

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

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

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


行为的三种常见类别

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

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

更改:更改自身属性


https://img4.sycdn.imooc.com/632c578e0001bc3e15120842.jpg

https://img1.sycdn.imooc.com/632c57e300010ab314970850.jpg


https://img4.sycdn.imooc.com/632c583800011ff214110826.jpg

https://img4.sycdn.imooc.com/632c586e00013f2614810851.jpg

决策的注意事项

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

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


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

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

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


最优子结构

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


判断最优子结构

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


判断无后效性

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


学习收获:

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

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

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


打卡截图:

https://img1.sycdn.imooc.com/632c5544000178d215160856.jpg

https://img4.sycdn.imooc.com/632c56200001654115220862.jpg

https://img2.sycdn.imooc.com/632c5dd4000164da15080848.jpg


点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
交互设计师
手记
粉丝
0
获赞与收藏
0

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

50篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

146篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消