gpt4 book ai didi

f# - 从 F# 中的集合中获取随机子集

转载 作者:行者123 更新时间:2023-12-04 23:33:58 24 4
gpt4 key购买 nike

我试图想出一种从 F# 中的集合中获取随机子集的优雅方法

对此有何想法?

也许这会起作用:假设我们有一组 2x 元素,我们需要选择 y 元素的子集。然后,如果我们可以生成一个 x 大小的位随机数,它恰好包含 y 2n 次幂,我们实际上就有了一个带有 y 个孔的随机掩码。我们可以继续生成新的随机数,直到我们得到第一个满足这个约束的随机数,但有没有更好的方法?

最佳答案

如果你不想转换为数组,你可以做这样的事情。这是 O(n*m),其中 m 是集合的大小。

open System

let rnd = Random(0);
let set = Array.init 10 (fun i -> i) |> Set.of_array

let randomSubSet n set =
seq {
let i = set |> Set.to_seq |> Seq.nth (rnd.Next(set.Count))
yield i
yield! set |> Set.remove i
}
|> Seq.take n
|> Set.of_seq

let result = set |> randomSubSet 3

for x in result do
printfn "%A" x

关于f# - 从 F# 中的集合中获取随机子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com