在Cormen的书“算法简介”中,我读到双重散列(在开放寻址中)的功能是:
h(k, i) = (h1(k) + i * h2(k)) mod m
其中 k 是键, i 是碰撞情况下的下一个索引, m 是表长度 hX 是哈希函数。
他说双重哈希的主要问题是利用表中的所有索引。要解决这个问题,我们应该将 m 设置为2的幂, h2 函数应该返回奇数值。为什么(我看不到他解释)?
答案 0 :(得分:1)
一般规则是模m
,重复添加h_2(k)
是一个以句点m/GCD(m, h_2(k))
重复的循环。如果m
和h_2(k)
之间没有共同因素,那么它将以句点m
重复,这意味着您可以覆盖所有m
个索引。所以你不需要共同的因素。
没有共同因素"通过使m
为2的幂和h_2(k)
奇数,可以轻松满足规则。