散列解决冲突的方法

01 开放定址法

也被称为再散列法。基本思想是:当关键字key的哈希地址p出现冲突时,以p为基础产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础产生p2,……,直到找到一个不冲突的哈希地址pi,将相应元素存入其中。这种方法有一个通用的再散列函数形式:

Hi = (H(key)+di)%m (i=1,2,3,……)

其中H(key)为哈希函数,m为表长,di称为增长序列。

增长序列的取值方式不同,相应的再散列方式也不同。主要有以下三种:

  1. 线性探测再散列——冲突发生时,顺序查看表中下一单元,直到找出一个空单元或者查遍全表。

缺点:容易造成元素聚集,降低查找效率

  1. 二次探测再散列——冲突发生时,在表的左右进行跳跃式探测,比较灵活。

优点:避免堆积问题 缺点:不能探测表中的所有元素,但至少能探测到一半的元素

  1. 伪随机探测再散列

缺点:用同样的随机种子,将得到相同的散列。

02 再哈希法

这种方法是同时构造多个不同的哈希函数,当第一个函数发生冲突时,再计算第二个函数,……,直到冲突不再发生。这种方法不易产生聚集,但增加了计算时间。

03 链地址法

该方法基本思想是将所有的哈希地址为i的元素构成一个同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入、删除主要在同义词链中进行。该方法适用于经常进行插入和删除的情况。

优点:避免了动态调整的开销

04 建立公共溢出区

将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。

转载于:https://my.oschina.net/u/3938912/blog/3085000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值