第五讲 动态规划算法设计及应用一、动态规划的定义 动态规划解.pptVIP

第五讲 动态规划算法设计及应用一、动态规划的定义 动态规划解.ppt

  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文档。上传文档
查看更多
* * 第五讲 动态规划算法设计及应用 一、动态规划的定义 动态规划解题方法是一种高效率的解题方法,可以解决相当大的信息量,其时间复杂性通常为O(n2)、O(n3)等。它适用的原则为优化原则,将整体优化可以分解为若干个局部优化。 例如: 求从A点到D点的最短路径。 根据穷举算法,其运行时间复杂性为:n1* n2 * n3 , 如果道路太多则时间复杂性计算值更大,如何优化程序,使时间复杂性能尽可能小。利用动态规划原理,可以使时间复杂性降低,本题优化的基本方法: 二、动态规划应用实例 1.设有一个三角形的数塔,顶点为根结点,每个结点有一个整数值。从顶点出发,可以向左走或向右走,如图所示: 从根结点13出发向左、向右的路径长度可以是: 13——11——7——14——7 其和为52 13——11——12——14——13 其和为63 若要求从根结点开始,请找出一条路径,使路径之和最大,若存在多条请输出任意一条。 问题分析: (1)贪心法往往得不到最优解: 本题若采用贪心法则:13——11——12——14——13 ,其和为63 但存在另一条路:13——8——26——15——24 ,其和为86 贪心法问题所在:眼光短浅 。 根据贪心法,则13——11——21 和45 ,而实质是 13——8——40 和61 (2)若用穷举法:从根结点开始,将所有可能的路径求和,找出最大值,但算法时间复杂性使问题解成为不可能。 当N=1 P=1 N=2 P=2 N=3 P=4 ………………….. N=K P=2K-1 当N=50 P=249 =500万亿条路径。 (3)动态规划求解过程分析: 动态规划求解问题的过程归纳为:自顶向下的分析,自底向上计算。其基本方法是: ?A??从根结点13出发,选取它的两个方向中的一条支路,选择根据是比较两个支路中其路径和最大的支路; ??B????设X为从11出发到底端的最大路径值,Y为从8到底端的最大路径和 ??C???? IF X Y then 选择X 且取得最大和为13+X Else 选择Y 且取得最大和为13+Y 这样原先求根结点到底端的最大路径问题,变为从11出发和从8出发求路径和的子问题( 递归算法 ) 同理,求从11出发到底端的最大路径问题可以化为从12出发和从7出发的最大路径问题。 A.??????当到倒数第二层时,每个结点其后继仅有两个结点,可以直接比较,选择最大值为前进方向,从而求得从根结点开始到底端的最大路径。 自底向上计算: l???从底层开始,本身数即为最大数; l??倒数第二层的计算,取决于底层的数据:12+6=18,13+14=27, 24+15=39,24+8=32 l??? 最后的路径为 : 13——8——26——8——24 (4)数据结构及算法设计 A 图形转化:直角三角形,便于搜索:向下、向右 B 用三维数组表示数塔:G[I,J,1] 表示行、列、及结点本身数据,G[I,J,2]能够取得最大值,G[I,J,3]表示前进方向——0向下,1向右 C 算法: l??数组初始化,输入每个结点值及初始的最大路径、前进方向为0 l??从倒数第二层开始向上一层求最大路径,共循环N-1次 l?从顶向下,输出路径:关键是J的值,由于行逐渐递增,表示向下,究竟向下还是向右取决于则看列的值。若J值比原先多1则向右否则向下。 D.程序 高级本P 196 例题2 求一组数列的最长的不下降序列 (1)问题描述:设有一个正整数序列 b1,b2,b3,……,bn,若下标i1i2i3 , ……ik 且有bi1=bi2=……bik 则称存在一个长度为k的不下降序列。可能有多个不下降序列,输出最长的序列。 (2)数据结构 假设有N个数的数列,设定数组N行3列的整型数组B 用前面例题1的方法: b[ i,1 ] 表示第i个数的数值本身 b[i,2 ] 表示第i项到最后一项最长不下降序列的长度 b[i,3] 表示最长不下降序列经过此项之后,后面继续的项,若 b[ i ,3]=0则表示后面没有连接的数。 (3)算法: l?? 初始化:b[ i ,1]存放本身数据,b[ i ,2]表示最长的长度,开始为1,b[ i ,3]开始为零,表示没有连接。 l? 从倒数第二项开始计算,由于在其后仅有一个数据项,所以计算机做一次比较后保存最大数

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档