第8章 检索.pptVIP

  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.1 检索的基本概念 1.检索定义 检索表。由具有同一类型的数据元素(或记录)组成的集合。 关键字。是记录中某个项或组合项的值,用它可以标识一个记录。能唯一确定一个记录的关键字,称为主关键字;而不能唯一确定一个记录的关键字,称为次关键字。 检索。是指按给定的某个值k,在查找表中查找关键字为给定值k的记录。所以也称为查找。 2、检索方法 依据数据的存储方式的不同,我们将检索分为线性表检索、树表检索和散列表检索等。 查找算法的性能 查找算法时间性能通过关键码的比较次数来度量。 关键码的比较次数与哪些因素有关呢? ⑴算法; ⑵问题规模; ⑶待查关键码在查找集合中的位置; ⑷查找频率。查找频率与算法无关,取决于具体应用。通常假设pi是已知的。 查找算法的性能 平均查找长度:查找算法进行的关键码的比较次数的数学期望值。计算公式为: 顺序查找的缺点: 平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。 顺序查找的优点: 算法简单而且使用面广。 对表中记录的存储没有任何要求,顺序存储和链接存储均可; 对表中记录的有序性也没有要求,无论记录是否按关键码有序均可。 8.2.2折半检索 使用条件: 线性表中的记录必须按关键码有序; 必须采用顺序存储。 基本思想: 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键码相等,则查找成功;若给定值小于中间记录的关键码,则在中间记录的左半区继续查找;若给定值大于中间记录的关键码,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所查找的区域无记录,查找失败。 判定树的构造方法 ⑴ 当n=0时,折半查找判定树为空; ⑵ 当n>0时,折半查找判定树的根结点是有序表中序号为mid=(n+1)/2的记录,根结点的左子树是与有序表r[1] ~ r[mid-1]相对应的折半查找判定树,根结点的右子树是与r[mid+1] ~ r[n]相对应的折半查找判定树。 折半检索的平均检索长度 折半检索的过程恰好是在判定树中走了一条从二叉树树根到被检索结点的路径,经历比较的关键字个数恰为该结点在树中的层数。折半检索成功时所进行的关键字比较的次数至多为 次。 在等概率情况下(即表中每个记录检索的概率相等,pi=1/n),检索成功时的折半检索的平均检索长度为: (2)当折半检索索引表时: indexlist ID[M] ; /*ID为具有indexlist类型的R上的一个索引表*/ int Blocksrch(sqlist R[ ],indexlist ID[ ],int m,keytype k ) { int i,j,low1,low2,mid,high1,high2; low1=0; high1=m-1; /*置折半检索区间的下、上界的初值*/ while ( low1=high1 ) /*在索引表中检索*/ { mid =(low1+high1)/2 ; /* 求当前区间的中间位置 */ if (k=ID[mid].key) high1 = mid-1 ; /*在左区间上检索*/ else low1=mid+1 ; /*在右区间上检索*/ } /*检索结束,low1为块号*/ if (low1m) {low2=ID[low1].stadr; /*块起始地址*/ if (low1= =m-1) high2=n-1; /*块末地址*/ else high2=ID[low1+1].stadr-1; for (i=low2;i=high2;i++) /* 块内顺序检索*/ if (R[i].key= =k) return (i); /* 检索成功 */ } retutn(0) /* 检索失败 */ } /* Blocksrch */ 在线性表的检索中,折半检索方法效率最高,但要求表以顺序存储方式存储,不能用链表作存储结构,而且表中元素按关键字有序。由于在顺序存储结构中,若要频繁

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档