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
謝謝!
我需要獲取列表的組合和排列。
函數已經實現了排列。
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
謝謝!
一種選擇是使用你的置換函數是這樣的:
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)
重複)。
從您的解決方案,你可以這樣做:
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]}
你好,李先生。有用! – seizetheday 2015-04-02 08:36:34