是否有可能使用贪婪算法解决包含负值的分数背包?

时间:2018-02-06 20:54:17

标签: greedy

我有一个问题,我认为可以转换为。的变体 fractional knapsack问题。

目标函数的形式为:

$ \ sum_ {i} x_iv_i $

但是,我的问题不同之处在于它允许$ v_i $ s和$ x_i $为负数。

我想证明这个问题可以使用贪心算法解决(在链接中解释)。

我已经为许多测试用例测试了这个,贪婪的算法似乎解决了它,但我想要明确 证明贪婪算法在额外约束下仍然适用。

1 个答案:

答案 0 :(得分:0)

在小背包问题中,您会找到可放入背包的每个物品的价值/重量,并将这些物品从最佳的V / W比率到最差的W / W比率进行排序。然后,从最佳比率开始,将背包装满,或者用完。如果用完了,则转到列表中的下一个项目,并在背包中填充它。这种模式一直持续到背包装满为止。这很贪婪,因为一旦我们对列表进行排序,我们便知道可以放心地按此顺序添加项目,并且最终将获得包中最大的潜在价值。

通过允许值和“权重”为负,如在此问题中一样,但是,该算法不再贪婪。物品可能具有负的“重量”和负值,从而导致正的V / W比,这使事实毁于一旦。例如,采用以下项目列表:

  1. V = -1,W = -1-> V / W = 1.0
  2. V = .9,W = 1-> V / W = 0.9
  3. V = .8,W = 1-> V / W = 0.8

在贪婪算法之后,我们希望添加与现有项一样多的项,因为它具有最佳的V / W比。但是,从长远来看,添加第1项确实会伤害我们,因为我们失去的每重量值会增加,因此以后可以添加。例如,假设每个| W | = 10,背包的最大重量为10。通过将所有数值加1,我们将得到-10的权重和-10的值。然后我们将所有2相加,结果权重为0,值为-1。然后,我们将3全部加起来,得出权重10,值为7。

如果相反,我们只是从一开始就添加了第2个项目,则权重为10,值为9。因此,矛盾的是,如果权重和值可以为负,则该算法不是贪婪的算法。