0

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

例如

[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中做这个,但是一个普通的算法也可以

4

2 回答 2

2

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

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

在 004,你溢出,所以你的索引变成 010,有 6 5 1

继续这样做,并保留访问过的可能性的计数器。有 1 * 2 * 4 种可能性,所以很容易知道何时完成。

于 2012-05-18T08:02:32.267 回答
1

我认为您正在寻找集合的笛卡尔积:

这应该有助于:

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

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

这里还有一个

set = {n1, n2, n3, ...}
allcomb(set{:})
于 2012-05-18T07:59:55.007 回答