一、引言

  B树是二叉平衡树的一个变种,在学习之前,我们先了解一下二分法,二叉树的一些相关的基本概念,有助于我们更好的理解B树~

二、二叉树

  定义:二叉树即二叉平衡树

  意义:通过二分法来进行元素查找,时间复杂度为O(logn)

  查找元素的流程:

   解析:我们可以通过上图(画功有限,请见谅...)看到,二叉树具有以下几个特征:

  • 非叶子节点都有2个分支【非叶子节点2个孩子
  • 左侧分支的值比右侧分支的元素要小【左小右大
  • 查询元素时通过与当前节点元素进行比较大小,若小于当前节点的元素走左侧分支,大于当前节点的元素时,则走右侧分支【查询时,小于走左边,大于走右边

  优势:

  • 若非最悲观的情况(即查到最后一层)或者查询的层数不高的时候,可以比较快的返回相应的元素(但通常这个查询深度不可控,因为不确定查的元素在第几层)
  • 每一个节点都存有对应的元素,若获取的元素正好在当前节点时,则不再继续往下走了,磁盘IO就会少一些。

  劣势:

当查询深度较高时,会增加磁盘IO的次数,影响效率(图中以每取一次节点进行一次磁盘IO为例)

三、B树

  定义:B树即多路平衡查找树

  常见应用:文件系统和部分非关系型数据库的索引,如MongoDB

  优势:树用作数据库索引主要是因为查询效率高,而且可以保持有序

  查找元素的流程:

  原则:一个m阶的B树(Balance Tree)具有如下几个特征:

  • 1、根结点至少两个子女
  • 2、每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
  • 3、每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
  • 4、所有的叶子结点都位于同一层
  • 5、每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划

  解析:我们可以对着上面的原则进行解析,图中是一个3阶的B树,那么m为3,m/2 <= k <= m则k可以取2,3,k-1就是1,2了。

  • 1、根结点至少有两个子女【根节点是9,有2个子女】
  • 2、每个中间节点都包含k-1【1~2】个元素和k【2~3】个孩子,其中 m/2 <= k <= m,满足
  • 3、每一个叶子节点都包含k-1【1~2】个元素,其中 m/2 <= k <= m
  • 4、所有的叶子结点都位于同一层。
  • 5、每个节点中的元素从小到大排列,节点当中k-1【1~2】个元素正好是k【2~3】个孩子包含的元素的值域分划。

  优势:

  • 存放同样多的元素时,树的高度变小了,相当于减少了磁盘IO次数,提升性能
  • 当查询进入了一个有很多元素的节点时,也只是存在于内存中进行比较,相对于磁盘IO的速度来说,消耗的时间可以忽略不计【这也是为什么在节点上进行“扩容”】

劣势:

  • 相对于B+树来说,每个节点都会存数据,同样大小的磁盘页存的节点元素会少些
  • 查询性能不稳定,比如有时可能会查到底层的叶子节点,有时可能查到最上层的根节点就返回了,每次查询的消耗不稳定,查询耗时波动大。
  • 范围查询不方便,比如图中我要查询符合6~10的所有元素,而6~10的元素从根节点开始就分布在2侧的树中,所以需要经过的中序遍历非常繁杂

参考资料:

B树【Balanced-Tree】的更多相关文章

  1. Size Balanced Tree(SBT树)整理

    不想用treap和Splay,那就用SB树把,哈哈,其实它一点也SB,厉害着呢. 先膜拜一下作者陈启峰.Orz 以下内容由我搜集整理得来. 一.BST及其局限性 二叉查找树(Binary Search ...

  2. 56. 2种方法判断二叉树是不是平衡二叉树[is balanced tree]

    [本文链接] http://www.cnblogs.com/hellogiser/p/is-balanced-tree.html [题目] 输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉 ...

  3. Size Balanced Tree(SBT) 模板

    首先是从二叉搜索树开始,一棵二叉搜索树的定义是: 1.这是一棵二叉树: 2.令x为二叉树中某个结点上表示的值,那么其左子树上所有结点的值都要不大于x,其右子树上所有结点的值都要不小于x. 由二叉搜索树 ...

  4. C基础 - 终结 Size Balanced Tree

    引言 - 初识 Size Balanced Tree 最近在抽细碎的时间看和学习 random 的 randnet 小型网络库. iamrandom/randnet - https://github. ...

  5. Size Balanced Tree

    Size Balanced Tree(SBT)是目前速度最快的平衡二叉搜索树,且能够进行多种搜索操作,区间操作:和AVL.红黑树.伸展树.Treap类似,SBT也是通过对节点的旋转来维持树的平衡,而相 ...

  6. 使用行为树(Behavior Tree)实现游戏AI

    ——————————————————————— 谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM),决策 ...

  7. 后缀树(suffix tree)

    参考: 从前缀树谈到后缀树 后缀树 Suffix Tree-后缀树 字典树(trie树).后缀树 一.前缀树 简述:又名单词查找树,tries树,一种多路树形结构,常用来操作字符串(但不限于字符串), ...

  8. 线段树 Interval Tree

    一.线段树 线段树既是线段也是树,并且是一棵二叉树,每个结点是一条线段,每条线段的左右儿子线段分别是该线段的左半和右半区间,递归定义之后就是一棵线段树. 例题:给定N条线段,{[2, 5], [4, ...

  9. 使用行为树(Behavior Tree)实现网游奖励掉落系统

    原地址:http://blog.csdn.net/akara/article/details/6165421 [原创]使用行为树(Behavior Tree)实现网游奖励掉落系统by AKara 20 ...

  10. 树-伸展树(Splay Tree)

    伸展树概念 伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由Daniel Sleator和Robert Tarjan创造. (01) 伸展树属于二 ...

随机推荐

  1. 2.Oracle数据库安装教程

    一.准备安装 基本都是按部就班. 使用的OS版本:OEL4 安装程序路径: /mnt/Oracle11g_linux_x86_64/database 创建用户 使用的.bash_profile 修改的 ...

  2. Wireshark抓包与常见问题解决

    简介 Wireshark是一个网络抓包分析软件,当线上出现各种连接相关的问题,如连接不复用,大量CLOSE_WAIT时,可以方便的使用Wireshark抓包软件进行抓包分析 安装 Wirewark在w ...

  3. Biologically Inspired Reinforcement Learning: Reward-Based Decomposition for Multi-goal Environments

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 我们提出了一种基于情绪的分层强化学习(HRL)算法,用于具有多种奖励来源的环境.该系统的架构受到大脑神经生物学的启发,特 ...

  4. Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存

    接上一篇 Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开始学会添加一个全 ...

  5. DVWA之文件包含(一)

    文件包含又可以是本地文件包含或远程文件包含. 本地文件包含:文件存在本地目录 远程文件包含:文件共享或存在网络上,需要访问 <?php // The page we wish to displa ...

  6. 有了MDL锁视图,业务死锁从此一目了然

    摘要:MDL锁视图让一线运维人员清晰地查看数据库各session持有和等待的元数据锁信息,从而找出数据库MDL锁等待的根因,准确地进行下一步决策. 当多用户共同存取数据时,数据库中就会产生多个事务同时 ...

  7. OGG复制进程延迟高,优化方法二(存在索引),SQL选择不好的索引

    https://www.cnblogs.com/lvcha001/p/13469500.html 接前序,本次场景中有索引,但是OGG复制进程使用了低效率的索引?  类似SQL使用低效索引,如何让Or ...

  8. mysql数据库中数据类型的长度

    在mysql中新建数据表的时候会有长度一说,其实用建表语句建数据表的时候也有涉及 例如: CREATE TABLE user( uid int(4), name varchar(255), passw ...

  9. 企业站如何做长尾关键词seo优化

    http://www.wocaoseo.com/thread-315-1-1.html     很多企业站,优化到一定程度后网站的流量很快就上去了,但是之后网站就无法更进一步.那么对于普通中小型企业站 ...

  10. vue-x和axios的学习

    axios的使用 使用原因:因为vue本身就带有处理dom的功能,不希望再有其他操作dom的插件,所以用axios代替了jquery 功能:发送xhr请求 下载: $ npm install axio ...