解决哈希冲突的方法
不同的关键字映射到相同的存储地址则为哈希冲突,即地址address=h(key1)=h(key2)
1、开放地址法
要求所有的key都要放在哈希表里。若发生哈希冲突时,则以当前的地址为基准,进行再寻址,直到发生冲突的key重新找个空地址进行映射
- 线性探查:以当前地址为基准,顺序往下个地址一直探查,每次为一步,即x+1,x+2,···
- 二次探查:以当前地址为基准,顺序往下个地址一直探查,每次为当前步数的平方,即x+1,x+4,x+9,···
- 伪随机探查:生成一系列伪随机数,进行随机地址探查
2、再哈希法
当发生冲突时,对当前放生冲突的key用其他哈希函数进行哈希后寻址,需要多备几个其他哈希函数
3、链地址
对哈希表进行链结构化,表上每一个哈希地址相当于一个链头部,即当发生冲突时,每一个冲突的key值链接到同一地址后面的链上面,即每一个地址后面都带着一条多key值的链
4、公共溢出区
设立一个公共溢出区,将所有冲突的key值放到公共溢出区,若进行key值映射查找,不仅需要在哈希表查找,也要在公共溢出区查找