【问题标题】:Expected pair of collisions in two choice hashing两种选择散列中的预期碰撞对
【发布时间】:2014-12-04 21:58:02
【问题描述】:

在二选散列(带链接)中,选择两个随机散列函数 h1、h2 将 n 个键散列到 m 个位置。流程是这样的:

依次插入所有 n 个键,方法是为每个键 x 计算两个哈希函数,并将该键添加到由 h1(x)、h2(x) 索引的较短列表中。令 Y 为 (x, x') 对的数量,使得它们最终出现在同一个链表中。 Y(E[Y]) 的期望是什么?

假设 h1、h2 哈希键一致且独立

【问题讨论】:

  • 这个问题似乎跑题了,因为它是关于数学的。
  • 但它是关于随机算法的
  • @KarolyHorvath:并不是说你做错了事,但这是一个数学问题,是一个重要的编程问题的核心。该编程问题的低级细节是完全指定的。 (当然,对于这类事情,cs.stackexchange.com 也可以工作,可能更好。)
  • 话虽如此,我不知道如何分析。 Cuckoo hashing 有一个很好的分析,因为在 cuckoo 失败的情况和具有 m 个顶点和 n 个包含循环的边的随机图之间有一个自然的类比。可能有一个花哨的技巧,您可以在这里找到 bin 大小分布的某些参数的不变量,但我不明白它是什么。

标签: algorithm hash


【解决方案1】:

我怀疑这个问题是否有一个干净的分析解决方案。

但是对于大量桶的情况产生数值近似是非常容易处理的。设x 为存储的键数与桶数之比。设f<sub>n</sub>(x) 是带有n 键的桶的预期部分,F<sub>n</sub>(x) 是带有最多n 键的桶的预期部分。

然后琐碎地F<sub>n</sub>(x) = f<sub>0</sub>(x) + f<sub>1</sub>(x) + ... + f<sub>n</sub>(x)。而且f<sub>n</sub>'(x) 是添加一个大小为n-1 的桶的概率,减去添加一个键,大小为n 的桶的概率。

一个大小为n的桶被添加到下一个的概率是第一个哈希函数选择一个大小为n的桶,第二个哈希函数选择一个大小至少为n的桶的概率,加上概率第一个哈希函数选择一个大小大于n 的桶,第二个选择一个大小为n 的桶。选择大于n 的桶的概率就是1 - F<sub>n</sub>(x)。所以这个概率是f<sub>n</sub>(x)(1 - F<sub>n-1</sub>(x)) + (1 - F<sub>n</sub>(x))f<sub>n</sub>(x)

那就是f<sub>n</sub>'(x) = f<sub>n-1</sub>(x)(1 - F<sub>n-2</sub>(x)) + (1 - F<sub>n-1</sub>(x))f<sub>n-1</sub>(x) - f<sub>n</sub>(x)(1 - F<sub>n-1</sub>(x)) - (1 - F<sub>n</sub>(x))f<sub>n</sub>(x)。这是一个可怕的非线性方程组,没有必要期待任何好的解决方案。但它也适用于http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods,您不需要太多的术语来获得准确的估计,因为大量填充的桶的下降速度比指数下降的速度更快。 (要知道为什么,请说服自己,如果n 明显大于x,那么f<sub>n+1</sub>'(x) 大约是f<sub>n</sub><sup>2</sup>(x)。小项的重复平方意味着从f<sub>n</sub>(x) &lt; 0.01 到@ 987654345@.)

【讨论】:

    【解决方案2】:

    这取决于 m。对于 m 为 O(n^(3/2)),E[Y] = O(1)。

    【讨论】:

    • 如果你知道我很乐意知道的证明!
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 2015-01-31
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多