处理散列冲突的方法

1.  开放定址法
开放定址法就是一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。
H = (H(key) + d i ) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,d i 为增量序列。d i 可有下列三种取法:
(1)d i =1,2,3,…, m-1,称为线性探测再散列;
(2)d i =1^2, -(1^2), 2^2, -(2^2), 3^2, …, ±(k^2),(k<=m/2),称二为次探测再散列;
(3)d i =伪随机数序列,称为伪随机探测再散列。
所谓伪随机数,用同样的随机种子,将得到相同的数列。
2.  再散列函数法
H i =RH i (key), i=1,2,…,k RH i 均是不同的散列函数(比如除留余数、折叠、平方取中),在同义词产生地址冲突时就换用另一个散列函数计算散列地址,直到碰撞不再发生,这种方法不易产生“聚集”,但增加了计算时间。
3.  链地址法
将所有关键字为同义词的记录存储在一个单链表中,称这种表为同义词子表,在散列表中只存储所有同义词子表的头指针。
链地址法对于可能会造成很多冲突散列函数来说,提供了绝不会出现找不到地址的保障。但也就带来了查找时需要遍历单链表的性能损耗。
4.  公共溢出区法
为所有冲突的关键字记录建立一个公共的溢出区来存放。在查找时,对给定关键字通过散列函数计算出散列地址后,先与基本表的相应位置进行比对,如果相等,则查找成功;如果不相等,则到溢出表进行顺序查找。如果相对于基本表而言,在有冲突的数据很少的情况下,公共溢出区的结构对查找性能来说还是非常高的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值