蓄水池采样问题
问题描述
要求从N个元素中随机的抽取k个元素,其中N无法确定。例如:
- 从 100000 份调查报告中抽取 1000 份进行统计。
- 从一本很厚的电话簿中抽取 1000 人进行姓氏统计。
- 从 Google 搜索 "Ken Thompson",从中抽取 100 个结果查看哪些是今年的。
这种应用的场景一般是数据流的情况下,由于数据只能被读取一次,而且数据量很大,并不能全部保存,因此数据量N是无法在抽样开始时确定的;但又要保持随机性,于是有了这个问题。
算法思想
算法证明
所以对于其中每个元素,被保留的概率都为k/n.蓄水池算法适用于对一个不清楚规模的数据集进行采样。