5.多路查找树

多路查找树

  • 2-3树
  • 2-3-4树
  • B树
  • B+树

多叉树:

  • 树的每个节点可以有超过2个子节点
  • 举例:2-3树、2-3-4树、B树、B+树

概念:

  • 阶数(Order),对于一颗M阶B树,一个节点最多包含M个子节点

B树(Balanced Tree):

  • B树是多路平衡查找树的一种特殊类型
  • B 是Balance的意思
  • M阶B树 特点:
    • 每个节点最多包含M个子节点。
    • 根节点至少包含 2 个子节点(或者0个子节点)
    • 每个非叶节点至少包含 ceil(M/2) 个子节点;
    • 拥有 k 个子节点的非叶节点将包含 k - 1 条记录
    • 所有叶节点都在同一层中
  • B树的优点:
    • 相对平衡二叉树,节点的空间的利用率更高
    • 访问局部性原理的利用(预读机制)
  • B树缺点:
    • 查询范围数据时,必须按照树的中顺遍历来访问各个节点

B+树:

  • B+树是B树的优化版本,也是多路平衡查找树的一种特殊类型
  • 特点:
    • 只有叶子节点存储真实的数据,非叶节点只存储键(B树每个节点都存数据)
    • 一条记录可以重复出现,比如在叶子节点和非叶子节点都出现(B树不可以重复出现)
    • 叶节点之间通过双向链表链接(Mysql中实际非叶子节点也通过双向链表相连接)
    • 非叶子节点的子节点数=关键字数(Mysql),或者非叶节点的关键字数=子节点数-1
  • 对B树的优化:
    • B+树的层级更少
    • B+树查询速度更稳定
    • B+树天然具备排序功能
    • B+树全节点遍历更快,只需要遍历叶子节点
  • 缺点:
    • 为了保持树的平衡,节点的合并、拆分操作比较耗时(Mysql页分裂、页合并)

B*树:

  • B*树是B+树的变体
  • 特点:
    • 在B+树的非根和非叶子结点再增加指向兄弟的指针
    • B*树定义了非叶子结点元素个数至少为(2/3)*M,即块的最低使用率为2/3;B+树为(1/2)*M
  • 主要缓解了B+树的页分裂问题:
    • B*树节点满时会检查兄弟节点是否满(每个节点都有指向兄弟的指针)
    • 如果兄弟节点未满则向兄弟节点转移关键字
    • 如果兄弟节点已满,则从当前节点和兄弟节点各拿出1/3的数据创建一个新的节点出来

查找树的演进:

本文作者:navyum

本文链接:https://www.cnblogs.com/navyum/p/18509360

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   navyum  阅读(10)  评论(0编辑  收藏  举报
//自己上传到博客园的js
点击右上角即可分享
微信分享提示