数据结构—— 处理散列冲突的四种方法【开放定址法-再散列函数法-链地址法-公共溢出区法】

目录:

一:开放定址法

1.定义

2.要求

3. 线性探测法

4.二次探测法

5. 随机探测法

二:再散列函数法

1.散列函数

2.解释

3.优点弊端

A:优点

B:弊端

三:链地址法

1.定义

2.优点弊端

A:优点

B:弊端

四: 公共溢出区法


一:开放定址法

1.定义

所谓的 开放定址法 就是一旦发生了冲突,就去寻找下一个空的散列地址

2.要求

只要散列表足够大

空的散列地址总能找到,并将记录存入

3. 线性探测法

使用该公式用于解决冲突的开放定址法称为 线性探测法

 

对于 线性探测法,在出现冲突时,它只能晚后一步一步检测是否有空位置

 

假设此时该冲突位置没有可用位置,但前面有一个空位置

尽管可以不断地求余数后得到结果,但效率很差

4.二次探测法

因此可以改进该算法,增加双向寻找可能的空位置,这种新算法称为 二次探测法

5. 随机探测法

此外还有一种方法是,在冲突时,对于位移量采用随机函数计算得到,我们称为 随机探测法

 

这里的随机其实是伪随机数

即设置相同的随机种子,则不断调用随机函数的过程中可以生成不会重复的数列

同时,在查找时,用同样的随机种子,它每次得到的数列也是相同

因此相同的 就可以得到相同的散列地址

 

二:再散列函数法

1.散列函数

提供多个散列函数

2.解释

这里的 就是不同的散列函数

然后每当发生散列地址冲突时

换一个散列函数计算

相信总会有一个可以把冲突解决掉(todo:: how to search??)

3.优点弊端

A:优点

这种方法能够使得关键字不产生聚集

B:弊端

当然,相应地也增加了计算的时间

 

三:链地址法

1.定义

将所有关键字为同义词(即哈希地址相同)的记录存储在一个单链表中

我们称这种表为同义词子表

 

散列表只存储所有同义词子表头指针

2.优点弊端

A:优点

链地址法对于可能会造成很多冲突散列函数来说

提供绝不会出现找不到地址的保障

B:弊端

当然,这也就带来了查找时需要遍历单链表的性能损耗

 

四: 公共溢出区法

即为所有冲突的关键字建立一个公共的溢出区来存放

 

在查找时,对给定值通过散列函数计算出散列地址后

先与基本表的相应位置进行比对

如果相等,则查找成功

如果不相等,则到溢出表去进行顺序查找

 

如果对于基本表而言,有冲突的数据很少的情况下

公共溢出区的结构对查找性能来说还是非常高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘鑫磊up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值