动态规划


动态规划算法的主要思想

将原始问题划分成一系列子问题

求解每个子问题仅一次,并将其结果保存在一个表中,以后用到时直接存取,不重复计算,节省计算时间

自底向上地计算


动态规划算法的特点

利用空间时间


使用Dynamic Programming的条件

–Optimal substructure(优化子结构)

当一个问题的优化解包含了子问题的优化解时,我们说这个问题具有优化子结构。

缩小子问题集合,只需那些优化问题中包含的子问题,减低实现复杂性

优化子结构使得我们能自下而上地完成求解过程

–Subteties(重叠子问题)

在问题的求解过程中,很多子问题的解将被多次使用


Dynamic Programming的实例

最短路径问题

最短路径问题

动态规划的求解过程:

1.划分求d(S,T)问题为三个子问题

从S到T的最短路径长度为:

d(S,T)=min{1+d(A,T), 2+d(B,T), 5+d(C,T)}

2.划分d(A,T)、d(B,T)、d(C,T)为6个子问题

3.求解最小子问题

d(A,T)=min{4+d(D,T), 11+d(E,T)}=min{22,12}=12

d(B,T)=min{9+d(D,T), 5+d(E,T),16+d(F,T)}=min{27, 6, 18}=6

d(C,T)=min{2+d(F,T)}=4

d(A,T)=22,d(B,T)=6,d(C,T)=4

4.最后确定从S到T的最短路径

d(S,T)=min{1+d(A,T), 2+d(B,T),5+d(C,T)}=min{23, 8, 9}=8

动态规划算法的设计步骤:

–分析优化解的结构:划分子问题、优化子结构、子问题重叠性

–递归地定义最优解的代价

d(S,T)=min{1+d(A,T), 2+d(B,T), 5+d(C,T)}

–递归地划分问题,直至不可划分

–自底向上求解各个子问题:

•计算优化解代价并保存之

•获取构造最优解的信息

–根据构造最优解的信息构造优化解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 多阶段决策过程(multistep decision process)是指这样一类特殊的活动过程,过程可以按时间顺...
    碧影江白阅读 2,426评论 1 6
  • 动态规划和贪心算法都是用来求最优化问题,且二者都必须具有最有子结构。贪心算法可以解决的问题,动态规划都能解决,可以...
    sereny阅读 6,667评论 0 7
  • 《算法导论》这门课的老师是黄刘生和张曙,两位都是老人家了,代课很慢很没有激情,不过这一章非常有意思。更多见:iii...
    mmmwhy阅读 5,339评论 5 31
  • 分治法,动态规划法,贪心算法这三者之间有类似之处,比如都需要将问题划分为一个个子问题,然后通过解决这些子问题来解决...
    鱼游硅谷阅读 2,184评论 0 10
  • 动态规划学习-无资料 理论解释http://www.cnblogs.com/steven_oyj/archive/...
    RavenX阅读 1,048评论 0 2