麻省理工学院讲座错了吗?散列中的开放寻址分析

时间:2015-08-01 10:27:59

标签: algorithm hash hashtable probability clrs

在以下MIT讲座中: https://www.youtube.com/watch?v=JZHBa-rLrBA在1:07:00,教授教导计算不成功搜索中的探测次数。

但我的计算方法与他的不相符。 我的回答是:

探测次数= enter image description here

m =不。散列表中的插槽

n =不。元素(键)

说明:

1.哈希函数可以以m-n / m的概率命中一个空槽。

2.或者它可以以概率n / m命中一个占据空心的密钥槽。

3.现在在案例2中,我们将不得不再次调用哈希函数,并且有两个机会: (i)我们得到一个没有密钥概率(m-n)/(m-1)的槽。 (ii)我们得到一个带有概率密钥的槽(n-1)/(m-1)。

4.现在重复案例3但具有不同的概率,如图所示

为什么我会得到不同的答案。怎么了?

1 个答案:

答案 0 :(得分:5)

问题要求我们找到需要在哈希表中完成的预期探测数量。

无论如何你必须做一个,所以你有1个开始。然后,你有1 + (n / m)(1 + ((n - 1) / (m - 1))(1 + ...)) 碰撞的机会。你的解释是正确的。

如果发生碰撞,则必须进行另一次探测(甚至更多)。等等,所以答案就是教授得到的答案:

ThreadPoolExecutor

您不会与获得空位的概率相乘。你将获得一个空位的概率乘以你不能获得一个空位的操作次数(1,因为你必须至少再做一次探测在那种情况下)。

将开放式广告位的概率与未获得广告位的概率相乘是毫无意义的,就像您正在做的那样。请记住,我们希望找到我们需要做的预期探测数量。因此,您将每一步的操作次数(探测次数)与您未获得理想状态的概率(空位)相乘,因为如果发生此事件,那么我们就会#39 ;我必须做更多的操作(探针),否则我们就完成了。

如果你仔细观察直到最后,你在与之相关的讲座中会很好地解释这一点。