软件技术基础:查找算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.7查找 2.7.1 查找的基本概念 查找的定义:给定一个值K,在含有n个记录的文件中进行搜索,寻找一个关键字值等于K的记录,如找到则输出该记录;否则输出查找不成功信息。 2.7.2 线性查找 线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。如图2.68和图2.69 2.7.3 对分查找 又称为跳跃式查找,假设记录是按关键字递增有序排列的,对分查找的基本思想是:先找到“中间记录”,比较其关键字与给定值K相等,则查找成功;如果关键字小于给定值K则说明被查找记录必在前半区间中;反之则在后半区间中。这样把搜索区间缩小了一半,继续进行查找。 在算法中,设置一个下界指示器low和一个上界指示器high,它们分别指向待查文件搜索区间的头、尾。由low和high的值可以计算出“中间记录”位置,由mid表示。 设顺序表r[1:n]的关键字项为r[i].key (1≤i≤n)将K值r[mid].key比较: 若r[mid].key=K 查找成功 若r[mid].key>K 令high=mid-1,继续查找 若r[mid].key<K 令low=mid+1,继续查找 若low>high 查找不成功 假设记录的关键字为(5,13,17,42,46,55,70,94),现分别用K为55和12进行查找,查找过程如图2.70所示,其中(a)为K=55,查找成功;(b)为K=12,查找失败。 对分查找算法如下: BINSERRCH(r,n,K) 1.low←1;high←n //上下2.while (lowhigh) do 3.mid←(low+high) div 2 // div为整除// 4.case 5.K=r[mid].key: {查找成功;return} 6.Kr[mid].key: low←mid+1 7.Kr[mid].key: high←mid-1 8.end(case) 9.end(while) 10. return 2.7.4 分块查找 分块查找又称索引顺序查找,它要求文件中的记录关键字“分块有序”,即文件可按关键字分为若干块,且前一块中最大的关键字小于后一块中最小的关键字,而每一块内的关键字则不一定有序。基本思想为:先将各块中的最大关键字构成一个索引表,由于文件是分块有序的因此索引表是递增有序的。查找过程分两步进行,第一步先对索引表进行对分或顺序查找,以确定记录在哪一块;第二步在所在块中进行顺序查找。如图2.72所示 2.7.5 二叉排序树查找 BSTSEARCH(K,t) //K为查找给定值,t为根结点指针// 1.p←t //p为查找过程中进行扫描的指针// 2.while (pnil) do 3.case 4.K=data(p): {查找成功;return} 5.Kdata(p): {q←p;p←L child(p)} //继续6.Kdata(p): {q←p;p←R child(p)} //继续7.end(case) 8.end(while) 9.GET(s); data(s)←K; L child(s)←nil; R child(s)←nil; //查找不成功,生成一个新结点s,插入到二叉排序中// 10.case 11.t=nil:p←s; //插入结点为根结点// 12.Kdata(q): L child(q)←s 13. Kdata(q): R child(q)←s 14.end(case) 15.return 2.7.4 哈希表技术及其查找 1.哈希表 哈希查找的基本思想是:通过对给定值作某种运算,直接求得关键字等于给定值的记录在文件中的位置。这就要求在建立文件时,对记录的关键字和她的存储位置之间建立一个确定的对应关系。设关键字key与存储位置见的对应关系为H(key),若用一维数组来存放文件,则H(key)即为数组的下标。称函数H为哈希(hash)函数,H(key)为哈希地址,这个一维数组称为哈希表。例如以学生姓名为关键字的记录集合{Wang, Li, Zhao, Shen, Gao, Fung, Bai, Chang, Ren, Ma},若采用关键字中第一个字母表中的序号作为哈希函数,则可以构成一个哈希表如图2.74所示 2.构造哈希函数的集中方法 数字分析法 将不均匀的数字删除,然后根据存储空间的大小来决定数字的数目。例如有7个学生的学号为 542 42 2241 542 81 3678 542 22 8171 542 38 9671 542 54 1577 542 88 5376 542 1

文档评论(0)

yan666888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档