`
liuhun3083053
  • 浏览: 16757 次
社区版块
存档分类
最新评论

B-Tree B+Tree 比较

阅读更多
B树
       即二叉搜索树:

       1.所有非叶子结点至多拥有两个儿子(Left和Right);
       2.所有结点存储一个关键字;
       3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;

B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;
       如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;
实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在B树中插入和删除结点的策略;
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.所有叶子结点位于同一层;
B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点;
B-树的特性:
       1.关键字集合分布在整颗树中;
       2.任何一个关键字出现且只出现在一个结点中;
       3.搜索有可能在非叶子结点结束;
       4.其搜索性能等价于在关键字全集内做一次二分查找;
       5.自动层次控制;
B+树
       B+树是B-树的变体,也是一种多路搜索树:
       1.其定义基本与B-树同,除了:
       2.非叶子结点的子树指针与关键字个数相同;
       3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);
       5.为所有叶子结点增加一个链指针;
       6.所有关键字都在叶子结点出现;
B+的特性:
       1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
       2.不可能在非叶子结点命中;
       3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
       4.更适合文件索引系统;
B*树
       是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针;
小结
       B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;
       B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;
       所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;
       B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
       B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3
分享到:
评论

相关推荐

    B-tree与B+tree简介

    动态查找树主要有三种类型:二叉查找树(Binary Search Tree)、平衡二叉查找树(Balanced Binary Search Tree)和B-tree/B+-tree。这些树结构的查找时间复杂度为O(log2N),与树的深度相关。但是,在大规模数据存储...

    B-tree--BP-tree--B--tree--R-tree.rar_B+_R-Tree_b+tree_btree转换为rt

    在《B-tree--BP-tree--B--tree--R-tree.rar》这个压缩包中,包含了对这四种数据结构的详细解释和比较,是学习和理解这些概念的重要参考资料。通过阅读《B-tree》、《B+ tree》、《B tree》和《R tree》这四个文档,...

    B-Tree B-Tree

    3. 查找操作:在B-Tree中查找一个特定键,是从根节点开始,比较键值并根据结果决定向哪个子节点递归搜索,直到找到匹配的键或者到达叶子节点。 **B-Tree的应用** B-Tree被广泛应用于数据库管理系统,因为它可以...

    BTree,B-Tree,B+Tree,BTree都是什么.doc

    B树、B-树、B+树、B*树详解 B树是一种自平衡的二叉查找树,它的每个结点最多只有两个儿子(Left和Right),所有结点存储一个关键字。非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树。B树...

    索引基础——B-Tree、B+Tree、红黑树、BTree数据结构1

    B-Tree,B+Tree,红黑树以及B*Tree都是数据结构中常见的索引类型,主要用于数据库和文件系统的索引构建,以提高数据检索效率。它们都是多路搜索树,区别在于节点的分配方式、搜索策略以及平衡机制。 首先,B-Tree是...

    b-tree-b-tree-b-tree.zip

    B-Tree排序词典

    B-Tree(C++ 源码)

    B-Tree的C++版本,可以实现B树的建立,插入,查找,删除,本代码中默认为3阶B-Tree,通过修改宏定义,可以修改为任意阶B-Tree

    B树、B-树、B+树、B树++、R-tree总结

    首先,B树(Binary Search Tree)是一种自平衡的二叉搜索树。它的特点是每个节点最多有两个子节点,遵循左小右大的规则。B树的搜索、插入和删除操作都可以在O(log n)的时间复杂度内完成,其中n是节点数量。但是,未...

    B-tree和B+tree的定义、查找、插入、删除

    在B-树中查找一个特定元素涉及从根节点开始,根据关键字与中间节点的关键字比较来决定下一步的方向,直到找到目标元素或确定元素不存在。查找时间复杂度与树的高度h和阶数m有关。 ### B-树的插入 B-树的插入操作...

    谷歌 B-Tree C++ 模板库.

    C++ B-tree在搜索树时,通过在每个节点执行多个键比较,更好地利用了缓存。缓存行为的改善,可以使访问大型容器时的性能有显著提升。 谷歌开源团队同时也表示,C++ B-tree容器也不是没有缺点,与标准STL容器...

    The Log-Structured Merge-Tree (LSM-Tree).pdf

    在数据量大、更新频繁的环境下,B-tree的I/O成本会非常高,而在这种环境下,LSM-Tree的写入放大效果(write amplification)相对较小,能更好地适应高并发写入的场景。 此外,LSM-Tree不仅适用于插入和删除操作,它...

    b_plus_tree.zip_B plus tree_b tree plus_b+tree_b-tree_plus

    B+树,全称为B-Tree Plus,是一种自平衡的索引数据结构,常用于数据库和文件系统中,以高效地存储和检索大量数据。在Windows环境下,使用C++实现B+树是一种常见的编程任务,因为C++的性能强大且灵活,能够很好地处理...

    The Ubiquitous B-Tree

    本文讨论的主题是B树(B-tree),一种被广泛应用于文件组织的标准结构。作者Douglas Comer通过本文回顾了B树的基本概念、成功的原因,并深入探讨了其主要变体——B+树的特点和应用场景。 #### B树概述 B树是一种自...

    08 B-Tree.rar

    B-Tree的搜索过程是从根节点开始,根据节点中的关键字比较,逐级向下直至找到目标元素或到达叶节点。 **6. B-Tree的应用** B-Tree在数据库系统中用于索引管理,例如MySQL的InnoDB存储引擎就使用B-Tree作为索引结构...

    Oracle8i 数据库中B-tree索引的维护

    在Oracle数据库中,B-tree索引是一种常用的索引类型,特别是在Oracle8i版本中。B-tree索引基于二叉树数据结构,能够高效地支持等值查找、范围查找和排序操作。这种索引的主要特点是其分层结构,使得数据访问速度较快...

    08 B-Tree.zip

    3. 查找操作:B-Tree的查找过程类似于二分查找,从根节点开始,根据键值与中间键的比较,向下遍历到对应的叶子节点,直到找到目标数据项或确定其不存在。 在严蔚敏的教材中,可能会详细讲解这些操作的逻辑和步骤,...

    Java 的 B-Tree 相关内容

    5. **搜索操作**:B-Tree的搜索操作从根节点开始,根据键的大小与节点中键的比较结果,沿着相应的子节点指针向下遍历,直到找到目标键或确定不存在为止。 B-Tree在Java中的实现: Java中并没有内置的B-Tree实现,但...

    数据结构BTree B-Tree B+Tree B*Tree 的特征说明

    数据结构 BTree B-Tree B+Tree B*Tree 的特征说明 一、B 树(Binary Search Tree) * 定义:二叉搜索树 * 特征: 1. 非叶子结点至多拥有两个儿子(Left 和 Right) 2. 所有结点存储一个关键字 3. 非叶子结点的...

    c 语言开发b-tree数据文件索引.zip_b tree_b+ tree_b-tree_c语言 文件_索引

    在IT领域,数据库索引是提高数据检索效率的关键技术之一,而B树(B-tree)是一种广泛用于数据库和文件系统中的自平衡查找树结构。本文将深入探讨如何使用C语言来开发B树数据文件索引。 B树,全称为平衡多路搜索树,...

Global site tag (gtag.js) - Google Analytics