2013-10-18 81 views
1

我想創建一個包含所有可能組合的表,其中很重要,用k組的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

您之前沒有找到解決方案的原因是您正在尋找組合。事實上,如果順序很重要,它被稱爲排列。 –

回答

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

+0

完美的作品! –