如何从n个不同的集合中生成所有可能的值组合?

时间:2012-05-18 07:56:12

标签: combinatorics

我有n套,每套都有n1,n2,n3 ...... nN个不同的成员。 如何从它们生成n1 * n2 * n3 ... * nN个可能的组合

e.g

[6] [4 5] [1 2 3 4]
will give
6 4 1 
6 4 2
6 4 3 
6 4 4
6 5 1 
6 5 2
6 5 3
6 5 4

我想在matlab中执行此操作,但正常的算法也可以正常

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案是模拟总和!

从索引列表0 0 0开始,对应于值的索引。这会导致您的示例中的值为6 4 1。 然后加1。 你现在有索引001,所以642 等等。

<00>在004,你溢出,所以你的指数变成010,有6 5 1

继续这样做,并保持对访问的可能性的反击。有1 * 2 * 4种可能性,因此很容易知道你何时完成。

答案 1 :(得分:1)

我认为你正在寻找笛卡尔的集合产品:

这应该有所帮助:

cartprod(N1,N2,N3, ...) 

http://www.mathworks.com/matlabcentral/fileexchange/5475-cartprod-cartesian-product-of-multiple-sets

还有一个here

set = {n1, n2, n3, ...}
allcomb(set{:})