我有 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中做这个,但是一个普通的算法也可以
我有 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中做这个,但是一个普通的算法也可以
一个简单的解决方案是模拟 sum !
从索引列表 0 0 0 开始,对应于您的值的索引。在您的示例中,这将导致您获得值 6 4 1。然后加 1。你现在有索引 001,所以 642 等等。
在 004,你溢出,所以你的索引变成 010,有 6 5 1
继续这样做,并保留访问过的可能性的计数器。有 1 * 2 * 4 种可能性,所以很容易知道何时完成。
我认为您正在寻找集合的笛卡尔积:
这应该有助于:
cartprod(N1,N2,N3, ...)
http://www.mathworks.com/matlabcentral/fileexchange/5475-cartprod-cartesian-product-of-multiple-sets
这里还有一个
set = {n1, n2, n3, ...}
allcomb(set{:})