数据结构讲义9.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文档。上传文档
查看更多
衡量一个查找算法的时间效率的标准是:在查找过程中关键字的平均比较次数,这个标准也称为平均查找长度ASL(Average Search Length),通常它是查找元素总数 n 的函数。 另外衡量一个查找算法还要考虑算法所需要的存储量和算法的复杂性等问题。 9.1.2 有序表的查找(折半查找) 设n个元素存放在一个有序顺序表中,并按其关键字从小到大排好了序。 采用折半查找时,先求位于查找区间正中的元素的下标mid,用其关键字与给定值x比较: elem[mid].key = x,查找成功; elem[mid].key x,把查找区间缩小到表的前半部分,再继续进行折半查找; elem[mid].key x,把查找区间缩小到表的后半部分,再继续进行折半查找。 每比较一次,查找区间缩小一半。如果查找区间已缩小到一个元素,仍未找到想要查找的元素,则查找失败。 稠密索引:一个索引项对应数据表中一个元素的索引结构。当元素在外存中按加入顺序存放而不是按关键字有序存放时必须采用稠密索引结构,这时的索引结构叫做索引非顺序结构。 示例:有一个存放职工信息的数据表,每一个职工对象有近 1k 字节的信息。 假设内存工作区仅能容纳 64k 字节的数据,在某一时刻内存最多可容纳 64 个元素以供查找。 如果元素总数有 1024 个, 不可能把所有元素的数据一次都读入内存。无论是顺序查找或对分查找,都需要多次读取外存记录。 如果在索引表中每一个索引项占4个字节, 每个索引项索引一个职工对象,则 1024 个索引项需要 4k 字节, 在内存中可以容纳所有的索引项。 这样只需从外存中把索引表读入内存,经过查找索引后确定了职工对象的存储地址,再经过 1 次读取元素操作就可以完成查找。 稀疏索引:把所有 n 个元素分为 b 个子表(块)存放,一个索引项对应数据表中一组元素(一个子表)。 在子表中, 所有元素可能按关键字有序地存放, 也可能无序地存放。但所有这些子表必须分块有序,后一个子表中所有元素的关键字均大于前一个子表中所有元素的关键字。它们都存放在数据区中。另外建立一个索引表。 索引表由 b 个索引项组成,第 i 个索引项记录了子表 i 中最大关键字max_key以及该子表在数据区中的起始位置obj_addr。 各个索引项在索引表中的序号与各个子表的块号有一一对应的关系(第 i 个索引项是第 i 个子表的索引项, i = 0, 1, …, n-1),这样的索引结构叫做索引顺序结构。 对索引顺序结构进行查找时,一般分为两级查找。 先在索引表 ID 中查找给定值 K,确定满足 ID[i-1].max_key K ? ID[i].max_key 的 i 值,即待查元素可能在的子表的序号。 然后再在第 i 个子表中按给定值查找要求的元素。 索引表是按max_key有序的,且长度也不大,可以对分查找,也可以顺序查找。 各子表内各个元素如果也按元素关键字有序,可以采用对分查找或顺序查找;如果不是按元素关键字有序,只能顺序查找。 索引顺序查找的查找成功时的平均查找长度 ASLIndexSeq = ASLIndex + ASLSubList 其中,ASLIndex 是在索引表中查找子表位置的平均查找长度,ASLSubList 是在子表内查找元素位置的查找成功的平均查找长度。 设把长度为 n 的表分成均等的 b 个子表,每个子表 s 个元素,则 b = ?n/s?。又设表中每个元素的查找概率相等,则每个子表的查找概率为1/b,子表内各元素的查找概率为 1/s。 若对索引表和子表都用顺序查找,则索引顺序查找的查找成功时的平均查找长度为 ASLIndexSeq = (b+1)/2+(s+1)/2 = (b+s)/2 +1 索引查找的平均查找长度不仅与表中的元素个数 n 有关,而且与每个子表中的元素个数 s 有关。在给定 n 的情况下,s 应选择多大? 利用数学方法可以导出,当 s = 时,ASLIndexSeq取极小值 +1。 这个值比顺序查找强,但比对分查找差。 若采用对分查找确定元素所在的子表,则查找成功时的平均查找长度为 ASLIndexSeq = ASLIndex + ASLSubList ? log2 (b+1)-1 + (s+1)/2 ? log2(1+n/s ) + s/2 9.2.1 二叉排序树和平衡二叉树 二叉排序树上的查找: 在二叉排序树上进行查找,是一个从根结点开始,沿某一个分支逐层向下进行比较判等的过程。它可以是一个递归的过程,也可以是一个非递归的过程。 假设想要在二叉排序树中查找关键字为x的元

文档评论(0)

微微 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档