热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

B树为什么具有相同的深度?

B树的分裂行为导致了B树具有相同的深度。不过要清楚的知道这一点,要从节点从0到节点变满,到第一次有分层,知道深度不断增大的流程开始

B树的分裂行为导致了B树具有相同的深度。不过要清楚的知道这一点,要从
节点从0到节点变满,到第一次有分层,知道深度不断增大的流程开始,直接上图:

首先是一个空的根节点:

空节点

然后第一次有了第一个关键字:
在这里插入图片描述

由于其节点元素大小不是我的观察重点,所以用e代替,用\代表空

假如我们的B树最小度数为t,那么一直插入关键字的话:
先根节点称为一个满节点:

在这里插入图片描述
------------------------ 【1-a】 3个关键字,所有孩子为空--------------------------

在这里插入图片描述

------------------------ 【1-b】 2t-2个关键字关键字,所有孩子为空。--------------
当节点存在2t-2个关键字时,其处在一个临近分裂的状态,节点在此环境下,
再插入一个关键字,B树为了方便后续插入,即防止分裂向上传播,会将其
预分裂。
分裂行为如下,插入了一个关键字,节点满了2t-1个。(此节点为合法B树节点)
在这里插入图片描述

在这里插入图片描述

继续不断地添加节点,其中只要当第二层的某个节点等于2t-1关键字,其就会给父节点增加一个关键字。(这样做实际上维持了父节点关键字个数n,具有n+1孩子的性质)

在这里插入图片描述

最终子节点不断增多,第一层根节点又有2t-1个了,根节点也要分裂不过这次多少不一样,它的孩子域下有子代的,此时的分裂带有子代分裂。

在这里插入图片描述

再次观察分裂细节(把上面的根节点放大),此时根节点开始分裂:

在这里插入图片描述
其中每个椭圆都是具有t-1个关键字叶子节点。
这种分裂都是按这种方式进行,其实现在就很好理解为什么叶子节点深度相同。因为B树不像二叉树一样在叶子节点的下面插入,而是就是插入到叶子节点,这样叶子节点如果有空间,就插了,没有空间,就分裂成两个相同深度的叶子节点,如果父节点也满了,会继续父节点也分裂,直到满足存储需求,如果到根节点还没满足,就新建一个根节点,将原来父节点分裂,深度加一层。而原来父节点是两个子代域具有相同深度,相同深度的两个子代域连接一个父节点,保证其后叶子节点深度相同。
因此,空间够不够深度都不变,一开始深度相同,那深度就一致相同了。


推荐阅读
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • 本文详细介绍了 phpMyAdmin 的安装与配置方法,适用于多个版本的 phpMyAdmin。通过本教程,您将掌握从下载到部署的完整流程,并了解如何根据不同的环境进行必要的配置调整。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文详细介绍如何使用 Apache Spark 执行基本任务,包括启动 Spark Shell、运行示例程序以及编写简单的 WordCount 程序。同时提供了参数配置的注意事项和优化建议。 ... [详细]
  • 本文详细介绍了虚拟专用网(Virtual Private Network, VPN)的概念及其通过公共网络(如互联网)构建临时且安全连接的技术特点。文章探讨了不同类型的隧道协议,包括第二层和第三层隧道协议,并提供了针对IPSec、GRE以及MPLS VPN的具体配置指导。 ... [详细]
  • 全面解析光纤、光缆、跳线及连接器的类型与特性
    了解光纤、光缆、跳线和连接器的不同类型及其关系,是选择和使用这些关键通信组件的基础。本文将详细介绍各种类型的特征及其应用场景,帮助您更好地理解这些技术细节。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • 本文深入探讨了MAC地址与IP地址绑定策略在网络安全中的应用及其潜在风险,同时提供了针对该策略的破解方法和相应的防御措施。 ... [详细]
  • PHP 实现无刷新多图上传及远程图片处理
    本文详细介绍了如何使用 PHP 实现网页上的无刷新多图上传功能,同时支持远程图片的下载与处理。文章提供了具体的代码示例,并对关键函数进行了说明。 ... [详细]
  • 探讨如何在 iOS 开发中通过添加 NSLayoutConstraint 来使 UICollectionView 自适应其内容的高度,特别是在复杂布局如模拟微信朋友圈发布界面时遇到的问题。 ... [详细]
  • 解决vCenter vSphere HA初始化失败的问题
    本文探讨了在集群中遇到的所有vSphere HA主机状态显示‘无法正确安装或配置vSphere HA代理’错误的情况,并详细介绍了排查与解决步骤,包括检查HA初始化错误及安装HA代理的常见故障排除方法。 ... [详细]
author-avatar
手机用户2502855967
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有