B-树
是一种多路搜索树(并不是二叉的):
1.定义任意非叶子结点最多只有M个儿子;且M>2;
2.根结点的儿子数为[2, M];
3.除根结点以外的非叶子结点的儿子数为[M/2, M];
4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)
5.非叶子结点的关键字个数=指向儿子的指针个数-1;
6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的
子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
8.所有叶子结点位于同一层;
如:(M=3)
B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果
命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为
空,或已经是叶子结点;
B-树的特性:
1.关键字集合分布在整颗树中;
2.任何一个关键字出现且只出现在一个结点中;
3.搜索有可能在非叶子结点结束;
4.其搜索性能等价于在关键字全集内做一次二分查找;
5.自动层次控制;
由于限制了除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少
利用率,其最底搜索性能为:
其中,M为设定的非叶子结点最多子树个数,N为关键字总数;
所以B-树的性能总是等价于二分查找(与M值无关),也就没有B树平衡的问题;
由于M/2的限制,在插入结点时,如果结点已满,需要将结点分裂为两个各占
M/2的结点;删除结点时,需将两个不足M/2的兄弟结点合并;
B+树
B+树是B-树的变体,也是一种多路搜索树:
1.其定义基本与B-树同,除了:
2.非叶子结点的子树指针与关键字个数相同;
3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树
(B-树是开区间);
5.为所有叶子结点增加一个链指针;
6.所有关键字都在叶子结点出现;
如:(M=3)
B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在
非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;
B+的特性:
1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好
是有序的;
2.不可能在非叶子结点命中;
3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储
(关键字)数据的数据层;
4.更适合文件索引系统;
B*树
是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针;
B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3
(代替B+树的1/2);
B+树的分裂:当一个结点满时,分配一个新的结点,并将原结点中1/2的数据
复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父
结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;
B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分
数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字
(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之
间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针;
所以,B*树分配新结点的概率比B+树要低,空间使用率更高;
小结
B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于
走右结点;
B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键
字范围的子结点;
所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;
B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点
中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率
从1/2提高到2/3;
相关推荐
### B树-B+树-B*树谈到R树 #### 一、引言 在计算机科学领域,树形数据结构作为一种高效的数据组织方式被广泛应用。在众多树形结构中,B树、B+树、B*树和R树因其在处理大规模数据集时表现出的优秀性能而备受关注。...
### B树、B+树、B-树详解 #### B树 B树是一种自平衡的树数据结构,常用于数据库和文件系统中。它保证了树的高度较低,从而提高了...- **B*树** 进一步优化了B+树的存储空间利用率,适用于对存储空间敏感的应用场景。
B树(B-tree)、B+树(B+tree)和B*树(B*tree)是为了解决大规模数据存储中的索引查询而设计的高效数据结构,尤其适用于外部存储器如磁盘等。这些树结构的出现,源于对传统二叉查找树及其变种(如平衡二叉查找树和...
B树、B-树、B+树以及B树++和R树是数据库和文件系统中常用的高效数据结构,它们主要用于实现磁盘或其他外部存储的查找。这些数据结构的设计目标是减少磁盘I/O操作,提高数据访问速度,因为磁盘读写速度远慢于内存。 ...
标题中的“从B树、B+树、B*树谈到R树”涵盖了数据库索引结构中的几种重要数据结构。这些数据结构在存储和检索大量数据时起着关键作用,尤其在数据库管理系统、文件系统和地理信息系统等领域。让我们逐一探讨这些数据...
2. 实现矩阵乘法函数multi,用于计算矩阵A和B的乘法结果,并将其存储在result矩阵中。 3. 在main函数中,初始化矩阵A、B、C和D,并调用multi函数来计算矩阵乘法结果。 4. 最后,打印出计算结果。 汇编语言实现: ...
**B+树详解** B+树(B Plus Tree)是一种自平衡的树数据结构,广泛应用于数据库和文件系统中,因为它能保持数据排序并提供快速的查找、插入和删除操作。这种数据结构的特点是所有数据都在叶子节点,非叶子节点只...
总结,B+树是一种高效的数据结构,尤其适用于在硬盘上存储大量数据的场景。通过理解其结构和操作原理,我们可以更好地利用它来构建高效的数据索引系统。在文件实现中,要充分考虑磁盘I/O的特性,以实现最佳的性能。
### B树、B-树、B+树、B*树详解 #### 一、B树 (Binary Search Tree) **定义**: - B树通常指的是**二叉搜索树**(Binary Search Tree, BST)。这是一种特殊的二叉树,其中每个节点最多有两个子节点(左子节点和右...
在探讨数据库和文件系统中数据结构的高效管理时,B树和B+树的讨论是无法绕开...B树和B+树,作为数据存储系统中不可或缺的核心组件,其重要性不言而喻,而对它们的深入探索和研究也将不断推动数据处理技术的发展和进步。
与普通的二叉搜索树不同,B+树的所有数据都存储在叶子节点上,且叶子节点之间通过指针链接,使得数据的遍历更为高效。此外,B+树的每个内部节点(非叶子节点)可以包含多个子节点,这使得它能够处理大量数据并保持较...
- **每个节点可存储多个键值对**:B+树允许节点存储多个键值对,这增加了节点的利用率,减少了树的高度,从而提高了查询效率。 - **节点间指针连接**:所有叶子节点通过指针相互连接,形成一个链表,这使得范围查询...
在B+树中,所有数据都存储在叶子节点中,而非叶子节点仅作为索引使用,这样确保了任何查找操作都能在一次磁盘I/O操作中完成。 **B+树结构** 1. **根节点**:B+树的根节点可以是叶子节点也可以是非叶子节点,但至少...
- 描述:本代码实现了基于文件系统的B+树,所有节点存储在一个文件中,每个节点大小相同,并进行了编号,便于快速定位。 2. **预处理指令**: - 包含必要的头文件:`<stdio.h>`、`<malloc.h>`、`<memory.h>` 和 `...
B树、B-树、B+树和B*树都是数据库和文件系统中常用的高效数据结构,它们主要用于解决大数据量的存储和检索问题。这些数据结构都是多路搜索树,与二叉搜索树不同的是,它们的每个节点可以有多个子节点,从而允许更...
在计算机科学中,数据结构是算法的基础,而B树(B-tree)和B+树(B+tree)是两种常用且高效的数据结构,主要用于数据库和文件系统的索引存储。这两种数据结构都具备自平衡特性,可以保持数据的有序性,支持快速的...
B树、B-树、B+树和B*树是数据库和文件系统中常见的数据结构,主要用于高效地存储和检索大量数据。它们都是自平衡的多路搜索树,能够保持数据的有序性,并且在插入、删除和查找操作时保持较高的效率。 1. **B树**:B...
B+树和B-树是计算机科学中用于数据库和文件系统等数据存储的重要数据结构,它们主要用于高效地管理大量数据,特别是当数据需要在磁盘等慢速存储介质上进行操作时。这两种树都是自平衡的,能保持数据的有序性,并且在...
在实际应用中,B+树的插入和删除操作需要考虑磁盘I/O的效率,因为数据库系统通常将B+树存储在磁盘上。通过维持较高的节点内部密度,B+树能够减少磁盘读写的次数,从而提高查询性能。 总的来说,B+树是一种高效的...
B-树和B+树是两种重要的数据结构,主要用于数据库和文件系统的索引,它们能够高效地处理大量的数据,尤其适合磁盘等慢速存储介质。这两种数据结构都是多路平衡查找树,能够保持数据的有序性,同时通过减少磁盘I/O...