哈希表调整大小,线性探测和复杂性

时间:2013-05-07 14:11:43

标签: algorithm data-structures hashtable

我正在处理一些旧的试卷,并发现了以下内容:

  

演示封闭地址散列算法如何使用   数据集{4, 2, 12, 3, 9, 11, 7, 8, 13, 18}作为输入示例。

     

假设数组的长度最初为7.您应该演示:

     

我。如何构建哈希表,一步一步。怎么搜索一个   哈希表可以在O(1)时间内实现。

现在,假设数组最初设置为7,我可以使用的最大哈希函数是n mod 7,因为要插入的元素多于数组的大小,所以必须调整数组的大小。

我假设调整大小后哈希函数保持不变?

关于第二部分,如果许多元素散列到相同的值,如何实现O(1)搜索?当然,我需要按顺序通过数组中的聚簇元素?

这个假设是否正确?

1 个答案:

答案 0 :(得分:2)

调整哈希表的大小后

。你应该做一个“昂贵”的重复。也就是说,您必须重新散列现有密钥,以便为它们分配新的插槽。那么你的哈希函数将是id mod newSize

当哈希表已满时,良好的实现不会进行调整大小/重新散列。有一个负载因子,当负载系数高于0.75(或0.8?不记得确切)时,开放寻址/线性探测方法的性能会急剧下降。因此,当负载系数达到极限(0.75,例如)调整大小/重新散列时将被执行。

散列函数成本常数时间,因此也可以使元素成本保持恒定。