分数背包

时间:2016-11-18 07:40:02

标签: knapsack-problem

我需要实施分数背包来解决这个问题

价值($ 20)20 10 90 110 70 60

重量(磅)3 4 1 5 6 3 4

但是我对分数背包的工作方式感到困惑,我理解背包只能起作用。 所以,在我的程序中输入例如重量限制= 7

它给了我143

你能帮我理解分数背包的工作原理吗?

谢谢

2 个答案:

答案 0 :(得分:0)

  1. 创建按值/重量降序排列的列表。
  2. 在你的情况下,列表将是20/3 = 6.6,50 / 4 = 12.75,10 / 1 = 10,90 / 5 = 18,110 / 6 = 18.3,70 / 3 = 23.3,60 / 4 = 15 < / LI>
  3. 降序:23.3,18.3,18,15,12.5,10,6.6
  4. 重量= 7。
  5. 从Desc订单列表中选择项目1。其w = 3和3&lt; 7因此总值= 0 + 70 = 70
  6. 选择项目2,w = 6; 3 + 6≤7?不。(所以要花一小部分) 体重左= 7-3 = 4。取得的部件= 4 *(18.3)= 73.2 总值= 70 + 73.2 = 143.2 =回答

答案 1 :(得分:-1)

第一步是了解分数背包问题是一种贪婪算法,因此可以满足贪婪选择属性。该属性指出,所有最佳解决方案都是第一个选择,在这种情况下,项目k 具有 max weight(k)/ value(k)< / strong>将始终采用它,并尽可能多地使用它。了解了这一概念后,我们便可以继续使用该算法。

首先使用权重(i)/值(i)对背包中的所有物品进行排序。
然后对从i = 1到n的排序列表中的每个物品进行排序。
从项目(i)中获取尽可能多的东西,直到填满为止。

请注意,这不适用于0/1背包问题。