数据结构 || B树

本文介绍了B树和B+树这两种平衡多路查找树的数据结构,详细阐述了它们的特点和应用场景。B树适用于单个元素查找,而B+树则在磁盘读写代价更低、查询效率稳定以及支持范围查询方面更具优势,常用于数据库和文件系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平衡二叉树-AVL树

  • 特点
    1.根结点的值大于其左子树中任意一个节点的值,小于其右节点中任意一个节点的值
    2.AVL树上任意结点的左右子树的高度差最大为1
    3.由于第2个特点,所以AVL树不会退化为BST树,查找、添加、删除的时间复杂度都是O(logn)

0

姓名(术语)简介
B树多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中
B-树就是B树
B+树B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中
B*树B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;

1
如果要查找结点5,则需要4步,最坏的情况磁盘读写次数==二叉搜索树的高度,效率极低,并且由于索引是在内存中执行的,价格也很昂贵

B树-平衡多路查找树

  • B树,平衡多路查找树,一个节点的查找路径不止左右两个,而是有多个。
  • M阶表示一个B树的结点最多有多少个查找路径(这个节点有多少个子节点)
  • B树其实最开始源于的是二叉树,二叉树是只有左右孩子的树,当数据量越大的时候,二叉树的节点越多,那么当从根节点搜索的时候,影响查询效率。所以如果这些节点存储在外存储器中的话,每访问一个节点,相当于进行了一次I/O操作。前面说过,为了减少磁盘的 I/O 操作才有的B树
    在这里插入图片描述K被称为B树的阶,K的值取决于磁盘页的大小
    查找节点6的步骤:
    ①定位到根节点(9),6比9小,所以在左子树找
    ②定位到节点(4,7),6在4、7中间,所以在中间子树找
    ③定位到(5,6),6比5大,所以和该节点的右边比较
    ④找到,over

在B树中比较减少了I/O操作,B树可以减少树的高度,减少磁盘读写次数

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

  • B树的不足:不利于范围查找(区间查找),如果要找0~100 的索引值,那么B树需要多次从根结点开始逐个查找

B+树

0

B+树与B树的区别

B+树和B树区别是:

  1. B+树内部有两种结点,一种是索引结点,一种是叶子结点。
  2. B+树的索引结点并不会保存记录,只用于索引,所有的数据都保存在B+树的叶子结点中。而B树则是所有结点都会保存数据。
  3. B+树的叶子结点都会被连成一条链表。叶子本身按索引值的大小从小到大进行排序。即这条链表是 从小到大的。多了条链表方便范围查找数据。
  4. B树的所有索引值是不会重复的,而B+树 非叶子结点的索引值 最终一定会全部出现在 叶子结点中
  • 优点
    1)B+树的磁盘读写代价更低

B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了

2)B+树查询效率更加稳定

由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当;

3)B+树便于范围查询(最重要的原因,范围查找是数据库的常态)

B树在提高了IO性能的同时并没有解决元素遍历的我效率低下的问题,正是为了解决这个问题,B+树应用而生。B+树只需要去遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作或者说效率太低;

  • B+树的结点只存储索引key值,具体信息的地址存储与叶子结点的地址中,减少I/O支出
  • B+树支持range-query区间查询,B树不支持
  • B+树通常用于数据库和操作系统的文件系统中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值