delphi_查找算法 技术文档.pptxVIP

  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文档。上传文档
查看更多
基于线性表的查找法——顺序查找法、折半查找法、分块查找法比较式查找基于树的查找法——二叉排序树、平衡二叉排序树、B树法计算式查找法——HASH(哈希)查找法主目录本章要点上一页下一页 退 出7.1 顺序查找查找过程:对给定的一关键字K,从线性表的一端开始,逐个进行记录的关键字和K的比较,直到找到关键字等于K的记录或到达表的另一端。·可以采用从前向后查,也可采用从后向前查的方法·在平均情况下,大约要与表中一半以上元素进行比较,效率较低。平均查找长度较大·在下面两种情况下只能采取顺序查找:线性表为无序表(元素排列是无序的);即使是有序线性表,但采用的是链式存储结构。主目录本章要点上一页下一页退 出使用了监视哨,在查找过程中,顺序查找的算法int Search_seq(SSTable ST[ ], int n, int ke不y)用每一步都去判断是否查找结{ int i=n; ST[0].key=key;束。找到:返回元素while(ST[i].key!=key) i- -;/*从表尾往在前线查性*/表中的存1 2 3 4 5 6 710 20 40 80 储3位0 置6;6;0 250return i;未找到:返回0。(a) 初态}1 2 3 4 5 6 710 20 40 80 30 60 25(b) K=80080(return i=4)监视哨1 2 3 4 5 6 710 20 40 80 30 60 25090主目录本章要点上(一c)页i=0 )K下K下=一90页(r退etu出rn7.1 顺序查找根据上述算法可知:查找成功时的平均查找次数为: ASL=(1+2+3+4+……+n)/n=(n+1)/2查找不成功时的比较次数为: n+1则顺序查找的平均查找长度为:ASL==((n+1)/2+n+1)/2=(n+1)3/4顺序查找的优点:算法简单,无需排序,采用顺序和链式存储均可。缺点:平均查找长度较大。主目录本章要点上一页下一页退 出7.1 顺序查找线性表在链式存储结构下的顺序查找struct node{ int data;struct node *next;};int searlb(struct node *h,int x){struct node *m; m=h;while (m-next!=NULLm-data!=x) m=m-next; return(m);}主目录本章要点上一页下一页退 出7.2 折半查找(二分法查找)思想:先确定待查找记录所在的范围,然后逐步缩小范围,直到找到或确认找不到该记录为止。前提:必须在具有顺序存储结构的有序表中进行。分三种情况:若中间项的值等于x,则说明已查到。若x小于中间项的值,则在线性表的前半部分查找;若x大于中间项的值,则在线性表的后半部分查找。特点:比顺序查找方法效率高。最坏的情况下,需要比较 log2n次。主目录本章要点上一页下一页退 出查找23和79的过程如下图:mid=(low+high)/2不进位取整( 08,( 08,14,14,23,23,37,37,46,46,55,55,68,68,79,79,91 )91 )lowmidhigh(08,14,23,37, 46,55,68,79,91 )(low08,mid14,23,high=mid-137, 46,55,68,79,91 )low=mid+1highmid(08,14,23,37,46,55,68,79,91 )(low08,14,23,37,mid46,55,68,79,high91 )( 08,14,23,37,46,low55,mid68,79,high91 )lowhigh主目录本章要点上一页下一页 退 出mid折半查找的算法:int Search_Bin( SSTable ST[ ], int n, int key){int low, high,mid; low=1; high=n; while(low=high){ mid=(low+high)/2;if(ST[mid].key= = key) return (mid); /*查找成功*/else if( key ST[mid].key) high=mid-1; /*在前半区间继续查else low=mid+1;}return (0);/*在后半区间继续查找*//*查找不成功*/下一页 退 出}主目录本章要点上一页7.3 分块查找(索引顺序查找)是顺序查找的一种改进方法,就是把被查找的表分成若干块,每块中记录的存放顺序是无序的,但块与块之间必须按关键字有序。即第一块中任一记录的关键字都小于第二块中任一记录的关键字,而第二块中任一记录的关键字都小于第三块中任一记录的关键字,依此类推。该法要为被查找的表建立一个索引表,索引表中的一项对应于表中的一块,索引

文档评论(0)

158****0159 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档