计科08-04-动态规划.pptVIP

  1. 1、本文档共69页,可阅读全部内容。
  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文档。上传文档
查看更多
算法分析与设计 0-1背包的子问题结构 子问题 子背包容量为 j , 0jC (原背包容量) 可选物品为 i, i+1, ……, n, 1≤i ≤n 按以上顺序,依次选择物品,装入容量为 j 的背包 依次考察物品 i, i+1, ……, n 算法分析与设计 0-1背包子问题最优值的计算 边界条件 m ( n , j ) — 可选物品只有一个物品,即物品 n 显然:若背包当前容量 j 物品 n 的重量 wn 物品 n 可(整体)装入 背包总价值 = 物品 n 的价值 vn 算法分析与设计 0-1背包最优值的计算 递归计算式 算法分析与设计 计算复杂性分析 0-1背包问题的动态规划求解算法时间复杂性分析 T(n) = O(n*c) 物品个数 * 背包容量 背包容量 c 的值很大时,计算时间较多 若 c2n,计算时间 Ω(n*2n) 思考 0-1背包的备忘录动态规划算法如何设计? 与前面的递推动态规划算法在计算特征上有无区别? 与矩阵连乘积的备忘录动态规划算法有无区别? 算法分析与设计 算法分析与设计 动态规划策略总结 基本方法 描述最优解结构 定义最优值递归式 计算最优值(同时保存最优解信息) 自底向上:递推 自顶向下递归:备忘录 构造最优解 算法分析与设计 动态规划策略总结 算法效率 时间复杂性为多项式阶(不同子问题个数) LCS、0-1背包不一定:可为Ω(n2n) 空间复杂性较大:Θ(n2) 典型问题 矩阵连乘最优计算次序(matrix chain) 最长公共子序列(longest common subsequence) 最优三角剖分 0-1背包最优装入 最长公共子序列(LCS) 给定 2 个序列 X 和 Y,当另一序列 Z 既是 X 的子序列又是 Y 的子序列时,称 Z 是序列 X 和 Y 的公共子序列 问题 给定 2 个序列 X={ x1,x2,…,xm } 和 Y={ y1,y2,…,yn } 找出 X 和 Y 的最长公共子序列 LCS, Longest Common Subsequence * 最长公共子序列(LCS)的结构 假设序列 X={x1,x2,…,xm} 和 Y={y1,y2,…,yn}的最长公共子序列(LCS)为 Z={z1,z2,…,zk} ,则 xm=yn:则一定有 zk=xm=yn,且 zk-1是Xm-1和Yn-1 的LCS xm≠yn : 若 zk≠xm:则 Z 一定是 Xm-1和 Y 的LCS 若 zk≠yn:则 Z 一定是 X 和 Yn-1 的LCS * 两个序列的最长公共子序列(LCS)包含了这两个序列的前缀的最长公共子序列。因此,最长公共子序列问题具有最优子结构性质。 LCS子问题的递归结构 c[i][j]:Xi 与 Yj 的最长公共子序列(LCS)的长度 Xi={ x1,x2,…,xi },Yj={ y1,y2,…,yj } i=0 或 j=0:空序列是 Xi 和 Yj 的LCS,故 C[i][j] = 0 其他情况:由最优子结构性质得递归关系: * 计算最优值 int lcsLength (char *x, int m, char *y, int n) { for (int i =0; im; i++) c[i][0]=0; //Xi 与空串的 LCS 长度=0 for (int j =0; jn; j++) c[0][j]=0; //空串与 Yj 的 LCS 长度=0 for (i = 0; i m; i++) for (j = 0; j n; j++) // 逐个比较 x 与 y 的每个字符 if (x[i] == y[j]) { // xi 与 yj相等 // Xi 与 Yj 的LCS 长度= Xi-1 与 Yj-1 的LCS长度 +1 c[i][j]=c[i-1][j-1]+1; //且,xi 或 yj 是 Xi 与 Yj 的LCS的尾字符 b[i][j]=1; …..(下页续) * 计算最优值 ……(接上页)//xi 与 yj 不相等 // c (i-1, j) 是 Xi-1 与 Y 的 LCS 长度 // c (i, j-1) 是 X 与 Yj-1 的 LCS 长度 } else if ( c[i-1][j] = c[i][j-1] ) { // Xi-1 与 Y 的 LCS 更长 c[i][j] = c[i-1][j]; b[i][j] = 2; // LCS 在 Xi-1 与 Y

文档评论(0)

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

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

1亿VIP精品文档

相关文档