Algorithm 水库取样无法理解概率

Algorithm 水库取样无法理解概率,algorithm,data-structures,probability,probability-theory,reservoir-sampling,Algorithm,Data Structures,Probability,Probability Theory,Reservoir Sampling,要澄清以下问题: 给定长度不确定的输入流,如果不允许存储超过常量的输入,并且只能遍历一次输入,如何返回该流的随机成员(每个成员的概率相等) 这个问题的解决方案似乎是水库取样,如下所述。 “首先,您希望创建一个包含1000个元素的库(数组),并用流中的前1000个元素填充它。这样,如果您正好有1000个元素,则算法可以工作。这是基本情况 接下来,您要处理第i个元素(从i=1001开始),以便在处理该步骤结束时,从您迄今为止看到的i个元素中随机抽取储存器中的1000个元素。您如何做到这一点?从i=1

要澄清以下问题:

给定长度不确定的输入流,如果不允许存储超过常量的输入,并且只能遍历一次输入,如何返回该流的随机成员(每个成员的概率相等)

这个问题的解决方案似乎是水库取样,如下所述。 “首先,您希望创建一个包含1000个元素的库(数组),并用流中的前1000个元素填充它。这样,如果您正好有1000个元素,则算法可以工作。这是基本情况

接下来,您要处理第i个元素(从i=1001开始),以便在处理该步骤结束时,从您迄今为止看到的i个元素中随机抽取储存器中的1000个元素。您如何做到这一点?从i=1001开始。在第1001个步骤之后,元素1001应该以何种概率出现(或任何元素)是否在1000个元素的集合中?答案很简单:1000/1001。”


我无法理解最后一句话“答案很简单:1000/1001”.在1001个元素的数组中找到1个元素的概率不应该是1/1001而不是1000/1001吗?样本空间不是等于1001,结果的有利数量不是等于1吗?

有1001个元素。其中1000个在样本中。一个在样本之外。因此,某个特定元素的概率是s outside是1001个元素中的1个,而它是样本中1000个元素之一的概率是1001个元素中的1000个。

我发现以下参数更清晰。让
s
成为第一个
1000个
元素的集合;让
e
表示流中的最后一个元素(例如,第1001个)。有
{1001 choose 1000}=1001
一组1001个元素的可能大小为1000个子集,您希望所有这些元素都具有相同的存储在数据结构中的概率(每次新元素到达时,该不变量都应保持不变)

1001个元素中包含
e
的1000个大小的子集的数量是多少?好吧,既然
e
是固定的,我们就有
1000个
元素可供选择,我们将选择999个元素,因此就有
{1000个选择999}=1000
这样的子集

因此,
e
位于
S
的概率应为:
{1000选择999}/{1001选择1000}=1000/1001
(即包含
e
的size-1000子集的数量除以所有size-1000子集的数量)

通过
{n选择k}
我表示