如何从N个元素创建所有可能分组的列表

时间:2014-02-02 18:05:59

标签: algorithm matlab

假设我有N个元素,我想创建一个元素的所有可能分组的列表,其中可以同时存在N个元素的多个组。

例如,假设我们有4个元素:a,b,c,d。设[]表示括号内的元素在分组中。我正在寻找一种算法(如果可能的话,在Matlab中),它可以创建一个列表,列出他们可以组合在一起的所有方式:

  • a b c d
  • [a b] c d
  • a [b c] d
  • a b [c d]
  • [a d] b c
  • [a c] b d
  • a c [b d]
  • [a b] [c d]
  • [b c] [a d]
  • [a c] [b d]
  • [a b c] d
  • a [b c d]
  • b [c d a]
  • c [d a b]
  • [a b c d]

1 个答案:

答案 0 :(得分:0)

此解决方案可以产生所有可能性:

%Generate potential solutions
p=dec2base(0:base2dec('123',4), 4);
%convert to numeric
p=[zeros(size(p,1),1) p-'0'];
for col=2:4
    %sort out. in column col a new group index is used, but not all previous indices are used.
    valid=max(p(:,1:col-1),[],2)+1>=p(:,col);
    p=p(valid,:);
end

输出是一个标记字符的矩阵。例如,1233在您的符号中为ab[cd]