版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 查找 B-树,B-树(Balanced Tree)是一种平衡的多叉树,由R. Bayer和E. Mccreight在1970年提出的。,第8章 查找 B-树,1. B-树的结构 一棵度为m(也称为m阶,m为给定数)的B-树,它满足: (1)每个结点的子结点个数m; (2)根结点若不是叶子结点,它至少有两个子结点; (3)除根和叶子结点外,每个结点的子结点个数 ; (4)所有的叶子结点都出现在同一层,而且不带有信息; (5)非叶子结点若具有j+1个子结点,那么它包含j个关键字。其中,jm-1。,第8章 查找 B-树,p0 k1 p1 k2 p2 ki-1 pi-1 kj pj,B-树的非
2、叶子结点的结构形式,ki (1ij)是关键字,所有关键字的值是唯一的;pi (0ij)是指向该结点的子结点的指针。,第8章 查找 B-树,结点中的关键字是按一定规则排好序的。假若按升序排列,有k1 k2 kj,那么,p0指向一棵关键字均小于k1的子树的根结点; pi(0ij)指向一棵关键字都在ki和ki+1之间的子树的根结点;pj指向一棵关键字均大于kj的子树的根结点。,第8章 查找 B-树,120,40,80 90,50,30,70 100,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,10 20 25
3、,一棵4阶的B-树,除了根和叶子结点外,每个结点的子结点个数为2个至4个,即有1、2或3个关键字。而根结点的子结点至少2个。在每个结点中,关键字按递增次序排列。所有叶子结点都在最底下的一层,它们的个数比这棵树的关键字的个数多1个。叶子结点因不保存数据。,第8章 查找 B-树,B-树的查找 在给定的m阶B-树中查找一个给定值v相等的关键字,必须从根结点开始进行查找。 B-树应用于文件系统的动态索引结构,这些结点存储于外部存储设备上。当一个结点从外存调入内存后,我们可就这个结点的关键字序列,使用顺序查找(m较小时),或使用二分查找( m较大时)。,第8章 查找 B-树,假若当前被查找的结点中有j个
4、关键字,那么,在查找等于给定值v的关键字时,会有如下可能: (1)若v=ki (1ij),则查找成功。 (2)若v k1 ,则 如果p0为空,那么查找失败; 如果p0非空,那么从外存取得p0所指的结点,再继续进行查找。 (3)若ki v ki+1 (1ij),则 如果pi为空,那么查找失败; 如果pi非空,那么从外存取得pi所指的结点,再继续进行查找。 (4)若kj v, 则 如果pj为空,那么查找失败; 如果pj非空,那么从外存取得pj所指的结点,再继续进行查找。,第8章 查找 B-树,#define m 20 typedef struct BTNode struct BTNode *par
5、ent; / 指向父结点的指针 int keym+1; / key0不用 struct BTNode *childm+1; DATARecord *recptrm+1; / 指向相应记录的指针,recptr0不用 BTNODE;,第8章 查找 B-树,int BTSearch (BTNODE *root, int v, BTNODE *pp, BTNODE *pq, int ,第8章 查找 B-树,程序返回后,我们得到了*pp(当前结点的指针)、*pq(父结点的指针)和 i 的值。 假如查找成功,由此可从(*pp)-recptri获得要查找数据记录的地址。 假如查找失败,则*pp指向叶子结点,
6、而*pq指向其父结点。 在含有n个关键字一棵m阶的b-树上进行查找时,需要从外存读入的结点数量不超过 个。当n=1999998和m=199时,t最多是4。,第8章 查找 B-树,3. B-树的插入 所谓B-树的插入,就是在m阶B-树中插入等于给定值的关键字。 B-树的生成也是从空树开始,通过不断插入关键字而逐渐枝繁叶茂的。 在插入之前先进行查找,如果要插入的关键字已在树的某个结点中,则返回;如果不在树中,可得到被插入结点的指针,而被插入结点位于叶子结点的父结点。,第8章 查找 B-树,如果被插入结点的关键字的个数小于m-1,即该结点的关键字个数不满,就直接把给定值作为关键字插入到结点的应有位置
7、。 如果被插入结点的关键字的个数等于m-1,即该结点的关键字个数已满,则在插入时需进行“分裂”。 所谓“分裂”,就是将被插入结点分裂成两个结点,而将结点中位于中间的关键字推到被插入结点的父结点中进行插入。,第8章 查找 B-树,(a)在4阶B-树中,要求插入给定值为82的关键字,120,70 100,80 90,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,120,70 100,80 82 90,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,(b) 关键字82直接插入成功,现要求插入值为85的关键字,第8章 查找 B-树,1
8、20,85 90,60,NULL,NULL,NULL,NULL,NULL,NULL,NULL,80,70 82 100,NULL,NULL,值为 85的关键字要插入,而结点原来关键字个数=3,位置已满,因而结点分裂成两个结点80和85、90,结点中间的关键字82插到父结点中,第8章 查找 B-树,在一棵m阶B-树中插入新的关键字时,如果叶子结点在第t层,那么,插入的结点就在第t-1层。如果被插入的结点原来关键字个数少于m-1,那么就将新的关键字直接插到这个结点的适当位置上;如果被插入的结点原来关键字个数等于m-1,那么包括新的关键字就一共有m个。假如这些关键字为 ,那么,将这个结点分裂成两个结
9、点,前面的结点由关键字 组成,后面的结点由关键字 组 成,而把关键字 插到父结点中去。,第8章 查找 B-树,父结点中指向被插结点的指针,扩充为 的形式,指针p指向分裂后的前面的结点,而指针q指向分裂后的后面的结点。父结点的插入,仍然重复前面的做法。假如父结点的关键字个数还是m-1,那么继续分裂并将中间的关键字插到祖父结点。如果一路上关键字的位置都已满,那么,就一路上分裂上去,最后把原来的根结点分裂成两个结点,而将中间的关键字向上推,形成新的根结点。此时,这棵B-树就长高了一层。,第8章 查找 B-树,4. B-树的删除 所谓B-树的删除,就是在m阶B-树中删除等于给定值的关键字。 删除一个关
10、键字过程: 首先,要找到需删除的关键字ki的位置。 如果叶子结点在第t层,ki在第t-1层的某个结点中,那么在这个结点中把ki连同它右边的指针pi一同删去; 如果ki是第j层(jt-1)的某个结点中,那么删除ki时不能同时删除pi,因为pi还起着指向下面结点的作用。,第8章 查找 B-树,将指针pi所指子树中的最小关键字k(在叶子结点的上面一层的结点中)来代替需删除的关键字ki,然后在k所在的结点中将关键字k删去。具体做法为: 首先找到pi所指向的下层结点;若这结点的最左边的指针p0(j+1)不空,则再由p0(j+1)找到再下层结点;若该结点的最左边的指针p0(j+2) 不空,则再由p0(j+
11、2)找到下一层的相应指针,一直找到p0 (t-1 )为空的结点为止。这个结点的k1(t-1)就是指针pi所指子树中的最小关键字k,将这个k替换需删除的关键字ki(在第j层的结点中),然后将p0(t-1)和k1(t-1)一起从原来的结点中删去。,第8章 查找 B-树,第j层: pi-1ki pi ,第j层: pi-1 k1(t-1) pi ,p0(j+1)k1(j+1)p1(j+1),p0(j+2)k1(j+2)p1(j+2),p0(t-1)k1(t-1)p1(t-1) ,p1(t-1),p0(j+2)k1(j+2)p1(j+2),NULL,NULL,NULL,p0(j+1)k1(j+1)p1(
12、j+1),第8章 查找 B-树,叶子结点的上面一层(第t-1层)的某个结点被删除了一个关键字,就需要检查该结点中关键字个数是否继续大于等于 个,若是,则整 个删除操作结束;若否,即该结点的关键字个数小于 个, 则要从相邻的、关键字个数 大于 的右(或左)兄弟结点中将最小 (或最大)的关键字上移到父结点中,而将父结点中小于(或大于)且紧靠该上移关键字的关键字下移到被删关键字所在结点中。这种做法成为“借键”。假如借键成功,那么删除操作就结束。,第8章 查找 B-树,假如相邻的右(或左)兄弟结点关键字个数正好等于 ,它们没有多余的关键字可 借,那么,我们就要进行“分裂”的逆操作“合并”。合并操作是将
13、被删结点中的关键字和相邻结点中的关键字连同介于这两个结点指针中间的父结点的关键字组成一个新结点。此时,父结点少了一个关键字。假如父结点的关键字个数个数大于 ,那么删除操作结束;否则,父结点 又要与其兄弟结点进行“借键”或“合并”。,第8章 查找 B-树,88 98,101 105,91 95,70 78,51 55 58,30 36,24 45,12 18,64,88 98,101 105,91 95,70 78,55 58,36 45,30 51,12 18,64,5阶B-树要删除关键字24,则30覆盖24,由于结点中仅有36,关键字过少,但右边兄弟结点关键字较多,就“借键”:51上移到父结点,45下移,再删除关键字64,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江苏住院医师规范化培训考试(消化内科Ⅱ阶段)题库历年参考题库含答案详解
- 2026教师职称-辽宁-辽宁教师职称(基础知识、综合素质、小学体育)历年参考题库含答案详解3套试卷
- 2026教师职称-浙江-浙江教师职称(基础知识、综合素质、高中数学)历年参考题库含答案详解3套试卷
- 室内传感器PM设计课题课程设计
- SolidWorks减速器干涉检查课程设计
- 在线教育平台用户行为建模课程设计
- 身份证识别系统开发教程课程设计
- 初中画画课程设计
- 厂房单向板课程设计
- RFM模型客户激活研究课程设计
- 2026年江苏省徐州市中考英语真题(含答案)
- 《电机与电气控制技术》课件-1-4 继电器的认识与检测
- 人教版(2024)八年级上册数学全册教案
- 2025年手术室专科护士考试题及答案
- T/CAPE 11005-2023光伏电站光伏组件清洗技术规范
- 全国职业院校技能大赛高职组(研学旅行赛项)备赛试题及答案
- 《社会调查》课件
- 零星工程维修 投标方案(技术方案)
- DB44-T 2508-2024 自助加油站建设及管理规范
- 高中化学必修一必修二综合测试题和解答
- 第七章 固体表面化学
评论
0/150
提交评论