学习笔记 | 解决Hash冲突的4种办法

本文详细介绍了解决哈希冲突的四种方法:开放地址法(包括线性探测再散列和二次探测再散列)、再哈希法、链地址法以及建立公共溢出区。开放地址法中,当发生冲突时会继续探测其他存储单元;再哈希法通过多个哈希函数避免冲突;链地址法将同义词记录存储在链表中;公共溢出区将冲突元素存储在额外的表中。每种方法都有其优缺点,如线性探测可能产生聚集,再哈希法增加计算时间等。
摘要由CSDN通过智能技术生成
  • 因为HashMap的长度是有限的,当插入的Entry越来越多时,再完美的Hash函数也难免会出现index冲突的情况。
a)开放地址法

这个方法的基本思想是: 当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。

这个过程可用下式描述:

Hi (key) = ( H (key)+ di ) mod m ( i = 1,2,……,k (k ≤ m – 1) )

  • 其中:H (key)为关键字 key的直接哈希地址,m为哈希表的长度, di每次再探测时的地址增量

  • 采用这种方法时,首先计算出元素的直接哈希地址 H (key),如果该存储单元已被其他元素占用,则继续查看地址为 H (key) + d2 的存储单元,如此重复直至找到某个存储单元为空时,将关键字为key 的数据元素存放到该单元。

  • 增量 d 可以有不同的取法,并根据其取法有不同的称呼:
    (1) di = 1 , 2 , 3 , ……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值