数据结构与算法5~8章.ppt

  1. 1、本文档共289页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法5~8章

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 动态查找表 动态查找表 2. 平衡调整 在平衡二叉排序树中插入和删除一个结点时,通常会影响从根结点到插入结点路径上的某些结点的平衡因子,这样也就破坏了二叉排序树的平衡性。因此,在保证二叉排序树性质的前提下,需要调整最小不平衡子树中各结点的关系以保证达到平衡。最小不平衡子树是指离插入结点最近,且插入后其平衡因子绝对值大于1的结点为根的子树。假设该子树的根结点为A,则失去平衡后进行调整的规律可归纳为下列4种情况:① LL型平衡处理;② RR型平衡处理;③ LR型平衡处理;④ RL型平衡处理。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 例8-1 已知一个有11个数据元素的有序表(关键字即为数据元素的值):(04, 15, 20, 27, 39, 46, 59, 61, 78, 82, 95),现要查找关键字为27和86的数据元素。 下面分别给出查找过程,其中的方括号表示当前的查找区间,“↑”指向中间位置、下界和上界。 查找给定值key = 27的过程如下: 静态查找表 查找给定值key=86的过程如下: 下界low 上界high,说明表中没有等于key的关键字,查找不成功。 静态查找表 2. 性能分析 折半查找的平均查找长度ASLbs的计算:假定有序表的长度n=2h–1(反之,h=log2(n+1)),则描述折半查找的判定树是深度为h的满二叉树。假设表中每个记录的查找概率相等(Pi=1/n),则查找成功时折半查找的平均查找长度为: 对任意的n,当n较大(n>50)时,可有近似结果 : 静态查找表 3. 折半查找算法的特点 虽然折半查找的效率高,但要将表按关键字排序,而排序本身是一种很费时的运算,即使采用高效率的排序方法也要花费O(nlgn)的时间。另外,折半查找只适用于顺序存储结构,为保持表的有序性,在顺序结构中的插入和删除操作都必须移动大量的结点。因此,折半查找特别适用于那种一经建立就很少改动,而又经常需要查找的线性表。对那些查找少而又经常需要改动的线性表,可采用链表作为存储结构,进行顺序查找。链表上无法实现折半查找。 静态查找表 索引顺序表的查找 索引顺序查找(blocking search)又称分块查找,是顺序查找的一种改进方法,它的性能介于顺序查找和折半查找之间。以索引顺序表表示静态查找表,则Search函数可用分块查找来实现。 1. 分块查找 基本思想:① 先查找索引表。索引表是有序表,可进行折半查找或顺序查找,以确定待查的结点在哪一块;② 在已确定的块中进行顺序查找,由于块内无序,因此只能用顺序查找。下面说明在分块查找法中如何建立“索引表”。 静态查找表 例如,下图所示为一个表及其索引表,表中含有18条记录,可分成3块,每块包括6条记录,对每一个块建立一个索引项。索引表中的元素是一个结构体,包含关键字和块的起始位置,其中关键字按升序排列,即索引表为有序,各个块中的元素为有序或者分块有序。分块有序是指后一个块中的所有记录的关键字均大于前一个块中的最大关键字。 例8-2 试编写静态查找表的分块查找算法。 假设线性表F具有n个结点,且已按关键字排好序。把F依次划分成F1、F2、…、Fm,共m个块。这m个块的结点个数分别为n1、n2…nm,且n1+n2+…+nm=n。为了查找关键字为v的结点,对于j=1, 2, …, m,依次将Fj的最后一个结点的关键字与v进行比较,直至v小于或等于某个Fj的最后一个结点的关键字。这时,欲找的结点落在Fj中。然后,用顺序查找法在Fj中进行查找。 具体实现时,往往把每块最大的关键字依次集中放在一个索引表中,索引表中的每个结点还带有一个指针,该指针指向线性表相应块的最后一个结点,分块查找所需的结构如下图所示。 例8-2 例8-2 例8-2 静态查找表 2.性能分析 分块查找的平均查找长度为ASLbs =

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档