我正在尝试生成代码,它将使用这六个组件获取各种组合排列(组合)的组件(即a-f)一个、两个、三个或四个单元,并提供包含所有组件的各种非复制组合(combo.combo) (即ab + cdef和ac + bde +f,但不包括ae + bc + df和aef + bc + d)。
如果这段代码能让我1)输入组件的数量,2)输入每个组合的最小和最大单元长度,3)输入每个combo.combo的最小和最大组合数量,以及4)随机化combo.combos的输出列表,那就太好了。
也许可以从某种迭代循环开始,生成720个可能的组件组合(a-f)的每个版本,然后根据设置的限制参数开始修剪该列表?我已经掌握了一些python的工作知识,并将开始使用,但任何提示或建议都是非常受欢迎的。
combo.combo a b c d e f
a.bcdef 1 1 1 1 1 1
ab.cdef 1 1 1 1 1 1
abc.def 1 1 1 1 1 1
abcd.ef 1 1 1 1 1 1
abcde.f 1 1 1 1 1 1
a.b.cdef 1 1 1 1 1 1
a.bc.def 1 1 1 1 1 1
a.bcd.ef 1 1 1 1 1 1
a.bcde.f 1 1 1 1 1 1
ab.c.def 1 1 1 1 1 1我发现了很多可以生成组合排列而不是组合组合的代码。我已经包含了组合组件的二进制矩阵,但是我不知道从哪里开始,或者这个矩阵是一个错误的开始(尽管这是一个有用的可视化辅助工具)。
combo a b c d e f
a 1 0 0 0 0 0
b 0 1 0 0 0 0
c 0 0 1 0 0 0
d 0 0 0 1 0 0
e 0 0 0 0 1 0
f 0 0 0 0 0 1
ab 1 1 0 0 0 0
ac 1 0 1 0 0 0
ad 1 0 0 1 0 0
ae 1 0 0 0 1 0
af 1 0 0 0 0 1
bc 0 1 1 0 0 0
bd 0 1 0 1 0 0
be 0 1 0 0 1 0
bf 0 1 0 0 0 1
cd 0 0 1 1 0 0
ce 0 0 1 0 1 0
cf 0 0 1 0 0 1
de 0 0 0 1 1 0
df 0 0 0 1 0 1
ef 0 0 0 0 1 1
abc 1 1 1 0 0 0
abd 1 1 0 1 0 0
abe 1 1 0 0 1 0
abf 1 1 0 0 0 1
acd 1 0 1 1 0 0
ace 1 0 1 0 1 0
acf 1 0 1 0 0 1
ade 1 0 0 1 1 0
adf 1 0 0 1 0 1
aef 1 0 0 0 1 1
bcd 0 1 1 1 0 0
bce 0 1 1 0 1 0
bcf 0 1 1 0 0 1
bde 0 1 0 1 1 0
bdf 0 1 0 1 0 1
bef 0 1 0 0 1 1
cde 0 0 1 1 1 0
cdf 0 0 1 1 0 1
cef 0 0 1 0 1 1
def 0 0 0 1 1 1
abcd 1 1 1 1 0 0
abce 1 1 1 0 1 0
abcf 1 1 1 0 0 1
abde 1 1 0 1 1 0
abdf 1 1 0 1 0 1
abef 1 1 0 0 1 1
acde 1 0 1 1 1 0
acdf 1 0 1 1 0 1
acef 1 0 1 0 1 1
adef 1 0 0 1 1 1
bcde 0 1 1 1 1 0
bcdf 0 1 1 1 0 1
bcef 0 1 1 0 1 1
bdef 0 1 0 1 1 1
cdef 0 0 1 1 1 1发布于 2014-04-30 21:40:31
首先想到的方法是:
<代码>G29
当然,这具有极高的指数复杂度,因为您将不得不回溯两次,而步骤3具有更多的可能性。
很可能有一种更有效的算法,从约束(“包含所有组件的组合的非重复组合”)开始。
https://stackoverflow.com/questions/23370280
复制相似问题