hash冲突以及解决办法?

https://blog.csdn.net/qq_36771269/article/details/79728243

1.什么叫hash冲突?

hash表的存储是key值和value值一起存储,如果一个key值对应的value值多个的话,就会引起hash冲突。

2.如何解决

(1)开发地址法

又称再散列法,如果key值对应的散列值p有冲突,在p的基础上散列一个p1,如果还有冲突,散列一个p2,以此类推,通用的散列公式Hi=(H(key)+di)% m i=1,2,…,n ,其中H(key)为哈希函数,m 为表长,di称为增量序列。

根据di的不同,可以分为三类:

线程探测再散列,1,2,3,,,

二次平方探测再散列,1,-1,4,-4,9,-9,,,

伪随机探测再散列 

(2)再hash法

有多个hash函数

(3)链地址法

hashmap就是这样结局的

(4)建立公共的溢出区

3.开放散列和封闭散列

开放散列(拉链法)

优点:对于记录总数频繁变化的情况,处理的比较好;删除记录时,比较方便,直接通过指针操作。

缺点:查询不方便;key-value可以提前预知,人为设定一个不会产生冲突的哈希函数,此时性能低于封闭散列表。序列化操作不易;

封闭散列(开发地址法)

优点:更容易进行序列化操作;如果记录总数可以提前预知,可以创建完美的哈希函数;

缺点:存储数目的长度不能超过桶数组的长度,若超过需要扩容,成本飙升;探测序列,成本高;删除记录麻烦;

4.求解哈希表平均查找长度

https://blog.csdn.net/scmuzi18/article/details/77140889

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值