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



    B-树

    B树是二叉平衡树的升级版,可以多路自平衡,而且属于外查找,即数据是放在外存之中的,这时候就要考虑 IO 操作优化了,相比二叉查找树他们的时间复杂度都是O(log N),优势在于B树的深度相比小很多,在数据很大的情况下从磁盘读取次数小了,加快了查找速度,所以B树及其同类经常用在文件系统或数据库中,下面先来说一下B树

    • B树的节点中含有孩子的最大值称为该树的阶,通常用m表示,(m >= 2)
    • 若根节点不是叶子结点,则根节点最少有两颗子树
    • 树中每个中间结点都包含k-1个元素和k个孩子,ceil(m/2) <= k <= m
    • 树中叶子节点都包含k-1个元素,ceil(m/2) <= k <= m
    • 所有的叶子结点都位于同一层



    B+树

    B+树又是B-树的升级版,一颗m阶的B+树,在B-树的前提下又有下面的区别:

    • 根节点的最大元素是整棵树的最大元素

    • 中间节点有多少个孩子,就有多少个元素(元素不保存数据了,只用于索引,所有数据都存在叶子节点中)

    • 所有中间结点的元素都同时存在于子节点上,且在子节点元素中是最大(最小)元素

    • 所有叶子节点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子节点按照关键字组成链表



    二者区别

    • B+树中只有叶子节点才有指向数据记录的存储地址,B-树的节点则都有
    • B+树因为中间元素没有数据记录的存储地址,同样的磁盘页可以存储更多节点元素(即同样元素,B+树更矮,IO次数更少)
    • B+树单查询必须查到叶子节点,因为叶子才有数据记录的存储地址,而B-树则查到就返回,不稳定
    • B+树范围查询只需在叶子节点遍历链表即可,而B-树需要中序遍历才能确定范围


  • 相关阅读:
    ACR Code Pacs
    如何利用IIS调试ASP.NET网站程序详解
    Server 2003 操作系统位数
    App.config/Web.config 中特殊字符的处理
    IE 对象不支持“attachEvent”属性或方法
    Invoke和BeginInvoke理解
    升级mongodb数据库2.6.6到3.0.3,切换引擎,主从同步数据
    mac android sdk manager 无法更新(被墙)
    hadoop-mongo map/reduce java
    mongodb use where and custom function to query mongodb存储过程
  • 原文地址:https://www.cnblogs.com/Howlet/p/12255418.html
Copyright © 2011-2022 走看看