ImageVerifierCode 换一换
格式:PPT , 页数:50 ,大小:677KB ,
资源ID:3476700      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-3476700.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第9章查找表33节.ppt)为本站会员(微传9988)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第9章查找表33节.ppt

1、1,由关键字序列 3,1,2,5,4构造一颗二叉排序树,由关键字序列 1,2,3,4,5构造一颗二叉排序树,,例如:,2,1,3,4,5,3,5,4,1,2,ASL =(1+2+3+4+5)/ 5= 3,ASL =(1+2+3+2+3)/ 5 = 2.2,5查找性能的分析,2,结论: 含有n个结点的二叉排序树的平均查找长度和树的形态有关。最坏的情况为单支树,这时树的深度为n,其平均查找长度为(n+1)/2. 与顺序查找相同。最好的情况是二叉排序树的形态与折半查找相同,其平均查找长度和log2n 成正比。,3,一、二叉排序树(二叉查找树),二、二叉平衡树,二、B - 树,三、B+树,9.3 动

2、态 查 找 树 表,四、键 树,4,二、二叉平衡树,1. 二叉平衡树定义,3. 平衡旋转技术,2. 如何构造二叉平衡树,4. 二叉平衡树的插入,5. 二叉平衡树的删除,5,问题:二叉排序树的缺点是树的结构事先无法预料,随意性很大,它只与结点的值和插入的次序有关,有时会得到一颗很不平衡的二叉树。当二叉树与理想的平衡树相差越远,树的高度越高时,其运算的时间就越长。最坏的情况下,二叉树退化成单链表,其时间复杂度由O(log2n)变为O(n)。,1. 二叉平衡树定义,6,二叉平衡树(又称AVL树)一棵二叉平衡树或者是空树,或者是具有下列性质的二叉排序树:它的左子树和右子树都是二叉平衡树,且左子树和右子

3、树的高度之差的绝对值不超过1。,例如:,平衡树,非平衡树,非平衡树,结点的平衡因子:左子树的高度减右子树的高度 。,7,构造平衡的二叉排序树的方法是:根据初始序列,从空树开始插入新结点,在插入过程中,在保持二叉排序树特性的前提下,采用平衡旋转技术,对最小不平衡子树进行调整,使其平衡。,2. 如何构造“二叉平衡树”,8,3. 平衡旋转技术,如果在一棵平衡的二叉搜索树中插入一个新结点,造成了不平衡。此时必须调整树的结构,使之平衡。平衡旋转有两类:单旋转 (左旋和右旋)双旋转 (左平衡和右平衡),9,右单旋转,如果在左子树根结点的左子树上插入结点,引起不平衡,则需要进行右单旋转 。以结点B为旋转轴,

4、将结点A顺时针旋转。,10,左单旋转,如果在右子树根结点的右子树上插入结点,引起不平衡,则需要进行左单旋转 以结点C为旋转轴,让结点A逆时针旋转。,0,11,先左后右双旋转,如果在左子树根结点的右子树上插入结点, 引起不平衡,则需要进行先左后右双旋转 。,12,0,0,1,2,-1,1,0,0,1,插入,左单 旋转,右单 旋转,先左后右双旋转,13,先右后左双旋转,如果在右子树根结点的左子树上插入结点 引起不平衡,则需要进行先右后左双旋转 。,14,+1,0,0,0,0,1,1,-1,-2,插入,右单 旋转,右单 旋转,先右后左双旋转,15,例如:依次插入的关键字为5, 4, 2, 8, 6,

5、 9,5,4,2,4,2,5,8,6,6,5,8,4,2,向右旋转 一次,先向右旋转 再向左旋转,4. 二叉平衡树的插入,16,9,5,向左旋转一次,继续插入关键字 9,17,5. 二叉平衡树的删除,1. 首先不考虑平衡问题,按二叉排序树的删除原理对二叉平衡树进行删除。,2. 然后再考虑平衡问题,沿被删除结点通向根的路径反向追踪检查路 径上各个结点平衡因子的变化。分三种情况考虑:,18,case 1 : 当前结点 p 的平衡因子为0。如果它的左子树或右子树被缩短,则只需要修改它的 平衡因子为 1 或-1。不需要旋转。,0,h,h,h-1,删除一个结点,高度不变,不旋转,1,h,h-1,p,p,

6、19,case 2 : 结点 p 的平衡因子不为0,且较高的子树被缩短,则 p 的平衡因子改为0。不需要旋转。,1,h+1,h,h,删除一个结点,高度降低一层,不旋转,0,h,h,p,p,高度减1,20,case 3 : 结点 p 的平衡因子不为0,且较矮的子树又被缩短,则在结点 p 发生不平衡。需要进行平衡化旋转来恢复平衡。令结点 p 的较高的子树的根为 q, 根据 q 的平衡因子,有如下 3 种平衡化操作:,21,case 3a : 如果 q (较高的子树) 的平衡因子为 0,执行一个单旋转来恢复结点 p 的平衡。,-1,h,h,h-1,删除结点,左单旋,p,h,0,q,-1,h,h-1,

7、p,h,q,1,22,case 3b : 如果 q 的平衡因子与 p 的平衡因子相同,则执行一个单旋转来恢复平衡, 结点 p 和 q 的平衡因子均改为0。,-1,h,h-1,删除结点,左单旋,p,h,-1,q,0,h-1,p,h,q,0,h-1,h-1,23,0,case 3c : 如果 p 与 q 的平衡因子相反, 则执行一个双旋转来恢复平衡, 先围绕 q 转再围绕 p 转。新根结点的平衡因子置为0,其它结点的平衡因子相应处理。,-1,h,h-1,删除 结点,p,1,q,h-1 或 h-2,h-1 或 h-2,h-1,r,h-1,h-1,h-1,h-1,0,0,p,q,r,右左双旋,高度减1

8、,24,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,0,0,0,0,0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,树的初始状态,举例:,删除结点 P,25,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,0,0,0,0,0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,删除结点P,寻找结点P在中序下的直接前驱O, 用O顶替P, 删除O。,用O取代P,26,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,Q,R,S,T,0,0,0,0,0,0,1,1,1,1,1,1,1,-

9、1,-1,-1,-1,-1,删除结点P,左单旋转,case 3b:O与R的平衡因子同号, 以R为旋转轴做左单旋转, M的子树高度减 1。,q,p,27,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,Q,R,S,T,0,0,0,0,0,0,1,1,1,1,1,1,1,-1,0,0,-1,删除结点P,case3c:M的子树高度减 1, M发生不平衡。M与E的平衡因子反号, 做左右双旋转。,0,向上继续调整,q,p,28,A,B,C,D,E,F,G,H,I,J,N,K,L,M,O,R,0,0,0,0,0,1,0,0,1,1,1,1,0,-1,0,0,删除结点P,0,0,T,Q,0,S,

10、29,设在新结点插入前AVL树的高度为 h,结点个数为 n,则插入一个新结点的时间是O(h)。 对于AVL树来说,h 多大? 设 Nh 是高度为 h 的AVL树中含有的最少结点个数。显然有:N0 = 0 (空树), N1 = 1 (仅有根结点)Nh = Nh-1 + Nh-2 +1 , h 0,6. 二叉平衡树的高度,可以看出:Nh 的定义与斐波那契数列的定义非常相似。F0 = 0, F1 = 1, Fh = Fh-1 + Fh-2,可以证明, 对于 h 0, 有 Nh = Fh+2 -1 成立。,有 n 个结点的AVL树的高度不超过:1.44*log2 2(n+1) -1,30,已知长度为1

11、2的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec),例题:,按表中元素的顺序依次插入生成一颗二叉排序树(初始为空),并求其在等概率的情况下查找成功时的平均查找长度; 若对表中元素先进行排序,构成有序表,并求其在等概率的情况下,对此有序表查找成功时的平均查找长度; 按表中元素的顺序构造一颗平衡二叉排序树,并求其在等概率的情况下查找成功的平均查找长度;,31,例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec),ASL = (11+2 2 +3 3 +4 3 +5

12、2 +6 1) /12 = 42 /12,1. 求二叉排序树,32,例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec),ASL = (11+2 2 +3 4 +4 5 ) / 12= 37 /12,2. 有序表排序后采用折半查找,(Apr, Aug, Dec, Feb, Jan, Jul, Jun, Mar,May,Nov ,Oct, Sep),3 4 2 3 4 1 3 4 2 4 3 4,33,例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,

13、Dec),3. 求平衡二叉排序树,34,例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec),3. 求平衡二叉排序树,35,例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec),3. 求平衡二叉排序树,36,例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec),ASL = (11+2 2 +3 4 +4 4 +5 1 ) / 12 = 38 /12,3. 求平衡二叉排序

14、树,37,例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec),ASL = (11+2 2 +3 3 +4 3 +5 2 +6 1) / 12 = 42 /12,1. 求二叉排序树,2. 有序表,排序后采用折半查找,ASL = (11+2 2 +3 4 +4 5 ) / 12 = 37 /12,3. 求平衡二叉排序树,ASL = (11+2 2 +3 4 +4 4 +5 1 ) / 12 = 38 /12,38,二、静态查找表存储结构,四、有序查找表,一、静态查找表数据类型定义,三、顺序查找表,9.2 静 态 查 找

15、表,五、静态查找树表,六、静态索引结构,39,六. 静态索引结构,当数据表中的记录个数 n 很大时, 由于内存容量的限制,可能不能全部存入内存。因此在查找过程中需要反复与外存交换信息,此时前面介绍的各种算法的效率都很低。顺序查找:记录个数n很大,搜索效率极低。折半查找:记录必须全部在内存。插入和删除不方便。静态查找树表:记录必须全部在内存。不能插入和删除。 二叉平衡树:记录必须全部在内存。可以动态调整结构。,1. 索引顺序表,2. m 叉静态搜索树,采用索引方法来实现记录的存储和搜索,后面要讨论的B树和键树是动态索引结构,40,例:有一个存放职工信息的数据表. 每一个职工数据1k字节,且占一个

16、存储页块,数据表共占14400K。但内存只有64K。,采用索引表,每个索引项可索引一个职工记录,且占4个字节,则14400个索引项需要56.25K个字节。,1. 索引顺序表,41,稠密索引:一个索引项对应数据表中一个记录的索引结构。当记录在外存中按加入顺序存放而不是按关键码有序存放时必须采用稠密索引结构。,稀疏索引:,当记录在外存中有序存放时,可以把所有 n 个记录分为 b 个子表(块)存放,一个索引项对应数据表中一组记录(子表)。,在子表中, 记录可能按关键码有序地存放,也可能无序地存放。但所有这些子表必须分块有序,即:后一个子表中所有记录的关键码均大于前一个子表中所有记录的关键码。,42,

17、索引顺序表的查找,一般分为两级搜索: 先在索引表中搜索给定值 K, 查找确定满足IDi-1.max_key K IDi.max_key的 i 值, 即待查记录可能在的子表的序号。,然后在第 i 个子表中按给定值搜索要求的记录。,索引表是按max_key有序的, 且长度也不大,可以折半搜索,也可以顺序搜索。 各子表中的记录如果也按对象关键码有序, 可以采用折半查找或顺序查找; 如果不是按记录关键码有序, 只能顺序查找。,43,查找成功时的平均查找长度,ASLIndexSeq = ASLIndex + ASLSubList其中:ASLIndex : 在索引表中搜索子表位置的平均查找长度ASLSub

18、List : 在子表中查找记录位置的查找成功时的平均查找长度。,设把长度为 n 的表分成均等的 b 个子表,每个子表有 s 个记录,则 b = n/s。又设表中每个记录的查找概率相等,则每个子表的查找概率为1/b,子表中各记录的查找概率为 1/s。若对索引表和子表都用顺序查找,则查找成功时的平均查找长度为:ASLIndexSeq = (b+1)/2 + (s+1)/2 = (b+s)/2 +1(n / s + s )/ 2 + 1,44,索引顺序查找的平均查找长度与表中的记录个数 n 有关,与每个子表中的记录个数 s 有关。 在给定 n 的情况下,s 应选择多大? 用数学方法可导出, 当 s

19、= 时, ASLIndexSeq 取极小值: ASLIndexSeq = +1。 这个值比顺序查找强,但比折半查找差。 若采用折半查找记录所在的子表,子表仍然采用顺序查找,则查找成功时的平均查找长度为ASLIndexSeq = ASLIndex + ASLSubList log2(b+1)-1 + (s+1)/2 log2(1+ n/s) + s/2,45,当数据记录数目特别大,索引表本身也很大,在内存中放不下,需要分批多次读取外存才能把索引表搜索一遍。 此时, 可以建立索引的索引(二级索引)。二级索引可以常驻内存,二级索引中一个索引项对应一个索引块,索引块的记录该索引块的存储地址及索引块中的

20、最大关键码。,2. m 叉静态搜索树,一级索引,二级索引,46,m 叉静态搜索树:由多级索引结构形成一种 m 叉树。树中每一个分支结点表示一个索引块;每个索引块中最多存放 m 个索引项;索引项分别给出各子树结点的最大关键码和结点地址。,数据区,一级索引,二级索引,三级索引,四级索引,47,m叉动态搜索树,定义:,可以是一棵空树,如果非空,则必须满足以下特征:,1) 每个内部结点最多可以有m个子树; 2) 每个内部结点可以有1m-1个元素; 3) 每个含 p 个元素的结点,有p1个子树; 4) 所有内部结点包含下列信息数据(n,A0,K1,A1,K2,A2,Kn,An)其中: n为关键字的个数。

21、Ki (i=1,n) 为关键字,且Ki Ki+1 (i=1,n-1); Ai (i=0,n)为指向子树根结点的指针,且指针Ai-1所指子树中所有结点的关键字均小于Ki,An所指子树中所有结点的关键字均大于Kn,,48,m叉动态搜索树的查找、插入和删除,查找 31,插入 31,65,删除 20,84,5,10,m?,49,4m叉搜索树的高度,1) 一棵高度为h的m叉搜索树最少有h个元素,最多mh-1个;,mi (mh+1-1)/ (m-1),最多结点个数:,在含n个元素的m叉搜索树中进行查找需要比较的次数在:n log m (n+1) 之间,平衡m叉树 B 树,每个结点最多: m-1个 元素,50,本章作业,9.28, 9.38,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报