【发布时间】:2011-12-10 00:47:02
【问题描述】:
我正在 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
等等。
我错过了什么?
【问题讨论】:
标签: c++ hash hashtable double-hashing