算法设计与分析——背包问题求解

假设,有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

关系递推式如下:

image.png

自下而上填表法:

①创建表格并为了防止越界补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。

原文地址:https://www.cnblogs.com/wangzheming35/p/15731540.html