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