- 拉链法
- 开放寻址法
- 线性探查
- 二次探查
- 双重散列
-
顾名思义,其是一个线性递增的过程,如果当前发生冲突,则会递增的找下一个,如果最后一个仍然找不到,那么则又会从头开始查找,以此类推。但是这会存在一个问题,叫做一次群集,随着连续被占用的槽增加,那么它查找的时间也会不断的增加。
-
和之前不同的是,在开始的槽的位置上发生冲突以后,其不再是线性的递增,而是通过一个偏移量(1,2,3...的二次方地址处),这在一定程度下缓解了基本群集的问题,但是依旧存在问题,比如在具有相同偏移量的位置发生冲突,那么就和之前的一样,槽会发生连续被占用的情况,甚至是该相对偏移量下的所有槽都被占用情况,此时再使用偏移量则会找不到空白的槽。
key1:hash(key)+0 key2:hash(key)+1^2 key3:hash(key)+2^2 -
这可能是最好的方法之一,因为它不再像是线性和二次固定的增加偏移,而是会变化的去寻找下一个位置。即下一个探测的位置以关键字的另一个散列函数值作为增量。其公式为:
h(k, i) = (h1(k) + ih2(k)) mod m