数据结构——B-tree(多路搜索树)

来源:互联网 发布:js div display none 编辑:程序博客网 时间:2024/06/10 08:08

一、前言

B-tree树(多路搜索树,非二叉树),B即Balanced,平衡的意思,有别于二叉查找树(Binary Search Tree),在国内有经常将两者都写作B-树的情形,这其实是非常容易混淆的直译,因为这两种树有非常大的差别,不是同一种数据结构。所以,希望在提到B-tree树时,可以加上多路搜索树的全程,或者读成Balanced Tree以明确区分。还有~如果读成了B减树,那可真就丢人了~
B-tree这个数据结构一般用于数据库的索引,综合效率较高。比如MySql的索引采用的就是B+树,是B-tree的变体,所以接下来我们先了解B-tree的原理。

二、数据库索引

树结构的查询效率高,并且可以保持有序,这使得数据库索引使用非常便利。但是既然使用树结构,二叉搜索树的查询时间复杂度是O(log(n)),从算法逻辑上来讲,无论查找速度还是比较次数都是最小的,那为什么数据库索引没有采用二叉搜索树呢?因为在实际情况下,我们不得不考虑另外一个现实问题,磁盘IO,因为数据库的索引通常十分庞大,需要以文件形式存储,而磁盘IO的存取次数就是评价一个数据库索引优劣的关键性指标。
因为索引的加载不可能一次全部加载进内存,磁盘读取每次读取的长度为一个磁盘页的长度,所以数据库系统会将一个节点的大小设为等于一页,这样保证了数据库每个节点只需要一次IO就可以完全加载。每次新建节点,直接申请一个页的空间,计算机存储分配是按页对齐的,这样在物理上也保证了一个节点对应一页,保证一个节点只需要一次IO。在B-tree中m值一般会设的比较大,让树的高度降低,有利于一次完整载入。
树的查找是由树的高度决定的,所以在二叉查找树中,最坏的情况下,磁盘的IO次数等于索引树的高度,而二叉查找树的性质决定了,大数据量的情况下树的高度必然会很高,所以为了减少磁盘IO次数,我们需要将瘦高的树变得矮胖,这也是B-tree的特征之一。

三、B-tree

B-tree是一种多路平衡查找树,它的每一个节点最多包含k个孩子,k被称为B-tree的阶。数据库索引树中,k的大小取决于磁盘页的大小。一个m阶的B-tree具有如下几个特征:
1.根节点至少有两个孩子
2.每个中间节点都包含k-1个元素和k个孩子,其中m/2<= k <=m
3.每一个叶子节点都包含k-1个元素,其中m/2<= k <=m
4.所有的叶子节点都位于同一层
5.每个节点中的元素从小到大排列,节点中当k-1个元素正好是k个孩子包含的元素的值域分划
这么一条条的规则看起来很生硬,我们以一个3阶B-tree的例子来看
这里写图片描述
在这张图中,重点看下(5,9)节点,孩子节点有有两个元素5和9,又有三个孩子4,(6,8),13。其中4小于5,(6,8)在(5,9)之间,13大于(5,9)。正好符合上面的几条特征。
我们再来演示下查询的过程,比如说查询元素6。
这里写图片描述
如图:第一次拿6和12比较,然后从左分支,6再和(5,9)比较,走中间分支,然后6再和(6,8)比较,找到所要查找的元素。在这个过程中,随着元素的增多,实际情况下内存中比较次数可能很多,但是内存的比较时间与磁盘IO消耗相比几乎可以忽略不计。
接下来我们再演示下B-tree添加和删除的情况,因为B-tree之所以叫Balanced tree,那是因为它时刻保持自平衡,所以在插入节点的过程非常复杂,而且需要分多种情况来分析,这里我们只举一个典型的例子来表示出B-tree的特性,从而更方便大家理解它的理念,更多的细节还希望大家在运用的过程中去学习理解。比如我们插入一个节点7,自顶向下查找发现7的位置在(6,8)之间:
这里写图片描述
节点(6,8)已经是两元素节点,无法在增加。父亲节点(5,9)也是两元素节点,也无法再增加,根节点12是单元素节点,可以升级为两元素节点。升级后,需要拆分(5,9)节点为单元素节点,同时拆分(6,8)为单元素节点,结果如图:
这里写图片描述
插入一个元素,使得整个树几乎变了样子,但这也是B-tree自平衡的特点。
我们再来看下删除元素的例子,比如删除14。
删除14后,节点15只有一个孩子,不符合B-tree的规范,因此在15,16,18中找出中位数16,使其取代节点15,而15左下移成为孩子,如图:
这里写图片描述

四、结语

B-tree主要用在文件系统以及部分数据库索引,比如MongoDB,而MySql使用的是B-tree的变种B+树。上面所举的例子比较简单,但是原理都是通用的,方便大家理解,更深层的东西希望能在今后的学习和工作中领会。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑装系统黑屏怎么办 电脑c盘无法访问怎么办 d盘变成ntfs怎么办 系统重装卡住了怎么办 系统关机没反应怎么办 232串口打开失败怎么办 逆水寒cpu不支持怎么办 显卡被禁用了怎么办 vmvare注册错了怎么办 电脑主机未成功启动怎么办 主机未成功启动怎么办 电脑主机未能成功启动怎么办 虚拟机没有自带怎么办 错误连接为720怎么办 dns错误不能上网怎么办 家里无线用不了怎么办 磁盘c5坏了怎么办 一体机装xp蓝屏怎么办 虚拟机密码忘记了怎么办 vivoy66手机太卡怎么办 虚拟机装xp蓝屏怎么办 exagear玩起来卡怎么办 第五人格模拟器玩太卡怎么办 速腾油箱盖打不开怎么办 奥迪a6油箱盖打不开怎么办 苹果手提虚拟机黑屏怎么办 mac系统桌面变大怎么办 删除文件要权限怎么办 页面载入错误了怎么办 手机打不开excel表格怎么办 皇室战争闪退怎么办 苹果老是闪退怎么办 黑苹果开机黑屏怎么办 MAC磁盘删了怎么办 mac磁盘被锁定怎么办 bt5读不到网卡怎么办 笔记本电脑cpu温度过高怎么办 笔记本cpu温度过高怎么办 联想系统崩溃了怎么办 办公软件用不了怎么办 win10设置闪退怎么办