0-1背包问题文稿教程讲解.ppt

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
*/22 * 算法案例 0-1背包问题 通信四班 刘蕾、文艺蓉、周家欣 */15 0-1背包问题 问题描述: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 0-1背包问题: 对每种物品i装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。 */15 0-1背包问题 解空间: 设Xi表示第i件物品的取舍,1代表取,0代表舍,搜索的空间为n元一维数组(X1,X2,X3,……,Xn) 取值范围: 为(0,0,0……,0,0),(0,0,0……,0,1),(0,0,0……,1,0),(0,0,0……,1,1),……,(1,1,1……,1,1)。 */15 0-1背包问题 解空间图示: 以3个物品为例,解(0,1,0)表示(不取物品0,取物品1,不取物品2) root 1 0 0 1 0 1 0 1 0 0 0 1 */15 0-1背包问题 问题转化: 给定c0,wi0,vi0,1≤i≤n,要求找出一个n元0-1向量(x1,x2,…,xn),xi∈{0,1},1≤i≤n,使得∑wixi≤c,而且∑vixi达到最大。 */15 0-1背包问题 由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的递归式如下: 设所给0-1背包问题的子问题的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。 第i+1个物品不装入背包 第i+1个物品装入背包 第i+1个物品无法装入背包 */15 0-1背包问题 void Knapsack(int v[], int w[], int c, int n, int m[][] ) { int n=v.length-1; int jMax=Math.min(w[n]-1,c); for (j = 0; j = jMax ;j++) m[n][j] = 0; for (j = w[n]; j = c; j++) m[n][j] = v[n] ; for ( int i=n-1; i1; i--) { int jMax=Math.min(w[i]-1,c); for (j = 0; j = jMax; j++) m[i][j] = m[i+1][j]; for (j = w[i] ; j = c; j++) m[i][j]=Math.max(m[i+1][j],m[i+1][j-w[i]]+v[i]); } m[1][c] =m[2][c]; if (c = w[1]) m[1][c]=Math.max(m[1][c],m[2][c-w[1]+v[1]); } M[ ][ ],横坐标表示所放物品号码,纵坐标表示背包容量1到C,值表示当前考虑方案的价值 不选择第i个物品 如何可以装下(重量允许) 选择价值更大的方式(装入or不装入) 处理边界情况 处理边界情况 */15 0-1背包问题 ? ? 0 1 2 3 4 5 6 7 8 9 10 ? w1=2 v1=6 1 w2=2 v2=3 2 w3=6 v3=5 3 w4=5 v4=4 4 w5=4 v5=6 5 ? 0 问题实例: 有5个物品,其重量分别是{2, 2, 6, 5, 4},价值分别为{6, 3, 5, 4, 6},背包的容量为10。 m[i][j]表示把第i,...,n物品装入容量为j的背包的最大价值 */15 0-1背包问题 ? ? 0 1 2 3 4 5 6 7 8 9 10 ? w1=2 v1=6 1 w2=2 v2=3 2 w3=6 v3=5 3 w4=5 v4=4 4 w5=4 v5=6 5 ? 0 问题实例: 有5个物品,其重量分别是{2, 2, 6, 5, 4},价值分别为{6, 3, 5, 4, 6},背包的容量为10。 0 0 0 0 6 6 6 6 6 6 6 m[5][4] = 0, m[5][=4]=6 m[i][j]表示把第i,...,n物品装入容量为j的背包的最大价值 int jMax

文档评论(0)

三沙市的姑娘 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档