【发布时间】:2011-08-21 06:06:26
【问题描述】:
假设简单的统一散列,也就是说,任何给定的值都同样喜欢散列到散列的任何槽中。为什么使用大小为 127 而不是 128 的表更好?我真的不明白 2 数字的幂有什么问题。或者它实际上有什么不同。
使用除法时, 我们通常避免某些值 米(表大小)。例如,米 不应该是 2 的幂,因为如果 m = 2^p ,那么 h(k) 就是 k 的 p 个最低位。
假设可能的元素只有 1 到 10000 之间,我选择表大小为 128。127 怎么能更好? 所以 128 是 2^6 (1000000) 而 127 是 0111111。这有什么区别?对于 127,所有数字(当散列时)仍将是 k 的 p 最低位。我是不是搞错了什么?
我正在寻找一些例子,因为我真的不明白为什么这很糟糕。提前非常感谢!
【问题讨论】:
-
> PS: I am aware of: Hash table: why size should be prime?- 然后再读一遍,或者链接到this one -
@sehe 你链接的线程假设里面的元素有关系(“那么如果输入一堆都有相同第一个字符的字符串,那么结果都是一样的模 k")
-
@Clash:抱歉,但如果您坚持不需要针对特定哈希优化冲突,您可能会将索引与哈希混淆。完美的散列可以用作索引,但必须预先知道所有可能的值。有了这样的配置,即使桶的数量实际上是一个阶乘(
n!)也没有关系。但这不是散列背后的通用科学。 -
OT:
Clash是一个非常好的网名,在谈论哈希冲突时使用 :) -
因为真实数据几乎从不均匀分布。如果您使用 128 对字符串进行哈希处理,您将获得 26 个不均匀填充的存储桶,其余的为空。如果您使用 127,您可能会更均匀地填充它们。