第3章算法习题.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 动态规划 算法分析题 3-1 最长单调递增子序列 设计一个时间的算法,找出由n个数组成的序列的最长单调递增子序列。 分析与解答: 由数组b[0:n-1]记录以a[i], 0=in,为结尾元素的最长递增子序列的长度。序列a的最长递增子序列的长度为。易知,b[i]满足最优子结构性质,可以递归的定义为: b[0]=1, 将此计算b[i]转化为i个规模更小的子问题。 按此思想设计的动态规划算法描述如下。 int LISdyna() { int i, j, k; for (i=1,b[0]=1;in;i++){ for (j=0,k=0;jI;j++) if (a[j]=a[i] kb[j]) k=b[j]; b[i]=k-1; } Return maxL(n); } int maxL(int n) { for (int=0, temp=0; in;i++) if (b[i]temp) temp=b[i]; return temp; } 算法LISdyna按照递归式计算出b[0:n-1]的值,然后由maxL计算出序列a的最长递归子序列的长度。从算法LISdyna的二重循环容易看出,算法所需的计算时间为。 算法分析题3-3 整数线性规划问题 分析与解答: 该问题是一般情况下的背包问题。具有最优子结构性质。 设所给背包问题的子问题 的最优解为m(i,j),即m(i,j)是背包容量为j,可选择物品为1,2,…,i时背包问题的最优值。由背包问题的最优子结构性质,可以建立计算m(i,j)的递归式如下: 按此递归式计算出的m(n,b)为最优值。算法所需的计算时间。 算法分析题3-4 分析与解答: 该问题是二维0-1背包问题。问题的形式化描述是:给定c0,d0,wi0,bi0,vi0,1=i=n,要求找出n元0-1向量,使得而且达到最大。因此,二维0-1背包问题也是一个特殊的整数规划问题。 容易证明该问题具有最优子结构性质。 设所给二维0-1背包问题的子问题 的最优值为m(i,j,k),即m(i,j,k)是背包容量为j,容积为k,可选择物品为时二维0-1背包问题的最优值。由二维0-1背包问题的最优子结构性质,可以建立计算m(i,j,k)的递归式如下: 按此递归式计算出的m(n,c,d)为最优值。算法所需的计算时间为O(ncd)。

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档