数据结构与算法——多路查找树

二叉树与B树

二叉树的问题分析

  • 二叉树需要加载到内存当中,若二叉树节点减少,没什么问题,若二叉树节点很多(1亿)就存在一下问题
  • 创建二叉树时需要进行多次I/O操作,节点海量,速度有影响
  • 节点海量,也会造成二叉树节点海量,降低操作速度

多叉树

  • 每个节点可以允许有多个数据项和更多的节点
  • 多叉树重新组织节点,减少树的高度,能对二叉树优化

B树

  • B树通过重新组织节点,降低树的高度,并减少I/O次数来提高效率
  • 文件系统及数据库系统利用了磁盘预读原理,将一个节点的大小设为一个页4K,每个节点只需要一个I/O可以完全载入
  • 设树的度M为1024,在600亿个元素中最多只用4次I/O就可
    在这里插入图片描述

2-3树

  • 最简单的B树结构
  • 所有叶子节点都在同一层<B树都满足>
  • 二节点:空or两个节点
  • 三节点:空or三个节点
  • 构造2-3树:遵循以上原则,若不能满足时,就要拆(先向上拆,若上满,则拆本层,拆后依然要满足以上原则)
    在这里插入图片描述

B B+ B*

B树

  • B树的阶:节点的最多子节点个数
  • B树的搜索:从root开始,对节点内有序序列进行二分查找,若命中则结束,否则进入儿子节点,重复,直到对应儿子指针为空(有可能在非叶子节点结束),或是叶子节点
  • 关键字集合分布于整棵树中,即即叶子节点和非叶子节点都存放数据
    在这里插入图片描述

B+树

  • B+树是B树的变体,也是一种多路搜索树
  • B+树只有达到叶子节点才会命中,其性能等价于在关键字全集做一次二分查找
  • 所有关键字都出现在叶子节点的链表中,且链表中关键字恰好是有序的,不可能在非叶子节点中命中
  • 非叶子节点相当于是叶子节点的索引,叶子节点相当于存储数据的数据层
  • 更适合文件索引系统
    在这里插入图片描述

B*树

  • B*树是 B+树的变体,在 B+树的非根和非叶子结点再增加指向兄弟的指针
  • B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为 2/3,而 B+树的块的最低使用率为的1/2
  • B*树分配新结点的概率比 B+树要低,空间使用率更高
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值