Чтобы прояснить следующее вопрос:Reservoir Sampling не в состоянии понять вероятность
Учитывая входной поток неопределенной длины, как вы вернуть случайный член этого потока (с равной вероятностью для каждого), учитывая, что вам не разрешено хранить больше, чем постоянное количество входов, и вы можете проходить только через входы один раз
Решение этой проблемы, по-видимому, является выборкой резервуаров, и это указано ниже. «Во-первых, вы хотите создать резервуар (массив) из 1000 элементов и заполнить его с помощью первых 1000 элементов в вашем потоке. Таким образом, если у вас ровно 1000 элементов, алгоритм работает. Это базовый случай.
Далее вы хотите обработать i-й элемент (начиная с i = 1,001), так что в конце обработки этого шага 1000 элементов в вашем резервуаре будут случайным образом отобраны среди элементов i, которые вы видели до сих пор. вы можете сделать это? Начните с i = 1,001. С какой вероятностью после 1001-го шага должен быть элемент 1,001 (или любой элемент в этом отношении) в наборе из 1000 элементов? Ответ прост: 1,000/1,001. "
Я не могу понять последнее предложение «Ответ прост: 1,000/1,001». Не должна быть вероятность найти 1 элемент в массиве из 1001 элементов - 1/1001, а не 1000/1001? Разве пространство образца не равно 1001, а положительное число исходов равняется 1?