处理Hash冲突的方法

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语言版本 严蔚敏 吴伟民 编著

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值