【问题标题】:Elaboration on the uniform randomness of selection of a key密钥选择的均匀随机性的阐述
【发布时间】:2017-02-24 03:52:57
【问题描述】:
考虑这个问题:-
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?
【问题讨论】:
标签:
algorithm
probability
clrs
【解决方案1】:
这是rejection-sampling 的一种形式。
备注:
- 看起来您拆分了两个步骤并仅在第二步以某种方式循环(我对您的计算公式的解释)
-
每次重做所有步骤是算法最重要的方面!
- 这是拒绝抽样的基本理念:我们正在从某个周围密度进行抽样,如果所选样本不在我们的样本范围内,则需要再次抽样(这是非常非正式的;请阅读上面的链接)
为什么采用这种方法:
- 想象一下,有 2 个桶,其中 b0 有 2 个元素,b1 有 4 个 元素
-
第一步是统一选择一个桶
- 但由于 b0 的元素数量与 b1 不同,因此 第 2 步 中的实际采样需要以某种方式适应信息关于元素的数量(或者我们将使用均匀性)
- 我们没有这个完整的信息,我们只得到了所有链上的上限 L
- 含义:我们使用rejection-idea从max-range L中采样;如果索引与存储桶兼容,则接受。因此,如果所选存储桶的元素数量是最大存储桶的一半,则需要 50% 的时间将其中止(从步骤 1 重新开始)。 这就像在所有桶中插入假元素,这样元素的数量是恒定的。然后采样,检查是否选择了真元素或假元素,如果击中假元素,则再次执行此操作。
- 很容易看出:b0 50% 的时间选择了 get;等于 b1
- 当在 b0 内采样时,进程将在 50% 的时间内中止,因为 k=2, L=4(L 来自b2中元素的大小)
- 在 b1 内采样时,该过程永远不会中止 (k=L)
- 如果没有机会中止;我们将选择 b0 中的一个选定元素 2 倍 (
L / size-within-b0 = L/2) 的频率是 b1 中的一个,因为桶是统一选择的;但要采样的元素数量不同。