第七章 哈希表优秀PPT.ppt
《第七章 哈希表优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第七章 哈希表优秀PPT.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 哈希表哈希表现在学习的是第1页,共41页哈希表哈希表哈希表 第七章第七章现在学习的是第2页,共41页预习检查预习检查v哈希表的定义v处理冲突的方法有那些现在学习的是第3页,共41页本章目标本章目标v了解什么是哈希表了解什么是哈希表v掌握如何构造哈希函数掌握如何构造哈希函数v处理冲突的方式处理冲突的方式v哈希表的查找及分析哈希表的查找及分析现在学习的是第4页,共41页本章结构本章结构处理冲突的方法哈希表哈希表哈希函数的构造方法什么是哈希表现在学习的是第5页,共41页7-17-1 哈希表哈希表哈希表哈希表 哈希表又称哈希表又称哈希表又称哈希表又称散列表散列表散列表散列表。哈哈哈哈希希
2、希希表表表表存存存存储储储储的的的的基基基基本本本本思思思思想想想想是是是是:以以以以数数数数据据据据表表表表中中中中的的的的每每每每个个个个记记记记录录录录的的的的关关关关键键键键字字字字 k k k k为为为为自自自自变变变变量量量量,通通通通过过过过一一一一种种种种函函函函数数数数H(k)H(k)H(k)H(k)计计计计算算算算出出出出函函函函数数数数值值值值。把把把把这这这这个个个个值值值值解解解解释释释释为为为为一一一一块块块块连连连连续续续续存存存存储储储储空空空空间间间间(即即即即数数数数组组组组空空空空间间间间)的的的的单单单单元元元元地地地地址址址址(即即即即下下下下标标标标
3、),将将将将该该该该记记记记录录录录存存存存储储储储到到到到这这这这个个个个单单单单元元元元中中中中。在在在在此此此此称称称称该该该该函函函函数数数数H H H H为为为为哈哈哈哈希希希希函函函函数数数数或或或或散散散散列列列列函函函函数数数数。按按按按这这这这种种种种方方方方法建立的表称为法建立的表称为法建立的表称为法建立的表称为哈希表哈希表哈希表哈希表或或或或散列表散列表散列表散列表。现在学习的是第6页,共41页 例例如如,要要将将关关键键字字值值序序列列(3 3,1515,2222,2424),存存储储到到编编号号为为0 0到到4 4的的表表长为长为5 5的哈希表中。的哈希表中。计计算算
4、存存储储地地址址的的哈哈希希函函数数可可取取除除5 5的的取取余余数数算算法法H(k)=k H(k)=k%5 5。则则构构造造好好的的哈哈希希表如图所示。表如图所示。7-17-1 哈希表哈希表哈希表哈希表现在学习的是第7页,共41页7-17-1 哈希表哈希表哈希表哈希表 理理想想情情况况下下,哈哈希希函函数数在在关关键键字字和和地地址址之之间间建建立立了了一一个个一一一一对对应应关关系系,从从而而使使得得查查找找只只需需一一次次计计算算即即可可完完成成。由由于于关关键键字字值值的的某某种种随随机机性性,使使得得这这种种一一一一对对应应关关系系难难以以发发现现或或构构造造。因因而而可可能能会会出
5、出现现不不同同的的关关键键字字对对应应一一个个存存储储地地址址。即即k1k2k1k2,但,但H(k1)=H(k2H(k1)=H(k2),这种现象称为这种现象称为冲突冲突。把这种具有不同关键字值而具有相同哈希地址的对象称把这种具有不同关键字值而具有相同哈希地址的对象称“同义词同义词”。在在大大多多数数情情况况下下,冲冲突突是是不不能能完完全全避避免免的的。这这是是因因为为所所有有可可能能的的关关键键字字的的集集合合可可能能比较大,而对应的地址数则可能比较少。比较大,而对应的地址数则可能比较少。对于哈希技术,主要研究两个问题:对于哈希技术,主要研究两个问题:(1 1)如何设计哈希函数以使冲突尽可能
6、少地发生。如何设计哈希函数以使冲突尽可能少地发生。(2 2)发生冲突后如何解决。发生冲突后如何解决。现在学习的是第8页,共41页 构造好的构造好的哈希函数哈希函数的方法,应能使冲突尽可能地少,因而应具有较的方法,应能使冲突尽可能地少,因而应具有较好的随机性。这样可使一组关键字的散列地址均匀地分布在整个地址空间。好的随机性。这样可使一组关键字的散列地址均匀地分布在整个地址空间。根据关键字的结构和分布的不同,可构造出许多不同的哈希函数。根据关键字的结构和分布的不同,可构造出许多不同的哈希函数。1直接定址法直接定址法 直直接接定定址址法法是是以以关关键键字字k k本本身身或或关关键键字字加加上上某某
7、个个数数值值常常量量c c作作为为哈哈希希地址的方法。该哈希函数地址的方法。该哈希函数H(k)H(k)为:为:H(k)=k+c (c0)H(k)=k+c (c0)这这种种哈哈希希函函数数计计算算简简单单,并并且且不不可可能能有有冲冲突突发发生生。当当关关键键字字的的分分布布基基本本连连续续时时,可可使使用用直直接接定定址址法法的的哈哈希希函函数数。否否则则,若若关关键键字分布不连续将造成内存单元的大量浪费。字分布不连续将造成内存单元的大量浪费。7-1-1 哈希函数的构造方法哈希函数的构造方法现在学习的是第9页,共41页例例:统统计计某某地地区区从从19491949年年到到19951995年年每
8、每年年出出生生的的人人数数,列列在在一一张张表表中中。年年份份为为关键字,因共有关键字,因共有4747年,所以表中位置范围是年,所以表中位置范围是1 14747。设置设置H(k)=k-1948H(k)=k-1948即可,其中即可,其中k k为年份数。为年份数。这样的哈希表示意如下:这样的哈希表示意如下:若要查若要查19701970年的出生人数,则根据(年的出生人数,则根据(1970-1948=221970-1948=22)计算,在表的第计算,在表的第2222个位置即可找到。个位置即可找到。7-1-1 哈希函数的构造方法哈希函数的构造方法现在学习的是第10页,共41页2除留余数法除留余数法 取取
9、关关键键字字k k除除以以哈哈希希表表长长度度m m所所得得余余数数作作为为哈哈希希函函数数地地址址的的方方法法。即:即:H(k)=kH(k)=km m 这这是是一一种种较较简简单单、也也是是较较常常见见的的构构造造方方法法。这这种种方方法法的的关关键键是是选选择择好好哈哈希希表表的的长长度度m m。使使得得数数据据集集合合中中的的每每一一个个关关键键字字通通过过该该函函数数转转化化后后映映射射到到哈哈希希表表的的任任意意地地址址上上的的概概率率相相等等。理理论论研研究究表表明明,在在m m取取值值为为素素数数(质质数数)时,冲突可能性相对较少。时,冲突可能性相对较少。7-1-1 哈希函数的构
10、造方法哈希函数的构造方法现在学习的是第11页,共41页3平方取中法平方取中法 取取关关键键字字平平方方后后的的中中间间几几位位作作为为哈哈希希函函数数地地址址(若若超超出出范范围围时时,可可再取模)。再取模)。设设有有一一组组关关键键字字ABCABC,BCD,CDEBCD,CDE,DEFDEF,其其对对应应的的机机内内码码如如表表所所示示。假假定定地地址址空空间间的的大大小小为为10001000,编编号号为为0-9990-999。现现按按平平方方取取中中法法构构造造哈哈希希函函数数,则则可可取取关关键键字字机机内内码码平平方方后后的的中中间间三三位位作作为为存存储储位置。计算过程如下表所示:位
11、置。计算过程如下表所示:7-1-1 哈希函数的构造方法哈希函数的构造方法现在学习的是第12页,共41页4折叠法折叠法 这这种种方方法法适适合合在在关关键键字字的的位位数数较较多多,而而地地址址区区间间较较小小的情况的情况。将将关关键键字字分分隔隔成成位位数数相相同同的的几几部部分分。然然后后将将这这几几部部分分的叠加和作为哈希地址(若超出范围,可再取模)。的叠加和作为哈希地址(若超出范围,可再取模)。例例如如,假假设设关关键键字字为为某某人人身身份份证证号号码码430104681015355430104681015355,则则 可可 以以 用用 4 4位位 为为 一一 组组 进进 行行 叠叠
12、加加。即即 有有5355+8101+1046+430=149325355+8101+1046+430=14932,舍去高位。,舍去高位。则有则有H(430104681015355)=4932H(430104681015355)=4932为该身份证关键字的哈希函数地址。为该身份证关键字的哈希函数地址。7-1-1 哈希函数的构造方法哈希函数的构造方法现在学习的是第13页,共41页5数值分析法数值分析法 若事先知道所有可能的关键字的取值时,可通过对若事先知道所有可能的关键字的取值时,可通过对这些关键字进行分析,发现其变化规律,构造出相应的这些关键字进行分析,发现其变化规律,构造出相应的哈希函数哈希函
13、数。例例:对对如如下下一一组组关关键键字字通通过过分分析析可可知知:每每个个关关键键字字从从左左到到右右的第的第l l,2 2,3 3位和第位和第6 6位取值较集中,不宜作哈希地址。位取值较集中,不宜作哈希地址。剩剩余余的的第第4 4,5 5,7 7和和8 8位位取取值值较较分分散散,可可根根据据实实际际需需要要取其中的若干位作为哈希地址。取其中的若干位作为哈希地址。7-1-1 哈希函数的构造方法哈希函数的构造方法现在学习的是第14页,共41页 若取最后两位作为哈希地址,则哈希地址的集合若取最后两位作为哈希地址,则哈希地址的集合为下表所示:为下表所示:7-1-1 哈希函数的构造方法哈希函数的构
14、造方法现在学习的是第15页,共41页7-1-2 冲突的解决方法冲突的解决方法 假设哈希表的地址范围为假设哈希表的地址范围为0 0m-lm-l,当对给定的关键字当对给定的关键字k k,由由哈希函数哈希函数H(k)H(k)算出的哈希地址为算出的哈希地址为i i(0im-10im-1)的位置上已存有记的位置上已存有记录,这种情况就是录,这种情况就是冲突现象冲突现象。处处理理冲冲突突就就是是为为该该关关键键字字的的记记录录找找到到另另一一个个“空空”的的哈哈希希地地址址。即即通通过过一一个个新新的的哈哈希希函函数数得得到到一一个个新新的的哈哈希希地地址址。如如果果仍仍然然发发生生冲冲突突,则再求下一个
15、,依次类推。直至新的哈希地址不再发生冲突为止。则再求下一个,依次类推。直至新的哈希地址不再发生冲突为止。常用的处理冲突的方法有常用的处理冲突的方法有开放地址法开放地址法、链地址法链地址法两大类两大类 现在学习的是第16页,共41页1 1开放定址法开放定址法 用用开开放放定定址址法法处处理理冲冲突突就就是是当当冲冲突突发发生生时时,形形成成一一个个地地址址序序列列。沿沿着着这这个个序序列列逐逐个个探探测测,直直到到找找出出一一个个“空空”的的开开放放地地址址。将将发发生生冲冲突的关键字值存放到该地址中去。突的关键字值存放到该地址中去。如如 H Hi i=(H(k)+d=(H(k)+d(i i))
16、%m,i=1)%m,i=1,2 2,k k (km-1)(km-1)其其中中H(k)H(k)为为哈哈希希函函数数,m m为为哈哈希希表表长长,d d为为增增量量函函数数,d(i)=dd(i)=dl l,d d2 2d dn-ln-l。增量序列的取法不同,可得到不同的开放地址处理冲突探测方法。增量序列的取法不同,可得到不同的开放地址处理冲突探测方法。7-1-2 冲突的解决方法冲突的解决方法现在学习的是第17页,共41页(1 1)线性探测法)线性探测法 线线性性探探测测法法是是从从发发生生冲冲突突的的地地址址(设设为为d d)开开始始,依依次次探探查查d+ld+l,d+2d+2,m-1m-1(当当
17、达达到到表表尾尾m-1m-1时时,又又从从0 0开开始始探探查查)等等地地址址,直直到到找到一个空闲位置来存放冲突处的关键字。找到一个空闲位置来存放冲突处的关键字。若整个地址都找遍仍无空地址,则产生溢出。若整个地址都找遍仍无空地址,则产生溢出。线性探查法的数学递推描述公式为:线性探查法的数学递推描述公式为:d d0 0=H(k)=H(k)d di i=(d=(di-1i-1+1)%m+1)%m (1im-1)(1im-1)7-1-2 冲突的解决方法冲突的解决方法现在学习的是第18页,共41页7-1-2 冲突的解决方法冲突的解决方法【例例】已已知知哈哈希希表表地地址址区区间间为为0 01010,
18、给给定定关关键键字字序序列列(2020,3030,7070,1515,8 8,1212,1818,6363,1919)。哈哈希希函函数数为为H(k)=kH(k)=kllll,采采用用线线性性探探测测法法处处理理冲冲突突,则则将将以以上上关关键键字字依依次次存存储储到到哈哈希希表表中中。试试构构造造出出该该哈哈希希表表,并并求求出出等等概概率率情况下的平均查找长度。情况下的平均查找长度。假设数组为假设数组为A,A,本题中各元素的存放过程如下:本题中各元素的存放过程如下:H(20)=9 H(20)=9,可直接存放到,可直接存放到A9A9中去。中去。H(30)=8 H(30)=8,可直接存放到,可直
19、接存放到A8A8中去。中去。H(70)=4 H(70)=4,可直接存放到,可直接存放到A4A4中去。中去。H(15)=4 H(15)=4,冲突;,冲突;d0=4d0=4 d1=(4+1)%11=5 d1=(4+1)%11=5,将,将1515放入到放入到A5A5中。中。H(8)=8 H(8)=8,冲突;,冲突;d0=8 d0=8 d1=(8+1)%11=9 d1=(8+1)%11=9,仍冲突;,仍冲突;d2=(8+2)%11=10 d2=(8+2)%11=10,将,将8 8放入到放入到A10A10中中。现在学习的是第19页,共41页7-1-2 冲突的解决方法冲突的解决方法H(12)=lH(12)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七章 哈希表优秀PPT 第七 哈希表 优秀 PPT
限制150内