为什么增加哈希表的大小会减少冲突的数量?

时间:2017-10-26 06:16:02

标签: hash hashtable hash-collision

根据我在网上看到的,有两种方法可以减少碰撞次数:

  1. 使用更好的哈希函数
  2. 增加哈希表的大小
  3. 我能理解第一个原因,但我似乎无法理解第二个原因。

    如果我说我有5个键,所有的哈希都是相同的。让我们说我们正在使用链接来解决冲突。所有5个键将形成一个从索引开始的链,该索引等于哈希值。现在,假设我将表的大小加倍并重新使用所有5个键。 5个键仍然哈希到同一个索引,并且仍然形成大小为5的变化。增加哈希表的大小会减少冲突吗?

2 个答案:

答案 0 :(得分:1)

这是因为在计算哈希时,还要考虑数组大小。因此,在计算散列时,如果数组大小很大,则需要更大的模数值。

例如:
假设数组大小为3且传递值为2和5 然后2%3和5%3采取相同的位置,即1.

现在举个数组大小为5的例子 然后2%5和5%5取不同的位置,即分别为2和0。

因此,随着哈希表大小的增加,冲突数量减少。
希望这个解释能帮到你。

答案 1 :(得分:0)

我想通了。

Hashing有两个部分:散列函数和压缩函数。 更改哈希表的大小将改变压缩函数,从而导致将密钥分配给不同的桶。