数据结构第8章 查找.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文档。上传文档
查看更多
第 8 章 查找;人们在日常生活中经常需要查找某个人或某个单位的电话号码,要求实现一个简单的通讯录查询系统,根据用户输入的信息(例如姓名)进行快速查询。 计算机的出现使信息查询更加快捷、方便、准确。;8.1 知识学习——查找的基本概念 ;8.1 知识学习——查找的基本概念 ;8.1 知识学习——查找的基本概念 ;8.1 知识学习——查找的基本概念 ;8.1 知识学习;int SeqSearch(int r[], int n, int k) { int i=0; while(inr[i]!=k) i++; if(in) return i; else return -1; };??本思想:设置“哨兵”。哨兵就是待查值,将它放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 ;int SeqSearch2(int r[], int n, int k) { int i=0; r[n]=k; while(r[i]!=k) i++; if(in) return i; else return -1; } ;顺序查找的缺点: 平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。 顺序查找的优点: 算法简单而且使用面广。 对表中记录的存储没有任何要求,顺序存储和链接存储均可; 对表中记录的有序性也没有要求,无论记录是否按关键码有序均可。;8.1.2 顺序表查找 ;例:查找值为23的过程;例:查找值为23的过程;int BiSearch(int r[ ], int n, int k) { int low=0,high=n-1,mid; while(low=high) { mid=(low+high)/2; if(r[mid]==k) return mid; else if(r[mid]k) low=mid+1; else high=mid-1; } return -1; } ;int BiSearch2(int r[],int low,int high,int k) { int mid; if(lowhigh) return -1; else { mid=(low+high)/2; if(r[mid]==k) return mid; else if(r[mid]k) return BiSearch2(r,mid+1,high,k); else return BiSearch2(r,low,mid-1,k); } } ;折半查找的判定树;折半查找的判定树;;具有n个结点的折半查找判定树的深度为 ; 设有序顺序表中的元素依次为017, 094, 154, 170, 275, 503, 509, 512, 553, 612, 677, 765, 897, 908。试画出对其进行折半搜索时的二叉判定树, 并计算搜索成功的平均搜索长度和搜索不成功的平均搜索长度。 ; 设有序顺序表中的元素依次为017, 094, 154, 170, 275, 503, 509, 512, 553, 612, 677, 765, 897, 908。试画出对其进行折半搜索时的二叉判定树, 并计算搜索成功的平均搜索长度和搜索不成功的平均搜索长度。 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;分块查找的进一步讨论: 进一步地,再想一想翻阅字典时的情形。在利用词典边缘的字母索引来确定单词的起始查找位置时,我们一般不会严格按照折半查找的方式来确定,而是这样一个过程:如果所要查找的单词按照字母次序比已经翻开的页面上的字大很多,就多翻几页来看下一个页面;否则就往前多翻几页来查看。 可以把这种方法描述成这样的计算机算法:当知道关键字k位于kl和kh之间时,下一次探测的位置可以选在 (k-kl)/(kh-kl)这个点上。 这个算法在关键字以基本均匀的速度增加的情况下,可以比折半查找更快地接近要查找的位置。折半查找中的每一步把查找工作量从n降到n/2,该查找方法则可以把查找工作量从n降到 。;8.1.3 树表查找 ;二叉排序树 非二叉排序树; 设有一个输入数据的序列是 { 46, 25,

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档