开放寻址哈希法:二次探测与双重哈希解析
1. 线性探测的问题
在哈希表的操作中,简单的线性探测技术存在一些问题。当使用线性探测进行开放寻址时,会形成数据簇。一旦簇形成,它往往会不断增大。因为哈希到簇范围内任何值的项都会依次插入到簇的末尾,导致簇越来越大,且增长速度越来越快。
例如,在商场中有人晕倒时,最初到达的人是因为看到有人倒下,而后来的人则是因为好奇其他人在看什么而聚集过来,人群越大,吸引的人就越多。
表中项的数量与表大小的比值称为负载因子,计算公式为 loadFactor = nItems / arraySize 。一般来说,负载因子越大,数据簇就越多,但即使负载因子不高,也可能形成簇。哈希表的某些部分可能是大的数据簇,而其他部分则可能只有稀疏的数据。数据簇会降低哈希表的性能。
为了避免数据簇的形成,有两种方法:二次探测和双重哈希。接下来,我们将简要介绍二次探测,并详细探讨双重哈希。
2. 二次探测
二次探测的目的是避免数据簇的形成。其思路是探测与初始哈希位置间隔更远的单元格,而不是相邻的单元格。
2.1 探测步长
在线性探测中,如果初始哈希索引是 x ,后续的探测位置依次是 x + 1 、 x + 2 、 x + 3 等。而在二次探测中,探测位置依次是 x + 1 、 x + 4 、 x + 9 、 x + 16 <
超级会员免费看
订阅专栏 解锁全文
6250

被折叠的 条评论
为什么被折叠?



