如何存储按顺序显示的未知大小集合的样本?

时间:2012-06-18 19:16:59

标签: algorithm math random sampling

假设我想存储N个样本(每个样本占据记忆的重要部分),这应该形成总共M> N个样本的代表性集合,这些样本按顺序呈现给我。我事先不知道M,只能同时将N个样本保存在内存中。

这里,代表性意味着M个样本中的每一个应该具有相等的存储概率。

1 个答案:

答案 0 :(得分:3)

这个问题被称为reservoir sampling,并且有一个非常有效的O(M)时间,O(N)空间算法。该算法的工作原理如下:在每个点上,保持“猜测”您要选择的N个元素。最初,选择前N个元素。然后,在看到序列的第k个元素后,选择1到k之间的随机数(包括1和k)。如果选择的数字在1..N范围内,则将索引的“猜测”项目替换为当前项目;否则什么也不做。您可以使用快速归纳论证来证明这将随机均匀地对N个元素进行采样,并对数据进行一次传递。

希望这有帮助!