数据结构第22讲哈希表和插入排序1.ppt
《数据结构第22讲哈希表和插入排序1.ppt》由会员分享,可在线阅读,更多相关《数据结构第22讲哈希表和插入排序1.ppt(58页珍藏版)》请在三一办公上搜索。
1、第9章 查找9.1 静态查找表9.2 动态查找表9.3 哈希表 9.3.1 什么是哈希表 9.3.2 哈希函数的构造方法 9.3.3 处理冲突的方法 9.3.4 哈希表的查找及其分析,9.3.1 什么是哈希表,哈希表技术的主要目标是提高查找效率。1.哈希函数:根据关键字直接计算出元素所在位置的函数。例:设哈希函数为:H(K)=K/3+1,则构造关键字序列为 1、2、5、9、11、13、16、21、27 的散列表(哈希表)为:,2.冲突 两个不同的关键字具有相同的存储位置。,3.哈希表 根据设定的哈希函数 H(key)和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字
2、在地址集中的“象”作为记录在表中的存储位置,这种表便称为哈希表,这一映象过程称为哈希造表或散列,所得存储位置称为哈希地址或散列地址。,在哈希存储中,若发生冲突,则必须采取特殊的方法来解决冲突问题,才能使哈希查找能顺利进行。虽然冲突不可避免,但发生冲突的可能性却与三个方面因素有关。(1)装填因子;装填因子是指哈希表中己存入的元素个数 n 与哈希表的大小 m 的比值,即=n/m(=1)。越小,发生冲突的可能性越小,反之,发生冲突的可能性就越大。但是,太小又会造成大量存贮空间的浪费,因此必须兼顾存储空间和冲突两个方面。(2)所构造的哈希函数;(3)解决冲突的方法。,构造好的哈希函数,使冲突尽可能的少
3、 设计有效的解决冲突的方法,第9章 查找9.1 静态查找表9.2 动态查找表9.3 哈希表 9.3.1 什么是哈希表 9.3.2 哈希函数的构造方法 9.3.3 处理冲突的方法 9.3.4 哈希表的查找及其分析,9.3.2 哈希函数的构造方法,例:关键码集合为 100,300,500,700,800,900,选取哈希函数为 Hash(key)=key/100,则存储结构(哈希表)如下:,1.直接定址法 取关键字或关键字的某个线性函数值为散列地址,即(K)=K 或 H(K)=a*K+b(其中a、b为常数)。,优点:以关键码 key 的某个线性函数值为哈希地址,不会产生冲突。缺点:要占用连续地址空
4、间,空间效率低。,2.除后余数法 取关键字被不大于散列表表长 m 的数 p 除后所得的余数为哈希函数。即 H(K)=K mod p(pm)经验得知:一般可选p为质数或不包含小于20的质因素的合数。3.平方取中法 取关键字平方后的中间几位为哈希函数。因为中间几位与数据的每一位都相关。例:2589的平方值为6702921,可以取中间的029为地址。,选用关键字的某几位组合成哈希地址。选用原则应当是:各种符号在该位上出现的频率大致相同。,3 4 7 0 5 2 4 3 4 9 1 4 8 73 4 8 2 6 9 63 4 8 5 2 7 03 4 8 6 3 0 53 4 9 8 0 5 83 4
5、 7 9 6 7 13 4 7 3 9 1 9,例:有一组(例如80个)关键码,其样式如下:,讨论:第1、2位均是“3和4”,第3位也只有“7、8、9”,因此,这几位不能用,余下四位分布较均匀,可作为哈希地址选用。,位号:,若哈希地址取两位(因元素仅80个),则可取这四位中的任意两位组合成哈希地址,也可以取其中两位与其它两位叠加求和后,取低两位作哈希地址。,4.数字分析法,5.折叠法 是将关键字按要求的长度分成位数相等的几段,最后一段如不够长可以短些,然后把各段重叠在一起相加并去掉进位,以所得的和作为地址。适用于:每一位上各符号出现概率大致相同的情况。,移位法:将各部分的最后一位对齐相加。间界
6、叠加法:从一端向另一端沿分割界来回折叠后,最后一位对齐相加。例:元素42751896,移位法:42751896=1041 间界叠加法:427 518 96 724+518+69=1311,6.随机数法 选择一个随机函数,取关键字的随机函数值为它的哈希地址,即H(key)=random(key),其中random为随机函数。通常,当关键字长度不等时采用此法构造哈希函数较恰当。,实际工作中需视不同情况采用不同的哈希函数。通常考虑的因素:(1)计算哈希函数所需时间(包括硬件指令的因素);(2)关键字的长度;(3)哈希表的大小;(4)关键字的分布情况;(5)记录的查找频率。,第9章 查找9.1 静态查
7、找表9.2 动态查找表9.3 哈希表 9.3.1 什么是哈希表 9.3.2 哈希函数的构造方法 9.3.3 处理冲突的方法 9.3.4 哈希表的查找及其分析,9.3.3 处理冲突的方法1.开放地址法 开放地址就是表中尚未被占用的地址,当新插入的记录所选地址已被占用时,即转而寻找其它尚开放的地址。,(1)线性探测法 设散列函数 H(K)=K mod m(m为表长),若发生冲突,则沿着一个探查序列逐个探查,那么,第i次计算冲突的散列地址为:Hi=(H(K)+di)mod m(di=1,2,m-1),例 关键码集为 47,7,29,11,16,92,22,8,3,设:哈希表表长为m=11;哈希函数为
8、Hash(key)=key mod 11;拟用线性探测法处理冲突。建哈希表:,0 1 2 3 4 5 6 7 8 9 10,29,22,8,3,线性探测法的优点:只要哈希表未被填满,保证能找到一个空地址单元存放有冲突的元素;线性探测法的缺点:可能使第i 个哈希地址的同义词存入第i+1 个哈希地址,这样本应存入第i+1个哈希地址的元素变成了第i+2个哈希地址的同义词,,因此,可能出现很多元素在相邻的哈希地址上“堆积”起来,大大降低了查找效率。,可采用二次探测法或伪随机探测法,以改善“堆积”问题。,1.开放地址法,(2)二次探测法 二次探测法对应的探查地址序列的计算公式为:Hi=(H(k)+di)
9、mod m 其中di=12,-12,22,-22,j2,-j2(jm/2)。,0 1 2 3 4 5 6 7 8 9 10,若di伪随机序列,就称为伪随机探测法,例 关键码集为 47,7,29,11,16,92,22,8,3,设:哈希表表长为m=11;哈希函数为Hash(key)=key mod 11;拟用二次探测法处理冲突。建哈希表如下:,Hi=(H(k)+di)mod m其中di=12,-12,22,-22,j2,-j2(jm/2),2.链地址法,优点:插入、删除方便。缺点:占用存储空间多。,基本思想:将具有相同哈希地址的记录链成一个单链表,m个哈希地址就设 m个单链表,然后用一个数组将m
10、个单链表的表头指针存储起来,形成一个动态的结构。,例:设 47,7,29,11,16,92,22,8,3,50,37,89 的哈希函数为:Hash(key)=key mod 11,用拉链法处理冲突,建表。,有冲突的元素可以插在表尾,也可以插在表头。,3.再哈希法Hi=RHi(key)RHi 均是不同的哈希函数,即在同义词产生地址冲突时计算另一个哈希函数地址,直到冲突不再发生。不易产生“聚集”,但是增加了计算时间。,4.建立一个公共溢出区,第9章 查找9.1 静态查找表9.2 动态查找表9.3 哈希表 9.3.1 什么是哈希表 9.3.2 哈希函数的构造方法 9.3.3 处理冲突的方法 9.3.
11、4 哈希表的查找及其分析,9.3.4 哈希表的查找及其分析,散列表的目的主要是用于快速查找。在建表时采用何种散列函数及何种解决冲突的办法,在查找时,也采用同样的散列函数及解决冲突的办法。,例:设有一组关键字 19,01,23,14,55,20,84,27,68,11,10,77,采用哈希函数为:H(k)=k mod 13。采用开放地址的线性探测法解决冲突,试在018的散列地址空间中,对该关键字序列构造哈希表。,解:依题意 m=19,得到线性探测法对应的探查地址序列计算公式为:di=(H(k)+j)mod 19;j=1,2,18 其计算函数如下:,H(19)=19 mod 13=6,H(01)=
12、01 mod 13=1,H(23)=23 mod 13=10,H(14)=14 mod 13=1(冲突),H(14)=(1+1)mod 19=2,H(55)=55 mod 13=3,H(20)=20 mod 13=7,H(84)=84 mod 13=6(冲突),H(84)=(6+1)mod 19=7(冲突),H(84)=(6+2)mod 19=8,H(27)=27 mod 13=1(冲突),H(27)=(1+1)mod 19=2(冲突),H(27)=(1+2)mod 19=3(冲突),H(27)=(1+3)mod 19=4,19,19,01,23,14,55,20,84,27,68,11,10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 22 讲哈希表 插入 排序
链接地址:https://www.31ppt.com/p-5468006.html