哈希 - M应该是两个人的力量

时间:2017-04-03 17:50:41

标签: hash knuth

我听说m在knuth乘法散列中应该是2的幂。否则,2的幂总是一个不错的选择。有人可以用一种简单的方式告诉我为什么这样更有效率?

亲切的问候

1 个答案:

答案 0 :(得分:0)

对于上下文,Knuth乘法散列的一般形式是:

hash formula

如果w = 2 32 且M是2 ,那么这简化为

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

这显然非常好。诀窍是将分区留给w以后再使用mod w(这是自动的),然后从 top 中提取但是如果正常情况下我们会得到很多位方式(这相当于w的除法,缩小M,并且一次完成所有操作)。

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