【问题标题】:Computing percentiles using a fixed amount of memory使用固定内存量计算百分位数
【发布时间】:2013-11-05 06:24:15
【问题描述】:

我有一个以特定速率到达的 int 值流。每 5 分钟,我想根据这些值计算一些百分位数,然后重新开始。

问题:我不想浪费太多内存,所以我只想保留几个 KB 的值。如果我的缓冲区在 5 分钟内没有填满,我可以完美地计算百分位数。但是,如果缓冲区确实填满,我想开始删除一些值(可能使用reservoir sampling 和此处建议的随机驱逐 - Percentiles of Live Data Capture)。不幸的是,我找不到在这两种情况下都适用的解决方案 - 如果缓冲区未满,我不想驱逐或忽略值,一旦它满了并开始驱逐,我总是会引入偏见。

【问题讨论】:

  • 缓冲区的大小是多少?
  • 大小可配置。现在我有 10,000 个整数 = 40KB。我可以使它更大,但由于我无法知道将到达多少值 - 这可能会随着时间的推移而发生很大变化 - 我选择的每种尺寸都可能不够。简单地扔 10MB 就太浪费了。

标签: algorithm resampling percentile streaming-algorithm


【解决方案1】:

好的,我想我想通了——我可以使用Algorithm R 来统一选择传入元素的固定大小的子集。然后我可以从这个子集中计算百分位数。

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2015-02-25
    • 2011-12-29
    • 2013-06-20
    • 1970-01-01
    • 2016-08-25
    • 2016-07-28
    • 2017-08-29
    • 2012-10-28
    相关资源
    最近更新 更多