【发布时间】:2011-03-23 06:27:18
【问题描述】:
我有一个产生价值的过程,并且我观察到了这一过程。当进程终止时,我想计算这些值的中位数。
如果我必须计算平均值,我可以只存储总和和生成值的数量,因此需要 O(1) 内存。中位数呢?有没有办法节省存储所有值带来的明显 O(n)?
编辑:对 2 种情况感兴趣:1)流长度已知,2)不知道。
【问题讨论】:
-
非常有趣的问题。如果您只需要知道某个精度的中位数,并且您希望概率分布不会随着采样时间而改变,那么您可以尽早估计中位数的“99% 置信区间”,并且只存储其中的数字该间隔(并跟踪您丢弃的间隔之外的间隔)。当 N 非常大时,这将更有效 - 但它确实取决于您所需的结果精度。