Double Hash函数如何在C ++中工作?

时间:2016-02-24 04:35:23

标签: c++ data-structures hash hashtable double-hashing

我正在阅读关于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是一个小于表格大小的素数。

这是双重哈希函数的图像。

enter image description here

现在混乱开始了。正如他们在图像中说的那样。 49应位于7索引的[9]个位置。那么实际位置将为[6]那么为什么他们将{49}置于[0]指数?和其他剩余的整数相同。

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

2 个答案:

答案 0 :(得分:2)

图像错误,可能采用不同的哈希方法。

当没有空单元格时,您必须重新散列。请参阅" Hashing with Rehashing"双散列部分下面的部分。

答案 1 :(得分:1)

确实图像错误。基本的想法是按第二个具有功能的值跳过没有位置,如果已经被占用,那么继续跳跃相同的没有。直到找到空单元格的地方。为此,第二个散列函数不能返回0。

有关详细说明,请参阅here

相关问题