这是StackOverflow question的一个衍生物。
假设您有一个固定数量 k 的存储位置,以及两个计数器的空间。您将以随机顺序接收 n 项目( n 项目的所有排列都具有相同的可能性)。收到每个项目后,您可以将其存储在其中一个 k 位置(丢弃之前存储的值之一),或丢弃该项目。您也可以递增或递减任一计数器。无法检索任何丢弃的项目。
问题是
显然,如果 k> n / 2 ,我们可以找到中位数。一般来说,尝试保持丢弃的高值的数量等于丢弃的低值的数量的相同策略应该是最佳的,但我不确定如何证明它,也不知道如何找出它找到的概率中位数。
同样令人感兴趣的是我们不知道 n 但知道 n 的概率分布的情况。
编辑:现在假设这些值是不同的(没有重复。)但是,如果您也可以解决非独特的情况,那么这将是令人印象深刻的。
答案 0 :(得分:5)
Munro和Paterson在他们的论文Selection and sorting with limited storage中研究了这个问题。他们表明你的算法要求k =Ω(√n)以恒定概率成功,并且通过吸引关于一维随机游走的基本结果,这是渐近最优的。
如果我想证明绝对最优性,我首先要考虑的是考虑一个任意算法A,然后将它的执行与算法A'结合,这是第一次A偏离你的算法,你的算法会做什么,然后尝试尽可能地跟随A。
答案 1 :(得分:0)
一个疯狂的猜测:丢弃距当前存储值的 mean 最远的元素。
如果值的分布是多模态的,并且我们首先从非主导模式获得值,则与当前中位数的比较不起作用。