提问者:小点点

双哈希函数如何在C中工作?


我正在阅读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]索引上?其他剩余整数也是如此。

当没有空索引时会发生什么?


共2个答案

匿名用户

图像是错误的,可能会使用不同的散列方法。

当没有空单元格时,您必须重新散列。请参阅双散列部分下方的“使用重新散列进行散列”部分。

匿名用户

事实上,图像是错误的。基本思想是通过第二个有函数给出的值跳转no of place,如果已经被占用,然后继续跳转no。的地方,直到找到一个空的单元格。为此,第二个哈希函数不能返回0。

有关更多解释,请参阅此处。