C语言数据结构与算法-------查找(二)哈希法

目录

一、哈希函数的构造方法

1.数字分析法

2.平方取中法

3.分段叠加法

4.除留余数法

5.伪随机数法

二、处理冲突的方法

1.开放地址法

2.再哈希法

3.链地址法

4.建立公共溢出区

三、哈希法性能分析


哈希法又称散列法或关键字地址计算法,相应的表称为哈希表。哈希查找,就是在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样不经过比较,一次存取就能得到所查元素的查找方法。

一、哈希函数的构造方法

1.数字分析法

        对数字进行分析,比如一串身份证号,其中前两位代表省份编码,3,4代表城市的编码......

通过对这一段数字的分析,可以清楚知道公民个人信息。这种方法适合关键字事先知道,取关键字的若干位作哈希地址。

2.平方取中法

取关键字平方后中间几位作哈希地址。

3.分段叠加法

4.除留余数法

        取关键字被某个不大于哈希表表长m的数p除后所得余数作哈希地址,即H(key)=key MOD p,p<=m

5.伪随机数法

H(key)=random(k)

二、处理冲突的方法

1.开放地址法

        当冲突发生时,形成一个探查序列;沿此序列逐个地址探查,直到找到一个空位置(开放的地址),将发生冲突的记录放到该地址中,即   Hi=(H(key)+di)MOD m,i=1,2,……k  (k<=m-1)

其中:H(key)——哈希函数

          m——哈希表表长

          di——增量序列

分类: 

  • 线性探测再散列       di=1,2,3,……m-1
  • 二次探测再散列       di=1²,-1²,2²,-2²,3²,……±k²(k<=m/2)

  • 伪随机探测再散列     di=伪随机数序列

2.再哈希法

        方法:构造若干个哈希函数,当发生冲突时,计算下一个哈希地址,即:Hi=Rhi(key)     i=1,2,……k。

  • Rhi——不同的哈希函数
  • 计算时间增加

3.链地址法

        将所有关键字为同义词的记录存储在一个单链表中,并用一维数组存放头指针。 

4.建立公共溢出区

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

三、哈希法性能分析

哈希查找过程仍是一个给定值与关键字进行比较的过程,评价哈希查找效率仍要用ASL。

哈希查找过程与给定值进行比较的关键字的个数取决于:

  • 哈希函数
  • 处理冲突的方法
  • 哈希表的填满因子

a=表中填入的记录数/哈希表长度

ASLsucc=  元素总的比较次数/表中置入元素个数。

ASLunsucc=  查找不成功比较次数/表的长度。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

知心宝贝

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值