`
zccst
  • 浏览: 3322762 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

一棵m阶的B树满足下列条件:
    ⑴ 树中每个结点至多有m个孩子;
    ⑵ 除根结点和叶子结点外,其它每个结点至少有m/2个孩子;
    ⑶ 若根结点不是叶子结点,则至少有2个孩子;
    ⑷ 所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息;
    ⑸ 有k个孩子的非终端结点恰好包含有k-1个关键字。
    在B树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶子结点时,该k-1个关键字正好是k个孩子包含的关键字的值域的分划。
    因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。
    B树中的一个包含n个关键字,n+1个指针的结点的一般形式为: (n,P0,K1,P1,K2,P2,…,Kn,Pn)
    其中,Ki为关键字,K1<K2<…<Kn, Pi 是指向包括Ki到Ki+1之间的关键字的子树的指针。


B+树
       B+树是B-树的变体,也是一种多路搜索树:
       1.其定义基本与B-树同,除了:
       2.非叶子结点的子树指针与关键字个数相同;
       3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);
       5.为所有叶子结点增加一个链指针;
       6.所有关键字都在叶子结点出现;


不同于B树只适合随机检索,B+树同时支持随机检索和顺序检索,在实际中应用比较多。




各大IT公司面试常常问到的问题——海量数据问题。以前通常回答二级索引,即一级索引常驻内存,通过一级索引找到二级索引,读入内存,再通过二级索引找到最终要找的具体数据,而“索引”,一直设想的都是HASH,现在回头想来,HASH其实是不合适的。因为HASH只能提供映射,而不能提供范围信息。这个问题的正确答案应该是B树或者B+树。

所谓B树,是一棵多叉树,每一个节点(除了根)的分叉因子都不小于t,不大于2t。对根的要求较少,只要求不能大于2t,在树不为空的时候分叉因子不为1,根的灵活性是为B树在插入、删除操作时不违背B树的定义而服务的,具体操作参见算法导论第19章。每个节点x含有n[x]个关键字,这些关键字的作用是为该节点的孩子结点中的关键字划定范围,即划分了n[x]+1个范围,这样的话该节点就有n[x]+1个孩子结点。在实际应用中t通常很大,通常设计一个t的大小时应尽量使得一个节点的所有内容的大小和磁盘中的一个页相近,因为一次磁盘IO读取和写入都是以一个页为单位的,这样做就可以最大化地利用一次磁盘IO的操作。如一棵t=1000的B树,哪怕高度只有2,也可以存放1000^3=10亿以上的关键字,也就是说哪怕你有这么海量的数据,要查找、插入、删除其中的一个也只需要至多2次的磁盘IO(根节点是常驻内存的)。

具体的查找关键字k时,从根结点开始,通过线性比对当前节点的n[x]个关键字,决定要下降到该节点的哪一个孩子结点,直到找到要查找或者删除的关键字或者要插入的位置位置。

B+树是B树的变种,它在每个内节点里都只存放关键字信息,而只在叶子节点中存放存储所需的其它附属信息,这样就可以让内节点的分支因子最大化,也让树的高度尽可能的低。


B+树是一种树数据结构,常见于数据库与档案系统之中。B+树能够使资料保持有序,并拥有均匀的对数处理时间的插入和删除动作。B树的元素通常会自底向上插入,有别于多数自顶向下插入的二叉树。


分享到:
评论

相关推荐

    B+树的c语言代码实现

    与B树相比,B+树的所有叶子节点都位于同一层,且叶子节点之间通过指针相互连接,这使得B+树非常适合范围查询和顺序访问。 #### 三、代码结构分析 1. **文件头注释**: - 作者:bysvking - 时间:2012年5月 - ...

    B+树C++代码实现

    **B+树详解** B+树(B Plus Tree)是一种自平衡的树数据结构,广泛应用于数据库和文件系统中,因为它能保持数据排序并提供快速的查找、插入和删除操作。这种数据结构的特点是所有数据都在叶子节点,非叶子节点只...

    B-树、B+树、B树详解

    ### B树、B+树、B-树详解 #### B树 B树是一种自平衡的树数据结构,常用于数据库和文件系统中。它保证了树的高度较低,从而提高了查找效率。 **特点:** 1. **节点度数:** 所有非叶子结点至多拥有两个儿子(Left和...

    B+树(利用文件实现)

    - B+树的叶子节点之间有链指针,便于全序遍历,而B树没有这个特性。 - B+树对磁盘I/O的优化更彻底,适合大容量数据存储。 6. **实际使用中的注意事项** - 文件实现B+树时,需要考虑文件的读写操作,如文件映射、...

    B树和B+树的插入、删除图文详解 - nullzx - 博客园1

    在探讨数据库和文件系统中数据结构的高效管理时,B树和B+树的讨论是无法绕开的话题。这两种多路平衡查找树不仅在理论上具有深厚的基础,而且在实际应用中也显示出了极高的效率和可靠性。本文将详细解析B树和B+树在...

    B+树数据结构详解

    B+树是B树的一个变种,在B+树中,所有的实际数据(即key值)仅出现在叶子节点,并且所有的叶子节点形成了一个链表。非叶子节点存储的是路由值,用于在树中导航,但它们本身不是实际存储的数据。这个特性使得B+树在...

    B+树讲解PPT,详细讲解b+树相关知识

    【B+树详解】 B+树,全称为“平衡多路搜索树”(Balanced Plus Tree),是一种在数据库和文件系统中广泛使用的高效数据结构,主要用于数据存储和检索。它结合了二叉查找树和链表的特点,优化了对磁盘等外存储设备的...

    B+树讲义(英文)

    根据给定文件的信息,我们可以深入探讨B+树这一数据结构的关键知识点,以及它在数据库系统中的应用和特性。 ### B+树概述 B+树是一种自平衡的树数据结构,常用于实现虚拟内存、文件系统和数据库索引。它是由Rudolf...

    图解 B+ 树的插入和删除 ( 一看就懂)

    B+树是一种广泛应用于数据库和文件系统中的数据结构,它的设计目的是为了高效地进行数据检索。本文将深入探讨B+树的插入和删除操作,帮助读者通过直观的图解理解这一复杂的概念。 首先,我们需要理解B+树的基本特征...

    B-树和B+树_C语言实现B+树_算法_B+B-B_数据结构_B+树_

    B-树和B+树的C语言实现(数据结构)。

    关于b+树的操作详细图解

    B+树是一种高效的数据结构,尤其适用于大数据存储,如数据库索引。它的设计目标是减少磁盘或慢速存储设备的访问次数,因为这些设备的读写速度远低于内存。在【标题】"关于b+树的操作详细图解"和【描述】中提到的PPT...

    B+树实现源码(C++)

    B+树实现源码(C++) 本资源提供了B+树实现源码,用于提高读写盘区的性能。B+树是一种高效的数据结构,提供快速搜索和插入文件的方法。在JFS文件系统中,B+树用于描述文件内的逻辑字节范围和磁盘上字节范围的物理...

    【源码】C#的B+树实现和原理解析

    在IT领域,数据结构是构建高效算法的基础,而B+树作为一种自平衡的搜索树,...同时,对B+树的理解也将有助于你更好地理解和使用数据库管理系统,例如MySQL、Oracle等,它们内部的索引机制很大程度上依赖于B树或B+树。

    B+树查找的实现

    B+树(B+ Tree)是一种自平衡的树数据结构,广泛应用于数据库系统和文件系统中,用于高效地存储和检索大量数据。它的主要特点是所有数据都存储在叶子节点上,且叶子节点之间通过指针链接,使得遍历变得更加简单。 #...

    JAVA B+树的实现

    在计算机科学领域,数据结构是编程的基础,B+树作为一种高效的数据索引结构,被广泛应用于数据库和文件系统中。本文将深入探讨如何在Java环境中实现B+树,包括其基本概念、特性以及如何用Java代码来构建和操作B+树。...

    B+树的创建(java源码)

    在计算机科学领域,数据结构是基础且至关重要的部分,B+树作为一种自平衡的查找树,广泛应用于数据库和文件系统中。本节将详细讲解如何使用Java实现B+树,包括其基本概念、节点结构、树的构建、插入操作以及遍历方法...

    B+树作为数据库的索引

    标题提到的"B+树作为数据库的索引",指的是B+树这种数据结构在数据库管理中的重要应用。B+树(B Plus Tree)是一种自平衡的查找树,特别适合用于数据库和文件系统的索引存储。下面我们将深入探讨B+树的基本概念、...

    B+树,源代码,B+树,源代码

    B+树,作为一种高效的数据结构,广泛应用于数据库和文件系统中,主要因为它具有平衡特性,可以使得数据查找、插入和删除操作的时间复杂度保持在O(log n)级别,其中n是树中的节点数量。Java实现B+树的过程中,我们...

    C++语言实现B+树

    在计算机科学领域,数据结构是编程的基础,B+树(B-plus tree)作为一种高效的数据存储结构,被广泛应用于数据库和文件系统中。本篇将详细阐述如何使用C++语言实现B+树,以及其核心原理和操作。 B+树是一种自平衡的...

Global site tag (gtag.js) - Google Analytics