我试图使用这六个组件生成代码,这些代码将采用各种组合排列(组合)一个,两个,三个或四个单元的组件(即af),并提供各种非重复组合组合(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
答案 0 :(得分:0)
首先想到的方法是:
当然,这具有极高的指数复杂性,因为你必须回溯两次,而第3步有更多的可能性。
很可能有一种更有效的算法,从约束开始(“包含所有组件的非复制组合组合”)。