У меня проблемы с пониманием вероятностей, связанных с отбором проб из коллектора. Ниже приведен пример кода, который я видел почти везде:
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