【发布时间】:2013-05-03 07:21:51
【问题描述】:
我有传入的数据,我想计算该数据的平均值、第 95 个和第 99 个百分位数 - 我对最后 1000 个值最感兴趣。在任何时候,我都想查询这个对象以获取三个值中的任何一个(这可以在任何时候发生,而不仅仅是当看到 mod 1000 的数字为 0 时)。有没有办法在不保留最后 1000 个样本的情况下获得这三个值?
这不一定是完美的,因此我们可以使用一些技巧来获得良好的估计。此外,速度是另一个问题。谢谢
(我将在 C++ 中执行此操作,但我认为这并不重要)
【问题讨论】:
-
我认为您可以保存一个包含 1000 个条目的数组,而不会带来太多麻烦或内存损失。问题是数据的排序(我认为,如果你想获得百分位数,你需要对其进行排序)
-
是的,排序是最麻烦的部分
-
如果您不将数据保存在数组中,我认为没有办法计算任何百分位数,因此,算法(我认为应该如此)是: 1. 存储数据; 2.对数据进行排序(用你喜欢的方法); 3.获取所需位置的值(
array[n]wheren = round(array.length * p)and0<=p<=1)。
标签: algorithm average precision moving-average