【数据结构】哈希表冲突的解决方法

哈希表解决冲突的方法

  • 链地址法(拉链法):将数组中每个位置存储的元素改成一个链表

 

  • 开放地址法:寻找空白单元格来存储重复数据,寻找空白单元格的方法:

    线性探测:

    插入:步长为1,一点点寻找空白位置。

    查找:跟插入过程类似,哈希化后,得到一个索引,比对元素,不相同则进行线性探测,如果查找过程中遇到空白位置,就停止查找。

    删除:查找目标元素后,不可以设置为null,因为哈希表后面的位置有可能还存在冲突的元素,设置为null之后,线性探测就找不到后面元素了。删除时一般设置为一个特殊的值。

    缺点:会造成数据的聚集。聚集会影响哈希表的性能,后面发生的冲突需要寻找很久

    二次探测:解决聚集问题

    从x位置开始,第一次x+1²,第二次x+2²,第三次x+3²,一次跳多步

    缺点:连续插入哈希化后索相同的数据,后面的数据也需要探测很多次,因为二次探测的每次探测的步长都是一样的,是一种特殊的聚集

    再哈希法:利用关键字确定步长,解决二次探测聚集问题

    第一次哈希化作为下标,第二次哈希化作为步长

    第二次哈希化要求:需要和第一次哈希化的结果不同,步长不能为0

    第二次哈希化函数:

    stepSize = constant -(Key % constant)

    constant是质数,且小于数据容量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值