- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈希查找.ppt
熟练掌握顺序查找、二分查找和分块查找的方法并能够灵活使用。 理解二叉排序树的定义,熟练掌握二叉排序树的相关运算和查找过程。 掌握哈希表的建立方法和查找过程。 熟练掌握各种查找方法在等概率下的平均查找长度的计算方法。 查找效率由比较一次缩小的查找范围决定。 顺序查找是对无序集的查找,关键字比较的结果为“=”或“≠”两种可能,其平均时间为O(n)。 而二分法查找和各种树表的查找是对有序集的查找,关键字比较的结果为“”、“=”、“”三种可能,其查找速度较快,平均时间为O(log2n)。 要想提高查找的效率,就不能只是依赖于比较进行查找。理想的情况是依据关键字直接得到其对应的数据元素位置,即要求关键字与数据元素间存在一一对应关系,通过这个关系,能很快地由关键字得到对应的数据元素位置,其查找的时间期望值为O(1)。 哈希表——应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址,这样构成的表叫~ 哈希查找——又叫散列查找,利用哈希函数进行查找的过程叫~ 例 11个元素的关键字分别为 18,27,1,20,22,6,10,13,41,15,25。选取关键字与元素位置间的函数为 f1(key)=key mod 11,则元素存放在如下的哈希表中: 从例子可见: 哈希函数只是一种映象,所以哈希函数的设定很灵活,只要使任何关键字的哈希函数值都落在表长允许的范围之内即可 在一般情况下,散列表的空间必须比结点集合的空间大,这样虽然浪费了一些空间,但却可提高查找的效率。假设散列表的空间大小为m,装入哈希表中的结点数是n,则称α=n/m为哈希表的装填因子。在使用时,一般取α=0.65~0.9之间。 冲突:key1?key2,但H(key1)=H(key2)的现象叫~。哈希函数通常是一种压缩映象,所以冲突不可避免,只能尽量减少;同时,冲突发生后,应该有处理冲突的方法 所以,哈希方法需要解决以下两个问题: ① 构造好的哈希函数 ② 制定解决冲突的方案。 选取哈希函数,考虑以下因素: 计算哈希函数所需时间 关键字长度 哈希表长度(哈希地址范围) 关键字分布情况 记录的查找频率 处理冲突的方法基本上有两大类:开放定址法和链地址法 开放定址法 方法:当冲突发生时,形成一个探查序列;沿此序列逐个地址探查,直到找到一个空位置(开放的地址),将发生冲突的记录放到该地址中,即Hi=(H(key)+di)MOD m,i=1,2,……k(k?m-1) 其中:H(key)——哈希函数 m——哈希表表长 di——增量序列 分类 线性探测再散列:di=1,2,3,……m-1 二次探测再散列:di=12,-12,22,-22,32,……±k2(k?m/2) 链地址法 思想:将所有关键字为同义词的记录存储在一个单链表中,并用一维数组存放头指针 方法:设哈希函数得到的哈希地址域在区间[0,m-1]上,以每个哈希地址作为一个指针,指向一个链,即分配指针数组HTP[m],建立m个空链表,由哈希函数对关键字运算后,映射到同一哈希地址i的同义词均加入到HTP[i]指向的链表中。 哈希查找过程及分析 哈希查找分析 哈希查找过程仍是一个给定值与关键字进行比较的过程 评价哈希查找效率仍要用ASL 哈希查找过程与给定值进行比较的关键字的个数取决于: 哈希函数 处理冲突的方法 哈希表的填满因子?=表中填入的记录数/哈希表长度 8.4.2 哈希函数的构造方法 5. 除留余数法 构造:取关键字被某个不大于哈希表表长m的数p除后所得余数作哈希地址,即H(key)=key MOD p,p?m 特点 简单、常用,可与上述几种方法结合使用 p一般选取质数,若哈希表表长为m,则要求p≤m,且接近m或等于m。 例 m=8,16,32,64,128,256,512,1024 p=7,13,31,61,127,251,503,1019 8.4.2 哈希函数的构造方法 8.4.3 处理冲突的方法 8.4.3 处理冲突的方法 线性探测法 基本思想:将哈希表HT[m-1]看成一个环行表,若地址为d的单元发生冲突,则依次查找下述单元:d+1, d+2, …,m-1, 0, 1, ….,d-1,直到找到一个空单元或查找到一个关键字相等的单元。 用线性探测法解决冲突,求下一个开放地址的公式为: Hi=(Hash(key)+di) mod m (1≤i m) 其中:Hash(key)为哈希函数 di 为增量序列 1,2,……,m-1,且di=i 例 假设关键字集合为 {47,7,29,11,16,92,22,8,3},哈希表表长为11,Hash(key)=key mod 11,用线性探测法处理冲突构造这组关
文档评论(0)