2014-11-24 120 views
1

我有n状态,如10, 15, 18, ...,我想在一个长度为m的数组中生成我的状态的所有可能的组合。如何生成数组中所有n个元素的组合?

例如,如果m=5n=2states={10,15}),我想产生这样的例子所有可能的组合:

comb = { 10 10 10 10 15 

     10 10 10 15 10 

     10 10 10 15 15 

     ... 

     15 15 15 15 10 } 

每行应包括10, 15一个可能的组合。如何在MATLAB中生成这个数组?

+0

根据您的建议输出,看起来您至少需要每种组合中每种可能状态中的一种(即您不希望“10 10 10 10 10”或“15 15 15 15 15” )如果是这种情况,请将该要求添加到您的问题中! – 2014-11-24 09:17:55

+0

尝试链接答案与输入'矢量= {[10 15] [10 15] [10 15] [10 15] [10 15]};'' – 2014-11-24 12:02:03

回答

0

一种方法是:

m = 4; 
n = 2; 
states = [10, 15]; 
v = mod(perms(1:(2*(m-1))),n) + 1; 
ind = unique(v(:,1:m),'rows'); 
comb = states(ind) 

comb = 

    10 10 10 15 
    10 10 15 10 
    10 10 15 15 
    10 15 10 10 
    10 15 10 15 
    10 15 15 10 
    10 15 15 15 
    15 10 10 10 
    15 10 10 15 
    15 10 15 10 
    15 10 15 15 
    15 15 10 10 
    15 15 10 15 
    15 15 15 10 

请注意,这对于中mn)高价值恐怖的性能。

0

尝试类似:

n = 5; 
states = [10,15]; 
m = numel(states); 
sz = m*ones(1,n); 
idx = {0}; 
idx = repmat(idx,1,n); 
comb = zeros(m^n,n); 
for i = 1:(m^n) 
[idx{:}] = ind2sub(sz,i); 
comb(i,:) =states([idx{:}]); 
end 

这会给你所有可能的组合,并把它们放在矩阵comb;那么你可以在之后挑选出所有不需要的组合 - 目前还不清楚你不感兴趣的组合(例如,它可能不是所有元素都是同一状态的组合,或者是每个组合至少有一个组合国家代表)。

相关问题