- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2、检索方法 依据数据的存储方式的不同,我们将检索分为线性表检索、树表检索和散列表检索等。 3、平均检索长度 将“为检索到具有给定关键字值的数据元素或记录所需要关键字的比较次数的平均值”作为衡量检索算法好坏的依据,即通过平均检索长度来衡量。具体地说,即指为确定欲检索的记录在表中的位置,需与给定值进行比较的关键字个数的期望值,称为检索算法在检索成功时的平均检索长度(Average Search Length)。 8.2.2 折半检索 1、基本思想 折半检索又称二分检索,其基本思想是:先将待检索的给定值和检索表的中间位置上的记录的关键字值进行比较,若相等,则检索成功,否则,若给定值比该中间位置上记录的关键字值大,则只要在右半部分中继续进行折半检索,否则,只要在左半部分中继续进行折半检索。这样,经过一次关键字比较就缩小一半的检索区间,…,如此进行下去,直到检索到关键字值为给定值的记录,或者未检索到,即检索失败。需注意的是,作为折半检索对象的表必须是顺序存储方式的有序表。 2、折半检索过程示例 已知一个含11个记录的有序表,其关键字序列为 ( 08,10,12,19,25,31,39,42,47,52,57 ) (1)检索k=12: 5、折半检索的平均检索长度 折半检索的过程恰好是在判定树中走了一条从二叉树树根到被检索结点的路径,经历比较的关键字个数恰为该结点在树中的层数。折半检索成功时所进行的关键字比较的次数至多为 次。 在等概率情况下(即表中每个记录检索的概率相等,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 */ 在线性表的检索中,折半检索方法效率最高,但要求表以顺序存储方式存储,不能用链表作存储结构,而且表中元素按关键字有序。由于在顺序存储结构中,若要频繁地进行插入和删除结点运算时,必须移动大量的元素,而这会花费相当多的时间。利用二叉搜索树作为表的数据组织方式就可以既能把链式存储结构的优点和折半检索方法的高效率结合在一起,又不要求表为有序表。 3、二叉检索树的检索 (1)检索过程 首先将一个无序序列的各个数据元素按照先后次序分放到一棵二叉检索树中,即构造一棵二叉检索树,然后根据二叉检
文档评论(0)