【问题标题】:why a good choice of mod is "a prime not too close to an exact of 2"为什么一个好的 mod 选择是“一个不太接近 2 的素数”
【发布时间】:2014-12-04 07:28:25
【问题描述】:

要生成一个哈希函数,通过将 k 的余数除以 m 将密钥 k 映射到 m 个插槽之一。即哈希函数为

h(k) = k mod m.

我在几个地方读到过,m 是一个不错的选择

  1. 素数 - 我知道我们想要去除公因数,因此选择了素数
  2. 不太接近 2 的精确幂 - 为什么会这样?

【问题讨论】:

    标签: hash-function


    【解决方案1】:

    从算法介绍:

    当使用除法时,我们避免使用某些 m 值。为了 示例 m 不应该是 2 的幂。因为 如果 m=2^p 那么 h(k) 是 p k 的最低位。 除非已知所有低位 p 位 模式的可能性相同,
    最好做一个哈希函数 取决于密钥的所有位。

    如下图所示,如果我选择 2^3,这意味着 p=3 和 m=8。散列键仅依赖于最低 3(p) 位,这是不好的,因为当您散列时,您希望包含尽可能多的数据以实现良好的分布。

    【讨论】:

    • 您描述的是 m 正好是 2^p 的情况,而不是像问的那样 m 接近 2^p 的情况。
    • 但它仍然(几乎)是真的。计算 mod 2^n-1 与将数字分组为 n 位块并添加这些组相同。
    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多