水库采样问题

时间:2010-04-11 10:50:51

标签: algorithm random probability

This MSDN article证明Reservoir Sampling algorithm的正确性如下:


  1. 基本案例很简单。对于k + 1st 情况,一个给定的概率 位置< = k的元素i在R中 是s / k。

  2. 替换概率i是选择概率k +第一个元素乘以被选择被替换的i,即:s /(k + 1)* 1 / s = 1 /(k + 1 ),并且我没有被替换的概率是k / k + 1.

  3. 因此,任何给定元素在k + 1轮后持续的概率为:(以k步进行选择,而不是以k步进去除)= s / k * k /(k + 1),即s /第(k + 1)。

  4. 因此,当k + 1 = n时,任何元素都以概率s / n出现。


  5. 关于第3步:

    • 提到的k+1 rounds是什么?

    • 什么是chosen in k steps, and not removed in k steps

    • 为什么我们只计算第一个R步骤后已经在s的元素的概率?

3 个答案:

答案 0 :(得分:1)

您熟悉proof by induction吗? k只是算法的中间步骤,证明了整数中的不变量,在这种情况下,k-th项的概率选择为s/k k { {1}}。

答案 1 :(得分:0)

我们正在从k个项目流中抽样(其中k非常大,因此我们按项目处理流项目。)

处理流中的每个项目称为“round”。

在一轮中,我们可能会替换新项目中已存在的元素之一。

'选择k步'意味着在项目出现在流中的轮次中,我们选择用它替换其他项(t.i。我们没有忽略它)。 “未按k步删除”意味着从那一刻开始,我们就没有选择用流中的一些新项替换此项。

答案 2 :(得分:0)

  • “k + 1轮”表示“考虑输入序列中的第(k + 1)项之后”
  • s / k是给定项目在k步之后(通过归纳)在储层中的概率,k /(k + 1)是项目不会被替换为(k + 1)的概率) - 第一步
  • 我们希望确保每个输入项目以相同的概率保留在储层中。因此,在我们的计算中,我们只对每一步中保留在储层中的物品感兴趣。