本文概述
- 运作方式
- B树的应用
顺序为m的B树包含M方法树的所有属性。此外, 它包含以下属性。
- B树中的每个节点最多包含m个子节点。
- 除了根节点和叶节点之外, B树中的每个节点至少包含m / 2个子节点。
- 根节点必须至少具有2个节点。
- 所有叶节点必须处于同一级别。
下图显示了4阶B树。
文章图片
在B树上执行某些操作时, B树的任何属性都可能违反, 例如节点可以拥有的最小子节点数。为了维护B树的属性, 树可能会分裂或合并。
运作方式 搜索:
B树中的搜索与二叉树中的搜索相似。例如, 如果我们在以下B树中搜索项目49。该过程将如下所示:
- 将项目49与根节点78进行比较。由于49 < 78, 因此移至其左子树。
- 从40 < 49 < 56开始, 遍历40的右子树。
- 49> 45, 向右移动。比较49。
- 找到匹配项, 返回。
插入
插入在叶节点级别完成。为了将项目插入B树, 需要遵循以下算法。
- 遍历B树以找到可以在其上插入节点的适当叶节点。
- 如果叶节点包含少于m-1个键, 则以升序插入元素。
- 否则, 如果叶子节点包含m-1个键, 则请执行以下步骤。
- 按元素的升序插入新元素。
- 将节点拆分为中间的两个节点。
- 将中值元素推到其父节点。
- 如果父节点还包含m-1个键, 请按照相同步骤将其拆分。
将节点8插入下图所示的5阶B树中。
文章图片
8将插入到5的右侧, 因此插入8。
文章图片
现在, 该节点包含5个键, 这些键大于(5 -1 = 4)键。因此, 将节点与中位数即8分开, 并将其向上推至其父节点, 如下所示。
文章图片
删除中
删除也在叶节点上执行。要删除的节点可以是叶节点或内部节点。为了从B树删除节点, 需要遵循以下算法。
- 找到叶节点。
- 如果叶节点中有超过m / 2个密钥, 则从该节点中删除所需的密钥。
- 如果叶节点不包含m / 2个键, 则通过从8个或左侧同级中获取元素来完成键。
- 如果左侧同级元素包含m / 2个以上的元素, 则将其最大元素推至其父元素, 然后将中间元素向下移至删除键的节点。
- 如果右侧同级元素包含m / 2个以上的元素, 则将其最小元素向上推至父元素, 然后将中间元素向下移至删除键的节点。
- 如果两个兄弟节点均不包含m / 2个以上的元素, 则通过连接两个叶节点和父节点的中间元素来创建新的叶节点。
- 如果父节点少于m / 2个节点, 则也对父节点应用上述过程。
例子1
从下图所示的5阶B树中删除节点53。
文章图片
53位于元素49的右子元素中。将其删除。
文章图片
现在, 57是节点中剩余的唯一元素, 必须存在于5阶B树中的元素的最小数量为2。它小于该元素, 即它的左右子树中的元素因此, 还不足以将其与父级(即49)的左侧同级和中间元素合并。
最终的B树如下所示。
文章图片
B树的应用 B树用于索引数据并提供对磁盘上存储的实际数据的快速访问, 因为对存储在磁盘上的大型数据库中存储的值的访问非常耗时。
【B树实现详细步骤解析】在最坏的情况下, 搜索包含n个键值的未索引且未排序的数据库需要O(n)运行时间。但是, 如果我们使用B树索引此数据库, 则在最坏的情况下将在O(log n)时间内对其进行搜索。
推荐阅读
- 比并排序算法实现详解
- B+树实现详细步骤解析
- 二叉树(binary tree)实现详解
- RTO(恢复时间目标)与RPO(恢复点目标)有什么区别()
- 最新的19种最佳自动化测试工具合集(哪个更好())
- 漏洞扫描与渗透测试差异对比(有什么区别())
- 最新52种最佳DevOps工具合集(自动化、监控等)
- Kubernetes与Docker Swarm差异比较(有什么区别())
- Kubernetes与Mesos差异比较(有什么区别())