У меня есть вектор с парой элементов, и я хочу написать функцию, которая возвращает мне все комбинации x
элементов из этого вектора.
Следующий код производит правильный вывод для случая x=2
или x=3
или x=4
. Тем не менее, я не могу реализовать решение для всех возможных x
, следуя этой идее.
values = {'A','B','C','D','E'};
n = length(values);
data2 = {}; % case x=2
for i = 1:n
for j = i+1:n
data2{end+1} = {values{i}, values{j}};
fprintf('%s %s\n',values{i}, values{j})
end
end
data3 = {}; % case x=3
for i = 1:n
for j = i+1:n
for k = j+1:n
data3{end+1} = {values{i}, values{j}, values{k}};
fprintf('%s %s %s\n',values{i}, values{j}, values{k})
end
end
end
data4 = {}; % case x=4
for i = 1:n
for j = i+1:n
for k = j+1:n
for l = k+1:n
data4{end+1} = {values{i}, values{j}, values{k}, values{l}};
fprintf('%s %s %s %s\n',values{i}, values{j}, values{k}, values{l})
end
end
end
end
Как будет выглядеть функция, которая сможет вернуть мою data
переменную?
data = getCombinations(values, x) %values is vector with elements, x is integer value
РЕДАКТИРОВАТЬ Следующий код довольно близок:
data = perms(values)
data = data(:,1:x)
data = unique(data,'rows')
, но он все еще производит вывод как A,B
и B,A
EDIT2 Это исправило это как-то, но это не очень приятно смотреть, и этоне работает для ввода текста в ячейках, а только для чисел
data = perms(values)
data = data(:,1:x)
data = sort(data,2)
data = unique(data,'rows')
EDIT3 Это было сделано, но на это не очень приятно смотреть ... Может быть, есть лучшее решение?
function [data] = getCombinations(values,x)
i = 1:length(values);
d = perms(i);
d = d(:,1:x);
d = sort(d,2);
d = unique(d,'rows');
data = v(d);
end