首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成组合的组合

生成组合的组合
EN

Stack Overflow用户
提问于 2014-04-30 00:30:03
回答 1查看 227关注 0票数 0

我正在尝试生成代码,它将使用这六个组件获取各种组合排列(组合)的组件(即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的工作知识,并将开始使用,但任何提示或建议都是非常受欢迎的。

代码语言:javascript
复制
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

我发现了很多可以生成组合排列而不是组合组合的代码。我已经包含了组合组件的二进制矩阵,但是我不知道从哪里开始,或者这个矩阵是一个错误的开始(尽管这是一个有用的可视化辅助工具)。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-04-30 21:40:31

首先想到的方法是:

  1. 使用给定的组件生成所有组合(您已经这样做了:)
  2. 将结果组合视为一组新的组件(因此,如果您的集合将包含a,ab,abc,...,而不是a,b,...,f)
  3. 从第二组组合中生成所有组合
  4. 从新的组合集中仅保留那些适用于您的条件的组合(从您的示例中不太清楚约束是什么)

<代码>G29

当然,这具有极高的指数复杂度,因为您将不得不回溯两次,而步骤3具有更多的可能性。

很可能有一种更有效的算法,从约束(“包含所有组件的组合的非重复组合”)开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23370280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档