【问题标题】:Why does increasing size of hashtable decrease the number of collisions?为什么增加哈希表的大小会减少冲突的数量?
【发布时间】:2018-04-07 09:46:33
【问题描述】:
根据我在网上阅读的内容,有两种方法可以减少碰撞次数:
- 使用更好的哈希函数
- 增加哈希表的大小
我可以理解第一个原因,但我似乎无法理解第二个原因。
如果假设我有 5 个哈希值相同的键。假设我们正在使用链接来解决冲突。所有 5 个键将从等于哈希值的索引开始形成一个链。现在,假设我将表的大小加倍并重新散列所有 5 个键。这 5 个键将仍然散列到相同的索引,并且将仍然形成大小为 5 的变化。增加散列表的大小如何减少冲突?
【问题讨论】:
标签:
hash
hashtable
hash-collision
【解决方案1】:
这是因为在计算哈希时,它还考虑了数组大小。因此,如果数组大小很大,则在计算哈希时,它需要更大的模值。
例如:
假设数组大小为 3,传递值为 2 和 5
然后 2%3 和 5%3 出现在同一个位置,即 1.
现在以数组大小 5 为例
然后 2%5 和 5%5 分别占据不同的位置,即 2 和 0。
所以随着哈希表大小的增加,碰撞次数减少。
希望这个解释对你有所帮助。
【解决方案2】:
我想通了。
Hashing有两部分:散列函数和压缩函数。
改变哈希表的大小会改变压缩函数,从而导致键被分配到不同的桶。