数据结构第9章查找4哈希表.pptx
![资源得分’ 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)
《数据结构第9章查找4哈希表.pptx》由会员分享,可在线阅读,更多相关《数据结构第9章查找4哈希表.pptx(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、武汉科技大学Wuhan University of Science and Technology张 凯计算机学院 软件工程系2011年3月12日第第9 9章章 查找查找查找的基本概念静态查找表动态查找表哈希表v哈希表哈希表(Hash Tables)9.3 哈哈希表希表 也被称为散列表,是普通数组概念的推广。因为可以对数组进行直接寻址,故可以在O(1)时间内访问到数组的任意元素。v哈希表哈希表(Hash Tables)9.3 哈哈希表希表 当关键字全域比较小的时候,利用数组(直接寻址表)是一种简单有效的技术。v哈希表哈希表(Hash Tables)9.3 哈哈希表希表直接寻址技术存在的问题:如果
2、全域U很大,在计算机中存储大小为|U|的一张表T就有点不实际,甚至是不可能的。实际的应用中,要存储的关键字集合K,相对U来说很小,因此分配给T的大部分空间会被浪费。v哈希表哈希表(Hash Tables)9.3 哈哈希表希表 给定关键字,期望通过计算,即利用哈希函数h(x)计算出关键字在表T中的位置。v哈希表哈希表(Hash Tables)9.3 哈哈希表希表 在直接寻址方式下,具有关键字k的数据元素,存放在槽k中。在哈希方式下,具有关键字k的数据元素,存放在槽h(k)中。其中h(x)是散列函数。碰撞(collision)Z Zhao,Q Qian,S Sun,L Li,WWu,C Chen,
3、H Han,Y Ye,D Dai 例如:对于如下 9 个关键字:设哈希函数 f(key)=(Ord(关键字首字母)-Ord(A)+1)/2 问题:若添加关键字 Zhou,会出现什么情况?0 1 2 3 4 5 6 7 8 9 10 11 12 13 Dai Chen Zhao Qian Sun Li Wu Han Ye 从这个例子可见:1)哈希函数是一个映像,即:将关键字的集合映射到某个地址 集合上。它的设置很灵活,只要使得关键字的哈希函数值都 落在表长允许的范围之内即可;2)由于哈希函数是一个压缩映像,因此,在一般情况下,很容 易产生“冲突”现象,即:key1 key2,而 f(key1)=
4、f(key2)。这种具有相同函数值的关键字称为同义词。Zhou Zhou Zhou 3)很难找到一个不产生冲突的哈希函数。一般情况下,只能 选择恰当的哈希函数,使冲突尽可能少地产生。因此:在构造这种特殊的“查找表”时,除了需要选择一个“好”的哈希函数(其原则是尽可能地使任意一组关键字的哈希地址均匀地分布在整个地址空间中,即用任意关键字作为哈希函数的自变量其计算结果随机分布,以尽可能少产生冲突);还需要找到一种“处理冲突”的方法。v哈希表哈希表(Hash Tables)9.3 哈哈希表希表哈希表的定义 根据设定的哈希函数H(key)和所选中的处理冲突的方法建立的查找表。其基本思想是:以记录的关键
5、字为自变量,根据哈希函数,计算出对应的哈希地址,并在此存储该记录的内容。这一映像过程称为哈希造表或散列。v哈希表哈希表(Hash Tables)9.3 哈哈希表希表 当对记录进行查找时,再根据给定的关键字,用同一个哈希函数计算出给定关键字对应的存储地址,随后进行访问。所以哈希表既是一种存储形式,又是一种查找方法,通常将这种查找方法称为哈希查找。v哈希哈希函数的构造方法函数的构造方法 9.3 哈哈希表希表对数字关键字可有下列构造方法:对非数字关键字,常用字符串哈希函数有1.直接定址法 3.平方取中法 5.除留余数法 4.折叠法 6.随机数法 2.数字分析法 BKDRHash,APHash,DJB
6、Hash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等v哈希哈希函数的构造方法函数的构造方法 9.3 哈哈希表希表v直接直接定址法定址法 9.3 哈哈希表希表 取关键字或关键字的某个线性函数值为散列地址,即哈希函数为关键字的线性函数 H(key)=key 或者 H(key)=a key+b (其中a、b为常数)例:关键码集合为 100,300,500,700,800,900,选取哈希函数为 Hash(key)=key/100,画初存储结构(哈希表)0 1 2 3 4 5 6 7 8 9900800700500300100v直接直接定址法定址法 9.3 哈哈希
7、表希表特点:地址集合的大小=关键字集合的大小。优点:以关键码 key 的某个线性函数值为哈希地址,不会产生冲突。缺点:要占用连续地址空间,空间效率低。实际中能使用这种哈希函数的情况很少v数字数字分析法分析法9.3 哈哈希表希表选用关键字的某几位组合成哈希地址。选用原则应当是:各种符号在该位上出现的频率大致相同。适于关键字位数比哈希地址位数大,且可能出现的关键字事先知道的情况。v数字数字分析法分析法9.3 哈哈希表希表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 7 9 6 7
8、 13 4 7 3 9 1 9例:有一组(例如80个)关键码,其样式如下:讨论:第1、2位均是“3和4”,第3位也只有“7、8、9”,因此,这几位不能用,余下四位分布较均匀,可作为哈希地址选用。位号:若哈希地址取两位(因元素仅80个),则可取这四位中的任意两位组合成哈希地址,也可以取其中两位与其它两位叠加求和后,取低两位作哈希地址。v平方平方取中法(较常用)取中法(较常用)9.3 哈哈希表希表构造:以关键字的平方值的中间几位作为哈希地址。求“关键字的平方值”的目的是“扩大差别”,同时平方值的中 间各位又能受到整个关键字中各位的影响。此方法适合于:关键字中的每一位都有某些数字重复出现频度很高的现
9、象。例:2589的平方值为6702921,可以取中间的029为地址。v折叠折叠法法9.3 哈哈希表希表 构造:将关键字分割成位数相同的几部分,然后取这几部分 的叠加和(舍去进位)做哈希地址。移位叠加:将分割后的几部分低位对齐相加。间界叠加:从一端沿分割界来回折叠,然后对齐相加。适于关键字位数很多,且每一位上数字分布大致均匀情况v折叠折叠法法9.3 哈哈希表希表例:关键字为:0442205864,哈希地址位数为 4。5 8 6 44 2 2 00 41 0 0 8 8H(key)=0088移位叠加5 8 6 40 2 2 40 4 6 0 9 2H(key)=6092间界叠加例:元素427518
10、96,移位法:42751896=1041 间界叠加法:427 518 96 724+518+69=1311v除除留余数留余数法法(最常用最常用)9.3 哈哈希表希表 构造:取关键字被某个不大于哈希表表长 m 的数 p 除后所得 余数作哈希地址,即 H(key)=key MOD p,p m。特点:简单,可与上述几种方法结合使用。p 的选取很重要;p 选得不好,容易产生同义词。p 应为不大于 m 的素数或不含 20 以下的质因子的合数。v除除留余数留余数法法(最常用最常用)9.3 哈哈希表希表331224391821012345678910给定一组关键字:12,39,18,24,33,21,若取
11、p=11,则他们对应的哈希函数值将为v除除留余数留余数法法(最常用最常用)9.3 哈哈希表希表181224012345678910给定一组关键字:12,39,18,24,33,21,若取 p=9,则他们对应的哈希函数值将为393321 可见,若 p 中含质因子 3,则所有含质因子 3 的关键字均映射到“3 的倍数”的地址上,从而增加了“冲突”的可能。v随机数随机数法法 9.3 哈哈希表希表构造:取关键字的随机函数值作哈希地址,即:H(key)=Random(key)其中,Random是伪随机函数。通常,当关键字长度不等时采用此法构造哈希函数较恰当v哈希哈希函数的构造方法函数的构造方法 9.3
12、哈哈希表希表 实际造表时,采用何种构造哈希函数的方法取决于建表的关键字集合的情况(包括关键字的范围和形态),总的原则是使产生冲突的可能性降到尽可能地小。选取哈希函数,考虑以下因素:1)计算哈希函数所需时间 2)关键字长度 3)哈希表长度(哈希地址范围)4)关键字分布情况 5)记录的查找频率v处理处理冲突的方法冲突的方法 9.3 哈哈希表希表 “处理冲突”的实际含义是:为产生冲突的地址寻找另一个哈希地址。1.开放地址法 (1)线性探测法 (2)二次探测法 (3)伪随机探测法2.链地址法3.再哈希法4.建立一个公共溢出区v开放开放地址法地址法 9.3 哈哈希表希表(1)线性探测法 设散列函数H(K
13、)=K mod m(m为表长),若发生冲突,则沿着一个探查序列逐个探查,那么,第i次计算冲突的散列地址为:Hi=(H(K)+di)mod m (di=1,2,m-1)v开放开放地址法地址法 9.3 哈哈希表希表例:关键码集为 47,7,29,11,16,92,22,8,3,设:哈希表表长为m=11;哈希函数为Hash(key)=key mod 11;拟用线性探测法处理冲突。建哈希表:0 1 2 3 4 5 6 7 8 9 10477291116922283v开放开放地址法地址法 9.3 哈哈希表希表线性探测法的优点:只要哈希表未被填满,保证能找到一 个空地址单元存放有冲突的元素;线性探测法的缺
14、点:可能使第i个哈希地址的同义词存入第 i+1个哈希地址,这样本应存入第i+1个哈希地址的元素 变成了第i+2个哈希地址的同义词,因此,可能出现很多元素在相邻的哈希地址上“堆积”起来,大大降低了查找效率。可采用二次探测法或伪随机探测法,以改善“堆积”问题v开放开放地址法地址法 9.3 哈哈希表希表(2)二次探测法 二次探测法对应的探查地址序列的计算公式为:Hi=(H(K)+di)mod m 其中di=12,-12,22,-22,j2,-j2 (jm/2)。v开放开放地址法地址法 9.3 哈哈希表希表0 1 2 3 4 5 6 7 8 9 101122347 92 167298例:关键码集为 4
15、7,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)。v开放开放地址法地址法 9.3 哈哈希表希表(3)伪随机探测法 伪随机探测法对应的探查地址序列的计算公式为:Hi=(H(K)+di)mod m 其中di=伪随机序列例:表长为 11 的哈希表中已填有关键字为 17,60,29 的记录,H(key)=key MOD 11,现有第 4 个记录,其关键字为 38,按三种处理冲突的方法,将它填
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找 哈希表
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内