0-1背包问题讲解文稿

上传人:re****.1 文档编号:569729774 上传时间:2024-07-30 格式:PPT 页数:15 大小:382KB
返回 下载 相关 举报
0-1背包问题讲解文稿_第1页
第1页 / 共15页
0-1背包问题讲解文稿_第2页
第2页 / 共15页
0-1背包问题讲解文稿_第3页
第3页 / 共15页
0-1背包问题讲解文稿_第4页
第4页 / 共15页
0-1背包问题讲解文稿_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《0-1背包问题讲解文稿》由会员分享,可在线阅读,更多相关《0-1背包问题讲解文稿(15页珍藏版)》请在金锄头文库上搜索。

1、2024/7/30算法案例算法案例 0-1背包背包问题问题通信四班刘蕾、文艺蓉、周家欣2024/7/302/150-10-1背包背包问题问题描述:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?0-1背包问题:对每种物品i装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。2024/7/303/150-10-1背包背包问题解空间:设Xi表示第i件物品的取舍,1代表取,0代表舍,搜索的空间为n元一维数组(X1,X2,X3,,Xn)取值范围:为(0,0,0,0,0),(0,0,0,0,1),

2、(0,0,0,1,0),(0,0,0,1,1),(1,1,1,1,1)。2024/7/304/150-10-1背包背包问题解空间图示:以3个物品为例,解(0,1,0)表示(不取物品0,取物品1,不取物品2)root1001010100012024/7/305/150-10-1背包背包问题问题转化:给定c0,wi0,vi0,1in,要求找出一个n元0-1向量(x1,x2,xn),xi0,1,1in,使得wixic,而且vixi达到最大。2024/7/306/150-10-1背包背包问题由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的递归式如下:设所给0-1背包问题的子问题的最优值为m

3、(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,n时0-1背包问题的最优值。第第i+1个物品不装入背包个物品不装入背包第第i+1个物品装入背包个物品装入背包第第i+1个物品无法装入背包个物品无法装入背包2024/7/307/150-10-1背包背包问题vvoid Knapsack(int v, int w, int c, int n, int m )v int n=v.length-1; v int jMax=Math.min(wn-1,c);v for (j = 0; j = jMax ;j+) mnj = 0; v for (j = wn; j 1; i-) v int

4、jMax=Math.min(wi-1,c);v for (j = 0; j = jMax; j+) mij = mi+1j;v for (j = wi ; j = w1) m1c=Math.max(m1c,m2c-w1+v1);vM,横坐标表示所放物品号码,纵坐标表示横坐标表示所放物品号码,纵坐标表示背包容量背包容量1到到C,值表示当前考虑方案的价值,值表示当前考虑方案的价值不选择第不选择第i个物品个物品如何可以装下(重量允许)如何可以装下(重量允许)选择价值更大的方式(装入选择价值更大的方式(装入or不装入)不装入)处理边界情况处理边界情况处理边界情况处理边界情况2024/7/308/150

5、-10-1背包背包问题012345678910w1=2v1=61w2=2v2=32w3=6v3=53w4=5v4=44w5=4v5=650问题实例:有5个物品,其重量分别是2, 2, 6, 5, 4,价值分别为6, 3, 5, 4, 6,背包的容量为10。mij表示把第i,.,n物品装入容量为j的背包的最大价值2024/7/309/150-10-1背包背包问题012345678910w1=2v1=61w2=2v2=32w3=6v3=53w4=5v4=44w5=4v5=650问题实例:有5个物品,其重量分别是2, 2, 6, 5, 4,价值分别为6, 3, 5, 4, 6,背包的容量为10。0

6、00 00 00 06 66 66 66 66 66 66 6m5=4=6m5=4=6mij表示把第i,.,n物品装入容量为j的背包的最大价值 int jMax=Math.min(wn-1,c); for (j = 0; j = jMax ;j+) mnj = 0; for (j = wn; j 1; i-) int jMax=Math.min(wi-1,c); for (j = 0; j = jMax; j+) mij = mi+1j; for (j = wi ; j = c; j+) mij=Math.max(mi+1j,mi+1j-wi+vi); 2024/7/3011/150-10-1

7、背包背包问题012345678910w1=2v1=61w2=2v2=32w3=6v3=53w4=5v4=44w5=4v5=650问题实例:有5个物品,其重量分别是2, 2, 6, 5, 4,价值分别为6, 3, 5, 4, 6,背包的容量为10。0 00 06 66 69 99 9121212121515151515150 00 03 33 36 66 69 99 99 9101011110 00 00 00 06 66 66 66 66 6101011110 00 00 00 06 66 66 66 66 6101010100 00 00 00 06 66 66 66 66 66 66 6m

8、ij表示把第i,.,n物品装入容量为j的背包的最大价值2024/7/3012/150-10-1背包背包问题vvoid Knapsack(int v, int w, int c, int n, int m )v int n=v.length-1; v int jMax=Math.min(wn-1,c);v for (j = 0; j = jMax ;j+) mnj = 0; v for (j = wn; j 1; i-) v int jMax=Math.min(wi-1,c);v for (j = 0; j = jMax; j+) mij = mi+1j;v for (j = wi ; j =

9、w1) m1c=Math.max(m1c,m2c-w1+v1);vm,横坐标表示背包号码,纵坐标表示背包横坐标表示背包号码,纵坐标表示背包容量容量1到到C,值表示当前考虑方案的价值,值表示当前考虑方案的价值背包容量背包容量0-wn-1,该物品装不下,该物品装不下n个物品个物品背包装不下物品背包装不下物品n,此时考虑物品,此时考虑物品n装入方法最大价值装入方法最大价值为零为零背包能装下物品背包能装下物品n,物品,物品n装入方法最大价值为装入方法最大价值为vn背包不能装下物品时背包不能装下物品时背包能装下物品时背包能装下物品时图示图示隐藏隐藏2024/7/30Traceback求最求最优优解解Te

10、mplateVoid Traceback(Type *m, int w, int c, int n, int x) for(int i=1;in;i+) if(mic=mi+1c) xi=0; elsexi=1;c-=wi; xn=(mnc)?1:0;13/15按照按照KnapsackKnapsack计算后计算后m1cm1c给出的为给出的为0-10-1背包问题的最优值,然后按背包问题的最优值,然后按照上述照上述TracebackTraceback算法构造出最优解算法构造出最优解(x1,x2,x3,xn)(x1,x2,x3,xn)。2024/7/3014/150-10-1背包背包问题Traceb

11、ack回溯过程:012345678910w1=2v1=61w2=2v2=32w3=6v3=53w4=5v4=44w5=4v5=650006699121215151500336699910110000666661011000066666101000006666666综上所述:本例中最大价值为综上所述:本例中最大价值为15,最优解向量为,最优解向量为(1,1,0,0,1)11001if(mic!=mi+1c)xi=1;c-=wi;if(mic!=mi+1c)xi=1;c-=wi;if(mic=mi+1c)xi=0;if(mic=mi+1c)xi=0; xn=(mnc)?1:0;2024/7/3015/15Thanku

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号