zoukankan      html  css  js  c++  java
  • B树和B+树

    B(Balanced)树(注意:B树就是很多人口中所说的B-树,这是不专业的,不要区分两者)和B+树是用来对操作系统的文件索引和数据库索引而提出的数据结构,通俗点讲,两者都是有序数组+平衡多叉树。

    B树的定义:一棵m阶的B树,或为空树,或为满足下列特性的m叉树

    (1)树中的每个结点至多有m棵子树;

    (2)若根结点不是叶子结点,则至少有2棵子树;

    (3)除根结点之外的非终端结点至少有m/2(取上整)棵子树;

    (4)所有的非终端结点,最多包含n个关键字,m/2(取上整)-1 <= n <=m-1;

    (5)所有的叶子结点都出现在同一层次上,且不带任何信息。(可以看做是外部结点或查询失败的结点,实际上这些结点不存在,指向这些结点的指针为空);

    B树的查询要点:待查关键字所在结点在B树上的层次,是决定B树查询效率的首要因素。有个问题,含N个关键字的m阶B树的最大深度是多少?

    根据定义,第一层至少有1个结点,第二层2个,第三次至少2(m/2(取上整)),依次类推,第L+1层至少2(m/2(取上整))L-1.而L+1层为叶子结点。若m阶B树中有N个关键字,那么就有N+1叶子结点。

    因此N+1 ≥ 2*(m/2(取上整))L-1,计算出L即可。

     画个例子(注:网上找的):

    2、B+树:它是应文件系统所需而产生的数据结构。直接上图理解:

    它与B树的区别主要在于:

    (1)有n棵子树的结点中包含n个关键字;

    (2)所有的叶子结点中包含了全部关键字信息,及指向这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大链接。

    (3)所有非终端结点可以看成是索引部分,结点中仅含有其子树(根结点)中最大(或最小)关键字。

    B+树查找:在查找过程中,若非终端结点上的关键字等于给定值,并不终止,而是继续向下直到叶子结点。因此,不管查找什么,每一次查找都会走一条从根结点到叶子结点的路径。

    那么为什么B+树比B树更适合用于文件系统索引和数据库索引:

    个人见解,有2方面原因:

    (1)B+树遍历效率高,因为只要遍历它的叶子结点即可。

    (2)B+树搜索都要走一条从根结点到叶子结点的路径,查找更稳定。

  • 相关阅读:
    ES6-->ECMAScript 6.0 新增方法,一些基本语法
    初识 Nodejs (了解Nodejs)
    Vue框架初识
    python语法入门之流程控制
    python中基本运算符
    格式化输出
    基本数据类型
    变量,解释器,垃圾回收机制,小整数池总结
    编程语言发展史
    计算机基础
  • 原文地址:https://www.cnblogs.com/qiuhaojie/p/7060984.html
Copyright © 2011-2022 走看看