散列中的聚类(在碰撞中)是什么意思?

时间:2017-08-28 14:24:01

标签: algorithm data-structures hash linear-probing

线性探测的主要问题是聚类,许多连续元素形成组,并开始花时间寻找空闲时段或搜索元素。

为什么连续元素来自group&它如何影响查找空闲时段的时间?

2 个答案:

答案 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中,我们扫描哈希表以找到下一个空闲时段,因此由于群集,线性扫描由于群集形成会花费更多时间,但只有线性扫描才会出现碰撞