当遇到冲突时,通过处理冲突的方法,得到一个Hi(i=1,2,3,4.....)地址序列。若H1任然冲突,求H2,若H2冲突,求出H3......直到找到不冲突的地址为止。
具体的方法:
一.开放定址法:
Hi=(H(x)+di)%m
m:表长
di:增量序列,有三种取法:
1.线性探测再散列:1,2,3,4,5.....m-1
2.二次探测再散列:1,-1,4,-4,9,-9,16,-16....
3.伪随机探测再散列:伪随机数序列
线性探测容易产生“二次聚集”,但能保证只要哈希表未满就能找到不冲突的地址。
二.再哈希法:
Hi=RHi(x) i=1,2,3,4......
RHi在i不同时,是不同的哈希函数。当冲突产生,换一个哈希函数计算出新的哈希地址,直到不冲突为止。
优点:不易产生“聚集”
缺点:计算时间相对较长。
三.链地址法:
H(x)=x%m
将得到的相同哈希地址的数据通过链表存储。
得到哈希地址即为该链表的头指针。
四.建立公共溢出区:
发生冲突后,直接将该数据填入公共溢出区中。