我正在阅读有关双重哈希以及如何将其与哈希表的开放寻址方案一起使用的信息。我理解开放寻址中的哈希函数 h(k) 需要为给定键 k 生成探测序列的要求,使得探测序列是集合 <0, 1, ..., m-1> 的某种排列对于 m 个桶。线性探测通过使用函数增加探测计数来简单地做到这一点
h(k,i) = (h1(k) + i) mod m
双散列使用函数
h(k,i) = (h1(k) + i*h2(k)) mod m
因此探测以 i*h2(k) 的增量进行。
双重散列的建议是选择“m”作为 2 的幂,并始终从 h2(k) 返回一个奇数,以便这两个数字是互质的。这如何保证探测序列是集合 <0, 1, ..., m-1> 的排列?