【问题标题】:Hashing - M should be a power of two散列 - M 应该是 2 的幂
【发布时间】:2017-04-03 17:50:41
【问题描述】:

我听说 m 应该是 knuth 乘法哈希中的 2 的幂。否则,二的幂总是一个不错的选择。有人可以简单地告诉我为什么这样做更有效吗?

亲切的问候

【问题讨论】:

    标签: hash knuth


    【解决方案1】:

    对于上下文,Knuth 乘法哈希的一般形式是这样的:

    如果 w = 232 并且 M 是 2bits,那么这简化为

    h(K) = A * K >> (32 - bits)
    

    这显然非常好。诀窍是将除以 w 留待以后使用,使用mod w(这是自动的),然后从 top 中提取,但是如果以正常方式完成,我们会得到很多位(这对应于除以 w,按比例缩小 M,然后做地板 - 一次)。

    但是这个技巧依赖于 w 和 M 是 2 的幂。如果 M 不是 2 的幂,则将有另一个定点乘法(而不仅仅是右移)来映射中间结果
    [0 .. 232-1] 到 [0 .. M-1] 中,并且由于 M 不会将 232 相除,这也会在分布中引入偏差.

    【讨论】:

    • 那么效率提高的原因是,这个技巧可以实现移位,对于哈希的计算更快?
    猜你喜欢
    • 2013-10-02
    • 2017-05-02
    • 2010-11-23
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多