Kdb 如何实现列表的组合

Kdb 如何实现列表的组合,kdb,Kdb,全部 我需要得到列表的组合和排列 已为置换实现了一个函数 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[

全部

我需要得到列表的组合和排列

已为置换实现了一个函数

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]

谢谢

一种选择是像这样使用置换函数:

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
另一种方法是在上使用

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]}

你好,李,谢谢你的简明代码。如果你能解释一下你使用过的函数,那就太好了。