data-structures - 链式哈希集的负载因子

标签 data-structures hashset

我被分配去实现一个链式哈希集:

该集合由一组链表支持(我称之为A[]),如果两个不同的值得到相同的散列值k 它们被添加到列表 A[k]

该结构在有界负载因子(区间 [0.25, 0.75])下工作正常。

在说明中,他们告诉我们计算负载因子为:

Load Factor = size/capacity

其中“大小”是集合中当前元素的总数,“容量”是数组的长度 (A.length)。

我认为“大小”的这个定义在这种情况下不合适,应该是 A 中使用的列表数。

例如,如果所有值都映射到同一个单元格,比如 A[1],那么当根据负载因子重新散列时,我们将创建返回数组 A 当实际上只使用第一个单元格时更大。

有人看到我的逻辑有什么错误吗?

最佳答案

散列通常被修改为转换为数组索引,因此,当增加数组的大小时,元素很可能不会再次出现在同一个链表中(至少它们不应该如果您使用适当的哈希函数)。

此外,负载因子的含义将发生相当大的变化。正如它所定义的那样,它将给出链接列表中项目的平均数量的一些指示,这是一个非常重要的数字,因为这是检索项目所需的时间(平均)。

无论好坏,哈希表依赖于合理的哈希分布,因此假设一个列表与其他列表相比不会变得太大。

存储用于指示哈希函数质量的索引数量也很有意义,但我认为没有太大意义。 API对此无能为力(因为它不处理散列函数,它只是调用它)。如果使用错误的散列函数,则在调用代码中动态更改散列函数似乎不太实用。

关于data-structures - 链式哈希集的负载因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15974373/

相关文章:

带有最后修改时间的Java集合数据结构

Java HashSet 与数组性能

java - 从哈希集中的表中获取特定列的数据

c# - 应使用哪种数据结构从文本文件中读取和存储大约 500 万个条目

data-structures - Haskell 中的嵌入图像

algorithm - 偶长路径算法-DFS

Python:在包含子字符串的字典中查找(字符串)键

Java:仅通过计算其哈希码从集合中检索对象

hash - clojure 中的文字哈希集

java - readLines() 上的 Groovy Reader HashSet 返回乱序