可能的组合 - 订单很重要

时间:2013-10-18 02:26:28

标签: matlab

我想创建一个包含所有可能组合的表, 重要,使用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)!

source: Mathisfun.com

有没有办法用matlab函数做到这一点?

1 个答案:

答案 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