数据结构第讲哈希表和插入排序幻灯片.ppt
《数据结构第讲哈希表和插入排序幻灯片.ppt》由会员分享,可在线阅读,更多相关《数据结构第讲哈希表和插入排序幻灯片.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构第讲哈希表和插入排序第1页,共58页,编辑于2022年,星期六9.3.1 9.3.1 什么是哈希表什么是哈希表哈希表技术的主要目标是提高查找效率。哈希表技术的主要目标是提高查找效率。1.1.哈希函数哈希函数:根据关键字直接计算出元素所在位置的函数。根据关键字直接计算出元素所在位置的函数。例例:设哈希函数为:设哈希函数为:H(K)=K/3+1H(K)=K/3+1,则构造关键字序列,则构造关键字序列为为 1 1、2 2、5 5、9 9、1111、1313、1616、2121、27 27 的散列表(哈希的散列表(哈希表)为:表)为:序号序号12345678910H(K)15913162127
2、211第2页,共58页,编辑于2022年,星期六2.2.冲突冲突 两个不同的关键字具有相同的存储位置。两个不同的关键字具有相同的存储位置。序号序号12345678910H(K)15913162127211第3页,共58页,编辑于2022年,星期六3.3.哈希表哈希表 根据设定的哈希函数根据设定的哈希函数 H(key)H(key)和处理冲突的方法将和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的上,并以关键字在地址集中的“象象”作为记录在表中作为记录在表中的存储位置,这种表便称为的存储位置,这种表便称为哈希表
3、哈希表,这一映象过程,这一映象过程称为称为哈希造表哈希造表或或散列散列,所得存储位置称为,所得存储位置称为哈希地址哈希地址或或散列地址散列地址。第4页,共58页,编辑于2022年,星期六 在哈希存储中,若发生冲突,则必须采取特殊的方法来解决冲突在哈希存储中,若发生冲突,则必须采取特殊的方法来解决冲突问题,才能使哈希查找能顺利进行。虽然冲突不可避免,但发生冲突问题,才能使哈希查找能顺利进行。虽然冲突不可避免,但发生冲突的可能性却与三个方面因素有关。的可能性却与三个方面因素有关。(1)(1)装填因子装填因子;装填因子是指哈希表中己存入的元素个数装填因子是指哈希表中己存入的元素个数 n n 与哈希表
4、的大小与哈希表的大小 m m 的比值,即的比值,即=n/m=n/m(=1 724+518+69=724+518+69=13111311第11页,共58页,编辑于2022年,星期六6.6.随机数法随机数法 选择一个随机函数,取关键字的随机函数值为它的选择一个随机函数,取关键字的随机函数值为它的哈希地址,即哈希地址,即H(key)=random(key)H(key)=random(key),其中,其中randomrandom为随机为随机函数。函数。通常,当关键字长度不等时采用此法构造哈希通常,当关键字长度不等时采用此法构造哈希函数较恰当。函数较恰当。第12页,共58页,编辑于2022年,星期六实际
5、工作中需视不同情况采用不同的哈希函数。实际工作中需视不同情况采用不同的哈希函数。通常考虑通常考虑的因素:的因素:(1)(1)计算哈希函数所需时间计算哈希函数所需时间(包括硬件指令的因素包括硬件指令的因素);(2)(2)关键字的长度;关键字的长度;(3)(3)哈希表的大小;哈希表的大小;(4)(4)关键字的分布情况;关键字的分布情况;(5)(5)记录的查找频率。记录的查找频率。第13页,共58页,编辑于2022年,星期六第第9 9章章 查找查找9.1 9.1 静态查找表静态查找表9.2 9.2 动态查找表动态查找表9.3 9.3 哈希表哈希表 9.3.1 9.3.1 什么是哈希表什么是哈希表 9
6、.3.2 9.3.2 哈希函数的构造方法哈希函数的构造方法 9.3.3 9.3.3 处理冲突的方法处理冲突的方法 9.3.4 9.3.4 哈希表的查找及其分析哈希表的查找及其分析第14页,共58页,编辑于2022年,星期六9.3.3 9.3.3 处理冲突的方法处理冲突的方法1.1.开放地址法开放地址法 开开放放地地址址就就是是表表中中尚尚未未被被占占用用的的地地址址,当当新新插插入入的的记记录录所所选选地址已被占用时,即转而寻找其它尚开放的地址。地址已被占用时,即转而寻找其它尚开放的地址。(1 1)线性探测法)线性探测法 设设散散列列函函数数 H H(K K)=K=K mod mod m m(
7、m m为为表表长长),若若发发生生冲冲突突,则则沿沿着着一一个个探探查查序序列列逐逐个个探探查查,那那么么,第第i i次次计计算算冲冲突突的的散散列列地址为:地址为:H Hi i=(H(K)+d=(H(K)+di i)mod m (d)mod m (di i=1,2,m-1)=1,2,m-1)第15页,共58页,编辑于2022年,星期六例例 关键码集为关键码集为 47 47,7 7,2929,1111,1616,9292,2222,8 8,33,设:设:哈希表表长为哈希表表长为m=11m=11;哈希函数为哈希函数为Hash(key)=key mod 11Hash(key)=key mod 11
8、;拟用拟用线性探测法线性探测法线性探测法线性探测法处理冲突。建哈希表:处理冲突。建哈希表:0 1 2 3 4 5 6 7 8 9 100 1 2 3 4 5 6 7 8 9 1047477 7292911111616929222228 83 3第16页,共58页,编辑于2022年,星期六线性探测法的优点:线性探测法的优点:只要哈希表未被填满,保证能找到只要哈希表未被填满,保证能找到一个空地址单元存放有冲突的元素;一个空地址单元存放有冲突的元素;线性探测法的缺点:线性探测法的缺点:可能使第可能使第i i 个哈希地址的同义词存个哈希地址的同义词存入第入第i+1 i+1 个哈希地址,这样本应存入第个
9、哈希地址,这样本应存入第i+1i+1个哈个哈希地址的元素变成了第希地址的元素变成了第i+2i+2个哈希地址的同义词,个哈希地址的同义词,因此,可能出现很多元素在相邻的哈希地址上因此,可能出现很多元素在相邻的哈希地址上“堆积堆积”起来,大大降低了查找效率。起来,大大降低了查找效率。可采用可采用二次探测法二次探测法二次探测法二次探测法或或或或伪随机探测法伪随机探测法伪随机探测法伪随机探测法,以改善以改善“堆积堆积”问题。问题。第17页,共58页,编辑于2022年,星期六1.1.开放地址法开放地址法(2 2)二次探测法)二次探测法 二次探测法对应的探查地址序列的计算公式为:二次探测法对应的探查地址序
10、列的计算公式为:H Hi i=(H(k)+d=(H(k)+di i)mod m)mod m 其中其中di i=1=12 2,-1-12 2,2 22 2,-2-22 2,j j2 2,-j-j2 2 (jm/2)(jm/2)。第18页,共58页,编辑于2022年,星期六0 1 2 3 4 5 6 7 8 9 10112234792167298若若d di i伪随机序列,就称为伪随机探测法伪随机序列,就称为伪随机探测法例例 关键码集为关键码集为 47 47,7 7,2929,1111,1616,9292,2222,8 8,33,设:设:哈希表表长为哈希表表长为m=11m=11;哈希函数为哈希函数
11、为Hash(key)=key mod 11Hash(key)=key mod 11;拟用二次探测法处理冲突。建哈希表如下:拟用二次探测法处理冲突。建哈希表如下:H Hi i=(H(k)+d=(H(k)+di i)mod m)mod m其中其中d di i=1=12 2,-1-12 2,2 22 2,-2-22 2,j j2 2,-j-j2 2 (jm/2)(jm/2)第19页,共58页,编辑于2022年,星期六2.2.链地址法链地址法优点优点:插入、删除方便。:插入、删除方便。缺点缺点:占用存储空间多。:占用存储空间多。基本思想:基本思想:将具有相同哈希地址的记录链成一个单链表,将具有相同哈希
12、地址的记录链成一个单链表,m m个哈希地址就设个哈希地址就设 m m个单链表个单链表,然后用一个数组将,然后用一个数组将m m个个单链表的表头指针存储起来,形成一个动态的结构。单链表的表头指针存储起来,形成一个动态的结构。第20页,共58页,编辑于2022年,星期六例:例:设设 47,7,29,11,16,92,22,8,3,50,37,89 47,7,29,11,16,92,22,8,3,50,37,89 的哈希函数为:的哈希函数为:Hash(key)=key mod 11Hash(key)=key mod 11,用用拉链法拉链法处处理冲突,建表。理冲突,建表。0 1 2 3 4 5 6 7
13、 8 91022118934737922971650810 有冲突的元素可以插在表尾有冲突的元素可以插在表尾,也可以插在表头。也可以插在表头。第21页,共58页,编辑于2022年,星期六3.3.再哈希再哈希法法H Hi i=RH=RHi i(key)(key)RH RHi i 均是不同的哈希函数,即在同义词产生地址冲突均是不同的哈希函数,即在同义词产生地址冲突时计算另一个哈希函数地址,直到冲突不再发生。不易产时计算另一个哈希函数地址,直到冲突不再发生。不易产生生“聚集聚集”,但是增加了计算时间。,但是增加了计算时间。4.4.建立一个公共溢出区建立一个公共溢出区第22页,共58页,编辑于2022
14、年,星期六第第9 9章章 查找查找9.1 9.1 静态查找表静态查找表9.2 9.2 动态查找表动态查找表9.3 9.3 哈希表哈希表 9.3.1 9.3.1 什么是哈希表什么是哈希表 9.3.2 9.3.2 哈希函数的构造方法哈希函数的构造方法 9.3.3 9.3.3 处理冲突的方法处理冲突的方法 9.3.4 9.3.4 哈希表的查找及其分析哈希表的查找及其分析第23页,共58页,编辑于2022年,星期六9.3.4 9.3.4 哈希表的查找及其分析哈希表的查找及其分析 散列表的目的主要是用于快速查找。散列表的目的主要是用于快速查找。在在建建表表时时采采用用何何种种散散列列函函数数及及何何种种
15、解解决决冲冲突突的的办办法法,在在查查找找时时,也也采采用用同同样样的的散散列列函函数数及及解解决冲突的办法。决冲突的办法。第24页,共58页,编辑于2022年,星期六例:例:设有一组关键字设有一组关键字 19,01,23,14,55,20,19,01,23,14,55,20,84,27,68,11,10,77 84,27,68,11,10,77,采用哈希函数为:,采用哈希函数为:H H(k k)=k mod=k mod 1313。采用开放地址的线性探测法解决冲突,试。采用开放地址的线性探测法解决冲突,试在在0 01818的散列地址空间中,对该关键字序列构造哈希表。的散列地址空间中,对该关键字
16、序列构造哈希表。解:依题意解:依题意 m=19 m=19,得到线性探测法对应的探查地址序,得到线性探测法对应的探查地址序列计算公式为:列计算公式为:di=(H(k)+j)mod di=(H(k)+j)mod 1919;j=1,2,18;j=1,2,18 其计算函数如下:其计算函数如下:第25页,共58页,编辑于2022年,星期六H(19)=19 mod 13=6H(01)=01 mod 13=1H(23)=23 mod 13=10H(14)=14 mod 13=1(冲突冲突)H(14)=(1+1)mod 19=2H(55)=55 mod 13=3H(20)=20 mod 13=7H(84)=8
17、4 mod 13=6(冲突冲突)H(84)=(6+1)mod 19=7(冲突冲突)H(84)=(6+2)mod 19=8H(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=40123456789 10 11 12 13 14 15 16 17 181919,01,23,14,55,20,84,27,68,11,10,770123145520842777101168 第26页,共58页,编辑于2022年,星期六哈希查找的性能分析哈希查找的性能分析 哈哈希希查查找找
18、按按理理论论分分析析,它它的的时时间间复复杂杂度度应应为为O(1)O(1),它它的的平平均均查查找找长长度度应应为为ASL=1ASL=1,但但实实际际上上由由于于冲冲突突的的存存在在,它它的的平平均均查查找找长长度度将将会会比比1 1大大。下下面将分析几种方法的平均查找长度。面将分析几种方法的平均查找长度。第27页,共58页,编辑于2022年,星期六1.1.线性探查法的性能分析线性探查法的性能分析 由由于于线线性性探探查查法法解解决决冲冲突突是是线线性性地地查查找找空空闲闲位位置置的的,平平均均查查找找长长度度与与表表的的大大小小m m无无关关,只只与与所所选选取取的哈希函数的哈希函数H H及
19、装填因子及装填因子的值和该处理方法有关。的值和该处理方法有关。这时的成功的平均查找长度为:这时的成功的平均查找长度为:ASL=(1+1/(1-)/2 ASL=(1+1/(1-)/2第28页,共58页,编辑于2022年,星期六2.2.链地址法查找的性能分析链地址法查找的性能分析 由于链地址法查找就是在单链表上查找,查找由于链地址法查找就是在单链表上查找,查找单链表中第一个结点的次数为单链表中第一个结点的次数为1 1,第二个结点次数,第二个结点次数为为2 2,其余依次类推。,其余依次类推。平均查找长度:平均查找长度:ASL=1+/2 ASL=1+/2第29页,共58页,编辑于2022年,星期六例例
20、:给给定定关关键键字字序序列列1111,7878,1010,1 1,3 3,2 2,4 4,2121,试试分分别别用用顺顺序序查查找找、二二分分查查找找、二二叉叉排排序序树树查查找找、平平衡衡二二叉叉树树查查找找、哈哈希希查查找找(用用线线性性探探查查法法和和拉拉链链法法)来来实实现现查查找找,试试画画出出它它们们的的对对应应存存储储形形式式(顺顺序序查查找找的的顺顺序序表表,二二分分查查找找的的判判定定树树,二二叉叉排排序序树树查查找找的的二二叉叉排排序序树树及及平平衡衡二二叉叉树树查查找找的的平平衡衡二二叉叉树树,两两种种哈哈希希查查找找的的哈哈希希表表),并并求求出出每每一一种种查查找找
21、的的成成功功平平均均查查找找长长度度。设设哈哈希希函函数数为为:H(k)=k mod 11H(k)=k mod 11,哈希表表长,哈希表表长m=11m=11。第30页,共58页,编辑于2022年,星期六顺序查找的顺序表(一维数组)顺序查找的顺序表(一维数组)由图可得:顺序查找的成功平均查找长度为由图可得:顺序查找的成功平均查找长度为 ASL=(1+2+3+4+5+6+7+8)/8=4.5 ASL=(1+2+3+4+5+6+7+8)/8=4.5第31页,共58页,编辑于2022年,星期六二分查找的判定树二分查找的判定树(中序序列为从小到大排列的有序(中序序列为从小到大排列的有序序列)序列)由图可
22、得:二分查找的成功平均查找长度为由图可得:二分查找的成功平均查找长度为 ASL=(1+2*2+3*4+4)/8=2.625 ASL=(1+2*2+3*4+4)/8=2.625第32页,共58页,编辑于2022年,星期六二叉排序树二叉排序树(关键字顺序已确定,该二叉排序树应唯一)如图(关键字顺序已确定,该二叉排序树应唯一)如图(a)(a)所示,所示,平衡二叉树(关键字顺序已确定,该平衡二叉树也应该是唯一的),平衡二叉树(关键字顺序已确定,该平衡二叉树也应该是唯一的),如图如图(b)(b)所示。所示。由图由图(a)(a)可得:二叉排序树查找的成功平均查找长度为可得:二叉排序树查找的成功平均查找长度
23、为 ASL=(1+2*2+3*2+4+5*2)/9=3.125 ASL=(1+2*2+3*2+4+5*2)/9=3.125由图由图(b)(b)可得:平衡二叉树的成功平均查找长度为可得:平衡二叉树的成功平均查找长度为 ASL=(1+2*2+3*3+4*2)/8=2.75 ASL=(1+2*2+3*3+4*2)/8=2.75 11 10 1 3 2 4 78 21 3 1 11 2 10 4 78 21(a)二叉排序树二叉排序树 (b)平衡二叉树平衡二叉树第33页,共58页,编辑于2022年,星期六线性探查法解决冲突的哈希表如图所示。线性探查法解决冲突的哈希表如图所示。由图可得:线性探查法的成功平
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第讲哈希表 插入 排序 幻灯片
限制150内