📜  小背包问题

📅  最后修改于: 2020-12-10 06:40:52             🧑  作者: Mango

小背包

可以取项目的分数,而不必对每个项目进行二进制(0-1)选择。

分数背包问题可以通过贪婪策略解决,而0-1问题则无法解决。

解决分数问题的步骤:

  • 计算每磅的价值小背包问题对于每个项目。
  • 遵循贪婪策略,我们尽可能选择每磅最高价值的物品。
  • 如果该元素的供应已用尽,并且我们仍然可以运载更多,则我们将以每磅下一个值取尽可能多的元素。
  • 排序,按每磅值排序的项目,贪婪算法以O(n log n)时间运行。

示例:沿着其各自的权重和值考虑5个项目:-

I =(I 1 ,I 2 ,I 3 ,I 4 ,I 5 )

w =(5、10、20、30、40)

v =(30,20,100,90,160)

背包容量W = 60

现在根据p i的递减值填充背包。

首先,我们选择重量为5的物品I i。

然后选择项目I 3重量为20.现在,背包的总重量为20 + 5 = 25个

现在下一个项目是I 5 ,其权重为40,但是我们只需要35,所以我们选择了它的小数部分,

解:

ITEM wi vi
I1 5 30
I2 10 20
I3 20 100
I4 30 90
I5 40 160

取每重量比的值,即pi = 小背包问题

ITEM wi vi Pi=Fractional Knapsack Problem
I1 5 30 6.0
I2 10 20 2.0
I3 20 100 5.0
I4 30 90 3.0
I5 40 160 4.0

现在,以降序排列p i的值。

ITEM wi vi pi=Fractional Knapsack Problem
I1 5 30 6.0
I3 20 100 5.0
I5 40 160 4.0
I4 30 90 3.0
I2 10 20 2.0