| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 查找树(四):B-树和B+树 -> 正文阅读 |
|
[数据结构与算法]查找树(四):B-树和B+树 |
1. 磁盘I/O问题众所周知,相较于计算机指令的执行速度,访问磁盘所带来的开销是十分巨大的。对于一段需要访问磁盘的程序,程序运行的时间几乎都花费再了磁盘的I/O上。 也就是说,在这种情况下,如果我们可以将磁盘的访问次数减少一般,那么程序的运行时间也将减半。 当数据量较少,可以完全存储在内存时,数据的访问相对来说是比较快的,类似AVL树、红黑树等数据结构可以将操作数据的时间复杂度控制在O(log2N)。当数据量很大时,无法将其存储在内存当中,只能退而求其次,存储在磁盘中;由于磁盘I/O速度的限制,此时大O模型将不再适用,磁盘的I/O次数决定了程序的时间成本。 针对数据被存储在磁盘中的情况,常规的平衡二叉树已经不能很好的满足我们的需求。因此,我们需要一种新的查找树结构,这种新的树结构可以在相同数据量时拥有更低的高度(树的高度决定了数据操作的最大访问次数)。 2. B-树为降低树的高度,很自然的一个想法就是让树有更多的分支,B-树就遵循了此想法——既然一个节点有两个分支不够,那就让它拥有尽可能多的分支。B-树的所有节点都携带数据(这也是它和B+树的主要区别),由于它是一颗查找树,因此需要一个“排序”的依据,将此排序的依据成为关键码,每个关键码都关联着具体的数据元素。也就是说,节点的关键码个数也代表着节点存储的数据元素的个数。 B-树又被称为B树,B代表Balanced,即平衡的意思。一棵M阶的B-树有如下的特点:
单纯的看B-树的定义显得比较的抽象,可以通过具体的插入和删除操作进一步的理解B-树的结构。 2.1 B-树的插入操作简单的来说,B-数的插入操作可以分为以下几种情况:
以M = 5为例(即一颗5阶的B-树),图例中蓝色代表新插入的元素,绿色代表插入前就已经存在的元素:
查找树的插入操作一般都会选择将新元素作为叶子节点插入,每次插入后,如果没有破坏B-树的规则,则插入结束;如果破坏了B-树的规则(插入操作中主要指关键码个数超出规定),则向进行分离操作,然后递归的检查父节点是否符合B-树的规则。 2.2 B-树的删除操作一般来说,删除操作都会比插入操作更加的复杂,B-树也是如此。简单的来说B-树的删除可以分为以下几种情况:
继续以M = 5为例,首先构造了一颗元素“较多”的B-树,然后对其进行删除操作,被删除的元素被表示为红色:
3. B+树B+树是B-树的变体,也是一种多路搜索树,它与B-树类似,并规定了:
也就是说,B+树的数据都被保存在了叶子节点中,为什么要这么做呢? 回顾引入B-树的过程,选取B-树的初衷是为了降低树的高度,以减少磁盘I/0的次数。一般来说,树的每一个节点都对应着一个磁盘区块,节点中存储元素的大小限制了节点存储元素的个数,即影响了最终所获的树的高度,从而影响磁盘I/O的次数。 B-树中的每个节点都保存着关键码和指向数据的指针,它们共同构成了前面所说的“元素”,如果可以减小元素的大小,就可以进一步的降低树的高度。 由于多路查找树的增删查操作都依赖于关键码,因此关键码是必须保留的,但数据指针在查找过程中却不是必须的,因此可以只保存在叶子节点中。B+树就是遵循了此原理,它的内部节点只保存了关键码(以及子节点的索引),不保存数据指针,所有的数据都被保存在了叶子节点中:
下面给出了一个B+树了示例: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:39:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |