这篇 MSDN 文章证明了Reservoir Sampling 算法的正确性如下:
基本情况是微不足道的。对于第 k+1 种情况,位置 <= k 的给定元素 i 在 R 中的概率为 s/k。
i 被替换的概率是第 k+1 个元素被选择的概率乘以 i 被选择被替换,即:s/(k+1) * 1/s = 1/(k+1),并且概率 i没有被替换的是 k/k+1。
所以任何给定元素在 k+1 轮后持续的概率是:(在 k 步中选择,而不是在 k 步中删除)= s/k * k/(k+1),即 s/(k+1)。
因此,当 k+1 = n 时,任何元素都以概率 s/n 出现。
关于第 3 步:
k+1 rounds
提到了什么?是什么
chosen in k steps, and not removed in k steps
?为什么我们只计算第一步
R
之后已经存在的元素的这个概率s
?