Hash 散列-M应该是2的幂

Hash 散列-M应该是2的幂,hash,knuth,Hash,Knuth,我听说在knuth乘法散列中m应该是2的幂。否则,2的幂永远是一个不错的选择。谁能简单地告诉我为什么这样更有效 关于上下文,Knuth乘法散列的一般形式如下: 如果w=232且M为2比特,则简化为 h(K) = A * K >> (32 - bits) 这显然真的很好。诀窍是将w除法留待以后使用,使用mod w(这是自动的),然后从顶部提取如果按正常方式进行,我们将得到的多少位(这对应于w除法,M缩尺,以及一次进行地板处理) 但是这个技巧依赖于w和M是二的幂。如果M不是2的幂,则

我听说在knuth乘法散列中m应该是2的幂。否则,2的幂永远是一个不错的选择。谁能简单地告诉我为什么这样更有效


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

如果w=232且M为2比特,则简化为

h(K) = A * K >> (32 - bits)
这显然真的很好。诀窍是将w除法留待以后使用,使用
mod w
(这是自动的),然后从顶部提取如果按正常方式进行,我们将得到的多少位(这对应于w除法,M缩尺,以及一次进行地板处理)

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

因此提高效率的原因是,此技巧可以实现移位,这对于散列计算更快?