蓄水池算法
蓄水池算法是一种大数据随机抽样算法,对于海量流式数据,在未知数据规模(N)的情况下.对数据样本进行随机选取k个样本,来达到均匀抽样的目的:对于每个样本被选择的概率都是 P x i 被 选 择 = k n P_{x_i被选择}=\frac{k}{n} Pxi被选择=nk.
算法
int a[k]={x1,x2,....,xk} //用数据流中的前k个数来初始化一个容量为k的数组
for i = k to N:
m=random(0,i) //在[0,i] 之间随机
if m < k:
exchange a[m] and a[i]
证明
对于第i个数(i>k)来说,它被选择的概率是 k i + 1 \frac{k}{i+1}