哈希函数的构造、处理冲突的方法

1哈希函数的构造、处理冲突的方法

哈希表的思想就是在待查记录的关键字值和它的存储位置之间建立一个确定的对应关系则查找时不必再进行关键字值间的比较。
根据设定的哈希函数及处理冲突的方法将查找表中各数据元素存储在一段有限的连续空间中,即得哈希表

这里有两个比较重要得问题:哈希函数的构造、处理冲突的方法。

2哈希函数的构造方法

1、直接定址法
直接根据数据的值来映射到地址,比如对数字10、11、12、13…可以将其映射到一块连续的内存中。

2、数字分析法
根据数据的某些数字(比如百位和十位数字)来映射到地址。

3、平方取中法
若关键字比较短,则可先对关键字值求平方,然后取运算结果的中间几位为哈希地址。

4、折叠法
将关键字值分割成位数相同的几个部分,然后取这几部分的叠加和(舍去进位)作为哈希地址。

5、除留余数法
H(key)=key%13

3处理冲突的几种方法

处理冲突是指对于一个待插入哈希表的数据元素,若按给定的哈希函数求得的哈希地址已被占用,则按一定规则求下一哈希地址,如此重复,直至找到一个可用的地址以保存该元素。

1、开放地址法

加粗样式
基本思想是,如果映射的地址被占用了,在哈希函数值的基础上加上指定数值,这样就可以把冲突的地址给错开,然后重新开辟新的地址用来存储。根据增量值的不同,分为线性探测再散列和二次探测再散列。
线性探测
下面在映射18时,发现18%7=4,但是哈希表的4已经被占用,对4进行加1,映射到5,发现5是空的,放到位置5即可
二次探测方式:
比如对68来说,68%11=2,结果2处被占用,这时对2+12 =3,结果发现3也被占用,这时对3-12=2,发现2再次被占用,这时对2+22=6,6位置未被占用,放入即可。

2、链地址法

将所有按给定的哈希函数求得的哈希地址相同的关键字存储在同一线性链表,且使链表按关键字有序(比如大小等属性)。

3、公共溢出区

关键字所对应的哈希地址已被占用,则保存到公共溢出区中。一般在开辟地址的时候会产生哈希地址和公共溢出区两块

猜你喜欢

转载自blog.csdn.net/zs18753479279/article/details/114866523