1、开发定址发
H(i) = (H(key) + di) mod m
其中i =1,2,3 ... m-1
m:hash表的长度
H(key)为hash函数
di为增量序列,序列的意思是如果得到的H(i)上已经有元素,取di+1。
根据di的取值方式不同可以分为3中情况
(1)、线性探测再散列
这是di取值为1,2,3…m-1,缺点二次聚集,对查找不利,优点是,只要hash表没填满,总能找到一个不发生冲突的地址。
(2)、二次探测再散列
di取值为1,-1,22,-22,33,-33…kl,-kk ,其中k取值范围为1-m/2。缺点只有当hash表长度为4j+3的素数时候才可能填满。
(3)、伪随机探测再散列
di取值为伪随机数序列,hash表的性能取决于伪随机序列。
2、再hash
当出现hash冲突时候使用其他Hash函数计算地址,直到不冲突位置。
3、链地址法
hash表的每个元素成指向链表的指针,每个插入元素总能找到一个位置,便插入到链表中。
4、建立一个公共溢出区
当发生Hash冲突将发生冲突的键值对放入溢出表中。
Hash表的查找
根据key以及Hash函数计算存放地址,如果可以相同,找到元素,如果不相同,
参考:数据结构 C语言版本 严蔚敏 吴伟民 编著