- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 查 找 学习目的要求: 顺序查找的查找过程为:从表中最后一个记录开始,逐个地将记录的关键字值和给定值的比较,若某个数据元素的关键字值和给定值相等,则查找成功,找到所查记录;反之,若一直找到第一个,其关键字值和给定值都不相等,则表明数组中没有所查元素,查找不成功。 练习 1、若有一个由17个元素组成的有序表,利用二分法查找方法查找有序表的元素,问查找成功时,最少比较几次?最多比较几次? 【答案】 查找成功时,最少比较1次,最多比较5次。 2、已知如下11个数据元素的有序表(6,14,19,21,36,57,63,76,81,89,93),请画出查找键值为21和85的查找过程。 查找步骤: 首先用给定值在索引表中查找,确定满足条件的数据元素应存放在哪一块中。 然后再到相应的块中进行顺序查找,便可以得到查找的结果。 练习 采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分为多少个结点最佳。 【答案】 根据公式 s =√n = √625 = 25, 每块应分为25个结点最佳。 【例如】建立一张全国30个地区的各民族统计表 H1:取键值中第一个字母在字母表中的序号作为散列函数。 H2:先求键值中首尾两个字母在字母表中的序号之和,如果这个和大于30,则减去30。 练习 设散列表的长度为13,散列函数为H(K) = K % 13,给定的 关键字序列为19,14,23,1,68,20,84,27,55, 11,10,79。试画出分别用线性探查法和链接法解决冲突时 所构造的散列表,并求等概率下这两种方法查找成功的平均 查找长度。 散列法查找归结为如下两个方面: (1)对给定的一组关键字构造一个计算简单且散列均匀的散列函数; (2)拟订一个较好解决冲突的方法。 7.5 散列表及其查找 7.5.2 散列函数的构造方法 1. 直接定址法 取关键字的某个线性函数值为散列地址,即: H(key) = key 或 H(key) = a × key + b (a和b为常数) 由于直接定址法所得地址集合和关键字大小相同,因此,关键字不会产生冲突,但实际应用中能够使用这种散列函数的情况很少。 7.5 散列表及其查找 2. 数字分析法 键值的位数比存储区域的地址码的位数多,在这种情况下可以对键值的各位进行分析,丢掉分布不均匀的位,留下分布均匀的位作为地址。 适用于关键字集中的集合,且关键字是事先知道的。 7.5 散列表及其查找 若以下标为000 ~ 999 的顺序表表示之。 【例如】为每年招收的 1000 名新生建立一张查找表,其关键字为学号,其值的范围为 xx000 ~ xx999 (前两位为年份)。 则查找过程可以简单进行:取给定值(学号)的后三位,不需要经过比较便可直接从顺序表中找到待查关键字。 2. 数字分析法 如:关键字序列 9 9 3 4 6 5 3 2 9 9 3 7 2 2 4 2 9 9 3 8 7 4 3 3 9 9 3 0 1 3 6 7 9 9 3 2 2 8 1 7 9 9 3 3 8 9 6 7 9 9 3 6 8 5 3 7 9 9 3 6 8 5 3 2 ...... 分析:前3位相同,第8位只可取2、3、7,因此,这四位不可取。中间的四位的数字变化多些,可看成是随机的,若规定地址取3位,则哈希函数可取它的第4、5、6位。于是有: H=465 H=722 H=874 H=016 H)=228 3. 平方取中法 将关键字的值平方后,取其中若干位作为散列地址。 通常在选定散列函数时不一定能知道关键字的全部情况,取其中哪几位也不一定合适,而一个数平方后的中间几位数和数的每一位都相关。由此使随机分布的关键字得到的散列地址也是随机的。取的位数由表长决定。 适合于关键字位数比较少的情况。 7.5 散列表及其查找 如图:随机给出一些关键字,取平方后的第2到4位为函数地址。 3. 平方取中法 4. 折叠法 如果键值的位数比地址码的位数多,而且各位分布不均匀,不适于用数字分析法丢掉某些位,那么可以考虑用折叠法。 移位法(移位叠加) 将关键字分割成位数相等的几段,然后将它们的叠加和(舍去最高进位)作为散列地址 折叠法(间界叠加) 从一端向另一端沿分割界来回折迭,然后对齐相加。 7.5 散列表及其查找 例 关键字为 :0442205864,哈希地址位数为4 5 8 6 4 4 2 2 0 0 4 1 0 0 8 8
文档评论(0)