Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 有界背包问题的建立。想要:所有可能包装的清单_Algorithm_Subset_Knapsack Problem - Fatal编程技术网

Algorithm 有界背包问题的建立。想要:所有可能包装的清单

Algorithm 有界背包问题的建立。想要:所有可能包装的清单,algorithm,subset,knapsack-problem,Algorithm,Subset,Knapsack Problem,我不想优化任何东西,而是想列出背包中所有可能的——包括“不完整的”——包装。当然,我可以循环遍历对象集的所有子集,并选择满足权重约束的子集(可以通过在要查看的子集的大小上设置一个上限来改进),但我真的希望有更高效的方法 谢谢。首先按重量对物品进行排序。然后递归地打包背包。如果尚未考虑的最小重量物体不合适,或者我们没有剩余物体,则将当前背包添加到我们的列表中并返回,否则将当前背包添加到列表中适合放入的每个物体的列表中,并尝试用比我们上次打包的物体更重的物体打包背包的其余部分 如果我们可以包装一个给

我不想优化任何东西,而是想列出背包中所有可能的——包括“不完整的”——包装。当然,我可以循环遍历对象集的所有子集,并选择满足权重约束的子集(可以通过在要查看的子集的大小上设置一个上限来改进),但我真的希望有更高效的方法


谢谢。

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

如果我们可以包装一个给定类型的多个项目,则将小于替换为小于或等于

如果我们有多个相同重量的对象,我们需要先按重量排序,然后按任意顺序排序,然后使用它

 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)