哈希冲突

哈希冲突概念及解决方案

哈希冲突的概念

哈希算法的目的就是将一串很大的数据根据一定的规则转换为较小的数据。在这个从大到小的转换过程中,不可避免的会出现两个不同的数据在经过哈希算法的计算后生成了相同的哈希值。这个过程我们称之为哈希冲突。
哈希冲突会带来很多问题,例如在哈希表中,两个不同的key值的哈希值相同,那么当这两个key值所表示的数据中的第一个存放到指定的位置后,第二个就没有地方可以存放了。所以我们在设计使用哈希算法的时候一定不能忽略掉哈希冲突。

哈希冲突的解决方法

常用的解决哈希冲突的方法有以下几种:

拉链法

拉链法是指当出现哈希冲突时,将具有相同哈希值的key值放进一个链表之中。当进行查找的时候可以通过遍历这个链表中的数据来寻找是否存在和被查找的key值相等的值。这种方法适用于处理冲突比较严重的情况。
在这里插入图片描述

再哈希法

首先构造多个哈希算法Di = H1 (keyi), Di = H2 (keyi)…
当发生哈希冲突时,将key值通过第二个哈希算法计算哈希值,若还冲突,就继续下去,直到找到不发生冲突的值。

开放地址法

开放地址法思想:当发生哈希冲突时,将这个哈希值加上一个增量d,来获取新的哈希值。即:
Di = (H(key) + d) mod m。这里的m是空间大小,以防止哈希值超出规定范围。
根据d的取值不同,开放地址法分为以下四种:

线形勘测再散列

d的取值为1,2,3,…
即当发生哈希冲突时,判断当前哈希值H+1这个位置是否会发生哈希冲突,即当前H+1的位置上是否存在数据,如果不存在就将值放在这个位置上,如果存在数据,就判断hH+2。以此类推,直到找到不发生哈希冲突的位置。

二次勘测再散列

d的取值为1,-1,22,-(22)…

双散列法

定义另一个哈希算法PI = H2(keyI),当发生哈希冲突时,哈希值为(H1(keyi) + H2(keyi) mod m。

伪随机法

d的取值为一个伪随机序列依次取值。

注意:使用开放地址法解决哈希冲突问题时,当删掉某个数据时,不能直接将其删除。因为这样会截断其他具有相同哈希值数据的位置。所以应该用一个标记标记下这个数据已经被删除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值