我正在尝试解决此问题,我想知道是否存在已知的算法/解决方案来解决此问题。

问题:



袋子大小相等。也将想知道如何解决尺寸不等的袋子。

我读过的大多数解决方案都在尝试解决具有重量和值(value)的0/1背包。我应该认为重量和值(value)相同吗?我在正确的轨道上吗?

这不是作业问题。

最佳答案

这就是the bin packing problem(即NP-hard)。

通过简单地按其大小对降序进行排序,然后将每个项目插入具有足够剩余空间的列表中的第一个bin中,我们得到11/9 OPT + 6/9 bin(其中OPT是最佳解决方案中使用的bin数量)。这可以很容易地将O(n²)或可能的O(n log n)与有效的实现一起使用。

在最佳解决方案方面,没有一个背包问题众所周知的动态编程解决方案。 This resource有一个选项-基本思想是:



如果是1个袋子,则本质上是the subset sum problem。为此,您可以将重量与值视为相同,并使用背包算法求解,但是对于多个袋子来说,这实际上并不能很好地发挥作用。

为什么不?考虑袋子大小为5,5,5,9,9,9的项目16。如果仅求解子集总和,则每个袋子只剩下5,5,5,每个袋子只剩下9(总共4袋子),而不是3个袋子中的每个5,9

子集总和/背包的问题已经很棘手-如果使用它不能为您提供最佳解决方案,您最好也可以使用上面的排序/贪婪方法。

关于algorithm - 带有多个袋子和仅重量的物品的背包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23689236/

10-11 15:22