数据结构之B树

B树(B-tree)是一种自平衡的搜索树,广泛用于文件系统和数据库中以提高数据存储和检索的效率。B树的设计使得它特别适合磁盘或其他直接访问存储设备,因为它减少了磁盘读写次数。

B树的基本特性

  1. **平衡性**:B树是一种平衡树,所有叶子节点都在同一层。

  2. **节点存储多个键**:每个节点可以存储多个键(不仅仅是两个),并且这些键按顺序排列。

  3. **子树的数量**:一个有m个键的节点可以有m+1个子节点。

  4. **节点的填充率**:除了根节点和叶子节点,每个节点至少被填充一半(半满)。

B树的定义

  • 一棵m阶的B树满足以下条件:
  1. 每个节点最多有m-1个键(即最多有m个子节点)。

  2. 每个节点(除了根节点)至少有⌈m/2⌉ - 1个键(即至少有⌈m/2⌉个子节点)。

  3. 所有叶子节点都在同一层。

  4. 所有节点的键值从小到大排列,节点内的每个键值i有一个指向子树的指针,使得子树中所有键值小于i的键值在i的左边,所有键值大于i的键值在i的右边。

B树的操作

  1. **查找**:查找操作类似于二分查找,从根节点开始,根据键值大小逐层向下查找,直到找到相应的键值或到达叶子节点。

  2. **插入**:插入操作从叶子节点开始,如果叶子节点满了,则分裂叶子节点并将中间键值向上提升,可能引起连锁分裂,直到根节点。如果根节点也满了,则增加新的根节点,树的高度增加一层。

  3. **删除**:删除操作比较复杂,可能涉及节点的合并和键值的重新分布。删除的具体操作取决于要删除的键值的位置及其子节点的情况。

B树的优点

  • **高效的磁盘读写**:B树的结构设计使得它在磁盘或其他外部存储器上的读写操作非常高效,因为它减少了不必要的磁盘访问次数。

  • **平衡性保证**:通过自动调整,B树始终保持平衡,使得查找、插入和删除操作都具有对数级别的时间复杂度。

  • **灵活性**:B树可以很容易地调整其阶数以适应不同的应用需求。

例子

假设我们有一个3阶的B树(每个节点最多包含2个键),我们依次插入以下键值:10, 20, 5, 6, 12, 30, 7, 17。

构建过程如下:

  1. 插入10:树为空,插入10作为根节点。

  2. 插入20:插入到根节点,节点包含键值10, 20

  3. 插入5:插入到根节点,节点包含键值5, 10, 20,根节点已满,分裂为两个节点。

  4. 插入6:插入到根节点右子节点。

  5. 插入12:插入到根节点右子节点。

  6. 插入30:插入到根节点右子节点,右子节点已满,分裂并提升键值20。

  7. 插入7:插入到合适的叶子节点。

  8. 插入17:插入到合适的叶子节点。

最终的B树如下:

```

10, 20

/ | \

5, 6\] \[7, 12\] \[17, 30

```

总结

B树是一种高效的、用于存储和检索大量有序数据的树形数据结构,其平衡性和灵活性使其在数据库和文件系统中得到广泛应用。通过理解B树的基本特性和操作,可以更好地利用它们来提高数据管理的性能。

相关推荐
少司府5 小时前
C++进阶:智能指针
开发语言·数据结构·c++·b树·算法·c·智能指针
_Narcissus_18 天前
B树概念及操作笔记(含完整代码实现)
c语言·数据结构·数据库·c++·笔记·b树·算法
_Narcissus_18 天前
B+树的概念和操作笔记(含完整代码实现)
c语言·数据结构·数据库·c++·笔记·b树·算法
隔窗听雨眠19 天前
MySQL索引机制深度解析:从B+树原理到高并发查询优化的完整指南
数据库·b树·mysql
索西引擎20 天前
【数据结构】B树与B+树:结构性质、对比分析与磁盘优化机理
数据结构·b树
浅念-22 天前
MySQL 索引底层完整详解|磁盘Page|B+树推导|聚簇非聚簇索引|索引SQL操作
大数据·数据库·b树·sql·mysql·面试·职场和发展
白狐_79824 天前
408数据结构第7章:B树①——基础概念与结构
数据结构·b树
小白说大模型1 个月前
【MYSQL】MYSQL学习的一大重点:索引(下)- B+树
b树·学习·mysql
艾莉丝努力练剑1 个月前
【MYSQL】MYSQL学习的一大重点:事务(下)- InnoDB 事务隔离性原理(MVCC 视角)
android·数据库·b树·sql·学习·mysql·面试
程序员老舅1 个月前
啃透 I2C 驱动开发,才算入门嵌入式 Linux 内核驱动
数据结构·驱动开发·b树·内核·嵌入式·嵌入式开发·i2c