高效枚举可变大小的子集

时间:2017-09-06 21:02:12

标签: matlab performance combinations enumeration combinatorics

有两个变量:ij

i从1运行到固定常量N. j从1运行到M(i),这意味着我们有一个数组

M=zeros(N,1);
M=[3,2,5,4];

同样S是一组10个整数。对应于每个i,我必须找到从S到给定最大限制M(i)选择数字的所有可能方法。

我的代码:

desired_enumerations={};
for i=1:N
   for j=1:M(i)
      a = combnk(S,j);
      for k=1:size(a,1)
          desired_enumerations{end+1,1}=a(k,:);
      end
   end
end

我的问题:

我想在double for循环之外预先计算S最多max(M)个元素的所有子集,然后在for循环中使用该数据,这样我就不必枚举了双循环内的子集,避免重复计算。

有效的方法是什么?

修改

如果有人也可以用big-O表示法给出代码的时间复杂性,那么也是一个奖励。或者我可以打开一个新问题。

0 个答案:

没有答案