平衡二叉树avl-深圳大学计算机与软件学院.ppt

平衡二叉树avl-深圳大学计算机与软件学院.ppt

  1. 1、本文档共109页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章查找一查找表查找表是由同一类型的数据元素或记录构成的集合对查找表的操作查询某个特定的数据元素是否在查找表中检索某个特定的数据元素的各种属性在查找表中插入一个数据元素从查找表中删去某个数据元素一查找表分类静态查找表仅作查询和检索操作的查找表动态查找表在查找过程中同时插入查找表中不存在的数据元素或者从查找表中删除已存在的某个数据元素二关键字关键字是数据元素或记录中某个数据项的值用以标识识别一个数据元素或记录主关键字可以识别唯一的一个记录的关键字次关键字能识别若干记录的关键字三查找查找是根据给定

第九章 查找 一、查找表(Search Table) 查找表是由同一类型的数据元素(或记录)构成的集合 对查找表的操作: 1.查询某个“特定的”数据元素是否在查找表中; 2.检索某个“特定的”数据元素的各种属性; 3.在查找表中插入一个数据元素; 4.从查找表中删去某个数据元素 一、查找表(分类) 静态查找表  仅作查询和检索操作的查找表。 动态查找表  在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素 二、关键字(Key) 关键字是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录) 主关键字:可以识别唯一的一个记录的关键字 次关键字:能识别若干记录的关键字 三、查找(Searching) 查找是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找成功:在查找表中查找到指定的记录 查找不成功:在查找表中没有找到指定记录 四、衡量查找算法的标准 时间复杂度 空间复杂度 平均查找长度ASL 五、平均查找长度(ASL) 平均查找长度定义为确定记录在表中的位置所进行的和关键字比较的次数的平均值 n ASL = ∑ PiCi i=1 n为查找表的长度,即表中所含元素的个数 Pi为查找第i个元素的概率(∑Pi=1) Ci是查找第i个元素时同给定值K比较的次数 一、顺序查找 顺序查找算法是顺序表的查找方法 在顺序查找算法中,以顺序表或线性链表表示静态查找表 一、顺序查找(算法) 顺序查找算法: 1.从表中最后一个记录开始 2.逐个进行记录的关键字和给定值的比较 3.若某个记录比较相等,则查找成功 4.若直到第1个记录都比较不等,则查找不成功 一、顺序查找(算法实现) int Search_Seq(SSTable ST, KeyType key) { // 若查找成功,返回位置 ST.elem[0].key = key; // “哨兵”, for (i=ST.length; ST.elem[i].key!=key; --i); // 从后往前找 return i; // 找不到时,i=0 } // Search_Seq 设置“哨兵”的目的是省略对下标越界的检查,提高算法执行速度 一、顺序查找(举例) 一、顺序查找(算法性能分析) 对顺序表而言,Ci=n-i+1 在等概率查找的情况下,Pi=1/n ASL=n*P1 +(n-1)P2 +…+ 2Pn-1+ Pn = (n+1)/2 一、顺序查找(不等概率) 如果被查找的记录概率不等时,取 Pn≥Pn-1≥···≥P2≥P1 若查找概率无法事先测定,则查找过程采取的改进办法是,在每次查找之后,将刚刚查找到的记录直接移至表尾的位置上 一、顺序查找(特点) 优点: 1.简单 2.适应面广(对表的结构无任何要求) 缺点: 1.平均查找长度较大 2.特别是当n很大时,查找效率很低 二、折半查找 折半查找算法是有序表的查找方法 在折半查找算法中,静态查找表按关键字大小的次序,有序地存放在顺序表中 折半查找的原理是: 1.先确定待查记录所在的范围(前部分或后部分) 2.逐步缩小(一半)范围直到找(不)到该记录为止 二、折半查找(算法) 1.n个对象从小到大存放在有序顺序表ST中,k为给定值 2.设low、high指向待查元素所在区间的下界、上界,即low=1, high=n 3.设mid指向待查区间的中点,即mid=(low+high)/2? 4.让k与mid指向的记录比较 若k=ST[mid].key,查找成功 若kST[mid].key,则high=mid-1 [上半区间] 若kST[mid].key,则low=mid+1 [下半区间] 5.重复3,4操作,直至lowhigh时,查找失败。 二、折半查找(举例-成功) 二、折半查找(举例-不成功) 当下界low大于上界high时,说明有序表中没有关键字等于K的元素,查找不成功 二、折半查找(判定树) 判定树:描述查找过程的二叉树。 有n个结点的判定树的深度为?log2n? +1 折半查找法在查找过程中进行的 比较次数最多不超过?log2n? +1 有11个元素的表的例子 二、折半查找(性能分析) 设有序表的长度n=2h-1(即h=log2(n+1)),则描述折半查找的判定树是深度为h的满二叉树 树中层次为1的结点有1个,层次为2的结点有2个,层次为h的结点有2h-1个 假设表中每个记录的查找概率相等,则查找成功时折半查找的平均查找长度 二、折半查找(特点) 折半查找的效率比顺序查找高(特别是在静态查找表的长度很长时) 折半查找只能适用于有

文档评论(0)

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

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

1亿VIP精品文档

相关文档