algorithm - 开放寻址中的双重散列,什么散列函数和表长

标签 algorithm double-hashing

在 Cormen 的“算法导论”一书中,我读到双重哈希(在开放寻址中)函数的形式为:

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

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

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

最佳答案

一般规则是对m取模,重复添加h_2(k)就是一个以周期m/GCD(m, h_2(k)重复的循环))。如果 mh_2(k) 之间没有公因数,那么它将以句点 m 重复,这意味着你可以达到所有 m 索引。所以你不需要公因数。

通过使 m 为 2 的幂且 h_2(k) 为奇数,很容易满足“无公因数”规则。

关于algorithm - 开放寻址中的双重散列,什么散列函数和表长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36582495/

相关文章:

c++ - 双哈希函数返回错误值

python - 为双散列哈希表大小选择最佳素数?

arrays - 获取最后 512 个值中最大值的更节省资源的方法

algorithm - 连接n个点的最短路径

python - 缩短一个语句被反转的 if 语句

algorithm - 为什么循环比循环体多执行一次?

javascript - 为什么一个线性搜索给我的输出与另一个不同?

c++ - 双探测哈希表

algorithm - 双重哈希详细信息