数据结构--B树 B+树

实例数据

B树(B-Tree)

B树(B-Tree)是一种自平衡的树数据结构,能够保持数据有序,允许搜索、顺序访问、插入和删除操作都在对数时间内完成。B树与二叉树不同,每个节点可以拥有多于两个子节点,这使得B树在存储系统(如数据库和文件系统)中特别有用,因为它们可以减少定位记录时所需的磁盘I/O操作次数。

  多用于磁盘

B树的基本特性:

  1. 所有值都是按键(key)自动排序的:每个节点中的关键字都是按升序排列的。

  2. 根节点至少有两个子节点(除非它是叶子节点):对于非根非叶的节点,至少含有m/2个子节点,其中m是树的最小度数(每个节点的最大子节点数)。

  3. 所有叶子节点都位于同一层:这是B树保持平衡的一种方式。

  4. 每个非叶子节点包含n个关键字和n+1个子指针:其中m/2 - 1 <= n <= m-1。这些关键字作为子树中所有关键字的分隔值。

  5. 每个子节点的关键字范围:对于任意节点,其所有子节点的关键字都位于该节点的两个关键字之间(对于第一个和最后一个子节点,分别是小于和大于该节点的第一个和最后一个关键字)。

B树中的每个节点都包含以下信息:

  • 关键字(Key):这些是关键字值,对应于表中的主键或索引键。在B树中,这些关键字是按顺序排列的,以便进行高效的查找、插入和删除操作。
  • 值(Value):与每个关键字相关联的数据或记录。这些值存储在节点中,与关键字一一对应。在数据库索引的上下文中,value通常包含除主键以外的所有列的数据。
  • 指针(Pointer):指向子节点的指针。这些指针用于在树中导航,以便在查找、插入或删除操作期间能够遍历到正确的节点

B树的操作:

  • 搜索:从根节点开始,比较节点中的关键字,根据比较结果移动到相应的子节点,直到找到所需的关键字或到达叶子节点。

  • 插入:首先,像在二叉搜索树中一样找到新关键字应该插入的位置。然后,如果该节点已满(即包含m-1个关键字),则将其分裂为两个节点,并将中间的关键字提升到父节点中。如果父节点也满了,则递归地继续这个过程,直到根节点也可能被分裂,这时树的高度会增加。

  • 删除:找到要删除的关键字,并用其子树中的关键字(通常是前驱或后继)来替换它。然后,从子树中删除该关键字。如果删除导致节点中的关键字数量少于m/2 - 1,则可能需要从相邻的兄弟节点借关键字,或者与相邻的兄弟节点合并,并可能递归地向上调整树的结构。

总结:

    B树的一个节点包含多个key和value

示例5阶B树:

B+树

        B+树是一种常用的树数据结构,属于平衡多路查找树的一种。它主要用于数据库和操作系统的文件系统中,以提高数据的检索效率。以下是对B+树的详细解析:

一、基本结构

        B+树是一个n叉排序树,每个节点通常有多个孩子。一棵B+树包含根节点、内部节点和叶子节点。根节点可能是一个叶子节点,也可能是一个包含两个或两个以上子节点的节点。B+树的特点是所有数据都保存在叶子节点中,而非叶子节点只保存关键字用作索引。

二、优势

  1. 数据稳定有序:B+树能够保持数据稳定有序,使得插入与修改操作拥有较稳定的对数时间复杂度。
  2. 优化磁盘读写:B+树的结构特别适合磁盘存取。由于非叶子节点不保存数据,所以能在内存中存放更多索引,增加缓存命中率。同时,由于叶子节点形成了一个有序链表,可以很方便地实现范围查询。
  3. 减少I/O操作:B+树的所有叶子节点都位于同一层,这使得每次查找的路径长度相同,且每次磁盘I/O操作可以获取更多的关键字,从而减少I/O次数。
  4. 高效的范围查询:由于叶子节点形成了有序链表,B+树在进行范围查询时非常高效。

三、节点结构

  • 根节点:可能是一个叶子节点,也可能是一个包含两个或两个以上子节点的节点。
  • 内部节点:每个内部节点包含多个关键字和指向子节点的指针。关键字用于索引,但不保存数据。内部节点可以看作是索引部分,节点中仅含其子树(或根节点)中的最大(或最小)关键字。
  • 叶子节点:包含所有的数据记录和指向下一个叶子节点的指针。叶子节点本身按关键字的大小自小而大顺序排列,并且形成了一个有序链表。

四、操作原理

  • 插入操作:B+树的插入操作在叶子节点上进行。如果插入后叶子节点的关键字数目超过最大限制,则会发生分裂,并将新的关键字提升到父节点中。
  • 删除操作:B+树的删除操作也仅在叶子节点进行。如果删除操作导致叶子节点的关键字数目过少,则可能与相邻的兄弟节点合并,或者从父节点中借取关键字。

五、应用场景

        B+树因其高效的数据检索和范围查询能力,被广泛应用于数据库系统和文件系统中

特点:

   B+树的非叶子节点仅具有索引作用(简单来说就是非叶子节点只存key不存value)

   B+树的所有叶子节点构成一个有序链表

实例5阶B+树

总结:

        B+树的非叶子节点只存储key值,做索引使用,一页能存储更多的key的值,树的高度越低

        B+树的叶子结点相连,对整颗树的遍历只需要一次遍历叶子结点即可 区间查找

        B树:每个节点都包含key和value,根据key值查找value的时候,只要找到key,就能立马找到value

B树一般用做磁盘 B+树一般用作数据库

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值