Jim*_*Jim 6 java algorithm hash hashmap hash-collision
我正在读关于Java的方法随机哈希键在这里
很显然的想法是,以确保在低位为"随机",以帮助分布,但我想明白这一点了.
因此,如果我们有一个大小为10的表,那么数字0,10,20,30,40等都落在桶0中,数字1,11,21,31等落在桶1等中(使用模10).
因此,改变位模式可以使它们进入不同的存储桶,而不是全部进入存储桶0.
但是我不清楚的是它是什么属性使得低阶位影响这一点,我们需要将它们随机化.所以我们有:
0000 0000 (0)
0000 1010 (10)
0001 0100 (20)
0001 1110 (30)
0010 1000 (40)
Run Code Online (Sandbox Code Playgroud)
低阶位的规律性是什么使它们被放置在同一个插槽中?
也许我对以下内容感到困惑?我的理解是,低阶位中的一些规律性会导致冲突,我们会尝试随机化比特来进行补偿
一些哈希函数在随机化低位位方面做得非常糟糕。
一个典型的例子是使用硬件地址作为对象引用(C 中的“指针”)的散列,否则这将是一种廉价地获取对象 ID 的唯一编号的合理方法。如果哈希表的存储桶计数是素数,那么这会很好地工作,但对于存储桶数量始终是 2 的幂的哈希实现来说,所有哈希值都可以被 8 整除的事实意味着大多数存储桶是空的。
这是一种极端情况,但只要要散列的数据分布不均匀并且散列函数倾向于保留低位,您就会发现存储桶分配中存在一些偏差。
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |