3

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

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

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

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

负载系数 = 尺寸/容量

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

我认为这种“大小”的定义在这种情况下是不合适的,应该是A.

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

有人在这里看到我的逻辑有任何错误吗?

4

2 回答 2

0

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

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

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

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

于 2013-04-12T15:04:05.303 回答
0

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

我认为一个隐含的假设是你正在使用一个好的散列函数。

于 2015-05-04T16:06:01.660 回答