解决散列表冲突方法
1 解决冲突方法
1.1 链接法
又叫拉链法,将具有同一散列地址的记录存储在一条线性链表中
1.2 开放定址法
通过对原hash函数进行修改,添加探查函数,当出现冲突时,往下一个地址写数据
图中p(i)为探查函数
探查函数分为以下四种:
线性探查法:(p(i)为1,2,...,...n)
二次探查法
随机探查法:(p(i)为随机数)
双散列函数法
使用开放定址法时最好能确保散列表的装填因子处于较低的水平.
1.3 桶地址法
为表中的每个地址关联一个桶,一个桶可以存储多个元素.如果桶满了,可以使用开放地址法.
1.4 建立公共溢出区
把冲突元素统一放到公共溢出区,遇到冲突时直接将冲突元素定向到公共溢出区的位置上,在冲突极少时比较常见.
2 散列表性能
2.1 衡量性能
使用平均查找长度衡量查找效率
2.2 影响产生冲突因素
散列函数是否均匀
处理冲突的方法
散列表的装填因子
装填因子定义=填入表中的元素个数 / 散列表的长度
2.3 散列函数
有以下三种:
求模散列法:假设有一个元素E,其键值为k,将键值k映射到m个槽上的某一个,即散列函数为h(k)=kmodm
乘法散列法:构造散列函数的乘法散列法包含两个步骤,第一步:用关键字k乘上常数A(0<A<1),并提取kA的小数部分.
第二步:用m乘以这个值,并向下取整:h(k) =[m(kAmod1)]
全域散列法:在全域散列法里面,散列函数都是随机的,随机散列函数不能任意设计的