第3章 动态规划2.pptxVIP

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划2李建敏广告广告算法分析与设计网络课程/G2S/Template/View.aspx?action=viewcourseType=0courseId=2004965/G2S/Template/View.aspx?action=viewcourseType=0courseId=2004965动态规划动态规划解决的问题一般具有以下几个特征:该问题的规模缩小到一定的程度就可以容易地解决该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题不是相互独立的,即子问题之间包含公共的子问题。 动态规划与分治法子问题是否相互独立的动态规划的基本思想其求解方法与分治法是相同的。不同之处是子问题不是相互独立的,而是互有重叠。为了避免重复计算,动态规划算法采用填表来保存子问题解的方法。在求解过程中用表格来保存已经求解的子问题的解,无论它是否会被用到。当以后遇到该子问题时即可查表取出其解,从而避免了重复计算。动态规划的基本要素一、最优子结构矩阵连乘计算次序问题的最优解包含着其子问题的最优解。这种性质称为最优子结构性质。在分析问题的最优子结构性质时,所用的方法具有普遍性:首先假设由问题的最优解导出的子问题的解不是最优的,然后再设法说明在这个假设下可构造出比原问题最优解更好的解,从而导致矛盾。 利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。最优子结构是问题能用动态规划算法求解的前提。注意:同一个问题可以有多种方式刻划它的最优子结构,有些表示方法的求解速度更快(空间占用小,问题的维度低)动态规划的基本要素二、重叠子问题递归算法求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。这种性质称为子问题的重叠性质。动态规划算法,对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要解此子问题时,只是简单地用常数时间查看一下结果。 通常不同的子问题个数随问题的大小呈多项式增长。因此用动态规划算法只需要多项式时间,从而获得较高的解题效率。动态规划的基本方法动态规划求解的步骤:⑴找出最优解性质,并刻画其结构特征;⑵给出最优解的递归定义;⑶自底向上地计算并保存子问题最优解;⑷根据步骤⑶中得到的信息构造最优解。步骤⑴ ~ ⑶是动态规划算法的基本步骤。若要构造最优解,则必须执行步骤⑷ ,为此需在步骤⑶中增加必要信息的记录。动态规划的算法框架DynamicProgram(形参表){初始化;自底向上地计算子任务并将结果填入表中。}矩阵连乘递归方法public static int recurMatrixChain(int i, int j){ if(i==j) return 0; int u = recurMatrixChain(i+1, j)+p[i-1]*p[i]*p[j]; s[i][j]=u; for(int k=1;kj;k++) { int t=recurMatrixChain(i, k)+recurMatrixChain(k+1, j)+p[i-1]*p[k]*p[j]; if(tu) { u=t; s[i][j]=k; } } return u;}1: 4矩阵连乘递归树1: 23: 41: 12: 41: 34: 41:12: 23: 34: 41: 12: 31: 23: 32: 23: 42: 34: 43: 34: 42: 23: 32: 23: 31: 12: 2备忘录方法备忘录方法的控制结构与直接递归方法的控制结构相同,区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。private static int lookupChain(int i, int j) { if (m[i][j] 0) return m[i][j]; if (i == j) return 0; int u = lookupChain(i+1,j) + p[i-1]*p[i]*p[j]; s[i][j] = i; for (int k = i+1; k j; k++) { int t = lookupChain(i,k) + lookupChain(k+1,j) + p[i-1]*p[k]*p[j]; if (t u) { u = t; s[i][j] = k;} } m[i][j] = u; return u; }最长公共子序列问题子序列定义:给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij 。换言之,一个给定序列的子序列是在该序

文档评论(0)

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

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

1亿VIP精品文档

相关文档