A03_3.pptVIP

  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文档。上传文档
查看更多
A03_3

第3章 动态规划 3.1 矩阵连乘问题 3.2 动态规划算法的基本要素 3.3 最长公共子序列 3.4 0-1背包问题 本章主要知识点: 3.2 动态规划算法的基本要素 从计算矩阵连乘积最优计算次序的动态规划算法可以看出, 动态规划算法的有效性依赖于问题本身的两个性质: 最优子结构性质 子问题的重叠性质 从一般意义上,问题所具有的这两个性质是该问题可用 动态规划算法求解的基本要素。 三、备忘录方法 备忘录方法的控制结构与直接递归方法的控制结构相同,区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。另外,备忘录方法的递归方式是自顶向下的,而动态规划算法是自底向上递归的。 public static int memoizedmatrixChain(int n) { for (int i=1; i =n; i++) for(int j=i;j=n;j++) m[i][j]=0; return lookupChain(1,n); } 其中,lookupChain()方法由下面函数给出。 为了区分子问题未被计算过,首先初始化m[i][j]的值为0。 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; } 3.3 最长公共子序列 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk}是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。 给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。 给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。 3.4 0-1背包问题 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 0-1背包问题是一个特殊的整数规划问题。 1. 最优子结构性质 设(y1,y2,…,yn)是所给0-1背包问题的一个最优解,则 (y2,…,yn)是下面相应子问题的一个最优解。 2. 递归关系 设所给0-1背包问题的子问题 的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的递归式如下。 3. 算法描述 当 为正整数时,用二维数组m[][]存储m(i,j)的相应值,可设计解0-1背包问题的动态规划算法如下: public static void knapsack(int []v,int []w,int c,int [][]m) { int n=v.length-1; int jMax=Math.min(w[n]-1,c); for(int j=0;j=jMax;j++) m[n][j]=0; for(int j=w[n];j=c;j++) m[n][j]=v[n]; for(int i=n-1;i1;i--){//可以改写为for(int i=n-1;i=1;i--) jMax=Math.min(w[i]-1,c); for(int j=0;j=jMax;j++) m[i][j]=m[i+1][j]; for(int j=w[i];j=c;j++)

文档评论(0)

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

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

1亿VIP精品文档

相关文档