我正在处理一些旧的试卷,并发现了以下内容:
演示封闭地址散列算法如何使用 数据集
{4, 2, 12, 3, 9, 11, 7, 8, 13, 18}
作为输入示例。假设数组的长度最初为7.您应该演示:
我。如何构建哈希表,一步一步。怎么搜索一个 哈希表可以在O(1)时间内实现。
现在,假设数组最初设置为7,我可以使用的最大哈希函数是n mod 7
,因为要插入的元素多于数组的大小,所以必须调整数组的大小。
我假设调整大小后哈希函数保持不变?
关于第二部分,如果许多元素散列到相同的值,如何实现O(1)
搜索?当然,我需要按顺序通过数组中的聚簇元素?
这个假设是否正确?
答案 0 :(得分:2)
。你应该做一个“昂贵”的重复。也就是说,您必须重新散列现有密钥,以便为它们分配新的插槽。那么你的哈希函数将是id mod newSize
。
当哈希表已满时,良好的实现不会进行调整大小/重新散列。有一个负载因子,当负载系数高于0.75(或0.8?不记得确切)时,开放寻址/线性探测方法的性能会急剧下降。因此,当负载系数达到极限(0.75,例如)调整大小/重新散列时将被执行。
散列函数成本常数时间,因此也可以使元素成本保持恒定。