我需要找到所有可能的子集选项的函数,例如:
a=[1 3 4 7 8];b = nchoosek(a,3);b =
1 3 4
1 3 7
1 3 8
1 4 7
1 4 8
1 7 8
3 4 7
3 4 8
3 7 8
4 7 8
我需要所有可能的子集,例如: 4 3 1,7 3 1,...
答案 0 :(得分:3)
如果输出的顺序很重要,您需要使用perms
。每个排列都将是结果中的新行。然后,您可以抓住第一个k
列并找到唯一的行。
a = [1 3 4];
k = 2;
%// Generate all permutations of the index values corresponding to the input
%// We use the index rather than the values of a to ensure that they are unique
P = perms(1:numel(a));
%// Select the first k columns and find the unique rows
P = unique(P(:,1:k), 'rows');
%// Now grab these elements from a
b = a(P);
%// 1 3
%// 1 4
%// 3 1
%// 3 4
%// 4 1
%// 4 3