【问题标题】:Reservoir Sampling unable to understand probability储层抽样无法理解概率
【发布时间】:2015-09-09 01:56:16
【问题描述】:

为了明确以下是问题:

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

这个问题的解决方案似乎是水库采样,它在下面说明。 “首先,您要创建一个包含 1,000 个元素的容器(数组),并用流中的前 1,000 个元素填充它。这样,如果您恰好有 1,000 个元素,算法就可以工作。这是基本情况。

接下来,您要处理第 i 个元素(从 i = 1,001 开始),以便在处理该步骤结束时,您的水库中的 1,000 个元素在您目前看到的 i 个元素中随机抽样.你怎么能做到这一点?从 i = 1,001 开始。在第 1001 步之后,元素 1,001(或与此相关的任何元素)应该在 1,000 个元素的集合中的概率是多少?答案很简单:1,000/1,001。”

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

【问题讨论】:

    标签: algorithm data-structures probability probability-theory reservoir-sampling


    【解决方案1】:

    有 1,001 个元素。其中有 1,000 个在样本中。一种是在样本之外。因此,特定元素是外部元素的概率是 1001 分之 1,它是样本内千种元素之一的概率是 1000 分之 1001。

    【讨论】:

      【解决方案2】:

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

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

      eS 中的概率因此应该是:{1000 choose 999} / {1001 choose 1000} = 1000/1001(即包含e 的大小为 1000 的子集的数量除以所有大小为 1000 的子集的数量)。

      {n choose k} 我表示binomial coefficient

      【讨论】:

        猜你喜欢
        • 2018-07-11
        • 2016-05-21
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 2018-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多