第十五章 动态规划.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十五章 动态规划 第一节 动态规划的基础 一、动态规划简介 动态规划算法(Dynamic Programming,简称DP)是信息学奥赛中重点考察的基本算法,每年的各类比赛中会 动态规划算法是解决“多阶段决策问题”的一种高效算法,它对每个出现的问题只求解一次,并将其结果保存在一张表中,以后再次遇到相同的问题时,直接从表中索取答案,避免重复计算。正是这种“不做无用功”的求解模式,大大提高了程序的效率。动态规划算法常用于解决统计类问题(统计方案总数)和最优值问题(最大值或最小值),尤其普遍用于最优化问题。 本章主要介绍了动态规划的基本概念、动态规划的问题特征以及求解方法和技巧心得,并通过分析一些典型的题目来说明动态规划类问题的基本解题思路。 二、动态规划的基本概念 下面,我们通过分析一个实例来对动态规划算法有一个初步的认识,并了解阶段、状态、决策等基本概念。 最短路线问题 如图15-1所示,宇宙中存在着大大小小的星球,星球之间存在着纵横交错的飞船通道。梦佳背负着巨大的使命,需要尽快从星球A赶到星球E执行任务。请你帮助她找到一条最短的路线。 图15-1 最短路线图 问题分析: 经过观察,容易发现本问题有一明显的特点,就是在从星球A到星球E的路径上,结点可按从左向右的顺序分为5部分: 第一部分:A; 第二部分:B1,B2; 第三部分:C1,C2,C3,C4; 第四部分:D1,D2,D3; 第五部分:E。 显而易见,想尽快到达星球E,必须始终从左到右单向(也就是按照第一部分到第五部分依次增加的顺序) 既然只能从左向右单向前进,那么从A点到其他任意一点X的最短距离,必然经过且仅经过X左侧的点(设为Y)。因此,如果能提前求得由A到Y的最短距离,那么枚举X的所有前驱点Y,就可以计算出A到X的最短距离。所以,按照空间顺序从左到右的顺序划分阶段,我们就可以按阶段一步步求得从A到E的最短路径了。 算法描述: 定义f[i]为A到i点的最短距离,dis[i,j]为结点i与结点j之间的距离。 我们从第一部分开始从左向右依次求A到其他各点的最短距离,每一部分看成一个阶段,每到一个新的阶段就把相应结点的f[i]值求出来,直到求完第五阶段结点E的f[E],f[E]也就是我们希望得到的答案。 按照上面的思路,下面我们手动模拟,求解点A到点E的最短距离。 第一阶段:[A] = 0; 第二阶段:f[B1] = dis[A,B1] = 5, f[B2] = dis[A,B2] = 3; 第三阶段:f[C1] = f[B1]+dis[B1,C1] = 6, f[C2] = min{f[B1]+dis[B1,C2] , f[B2]+dis[B2,C2]}= min{5+6,3+8 = 11, f[C3] = f[B1]+dis[B1,C3] = 5+3 = 8, f[C4] = f[B2]+dis[B2,C4] = 3+4 = 7; 第四阶段:f[D1] = min{f[C1]+dis[C1,D1] , f[C2]+dis[C2,D1]} = min{6+5,11+5} =11, f[D2] = f[C1]+dis[C1,D2] = 6+6 = 12, [D3] = min{f[C3]+dis[C3,D3], f[C4]+dis[C4,D3]} = min{8+8,7+3} = 10; 第五阶段:[E] = min{f[D1]+dis[D1,E], f[D2]+dis[D2,E) ,f[D3]+dis[D3,E]} = min{11+3, 12+4, 10+3} = 13; 最短路径:A--B2--C4--D3--E; 最短距离:13。 通过上述求解过程,我们可以看出,在本例中,对每一个出现的问题(f[i])只求解一次,不做重复计算,以后再遇到时直接使用,这就是动态规划算法高效的原因,更是学习动态规划算法必须深刻理解的一点。 解决了上述最短路径问题,下面我们了解一下动态规划中常见的几个概念: 1.阶段 阶段是为了方便解决问题人为划分的。把问题的求解过程恰当地按一定顺序分成若干个相互联系的阶段,从而按相对应的次序去求解问题。 阶段一般依据时间或者空间划分,上面的例子就是按照空间来划分阶段的,一共5个阶段,A点是第一阶段,E点是第五阶段。在生活中有许多划分阶段的例子,如计算机的使用,可按照时间顺序划分为打开电源开关、启动计算机、正常使用计算机、用完后关机等几个阶段。 阶段划分是动态规划中最重要的环节,阶段划分不当或者错误,就会导致题目难度剧增或得出错误的结果。因此,正确划分阶段是解决动态规划问题的重中之重。另外,如果一个问题无法划分合适的阶段,那它或许就无法使用动态规划算法解决。 2.状态 通常一个阶段有多个状态,状态可以用一组数来描述。在定义状态时,要做到“不多

文档评论(0)

100101 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档