2

我想创建一个表,其中包含所有可能的组合,顺序重要,使用 matlab 的 k 组中的 N 个数字。

我试过了,Combinations = combntns(set,subset)但是按照这些顺序并不重要。Combinations = perms(v)Combinations = combnk(v,k)

一个例子:

nchoosek(1:5,3)

答案=

 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!/(Nk)!

资料来源:Mathisfun.com

有没有可能使用matlab函数来做到这一点?

4

1 回答 1

4

试试这个内存高效的解决方案:

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对于这个例子。

于 2013-10-18T02:31:01.850 回答