gpt4 book ai didi

f# - 计算整数列表的众数?

转载 作者:行者123 更新时间:2023-12-05 00:12:42 26 4
gpt4 key购买 nike

是否有内置函数来计算 F# 中整数列表的众数?

如果我有一个整数列表,如下所示:

let integers = [1; 2; 3; 4; 5; 3]

我希望结果是 3 .

最佳答案

不,没有这样的内置功能。这是一个简单的实现:

let mode = function
| [] -> None
| xs ->
let mostFrequentTwo =
xs
|> Seq.groupBy id
|> Seq.map (fun (n, ns) -> n, Seq.length ns)
|> Seq.sortByDescending snd
|> Seq.truncate 2
|> Seq.toList

match mostFrequentTwo with
| [(x, xSize); (_, ySize)] when xSize > ySize -> Some x
| [(x, _)] -> Some x
| _ -> None

首先,它对列表中的数字进行分组,然后获取每个组的大小,然后按大小降序对组进行排序,然后选择前两个。如果有两组,且第一组较大,则为众数;如果只有一组,则是模式;否则没有模式。

我称这种实现为“幼稚”,因为它做了一些严格来说不必要的事情:更好的方法是首先对数字进行排序,然后仔细检查它们以查看前两组,并比较它们的大小。然而,这样写起来会更复杂,更难理解,但上述解决方案的计算复杂度仍然是 n * log n (甚至是线性的,取决于分组和排序实现),因此在查看性能数据之前似乎没有必要进行优化。

关于f# - 计算整数列表的众数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50262235/

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