【问题标题】:MIT Lecture WRONG? Analysis of open addressing in hashing麻省理工学院的讲座错了吗?哈希中的开放寻址分析
【发布时间】:2015-08-01 10:27:58
【问题描述】:
在以下 MIT 讲座中:
https://www.youtube.com/watch?v=JZHBa-rLrBA 1:07:00,教授教计算搜索不成功的探针数。
但我的计算方法与他的不符。
我的回答是:
探测数=
m= 没有。哈希表中的槽数
n= 没有。元素(键)
解释:
1.哈希函数可以命中一个空槽的概率为 m-n/m。
2.或者它可以以 n/m 的概率命中一个被占用的键槽。
3.现在情况2,我们将不得不再次调用哈希函数,有两种机会:
(i) 我们得到一个没有密钥的槽,概率为 (m-n)/(m-1)。
(ii) 我们得到一个带有概率 (n-1)/(m-1) 的密钥槽。
4.现在重复案例 3,但概率不同,如图所示
为什么我得到不同的答案。它有什么问题?
【问题讨论】:
标签:
algorithm
hash
hashtable
probability
clrs
【解决方案1】:
问题要求我们在哈希表中找到需要完成的预期探测次数。
无论如何你都必须做一个,所以你必须从 1 开始。然后,n / m 有可能发生碰撞。你的解释是对的。
如果发生碰撞,则必须进行另一次探测(甚至更多)。以此类推,所以答案就是教授得到的答案:
1 + (n / m)(1 + ((n - 1) / (m - 1))(1 + ...))
你不会乘以你得到一个空槽的概率。您将 不 获得空插槽的概率乘以如果您没有获得空插槽则必须执行的操作数(1,因为您必须至少再进行一次探测案例)。
将获得空位的概率与未获得空位的概率相乘是没有意义的,就像您正在做的那样。请记住,我们想要找到我们需要进行的预期探测次数。所以你将每一步的操作(探测)的数量乘以你没有得到你想要得到的东西的概率(一个空槽),因为如果这个事件发生,那么我们将不得不做更多操作(探测),否则我们就完成了。
如果你仔细观察到最后,这在你链接的讲座中得到了很好的解释。