在开放寻址中进行双重散列,具有什么散列函数和表长度

时间:2016-04-12 19:34:49

标签: algorithm double-hashing

在Cormen的书“算法简介”中,我读到双重散列(在开放寻址中)的功能是:

h(k, i) = (h1(k) + i * h2(k)) mod m

其中 k 是键, i 是碰撞情况下的下一个索引, m 是表长度 hX 是哈希函数。

他说双重哈希的主要问题是利用表中的所有索引。要解决这个问题,我们应该将 m 设置为2的幂, h2 函数应该返回奇数值。为什么(我看不到他解释)?

1 个答案:

答案 0 :(得分:1)

一般规则是模m,重复添加h_2(k)是一个以句点m/GCD(m, h_2(k))重复的循环。如果mh_2(k)之间没有共同因素,那么它将以句点m重复,这意味着您可以覆盖所有m个索引。所以你不需要共同的因素。

没有共同因素"通过使m为2的幂和h_2(k)奇数,可以轻松满足规则。