B树及B+树
一、B树
1、B树的定义
B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件:
(1)每个结点至多有m个子结点;
(2)除根结点和叶结点外,其它每个结点至少有 个子结点;
(3)若根结点不是叶子结点,则至少有两个子结点;
(4)所有的叶结点在同一层;
(5)有k个子结点的非根结点恰好包含k-1个关键码。
2、B树的查找
B树上的查找是一个顺指针查找结点和在结点内的关键码中查找交叉进行的过程。从根结点开始,在结点包含的关键码中查找给定的关键码,找到则查找成功;否则确定给定关键码可能在的子树,重复上面的操作,直到查找成功或者指针为空为止。
下图显示了在B树中查找关键码21的过程。

3、B树的插入
首先是在恰当的叶子结点中添加关键码,如果该结点中关键码不超过m-1个,则插入成功。否则要把这个结点分裂为两个。并把中间的一个关键码拿出来插到结点的父结点里去。父结点也可能是满的,就需要再分裂,再往上插。最坏的情况,这个过程可能一直传到根,如果需要分裂根,由于根是没有父结点的,这时就建立一个新的根结点。插入可能导致B树朝着根的方向生长。
下图显示了在B树中插入关键码33的过程。

4、B树的删除
B树中的删除操作与插入操作类似,但要稍微复杂些。如果删除的关键码不在叶结点层,则先把此关键码与它在B树里的后继对换位置,然后再删除该关键码。如果删除的关键码在叶结点层,则把它从它所在的结点里去掉,这可能导致此结点所包含的关键码的个数小于 -1。这种情况下,考察该结点的左或右兄弟,从兄弟结点移若干个关键码到该结点中来(这也涉及到它们的父结点中的一个关键码要做相应变化),使两个结点所含关键码个数基本相同。只有在兄弟结点的关键码个数也很少,刚好等于 -1时,这个移动不能进行。这种情况下,要把将删除关键码的结点,它的兄弟结点及它们的父结点中的一个关键码合并为一个结点。
二、B+树
1、B+树的概念
B+树是B树的一种变形树,它与B树的差异在于:
有k个子结点的结点必然有k个关键码;
非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
2、B+树的查找
跟B树的查找类似,但是也有不同。由于跟记录有关的信息存放在叶结点中,查找时若在上层已找到待查的关键码,并不停止,而是继续沿指针向下一直查到叶结点层的关键码。此外,B+树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。上面两种方式结合起来,使得B+树非常适合范围检索。
3、B+树的插入
B+树的插入与B树的插入过程类似。不同的是B+树在叶结点上进行,如果叶结点中的关键码个数超过m,就必须分裂成关键码数目大致相同的两个结点,并保证上层结点中有这两个结点的最大关键码。
4、B+树的删除
B+树中的关键码在叶结点层删除后,其在上层的复本可以保留,作为一个"分解关键码"存在,如果因为删除而造成结点中关键码数小于 ,其处理过程与B树的处理一样。
不同于B树只适合随机检索,B+树同时支持随机检索和顺序检索,在实际中应用比较多。
B树及B+树的更多相关文章
- wpf 逻辑树与可视化树
XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性.在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树.逻辑树的概念很直观,但是为什么要关注它呢?因为几乎WPF的每一方面(属性.事 ...
- 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种 ...
- B树、B+树的实现
B树的定义 假设B树的度为t(t>=2),则B树满足如下要求:(参考算法导论) (1) 每个非根节点至少包含t-1个关键字,t个指向子节点的指针:至多包含2t-1个关键字,2t个指向子女的指针 ...
- B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right) 2.所有结点存储一个关键字 3.非叶子节点的左指针指向小于其关键字的字数,右指针指向大于其关键字的字数: 如: B树的 ...
- 人人都是 DBA(VII)B 树和 B+ 树
B 树(B-Tree)是为磁盘等辅助存取设备设计的一种平衡查找树,它实现了以 O(log n) 时间复杂度执行查找.顺序读取.插入和删除操作.由于 B 树和 B 树的变种在降低磁盘 I/O 操作次数方 ...
- 字典树(Trie树)
1. trie基础 (1) 是什么? Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种. (2) 性质 根节点不包含字符,除根节点外每一个节点都只包含一个字符 从根节点到某一节点,路 ...
- (转)B-树、B+树、B*树
B-树 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子:且M>2: 2.根结点的儿子数为[2, M]: 3.除根结点以外的非叶子结点的儿子数为[M/2, M]: 4. ...
- 从B 树、B+ 树、B* 树谈到R 树
从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由 ...
- B树和B+树
当数据量大时,我们如果用二叉树来存储的会导致树的高度太高,从而造成磁盘IO过于频繁,进而导致查询效率下降.因此采用B树来解决大数据存储的问题,很多数据库中都是采用B树或者B+树来进行存储的.其目的就是 ...
- 转 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tre ...
随机推荐
- Data truncation: Data too long for column 'gender' at row 1 出现的原因
创建数据库的代码如下: create database day15 ; use day15 ; create table customer( id varchar(100) primary key, ...
- CSS属性定义 文本修饰 边框效果 背景修饰
一.CSS属性定义1.css颜色表示方法[重点]rgb(红绿蓝3个颜色通道 强度值为0-255)rgb(0,0,0)rgba(alpha a是透明度 值为0-1)rgba(123,123,123,0) ...
- Docker 学习笔记
1. Docker 资源 英文资源 Docker 官网:https://www.docker.com/ Docker 官方文档:https://docs.docker.com/ Docker wind ...
- mysql常用的hint
--mysql常用的hint -------------------2014/06/26 对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法. ...
- OS作业模拟进程分配与回收
OS的一个作业, 模拟进程的分配与管理 # initialize the memories and the process list(actually a dict) total_memory = 1 ...
- python----------装饰器应用练习
1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码注意:从文件中读出字符串形式的字典,可以用eval('{"name& ...
- C/C++ 知识点---设计模式
在软件工程中,设计模式用来描述在各种不同情况下,要怎么解决问题的一种方案.面向对象设计模式通常以类或对象来描述其中的关系和相互作用,是软件“设计”层次上的问题.使用设计模式可提高代码的重用性和可靠性, ...
- 写java代码遇到的一些问题
记录一些做论文实验写代码时遇到的问题. 数据库SQL语句方面: 1.java通过JDBC连接MySql数据库方法 参见:http://hzy3774.iteye.com/blog/1689525 2. ...
- Nginx反向代理和负载均衡的配置
1.反向代理配置 反向代理也称"动静分离",nginx不自己处理图片的相关请求,而是把图片的请求转发给其他服务器来处理. 修改nginx部署目录下conf子目录的nginx.con ...
- Jenkins : 邮件通知
目录 全局配置 为项目添加邮件通知 邮件模板 Pipeline 支持 总结 Jenkins 内置了 Mailer 插件用于发送邮件通知,但是 Mailer 插件的功能比较简单,无法按照用户的需求进行邮 ...