【发布时间】:2014-12-04 07:28:25
【问题描述】:
要生成一个哈希函数,通过将 k 的余数除以 m 将密钥 k 映射到 m 个插槽之一。即哈希函数为
h(k) = k mod m.
我在几个地方读到过,m 是一个不错的选择
- 素数 - 我知道我们想要去除公因数,因此选择了素数
- 不太接近 2 的精确幂 - 为什么会这样?
【问题讨论】:
标签: hash-function
要生成一个哈希函数,通过将 k 的余数除以 m 将密钥 k 映射到 m 个插槽之一。即哈希函数为
h(k) = k mod m.
我在几个地方读到过,m 是一个不错的选择
【问题讨论】:
标签: hash-function
从算法介绍:
当使用除法时,我们避免使用某些 m 值。为了 示例 m 不应该是 2 的幂。因为 如果 m=2^p 那么 h(k) 是 p k 的最低位。 除非已知所有低位 p 位 模式的可能性相同,
最好做一个哈希函数 取决于密钥的所有位。
如下图所示,如果我选择 2^3,这意味着 p=3 和 m=8。散列键仅依赖于最低 3(p) 位,这是不好的,因为当您散列时,您希望包含尽可能多的数据以实现良好的分布。
【讨论】: