【问题标题】:How do I properly calculate the load factor of a hash table that uses separate chaining?如何正确计算使用单独链接的哈希表的负载因子?
【发布时间】:2019-04-14 13:41:01
【问题描述】:

我正在使用使用单独链接作为冲突解决技术的哈希表。

我知道通用公式是 N/table_length,其中 N 是当前表中的项目数。

我对分母有点困惑。是数组的大小 + 链接元素的数量,还是只是数组的大小?

【问题讨论】:

  • 正确的负载系数至少部分不是口味问题吗?也就是说,如果你想浪费更少的内存,你可以指定一个更高的负载因子,但如果你认为更快的查找时间更重要,你可以指定一个更低的负载因子。
  • 是的,负载系数的选择是个人喜好问题,但我认为这不适用于如何正确计算它。

标签: c++ hashtable hash-collision load-factor


【解决方案1】:

load factor 的目的是让您了解(平均而言)如果将新元素添加到表中,您需要解决冲突的可能性有多大。当一个新元素被分配一个已经有一个元素的桶时,就会发生冲突。给定存储桶中已有元素的可能性取决于容器中有多少元素。

load factor = # of elements / # of buckets

(用您的术语来说:当前表中的项目数除以数组的大小。)

【讨论】:

  • 为什么我们不需要考虑链式项目?如果我们不这样做,那么负载因子可能会超过 1,对吧?
  • @AdamG 是的,负载因子可以超过 1。超过 1 的值表示哈希表无法再以理想的性能运行。 (理想的性能发生在没有碰撞的情况下。负载系数超过 1 表示肯定发生了碰撞。)
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2013-11-30
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2022-01-10
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多