【问题标题】:Why does increasing size of hashtable decrease the number of collisions?为什么增加哈希表的大小会减少冲突的数量?
【发布时间】:2018-04-07 09:46:33
【问题描述】:

根据我在网上阅读的内容,有两种方法可以减少碰撞次数:

  1. 使用更好的哈希函数
  2. 增加哈希表的大小

我可以理解第一个原因,但我似乎无法理解第二个原因。

如果假设我有 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有两部分:散列函数和压缩函数。 改变哈希表的大小会改变压缩函数,从而导致键被分配到不同的桶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-17
      • 2013-01-10
      • 1970-01-01
      • 2016-09-05
      • 2023-03-12
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      相关资源
      最近更新 更多