【发布时间】:2015-07-26 10:37:08
【问题描述】:
我想找到所有方法将 n 元素分发到 b 垃圾箱,但没有“重复”和空垃圾箱。
示例
如果我有 n = 3 元素和 b = 2 垃圾箱并从这个 stackoverflow 线程 Bin packing bruteforce method 应用蛮力方法,我会得到以下结果:
[[0, 1, 2, 3], []]
[[0, 1, 2], [3]]
[[0, 1, 3], [2]]
[[0, 1], [2, 3]]
[[0, 2, 3], [1]]
[[0, 2], [1, 3]]
[[0, 3], [1, 2]]
[[0], [1, 2, 3]]
[[1, 2, 3], [0]]
[[1, 2], [0, 3]]
[[1, 3], [0, 2]]
[[1], [0, 2, 3]]
[[2, 3], [0, 1]]
[[2], [0, 1, 3]]
[[3], [0, 1, 2]]
[[], [0, 1, 2, 3]]
“重复”的定义
一半的结果是重复的。仅切换 bin 的顺序:first 和 last 相同,2nd 和 2nd to last 相同,等等...
空箱的定义
我不希望任何垃圾箱是空的。如果你看前面的例子,第一行和最后一行都有一个空的 bin。
【问题讨论】:
-
所以你想添加一个验证步骤?如果是这样,请显示您的代码,以便可以添加该步骤。
-
我宁愿创建一个算法,该算法本质上只产生满足上述标准的解决方案,而不是在创建每个可能的解决方案后丢弃解决方案。我用于上述结果的算法取自linked stackoverflow thread。
-
@conscho 您的问题不清楚。经典的
bin-packing试图最小化垃圾箱的数量。在您的情况下,您想找到所有方法将n项目分发到b垃圾箱,不是吗? -
你想要的东西与对称性破坏密切相关。本文Discussion about Constraint Programming Bin Packing Models 列出了实现这一目标所需的约束。但这可能不容易添加到您的代码中,因为这些约束是为约束编程方法量身定制的,我可以推荐。
-
@karthik 你是绝对正确的。我更新了描述。
标签: algorithm brute-force bin-packing