带链接哈希集的加载因子

时间:2013-04-12 14:46:19

标签: data-structures hashset

我被赋予实现链式哈希集的赋值:

该集由一组Linked-Lists支持(我将其称为A[]),如果两个不同的值获得相同的哈希值k,则将它们添加到列表{ {1}}。

结构可以使用有界负载因子(区间A[k])。

在说明书中,他们告诉我们将负载系数计算为:

  

负载系数=尺寸/容量

其中“size”是当前在集合中的元素总数,“capacity”是数组的长度([0.25, 0.75])。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

此外,负载系数的含义会发生相当大的变化。根据定义,它会给出链表中平均项目数的一些指示,这是一个非常重要的数字,因为这是(平均)检索项目需要多长时间。

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

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

答案 1 :(得分:0)

  

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

我认为隐含的假设是你使用了一个好的哈希函数。