This MSDN article证明Reservoir Sampling algorithm的正确性如下:
基本案例很简单。对于k + 1st 情况,一个给定的概率 位置< = k的元素i在R中 是s / k。
替换概率i是选择概率k +第一个元素乘以被选择被替换的i,即:s /(k + 1)* 1 / s = 1 /(k + 1 ),并且我没有被替换的概率是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
的元素的概率?
答案 0 :(得分:1)
您熟悉proof by induction吗? k
只是算法的中间步骤,证明了整数中的不变量,在这种情况下,k-th
项的概率选择为s/k
k
{ {1}}。
答案 1 :(得分:0)
我们正在从k个项目流中抽样(其中k非常大,因此我们按项目处理流项目。)
处理流中的每个项目称为“round”。
在一轮中,我们可能会替换新项目中已存在的元素之一。
'选择k步'意味着在项目出现在流中的轮次中,我们选择用它替换其他项(t.i。我们没有忽略它)。 “未按k步删除”意味着从那一刻开始,我们就没有选择用流中的一些新项替换此项。
答案 2 :(得分:0)