我有一个关于负载因素的混淆。一些消息来源说,只是哈希表中的密钥数除以每个时隙的预期链长相同的总槽数。但那只是简单的统一哈希吧?
假设哈希表T有n个元素,我们通过使用h'(k)= k mod 2m对它们进行重新分类,通过重新分配槽T [0]中的元素将T扩展为T1。如果h(k)<1,则T1的散列函数是h(k)= k mod 2m。 1和k mod m如果h(k)> = 1.很多消息来源说我们“扩展并重新调整以保持负载系数(这意味着预期的链长是否仍然相同?)因为这不是简单的均匀散列,我认为任何密钥k进入一个槽的概率是(1/4 + 1/2(m-1))。 对于密钥k(随机选择),首先评估h(k)(有50-50的机会是小于1还是大于或等于1)然后如果它小于1,则密钥k只有两个方式 - 插槽0或插槽m。因此,概率为1/4(1/2 * 1/2)但是如果它大于或等于1,则它具有m-1个槽并且可以输入任何概率(1/2 * 1 / m-1) 。所以预期的链长现在是n / 4 + n / 2(m-1)。我是在正确的轨道上吗?
答案 0 :(得分:0)
线性散列的计算应与&#34;非线性&#34;相同。散列。使用特定初始数量的桶,散列值的均匀分布将导致均匀放置。通过足够的扩展来使表的大小加倍,这些值中的每一个将通过增量重新散列在更大的空间上随机分割,并且新值也将分布在更大的空间上。随着表格扩展到该长度,每个点在增量上同样可能位于(初始桶位置)和(2x初始桶位置)。
有一篇论文here详细介绍了在不同情况下(不仅仅是平均值)的链长计算,特别是线性散列。