对于上下文,Knuth乘法散列的一般形式是:
如果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 分开,这也会在分布中引入偏差