目录
哈希法又称散列法或关键字地址计算法,相应的表称为哈希表。哈希查找,就是在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样不经过比较,一次存取就能得到所查元素的查找方法。
一、哈希函数的构造方法
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= 查找不成功比较次数/表的长度。