我想创建一个包含所有可能组合的表, 重要,使用matlab在k组中的N个数字。
我尝试了Combinations = combntns(set,subset)
和Combinations = perms(v)
以及Combinations = combnk(v,k)
,但这些顺序并不重要。
一个例子:
nchoosek(1:5,3)
ans =
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
虽然它也应该包括
1 3 2
1 4 2
1 5 2
1 3 5
1 5 3
...
可能的组合数由以下函数给出:
N!/(N-K)!
有没有办法用matlab函数做到这一点?
答案 0 :(得分:3)
尝试这种内存有效的解决方案:
n = 5; k = 3;
nk = nchoosek(1:n,k);
p=zeros(0,k);
for i=1:size(nk,1),
pi = perms(nk(i,:));
p = unique([p; pi],'rows');
end
p
应包含您所描述的内容。此示例至少为size(p,1) == factorial(n)/factorial(n-k)
或60
。