对于给定的哈希值,线性探测生成的索引如下:
h
、h+1
、h+2
、h+3
等。
对于给定的哈希值,二次探测生成的索引如下:
h
、h+1
、h+4
、h+9
等。
在线性的情况下会形成簇,但在二次型的情况下不会。
但是,当两个过程(方法)都需要花费相同数量的步骤进行插入或搜索时,为什么二次方比线性更有效。谢谢
效率取决于线性探测和二次探测形成的聚类类型。
线性探测形成主聚类,一旦形成,聚类越大,增长越快。这会严重降低性能。Robert Lafore举了一个很好的例子:这就像有人晕倒在购物中心时聚集的人群。第一批到达的人是因为看到受害者摔倒;后来到达的人聚集在一起,因为他们想知道其他人在看什么。人群越大,越多人们被它所吸引。
其中,作为二次探测形式二次聚类。这是一种阻止集群形成的尝试。这个想法是探测更广泛分离的单元格,而不是那些与主哈希站点相邻的单元格。按照这个比喻,它试图阻止第一批到达的人,以避免形成人群。与主集群相比,辅助集群在性能方面更微妙,也没有那么严重。
当您遇到空槽时,您将停止搜索表,因为您知道,如果您遇到了空槽,那么您要查找的值将不在哈希表中。由于集群减少,您将更有可能遇到空槽并停止搜索。此外,由于减少了集群,您在插入时更有可能找到一个空插槽,从而能够更快地搜索该值。
因为集群形成较少。这些值将更加分散,因此在二次型情况下所需的平均探针数量将更少。