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+树搜索都要走一条从根结点到叶子结点的路径,查找更稳定。

  • 相关阅读:
    centos 安装 redis3.2.0 集群
    CentOS7安装配置redis-3.0.0
    CentOS7/RHEL7安装Redis步骤详解
    鸟哥之安裝 CentOS7.x
    Centos 7 学习之静态IP设置
    CentOS7 下linux不能上网解决方法​,centos7 eth0 没有ip,IP突然丢失
    javamail发送邮件(转)
    Apache James使用的方法及相关心得(转)
    Velocity缓存与穿透(转)
    十分钟搞懂什么是CGI(转)
  • 原文地址:https://www.cnblogs.com/qiuhaojie/p/7060984.html
Copyright © 2011-2022 走看看