我有一个函数,可以使从列表的N个元素中选择的K个不同的对象组合在一起,问题不在于重复,例如:
提取2 [“ a”;“ b”;“ c”;“ d”] ;; -:字符串列表列表= [[“一种”; “ b”]; [“一种”; “C”]; [“一种”; “ d”]; [“ b”; “C”]; [“ b”; “ d”]; [“C”; “ d”]]
这是我的代码:
# let rec extract k list =
if k <= 0 then [ [] ]
else match list with
| [] -> []
| h :: tl ->
let with_h = List.map (fun l -> h :: l) (extract (k-1) tl) in
let without_h = extract k tl in
with_h @ without_h;;
感谢您的答复,我正在尝试找出解决方法。
答案 0 :(得分:1)
我有一个功能,可以组合K个不同的对象
确实。
问题不在于重复,
这并不比组合难得多。归纳步骤有两种方法。如果要置换(非空)集合A
的{{1}}个元素,可以:
方法1
对于x
中的每个元素A
,计算k-1
的{{1}}个元素的排列,并将A\{x}
放在所有这些排列的前面。然后加入您为每个x
获得的解决方案集。
方法2
在x
中选择一个x
,计算A
的{{1}}个元素的排列,然后对于找到的每个排列,通过在其中插入k-1
来计算新的排列每个可能的位置。