我正在阅读关于HashTable的内容,并找到了一个很容易理解Here.
的好来源但我对双重散列函数感到困惑。这是双散列函数的细节。
Double hashing使用将第二个哈希函数应用于的概念 发生碰撞时的键。第二个哈希函数的结果 将是插入碰撞点的位置数。
第二个功能有几个要求:
it must never evaluate to 0 must make sure that all cells can be probed
流行的第二个哈希函数是:Hash2(key)= R - (key%R)其中 R是一个小于表格大小的素数。
这是双重哈希函数的图像。
现在混乱开始了。正如他们在图像中说的那样。 49应位于7
索引的[9]
个位置。那么实际位置将为[6]
那么为什么他们将{49}置于[0]
指数?和其他剩余的整数相同。
当没有空索引时会发生什么?
答案 0 :(得分:2)
图像错误,可能采用不同的哈希方法。
当没有空单元格时,您必须重新散列。请参阅" Hashing with Rehashing"双散列部分下面的部分。
答案 1 :(得分:1)
确实图像错误。基本的想法是按第二个具有功能的值跳过没有位置,如果已经被占用,那么继续跳跃相同的没有。直到找到空单元格的地方。为此,第二个散列函数不能返回0。
有关详细说明,请参阅here。