2015-04-01 54 views
0

全部如何實現列表的組合

我需要獲取列表的組合和排列。

函數已經實現了排列。

perm:{[N;l]$[N=1;l;raze .z.s[N-1;l]{x,/:y except x}\:l]} 

但是,我不知道組合的想法,就像這樣:

l: 1 2 3 
comb[2;l] 
1 2 
1 3 
2 3 

l: 1 2 3 4 
comb[3;l] 
1 2 3 
1 2 4 
1 3 4 
2 3 4 

謝謝!

回答

0

一種選擇是使用你的置換函數是這樣的:

q) comb:{[N;l] distinct asc each perm[N;l] } 

q)l: 1 2 3 4 
q) comb[3;l] 

輸出:

1 2 3 

1 2 4 

1 3 4 

2 3 4 

注:這將改變,因爲asc元素的順序。所以如果你的清單應該有(1 3 2)的回答,它會給(1 2 3)

要維護訂單,請使用任何其他函數/邏輯代替asc來過濾集合中的重複元素(例如:(1 2 3)(1 3 2)重複)。

0

從您的解決方案,你可以這樣做:

q)comb:{[N;l]$[N=1;l;raze .z.s[N-1;l]{x,/:y where y>max x}\:l]} 
q)comb[2;1 2 3] 
1 2 
1 3 
2 3 

另一種方法使用over

q)perm:{{raze x{x,/:y except x}\:y}[;y]/[x-1;y]} 
q)comb:{{raze x{x,/:y where y>max x}\:y}[;y]/[x-1;y]} 
+0

你好,李先生。有用! – seizetheday 2015-04-02 08:36:34