wolffd@0: function sub_s=subsets1(s,k) wolffd@0: % SUBSETS1 creates sub-sets of a specific size from a given set wolffd@0: % SS = subsets1(S, k) wolffd@0: % wolffd@0: % S is the given set wolffd@0: % k is the required sub-sets size wolffd@0: % wolffd@0: % Example: wolffd@0: % wolffd@0: % >> ss=subsets1([1:4],3); wolffd@0: % >> ss{:} wolffd@0: % ans = wolffd@0: % 1 2 3 wolffd@0: % ans = wolffd@0: % 1 2 4 wolffd@0: % ans = wolffd@0: % 1 3 4 wolffd@0: % ans = wolffd@0: % 2 3 4 wolffd@0: % wolffd@0: % Written by Raanan Yehezkel, 2004 wolffd@0: wolffd@0: if k<0 % special case wolffd@0: error('subset size must be positive'); wolffd@0: elseif k==0 % special case wolffd@0: sub_s={[]}; wolffd@0: else wolffd@0: l=length(s); wolffd@0: ss={}; wolffd@0: if l>=k wolffd@0: if k==1 % Exit condition wolffd@0: for I=1:l wolffd@0: ss{I}=s(I); wolffd@0: end wolffd@0: else wolffd@0: for I=1:l wolffd@0: ss1=subsets1(s([(I+1):l]),k-1); wolffd@0: for J=1:length(ss1) wolffd@0: ss{end+1}=[s(I),ss1{J}]; wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: sub_s=ss; wolffd@0: end