我正在阅读HashTable,并在这里找到了一个很容易理解的好来源。
但是我对双散列函数感到困惑。这是双散列函数的细节。
双散列使用了在发生碰撞时对键应用第二个散列函数的思想。第二个散列函数的结果将是要插入的碰撞点的位置数。
第二个函数有几个要求:
it must never evaluate to 0
must make sure that all cells can be probed
一个流行的第二个散列函数是:Hash2(key)=R-(key%R)其中R是小于表大小的素数。
这是双散列函数的图像。
现在混淆开始了。正如他们在图片中所说。49应该在[9]
索引的7
位置上。然后实际位置将是[6]
那么为什么他们把49放在[0]
索引上?其他剩余整数也是如此。
当没有空索引时会发生什么?
图像是错误的,可能会使用不同的散列方法。
当没有空单元格时,您必须重新散列。请参阅双散列部分下方的“使用重新散列进行散列”部分。
事实上,图像是错误的。基本思想是通过第二个有函数给出的值跳转no of place,如果已经被占用,然后继续跳转no。的地方,直到找到一个空的单元格。为此,第二个哈希函数不能返回0。
有关更多解释,请参阅此处。