我被赋予实现链式哈希集的赋值:
该集由一组Linked-Lists支持(我将其称为A[]
),如果两个不同的值获得相同的哈希值k
,则将它们添加到列表{ {1}}。
结构可以使用有界负载因子(区间A[k]
)。
在说明书中,他们告诉我们将负载系数计算为:
负载系数=尺寸/容量
其中“size”是当前在集合中的元素总数,“capacity”是数组的长度([0.25, 0.75]
)。
我认为“大小”这个定义在这种情况下并不合适,应该是A.length
中使用过的列表的数量。
例如,如果所有值都映射到同一个单元格,比如说A
,那么当根据加载因子进行重新散列时,我们会在实际上只有第一个单元格时使后向数组A[1]
更大使用。
有人在我的逻辑中看到任何错误吗?
答案 0 :(得分:0)
哈希通常是mod'ed转换为数组索引,因此,当增加数组的大小时,元素很可能不会再次出现在同一个链表中(至少它们不应该如果你使用适当的哈希函数)。
此外,负载系数的含义会发生相当大的变化。根据定义,它会给出链表中平均项目数的一些指示,这是一个非常重要的数字,因为这是(平均)检索项目需要多长时间。
无论好坏,散列表依赖于散列的合理分布,因此假设一个列表与其他列表的比例不会太大。
存储用于指示散列函数质量的索引数也是有意义的,但我认为没有多大意义。 API无法做到这一点(因为它不处理散列函数,它只是调用它)。如果使用错误的哈希函数,在调用代码中动态更改哈希函数似乎不太实际。
答案 1 :(得分:0)
例如,如果所有值都映射到同一个单元格,例如A [1],那么当根据负载因子进行重新散列时,当实际上只使用第一个单元格时,我们会使后向数组A变大
我认为隐含的假设是你使用了一个好的哈希函数。