【问题标题】:Calculate original set size after hash collisions have occurred发生哈希冲突后计算原始集合大小
【发布时间】:2014-02-24 19:33:51
【问题描述】:

你有一个空的冰块托盘,里面有 n 个小冰块桶,形成了一个易于可视化的自然散列空间。

你的朋友有 k 个硬币,他喜欢把它们放在冰块托盘里。他反复使用随机数生成器来选择将每一分钱放在哪个桶中。如果随机数确定的桶已经被一分钱占据了,他就把这分钱扔掉,再也看不到了。

假设您的冰块托盘有 100 个桶(即可以制作 100 个冰块)。如果您注意到您的托盘中有 c=80 便士,那么您的朋友开始时最可能的便士 (k) 数是多少?

如果 c 很低,则冲突的几率足够低,以至于 k 的最可能数量 == c。例如。如果 c = 3,那么 k 最可能是 3。但是,碰撞的可能性越来越大,在说 k=14 之后,那么可能性应该是1 次碰撞,所以如果 c = 14,k = 15 的可能性最大。

当然,如果 n == c 那么就没有办法知道了,所以让我们把它放在一边,假设 c n.

给定nc估计k的一般公式是什么(给定c n )?

【问题讨论】:

    标签: math hash probability hash-collision birthday-paradox


    【解决方案1】:

    目前的问题是不适定的。

    设 n 为托盘数。
    让 X 成为您朋友开始时的便士数量的随机变量。
    设 Y 为填充托盘数量的随机变量。

    您要的是分布模式 P(X|Y=c)。
    (或者可能期望 E[X|Y=c] 取决于您如何解释您的问题。)

    让我们举一个非常简单的例子:分布 P(X|Y=1)。那么

    P(X=k|Y=1) = (P(Y=1|X=k) * P(X=k)) / P(Y=1)
    = (1/nk-1 * P(X=k)) / P(Y=1)

    由于 P(Y=1) 是归一化常数,我们可以说 P(X=k|Y=1) 与 1/n 成正比k-1 * P(X=k) .

    但是 P(X=k) 是一个先验概率分布。您必须假设您朋友必须开始使用的硬币数量的一些概率分布。

    例如,我可以选择以下两个先验:

    1. 我之前的信念是 P(X=k) = 1/2k 对于 k > 0。
    2. 我之前的信念是 P(X=k) = 1/2k - 100 for k > 100。

    两者都是有效的先验;第二个假设 X > 100。两者都会对 X 给出截然不同的估计:先验 1 会估计 X 大约为 1 或 2;之前的 2 会估计 X 为 100。

    我建议如果您继续追查这个问题,您只需继续选择一个先前的问题。像这样的东西会很好用:WolframAlpha。这是一个支持 k > 0 且均值为 10^4 的几何分布。

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 2014-04-10
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 2011-01-21
      • 2020-07-03
      • 2015-07-31
      • 1970-01-01
      相关资源
      最近更新 更多