在下面的麻省理工讲座中:
https://www.youtube.com/watch?v=JZHBa-rLrBA在1:07:00,教授教我们计算未成功搜索的探针数量。
但我的计算方法和他的不符。
我的答案是:
探头数量=
m=哈希表中的槽数
n=元件数量(键)
说明:
1.hash函数可以击中一个空时隙,概率为m-n/m。
2.或者它可能以n/m的概率命中一个占先的密钥槽。
3.现在在案例2中,我们将不得不再次调用hash函数,有两种可能:
(i)我们得到一个不带密钥的槽,其概率为(m-n)/(m-1)。
(ii)我们得到一个具有概率(n-1)/(m-1)的带密钥的时隙。
4.现在重复第3种情况,但概率不同,如图所示
为什么我得到不同的答案。怎么了?
最佳答案
这个问题要求我们找到需要在哈希表中完成的预期探测数。
不管怎样,你必须做一件事,所以你必须从一开始。然后,有可能发生碰撞。你的解释是对的。
如果发生碰撞,你必须再做一次探测(甚至更多)。等等,答案就是教授得到的答案:
1 + (n / m)(1 + ((n - 1) / (m - 1))(1 + ...))
你不会乘上你得到空槽的概率。如果没有空槽(1,因为在这种情况下,必须再进行一次探测),则将没有空槽的概率与必须执行的操作数相乘。
把得到一个空位的概率和得不到空位的概率相乘是没有意义的,就像你正在做的那样请记住,我们希望找到需要执行的预期探测数。所以你把每一步的操作数(探测)乘以你没有得到你理想想要得到的(空槽)的概率,因为如果这个事件发生了,我们将不得不做更多的操作(探测),否则我们就完成了。
如果你仔细观察到最后,这一点在你链接到的讲座中解释得很好。