算法设计与分析——背包问题求解
假设,有4个体积分别为2,3,5,6;价值分别为3,4,5,7的物品;背包容量为11。求解下列背包问题。
1、简述0-1背包问题,给出此问题求解问题
问题描述:
设U={u1,u2,...un}是一个准备放入容量为C的背包中n项物品的集合,0-1背包问题是用U中的一些物品来装满背包,这些物品的总体积不超过C,然而需要使它们的总价值最大。
S 体积:2,3,5,6
V 价值:3,4,5,7
C 容量:11
n 物品总数:4
关系递推式如下:
自下而上填表法:
①创建表格并为了防止越界补0
i\j | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | |||||||||||
2 | 0 | |||||||||||
3 | 0 | |||||||||||
4 | 0 |
②当i=1时,此时Si=2,Vi=3
i\j | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
2 | 0 | |||||||||||
3 | 0 | |||||||||||
4 | 0 |
③当i=2时,此时Si=3,Vi=4
i\j | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
2 | 0 | 0 | 3 | 4 | 4 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
3 | 0 | |||||||||||
4 | 0 |
④当i=3时,此时Si=5,Vi=5
i\j | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
2 | 0 | 0 | 3 | 4 | 4 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
3 | 0 | 0 | 3 | 4 | 4 | 7 | 7 | 8 | 9 | 9 | 12 | 12 |
4 |
⑤当i=4时,此时Si=6,Vi=7
i\j | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
2 | 0 | 0 | 3 | 4 | 4 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
3 | 0 | 0 | 3 | 4 | 4 | 7 | 7 | 8 | 9 | 9 | 12 | 12 |
4 | 0 | 0 | 3 | 4 | 4 | 7 | 7 | 8 | 10 | 11 | 12 | 14 |
可得出选得的物品最大价值为14。
2、简述分数背包问题,给出此问题的求解过程
问题描述:
分数背包问题是在背包问题的限制内将物品装满背包,使其物品的总价值最大。不同之处在于,可以装入一件物品的一部分。首先装入Vi/Si最大的物品,若Vi/Si < S,则装入Vi/Si第二大的物品,以此类推,将背包装满为止。若Vi/Si > S时,可以只装入该物品的一部分,直至装满背包。(Vi为第i个物品的价值,Si为第i个物品的体积 )
S 体积:2,3,5,6
V 价值:3,4,5,7
C 容量:11
n 物品总数:4
number | 1 | 2 | 3 | 4 |
---|---|---|---|---|
Si | 2 | 3 | 5 | 6 |
Vi | 3 | 4 | 5 | 7 |
Vi/Si | 1.5 | 1.34 | 1 | 1.16 |
按照比例,从大到小依次放入背包
①
∵V1/S1=3/2=1.5
∴将物品1装入背包
此时,背包剩余空间为11-2=9,价值为0+3=3
②
∵V2/S2=4/3=1.34
∴将物品2装入背包
此时,背包剩余空间为9-3=6,总价值为3+4=7
③
∵V4/S4=7/6=1.16
∴将物品4装入背包
此时,背包剩余空间为6-6=0,总价值为3+4+7=14
可得出选得的物品最大价值为14。