【发布时间】:2012-05-14 05:38:04
【问题描述】:
当使用一个好的哈希函数(任意两个元素碰撞的概率为 1 / m,其中 m 是桶的数量)实现哈希表时,众所周知,平均情况下的运行时间为查找元素是 Θ(1 + α),其中 α 是负载因子。但是,如果所有元素最终都放入同一个桶中,最坏情况的运行时间是 O(n)。
我最近在阅读哈希表时发现 this article 声称(在第 3 页)如果 α = 1,预期最坏情况复杂度为 Θ(log n / log日志 n)。通过“预期的最坏情况复杂性”,我的意思是,根据预期,如果元素由统一的散列函数分布,您将不得不做的最大工作量。这与实际的最坏情况不同,因为最坏情况的行为(同一存储桶中的所有元素)极不可能实际发生。
我的问题如下 - 作者似乎建议不同的 α 值可以改变预期的最坏情况下的查找复杂性。有谁知道某处的公式、表格或文章讨论了改变 α 如何改变预期的最坏情况运行时间?
【问题讨论】:
-
一般分析很复杂(至少对我而言)。我不确定是否有任何关于解决此问题的参考资料,因此可能会进行局部简化。在任何情况下,请注意
L的最大列表长度为max_x l(x),其中l(x)是槽x的列表长度(与那里相同的符号)。l(x)是伯努利试验的总和,即l(x) ~ Bin(1/m,n)具有二项分布。所有这些随机变量的最大值,其中有n,因此是第 n 阶统计量。 -
互联网上有很多离散顺序统计分布的公式,您可以将一些(相当丑陋的)公式放在一起,或计算各种值的表格。..
-
我不清楚预期情况(= 平均情况)和预期最坏情况之间的区别。你能解释一下吗?
-
@KonradRudolph- 当然!这样想吧。假设您使用一个好的散列函数将 n 个元素分配到 m 个 bin 中。查找的预期运行时间是您希望在任何一个存储桶中看到的平均对象数(这是 n/m)。预期的最坏情况运行时间是包含最大对象数的桶中的平均元素数。获得此值的一种方法是运行大量试验,将 n 个元素分配到 m 个 bin 中,并在每次试验后计算最填充的桶中有多少元素
标签: math data-structures hash big-o probability