zoukankan      html  css  js  c++  java
  • B树

    注:本文来自http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html
    • 在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。
    • 这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在O(logn)内完成。
    • B树,概括来说是一个一般化的二叉查找树(binary search tree),可以拥有多于2个子节点。
    • 与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。
    • B树减少定位记录时所经历的中间过程,从而加快存取速度。
    • B树这种数据结构可以用来描述外部存储。这种数据结构常被应用在数据库和文件系统的实现上。
    1、定义
    • M阶的B 树,允许每个节点有M-1个子节点。
    • 根节点至少有两个子节点
    • 每个节点有M-1个key,并且以升序排列
    • 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
    • 其它节点至少有M/2个子节点
    • 下图是一个M=4 阶的B树:
    2、B+树是对B树的一种变形树,它与B树的差异在于:
    • 有k个子结点的结点必然有k个关键码
    • 非叶结点仅具有具有索引作用,跟记录有关的信息均存放在叶结点中。
    • 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。
    3、B和B+树的区别
    • B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。
    4、B+ 树的优点
    • 由于B+树在内部节点上不好含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性,(比如使用数组,按起始地址定位)。因此访问叶子几点上关联的数据也具有更好的缓存命中率。
    • B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
    5、B树的优点
    • 优点在于,由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。
    • 下面是B 树和B+树的区别图:
  • 相关阅读:
    思考:学习redis的数据结构应该从三个维度来学习?
    思考:一个程序员老说不会碰到或者用到复杂的数据结构或者算法,是这样吗?
    思考:软件系统设计的(前期)权衡?
    思考:一个推荐引擎工程师的能力覆盖
    思考:关于服务架构的取舍:
    模拟斗地主真人在线发牌
    java反射机制
    C-练习题
    java-线程的生命周期
    生产者和消费者模型
  • 原文地址:https://www.cnblogs.com/sanjun/p/9853351.html
Copyright © 2011-2022 走看看