在以下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但具有不同的概率,如图所示
为什么我会得到不同的答案。怎么了?
答案 0 :(得分:5)
问题要求我们找到需要在哈希表中完成的预期探测数量。
无论如何你必须做一个,所以你有1个开始。然后,你有1 + (n / m)(1 + ((n - 1) / (m - 1))(1 + ...))
碰撞的机会。你的解释是正确的。
如果发生碰撞,则必须进行另一次探测(甚至更多)。等等,所以答案就是教授得到的答案:
ThreadPoolExecutor
您不会与获得空位的概率相乘。你将不获得一个空位的概率乘以你不能获得一个空位的操作次数(1,因为你必须至少再做一次探测在那种情况下)。
将开放式广告位的概率与未获得广告位的概率相乘是毫无意义的,就像您正在做的那样。请记住,我们希望找到我们需要做的预期探测数量。因此,您将每一步的操作次数(探测次数)与您未获得理想状态的概率(空位)相乘,因为如果发生此事件,那么我们就会#39 ;我必须做更多的操作(探针),否则我们就完成了。
如果你仔细观察直到最后,你在与之相关的讲座中会很好地解释这一点。