【问题标题】:Computing percentiles计算百分位数
【发布时间】:2013-06-20 01:04:45
【问题描述】:

我正在编写一个将生成大量数据的程序。我想找到该数据的各种百分位数。

这样做的明显方法是将数据存储在某种排序的容器中。是否有任何 Haskell 库提供自动排序的容器并提供对任意索引的快速随机访问?

另一种方法是使用无序容器并在最后执行排序。我不知道这是否会更快。无论哪种方式,我们仍然需要一个提供快速随机访问的容器。 (一个数组,也许……)

建议?

(另一种选择是构建直方图,而不是将整个数据集保存在内存中。但由于目标是非常准确地计算百分位数,我不愿意走这条路。我也不知道我的数据范围,直到我生成它...)

【问题讨论】:

  • stackoverflow.com/questions/1248815/… 中描述的流式算法是否满足您的需求?
  • @JeffFoster 这似乎与我正在尝试做的事情有关。我不确定这种方法是否可行,但值得研究。

标签: algorithm haskell containers


【解决方案1】:

是否有任何 Haskell 库提供自动排序的容器并提供对任意索引的快速随机访问?

是的,这是你的好老 Data.Map。请参阅 elemAt 和 «Indexed» 类别下的其他函数。

Data.Set 不提供这些,但您可以使用 Data.Map YourType () 进行模拟。

【讨论】:

  • @MathematicalOrchid:扩充搜索树以支持select 操作很简单。只需将子树大小存储在每个节点中即可 :) 所以难怪这是在 Map 中实现的
猜你喜欢
  • 2011-12-29
  • 2016-07-28
  • 2017-08-29
  • 2012-10-28
  • 2021-02-26
  • 2013-08-31
  • 2019-02-16
  • 2011-04-27
  • 1970-01-01
相关资源
最近更新 更多