0-1 Multidimensional Knapsack的典型目标函数是最大化背包中所有物品的价值。 Stackexchange链接中提供了一个很好的算法:0-1 Multidimensional Knapsack。
但是,如果我的目标功能是在背包中装入尽可能多的物品怎么办?所有作品都有相同的价值。 Stackexchange帖子(Knapsack problem with all profits equal to 1)声称可以通过Greedy算法求解具有相等值的一维背包。真的吗?我认为01背包问题是NP难的,因此贪婪算法可能无法给出最佳解决方案。
所以我的问题是两部分的? 1)在这种情况下,贪婪算法能给出最优解吗? 01背包具有相同的值 2)如何实现多维贪心算法? vi / wi是一个除以向量的值......
答案 0 :(得分:0)
1。)背包问题是NP-Hard问题。所以简而言之,不,你不能使用贪心算法最佳地解决它。相反,存在可以让你非常接近的启发式方法。
2。)在利润平等的背包的情况下,这可能会降低到简单的装箱问题。在这种情况下,如果所有选择在利润方面都是相同的,那么您可能需要关注问题的不同方面,这可能类似于“大小”。如果是这种情况,你会想要每次都选择最小的项目 - 在这种情况下,贪婪的算法可能就足够了,可以通过简单地查看你的选择并选择最小的元素来实现。
应该注意的是,线性搜索如果重复了很多次,就会给程序增加烦人的开销。相反,您可能需要考虑使用MIN-Heap,因为这样可以以较低的计算成本获得最小的值。