我的问题与此链接https://en.m.wikipedia.org/wiki/Reservoir_sampling
的“算法R”部分中的示例代码有关我从该部分复制了下面的代码段。为什么这段代码会以逐渐降低的概率替换元素?根据问题,输入中的每个项目应该具有相同的概率,对吗?
for i = k+1 to n
j := random(1, i)
if j <= k
R[j] := S[i]
例如,将以下三个输入的随机函数调用与我的储存库大小10进行比较
因此,随着输入增长,替换项目的机会非常少,那么我们怎么能说水库采样算法是在每个项目上选择概率相等的随机样本的解决方案?我可能会遗漏一些事情请解释。
答案 0 :(得分:2)
在算法之后的段落中对此进行了解释,但关键的观察结果如下: R中的候选样本可以被多次覆盖,但是你只能看到最后一次写入的结果强>
因此当i
较小时,您更有可能用新的样本替换样本,但出于同样的原因,当您到达结束时,新样本仍然存在的可能性相同循环很小。
如果i
接近n
,则值R
的值很小,但如果它到达那里,它可能不会被覆盖后面。
如果你把所有概率都加起来,那么每个元素都会k/n
。