我正在尝试解决此问题,我想知道是否存在已知的算法/解决方案来解决此问题。
问题:
袋子大小相等。也将想知道如何解决尺寸不等的袋子。
我读过的大多数解决方案都在尝试解决具有重量和值(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/