我无法理解储层采样所涉及的概率。下面是我在几乎所有地方都看到过的示例代码:
1/*
2 S has items to sample, R will contain the result, K number of items to select
3*/
4ReservoirSample(S[1..n], R[1..k])
5 // fill the reservoir array
6 for i = 1 to k
7 R[i] := S[i]
8
9 // replace elements with gradually decreasing probability
10 for i = k+1 to n
11 j := random(1, i) // important: inclusive range
12 if j <= k
13 R[j] := S[i]
我的理解正确吗(?):假设我们有 k=3 并且 input = [100, 200, 300, 400, 500] 并且 i 目前处于 500 索引。500 替换 300 在水库中的概率(大小为 3)= 在水库中选择 300 的概率 * 选择 500 的概率只有当随机函数返回的索引小于或等于 3 时才有可能5 个选择 = 1/3 * 3/5 = 1/5