哈希表:当第二个哈希函数返回表大小的倍数时,使用双哈希

Hashtables: Double hashing when the second hash function returns a multiple of the table size

本文关键字:哈希 第二个 函数 返回 哈希表      更新时间:2023-10-16

我正在用c++实现一个HashTable,通过双哈希使用开放寻址。

我理解双哈希的基本原理是:

indexInProbingSequence = (originalIndex + i * hashFunction2(key)) % tableSize

我认为我已经正确地实现了这一部分。这是一个家庭作业,这门课的规定是我不能对任何特定的代码征求意见,所以在这一点上你们要相信我。

似乎给我带来问题的是,偶尔,一些键,当受到第二个哈希函数时,返回的值是(主要)表大小的倍数。在这些情况下,探测序列中的所有索引都是相同的。例如:

originalIndex = 32
hashFunction2(key) = 3035446
tableSize = 211

探测序列为:

(32 + 1 * 3035446) % 211 == 32
(32 + 2 * 3035446) % 211 == 32

等等

我错过了什么?

我认为您没有错过任何内容,特别是当hashFunction2(key) == 0 .

时,无论表大小如何都会出现问题。

(hashFunction2(key) % (tableSize - 1) + 1)代替hashFunction2(key)。最理想的情况是,步幅是环对表大小取模的生成器(这是表示探测最终覆盖整个表的一种时髦方式),或者至少有一个大周期。由于表的大小是素数,所以必须避免0