b+树和b树的区别_一文读懂B树

一、概念

B树是一种专用的 M 阶树,可广泛用于磁盘访问。M 阶树顺序的 B 树最多可以有 m-1 个键和 M 个子树。使用 B 树的主要原因之一是它能够在单个结点中存储大量键,并且通过保持树的高度相对较小来存储大键值。

排序 M 的 B 树包含 M 阶树的所有属性。此外,它还包含以下属性。

  • B 树中的每个结点最多包含 m 个子结点。
  • 除根结点和叶结点外,B 树中的每个结点至少包含 m/2 个子结点。
  • 根结点必须至少有 2 个结点。
  • 所有叶结点必须处于同一级别。

所有结点都不必包含相同数量的子结点,但每个结点必须具有 m/2 个结点数。

在下图中显示了 4 阶 B 树。

492378fb0b63f6c138e4b27a5a83cf4e.png

在 B 树上执行某些操作时,B树的任何属性都可能违反结点可以拥有的最小子结点数。为了维护 B 树的属性,树可能会分裂或连接。


二、操作

搜索

在B树中搜索类似于二叉搜索树中的搜索。例如,如果在以下B树中搜素数据项:49。该过程将如下所示:

  • 将数据项 49 与根结点 78 进行比较。因为 49 < 78 因此,移动到其左子树。
  • 因为, 40 < 49 < 56,遍历右子树40。
  • 49 > 45 ,向右移动。比较 49。
  • 找到匹配,则返回。

在B树中搜索取决于树的高度。搜索算法需要 O(log n) 时间来搜索B树中的任何元素。

feb90040c942b1cf2735d82e1b95e157.png

插入

插入在叶结点级别完成。要将项目插入 B 树,需要遵循以下算法。

  • 遍历 B树 以找到可插入结点的适当叶结点。
  • 如果叶结点包含少于 m-1 个键,则按递增顺序插入元素。
  • 否则,如果叶结点包含 m-1 个键,则按照以下步骤操作。
    • 按元素的递增顺序插入新元素。
    • 将结点拆分为中间的两个结点。
    • 将中值元素推送到其父节点。
    • 如果父节点还包含 m-1 个键,则按照相同的步骤将其拆分。

示例:

将结点 8 插入到下图所示的5阶B树中。

fa48b8088cf8ed41cf4a2cf55241c0f3.png

8 将插入 5 的右侧,因此插入 8。

d6b2b08e06a19a7b5ca6240106f40df1.png

该结点现在包含5个键,大于(5-1=4)个键。因此,将结点从中间分开,即 8 ,并将其推到其父节点,如下所示。

1c9befe40616a85a2af518b36fd161f5.png

删除

还在叶结点处执行删除。要删除的结点可以是叶结点或内部结点。需要遵循以下算法才能从B树中删除结点。

  • 找到叶结点。
  • 如果叶结点中有多于 m/2 个键,则从结点中删除所需的键。
  • 如果叶结点不包含 m/2 个键,则通过从 8 个或左兄弟中获取元素来完成键。
    • 如果左侧兄弟包含多于 m/2 个元素,则将其最大元素推送到其父元素,并将插入元素向下移动到删除键的结点。
    • 如果右侧兄弟包含多于 m/2 个元素,则将其最小元素向上推送到父节点,并将插入元素向下移动到删除键的结点。
  • 如果兄弟结点都不包含多于 m/2 个元素,则通过连接两个叶节点和父节点的插入元素来创建新的叶结点。
  • 如果父节点的结点少于 m/2,那么也应在父节点上应用上述过程。
  • 如果要删除的结点是内部结点,则将结点替换为其有序后继或前一个结点。由于后继或前任将始终位于叶节点上,因此该过程将类似于从叶结点中删除结点。

示例1:

从下图所示的5阶B树中删除结点:53。

2433f45d87895aeb89b8a3bda1cd6b97.png

元素 49 的右子结点中存在 53,则删除它。

8bbf50c59ba68eb3c20eea0d8677c0be.png

现在,57是唯一留在结点中的元素,在5阶B树中必须存在的最小元素数是2。它小于左边和右边子树中的元素,因此,也不足以将其与父母的左兄弟和干预元素合并,即49。

最终的B树如下所示。

cafd4c6f64905edd61037e45998a9fc8.png

三、B树的应用

B树用于索引数据并提供对存储在磁盘上的实际数据的快速访问,因为存储在磁盘上的大型数据库中存储的值的访问时非常耗时的过程。

在最坏的情况下,搜索包含 n 个键值的未索引和未排序的数据库需要 O(n) 运行时间。但是,如果使用B树来索引此数据库,则在最坏的情况下将在 O(log n)时间内搜索它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的B树B+树在数据结构上有一些区别B树是一种平衡多路搜索树,每个节点可以存储多个关键字和对应的指针。B树的节点数比B+树要多,因为B树的每个节点都存储了关键字和指针,而B+树的非叶子节点只存储了关键字,指针都放在叶子节点中。这意味着在同样大小的区域内,B树可以存储更少的关键字。 B+树是一种变体的B树,它也是一种平衡多路搜索树,但是只有叶子节点存储了关键字和对应的指针,而非叶子节点只存储了关键字。B+树的叶子节点通过指针连接在一起,形成一个有序链表, 这样可以方便进行区间查找和范围查询。B+树还具有更好的顺序访问性能和更高的磁盘利用率。 因此,B树适合在内存中进行操作,而B+树则更适合在磁盘上进行存储和查询操作。B+树在数据库索引中常用于提高查询效率和范围查询的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [一文彻底搞懂MySQL基础:B树B+树区别](https://blog.csdn.net/m0_54864585/article/details/125383198)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值