有界背包问题设置。想要:所有可能包装的清单

时间:2010-08-12 10:05:21

标签: algorithm subset knapsack-problem

我想列出所有可能的 - 包括“不完整” - 背包的包装,而不是优化任何东西。当然,我可以循环遍历对象集的所有子集并选择满足权重约束的子集(可以通过在子集的大小上放置上限来改进),但我真的更喜欢更多的东西高效。

感谢。

1 个答案:

答案 0 :(得分:1)

首先按重量对物体进行排序。然后递归包装背包。如果尚未考虑的最小重量对象不合适,或者我们没有剩余物体,则将当前背包添加到我们的列表中并返回,否则将当前背包添加到我们的列表中,以适合列入其中的每个对象。尝试用背包比我们包装的最后一个物体更重的物品包装背包的其余部分。

如果我们可以打包一个给定类型的多个项目,那么替换少于或小于等于。

如果我们有多个相同重量的物体,我们需要先按重量排序,然后按一些任意顺序排序,并使用它。

 PackKnapsack(knapsack, objects)
   add knapsack to list
   if objects is empty return
   if smallest object does not fit return
   for each object in order from smallest to largest
      if currentobject does not fit
         break
      PackKnapsack(knapsack + currentObject, objects heavier than current object)