哈希表冲突的解决

哈希冲突的几种解决办法

1.开放地址法,可以简单理解为为冲突的数据重新寻找一个空白的单元地址
开放地址法又分为三类:

1)线性探测法
线性的查找空白单元,如果100是要插入数据的位置,已经被占用了,那么它会查找101单元是否被使用,如果未被使用,则数据会放在101单元内,如果101单元也已被使用,那么它会寻找102单元,依此类推,直到找到空白单元存放数据,这就是线性探测法

2)二次探测法
在线性探测法中,每次寻找空白单元的做法是单元下标加1,这样容易产生聚集的现象。在二次探测法中,每次寻找空白单元格的做法是加1,加4,加9,加16等等,每次增加的距离是步数的平方,直到找到空白的单元格

3)再哈希法
当有哈希冲突时,为了让步长不再固定,把关键字用不同的哈希函数再做一遍哈希化,把这个作为步长,在当前单元格上加上步长,作为新的单元格
第二个哈希函数的注意点:
不能与第一个哈希函数相同,不能输出0,否则会一直原地踏步

2.链地址法,新的数据项直接连接到这个数组下标所指的链表中
在哈希表的每个单元中设置一个链表,用于存放冲突的数据

装填因子:
数据项数和哈希表容量的比

哈希函数:
哈希表的容量最好是一个质数,通常来说,哈希函数包括对数组容量的取模操作,如果容量不是一个质数,那么很容易会发生整除的情况,导致哈希表的聚集。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值