网站大量收购闲置独家精品文档,联系QQ:2885784924

第3章动态规划3_0-1背包问题详解.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 动态规划 (Dynamic Programming) —3.4 0-1背包问题 0-1背包问题 问题描述: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 0-1背包问题: 对每种物品i装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。 0-1背包问题 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 0-1背包问题描述:给定C 0, wi 0, vi 0 , 1≤i≤n.要求找一n元向量(x1,x2,…,xn), xi∈{0,1}, ∑ wi xi≤C,且∑ vi xi达最大,即一个特殊的整数规划问题。 1.最优子结构性质 最优子结构性质:设(y1,y2,…,yn)是 (3.4.1)的一个最优解,则(y2,…,yn)是下面相应子问题的一个最优解: 证明:使用反证法. 若不然,设(z2,z3,…,zn)是上述子问题的一个最优解,而(y2,y3,…,yn)不是它的最优解.显然有 ∑ vizi ∑ viyi (i=2,…,n) 且 w1y1+ ∑ wizi ? C 因此 v1y1+ ∑ vizi (i=2,…,n) ∑ viyi, (i=1,…,n) 说明(y1,z2, z3,…,zn)是(3-4-1)0-1背包问题的一个更优解,导出(y1,y2,…,yn)不是背包问题的最优解,矛盾. 2.递归关系 设所给0-1背包问题的子问题 的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。 2.递归关系 由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的递归式如下: 第i个物品不装入背包 第i个物品装入背包 第i个物品无法装入背包 课本P76有误! 注:(3-4-3)式 此时背包容量为j,可选择物品为i。此时在对xi作出决策之后,问题处于两种状态之一: 背包剩余容量是j,没产生任何效益; 剩余容量j-wi,效益值增长了vi . 从n推至i+1, i算出最优值m(i, j) ( i=n,…,1) 。 m(1,C)为最优值。 然后用算法traceback找出最优解xi ,其中i,C为整值。 2.递归关系 3.算法描述 void knapsack( int []v, int []w, int c, int [][]m) { int n = v.length-1; int jMax = min(w[n]-1, c) //背包剩余容量// for(int j = 0; j=jMax; j++) //背包装不下w[n]的情况// m[n][j]=0; for(int j=w[n]; j=c; j++) //背包装得下w[n]的情况// m[n][j]=v[n]; for(int i=n-1; i1; i--) { jMax=min(w[i]-1, c); for(int j=0; j=jMax; j++) //背包装不下w[i]的情况// m[i][j]=m[i+1][j]; //没产生任何效益// for(int j=w[i]; j=c; j++) //背包装得下w[i]的情况// m[i][j]=max(m[i+1][j], m[i+1][j-w[i]]+v[i]); //效益值增长vi ?// } 0-1背包问题的动态规划算法Knapsack如下: 当wi(1 ? i ? n)为正整数时,用二维数组m[][]来存储m(i, j)相应的最优值。 3.算法描述 m[1][c]=m[2][c]; //令m[1][c]=m[2][c]// if(c=w[1]) //如果背包装得下w[1]// m[1][c]=max(m[1][c], m[2][c-w[1]]+v[1]); } void traceback(int

文档评论(0)

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

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

1亿VIP精品文档

相关文档