线性探测的主要问题是聚类,许多连续元素形成组,并开始花时间寻找空闲时段或搜索元素。
为什么连续元素来自group&它如何影响查找空闲时段的时间?
答案 0 :(得分:2)
散列函数的所需输出是将100个字符串分散到200个“pigeonslots”上随机分散。在碰撞的情况下,即已占用的时隙,线性扫描将搜索下一个未占用的时隙,立即产生至少两个的组(它也可以连接两个组)。当群集发生冲突时,线性探测会将群集添加一个新密钥,其原始位置应该位于群集中的任何位置。
很多快速评估哈希函数的问题都是不能均匀分配密钥的问题。当输入数据也不均匀分布时,这两个现象相互强调,并且在线性探测的情况下可能导致大量的密钥集群。实际上,这不仅会插入,还会搜索O(n)问题而不是O(1)。
答案 1 :(得分:1)
它不是总是连续元素将形成集群的情况。
一个简单的例子
假设您有一个100
条目的哈希表:并且哈希函数是:
h(x) = x mod 100;
假设您插入元素:
948,748,172,973,473,572,72
形成的集群将是:
群集1 :948(position 48),748(position 49)
(显然元素不连续)
群集2 :172(position 72),973(position 73),473(position 74),572(position 75),72(position 76)
(显然元素不连续)。
是,群集影响查找空闲时段的时间,因为在linear probing
中,我们扫描哈希表以找到下一个空闲时段,因此由于群集,线性扫描由于群集形成会花费更多时间,但只有线性扫描才会出现碰撞。