关于密钥选择的统一随机性的详细说明

时间:2016-10-14 16:22:55

标签: algorithm probability clrs

考虑这个问题: - Efficiently picking a random element from a chained hash table?

并考虑它的第一个答案。它建议了一种以均匀随机方式选择密钥的方法。但是,我不清楚这一点。第一步将采用概率1/m(即从m桶中随机选择一个桶) 第二步可分为两个步骤:
1)如果k<=p,则返回p 2)如果k>p,则循环再次运行 这样做直到返回p为止 因此,选择密钥的概率是:
(1/m)[(k1/L)+((L-k1)/L)[(1/m)[(k2/L)+((L-k2)/L)[(1/m)[(k3/L)+((L-k3)/L)[......and so on.
现在,它如何等于1/n

1 个答案:

答案 0 :(得分:0)

这是rejection-sampling的一种形式。

注:

  • 看起来你分裂了两个步骤并且仅在第二步上以某种方式循环(我对你的计算公式的解释)
  • 每次
  • 重做所有步骤是算法最重要的方面!
    • 它是拒绝采样的基本思想:如果所选样本不在我们的样本范围范围内,那么我们将从一些周围密度中采样并需要再次采样(这就是&#39; s非常非正式;阅读以上链接)

为什么采用这种方法:

  • 想象一下, 2个桶,其中 b0 2 元素, b1 4 元素
  • 第1步正在选择一个统一的存储桶
    • 但由于 b0 的元素数量与 b1 不同,第2步中的实际抽样需要以某种方式适应信息关于元素的数量(或我们将使用均匀性)
    • 我们没有完整的信息,我们只在所有链上获得上限L
    • 含义:我们使用 rejection-idea max-range L 中抽样;和接受索引是否与存储桶兼容。因此,如果所选桶的元素数量是最大元素的一半,则需要在50%的时间内中止(步骤1重启)。 就像将假元素插入所有存储桶一样,以便元素的数量不变。然后进行抽样,检查是否选择了真实或假冒元素,如果发现假冒元素,则再次执行此操作
    • 很容易看出: b0 50%的时间被选中;等于 b1
    • b0 内进行采样时,该过程将获得中止 50%的时间,因为 k = 2,L = 4 (L来自 b2
    • 中元素的大小
    • b1 内进行采样时,该过程永远不会中止( k = L
    • 如果没有中止的机会;我们会选择 b0 中的一个选定元素L / size-within-b0 = L/2)作为 b1 中的一个,因为存储桶是统一的选择;但是要采样的元素数量不同。