数据结构 第四版 高职计算机应用技术专业 安训国 课件第七章 查找.pptVIP

数据结构 第四版 高职计算机应用技术专业 安训国 课件第七章 查找.ppt

  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文档。上传文档
查看更多
第7章 查 找;第7章 查 找;7.1 基本概念;7.1 基本概念;7.2 顺序查找; int seqsrch(sqlist r,int k,int n) { int i; r[0].key=k ; i=n; whi le (r[i].key!=k) /*第i个元素是k吗*/ i--; return(i); };为了表示平均查找次数,定义平均查找长度为: ASL= ∑PiCi 其中,Pi为查找第i个记录的查找概率; Ci为查找第i个记录时的比较次数; n为表中记录个数。;顺序查找的优点是:算法简单且适用面广,它对表的结构无任何要求。无论记录是否按关键字的大小有序,其算法均可应用,而且上述讨论对线性链表也同样适用。;7.3 二分法查找; int bin_search(sqlist r,int k,int n) { int low=1,high=n,found=0,mid; while((low=high) !found) { mid=(low+high)/2; /*求中点*/ i f(k==r[mid].key) return(mid); /*找到k*/ else { i f(kr[mid].key) low=mid+1; /*在后半部分查找*/ else high=mid-1; /*在前半部分查找*/ } } return(-1); /*查找不成功,返回-1作为标记*/ };从以上程序的执行情况分析,每做一次比较,查找的范围都缩小一半。因此二分法查找的平均查找长度为 ASL= log2(n+1) - 1 当n足够大时,可近似表示为 log2n。 可见在查找速度上,二分法查找比顺序查找的速度要快得多,这是它的主要优点。当然,使用二分法查找必须是在顺序存储的条件下,且事先必须做到按关键字值排序才行。;7.4 分块查找;这种表的结构如图所示,它把15个元素的线性表分成三块,每块5个元素,各块采用顺序存储方式独立地存放在三个子表B1 ,B2 ,B3之中,索引表A的每个元素包含两个字段,一个是该块的最大关键字值,另一个是指向子表的指针。;分块查找的平均查找长度由两个部分组成: ASL= Eb +Ew Eb为确定某一块所需的平均查找长度,Ew为在块内的平均查找长度。假设线性表中共有n个数据元素,平均分成b块,每块s个数据元素,并假设查找各块概率相等,如果仅考虑成功的查找,则查找某一块的概率为1/b。若在索引表内和块内查找均用顺序查找方法,则在具有s个元素的块内进行顺序查找,查找成功的平均查找长度为Ew=(s+1)/2 ,所以 ASL=Eb+Ew=(b+s)/2+1=(n/s+s)/2+1 当s=n时,ASL取最小值,这时ASL= n+1。;分块查找的速度比顺序查找要快得多,但又不如二分法查找。如果线性表元素个数很多,且被分成的块数 b 很大时,对索引表的查找可以采用二分法查找,还能进一步提高速度。 分块查找的优点是:在线性表中插入或删除一个元素时,只要找到元素应属于的块,然后在块内进行插入和删除运算。由于块内元素的存放是任意的,所以插入和删除比较容易,不需要移动大量元素。;7.5 散列表及其查找;散列法的基本思想是:以记录中关键字的值为自变量,通过确定的函数H(散列函数)进行计算,求出对应的函数值,把这个函数值作为存储地址,将该记录(或 记录的关键字)存放在这个位置上,查找时仍按这个确定的函数H进行计算,获得的将是待查的关键字所在记录的存储地址。;然而,在很多情况下关键字的分布并不那样均匀、连续,而且其数量往往大到存储空间不可承受的地步。在实际问题中关键字值所占的范围很大,而可能出现的关键字个数又不多。;散列法查找归结为如下两个方面: (1)对给定的一组关键字构造一个计算简单且散列均匀的散列函数; (2)拟订一个较好解决冲突的方法。;7.5.2 散列函数的构造方法;2. 数字分析法;3. 平方取中法;4. 折叠法;取关键字被某个不大于散列表表长m的质数p除后所得余数为散列地址,即对关键字进行取余运算: H(k)=k % p (p≤m) 这是一种最简单也最常用的构造散列函数的方法。值得注意的是,在使用此种方法时,对p的选择很重要。若p选得不好,容易产生冲突。理论分析和试验结果均证明,p应取小于表长m的最大

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档