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