0-1多维背包的典型目标函数是使背包中所有物品的价值最大化。Stackexchange链接中提供了一个很好的算法:0-1 Multidimensional Knapsack。
但是,如果我的目标函数是在背包中装入尽可能多的物品呢?所有的部分都有相同的价值。Stackexchange post (Knapsack problem with all profits equal to 1)声称等值的一维背包可以用贪心算法求解。这是真的吗?我认为01背包问题是NP难的,因此贪婪算法可能不会给出最优解。
所以我的问题分为两部分: 1)在这种情况下,贪婪算法能给出最优解吗? 01等值背包2)如何实现多维贪婪算法?vi/wi是一个值除以一个向量...
发布于 2016-04-08 06:44:24
1.)背包问题是一个NP难问题。所以简而言之,不,你不能使用贪婪算法以最优的方式解决它。取而代之的是,启发式方法可以让你非常接近。
2.)在等利润背包的情况下,这可能会退化为一个简单的装箱问题。在这种情况下,如果所有选择在利润方面都是平等的,那么您可能需要关注问题的另一个方面,可能是类似于“大小”的东西。如果是这样的话,你会希望每次都选择你能选择的最小的项目-在这种情况下,贪婪的算法可能就足够了,并且可以通过简单地查看你的选择并选择最小的元素来实现。
应该注意的是,如果线性搜索被重复了很多次,那么它会给你的程序增加令人恼火的开销。相反,您可能希望考虑使用MIN-Heap,因为这将以较低的计算成本获得最小的值。
https://stackoverflow.com/questions/36488412
复制相似问题