我有一个问题,我认为可以转换为。的变体 fractional knapsack问题。
目标函数的形式为:
$ \ sum_ {i} x_iv_i $
但是,我的问题不同之处在于它允许$ v_i $ s和$ x_i $为负数。
我想证明这个问题可以使用贪心算法解决(在链接中解释)。
我已经为许多测试用例测试了这个,贪婪的算法似乎解决了它,但我想要明确 证明贪婪算法在额外约束下仍然适用。
答案 0 :(得分:0)
在小背包问题中,您会找到可放入背包的每个物品的价值/重量,并将这些物品从最佳的V / W比率到最差的W / W比率进行排序。然后,从最佳比率开始,将背包装满,或者用完。如果用完了,则转到列表中的下一个项目,并在背包中填充它。这种模式一直持续到背包装满为止。这很贪婪,因为一旦我们对列表进行排序,我们便知道可以放心地按此顺序添加项目,并且最终将获得包中最大的潜在价值。
通过允许值和“权重”为负,如在此问题中一样,但是,该算法不再贪婪。物品可能具有负的“重量”和负值,从而导致正的V / W比,这使事实毁于一旦。例如,采用以下项目列表:
在贪婪算法之后,我们希望添加与现有项一样多的项,因为它具有最佳的V / W比。但是,从长远来看,添加第1项确实会伤害我们,因为我们失去的每重量值会增加,因此以后可以添加。例如,假设每个| W | = 10,背包的最大重量为10。通过将所有数值加1,我们将得到-10的权重和-10的值。然后我们将所有2相加,结果权重为0,值为-1。然后,我们将3全部加起来,得出权重10,值为7。
如果相反,我们只是从一开始就添加了第2个项目,则权重为10,值为9。因此,矛盾的是,如果权重和值可以为负,则该算法不是贪婪的算法。