关于B树的思考:m阶B树的非根非叶节点为什么要至少为ceil(m/2)个孩子? c/c++描述
相信每一位格物致知认真细致的学生,都不会放过这个知识点的掌握。而不是去死记硬背。这也是我们未来学的更多,做的更好的保证。
给个链接,这篇文章分析的就很好:
关于B树的思考:m阶B树的非根非叶节点为什么要至少为ceil(m/2)个孩子?_oxygen’s blog-CSDN博客
https://blog.csdn.net/oxygen0106/article/details/40262829
接着写些我自己的理解。
采用B树,而不是二叉树,是为了建立大节点,让每个节点包含的数据更多,包含更多的元素,更多的指针。从而减小树的高度。这是为了优化对磁盘数据的访问而设计的数据结构,而非对主内存。因为电脑对外磁盘的访问速度慢,远比对主内存的访问慢,但每次从磁盘的块区读取的数据也多。如果树里每个节点对应磁盘的一个块区。那么合理组织树的结构,尽最大可能减少树的高度。将有利于提高对磁盘数据的访问速度。
磁盘上数据必须用一个三维地址唯一标示:柱面号、盘面号、块号(磁道上的盘块)。
设树里节点的最大指针数为 m ,则树里节点的最小指针数为ceil(m/2) - 1 。
若 m = 9 ,则节点最大元素数为8,最小指针数为 5 ,最少元素数为 4 。
若m = 10,则节点最大元素数为9,最小指针数为 5 ,最少元素数为 4 。
观察可以得到:在建立B树,往B树里插入元素时,一个最大节点刚好可以拆分成两个最小节点,为其父母节点多提供一个元素,一个指针的位置。若父母节点已经是最大节点,则父母节点再拆分成两个最小节点,这两个小节点对上提供两个指针,所以新建爷爷奶奶节点,接受这两个指针,结果是树的高度加一。这也是合理的,因为往树里插入元素过多,必然导致树的高度增加。
举例如图:
同理,从B树里删除元素时,若被删元素所在节点是最小节点,其兄弟节点也是最小节点,父母节点是最小根节点(一元素和俩指针),则可以删除元素后,合并这三个节点,形成一个大节点,同时降低了树的高度。其余复杂情况可以以此类推。规定ceil(m / 2) - 1 这个数就是为了俩最小节点合并成最大节点,一个最大节点拆分成俩最小节点时用的。
所以如此规定,可以简化程序的处理,算法更为简单。同时,也规定了最小指针数的限度,尽最大可能压缩树的高度。使插入和删除时也有规律可循。做到了程序各方面性能最大程度的均衡和优化。
再提供删除节点时的图:
谢谢阅读
关于B树的思考:m阶B树的非根非叶节点为什么要至少为ceil(m/2)个孩子? c/c++描述相关推荐
- b+树的增删改查_考研计算机 | 如何理解m阶B树?
2021计算机考研:如何理解m阶B树?对m阶B树定义的理解一棵m阶的B树满足下列条件:1.每个结点至多有m棵子树.2.除根结点外,其它每个分支至少有m/2棵子树.3.根结点至少有两棵子树(除非B树只有 ...
- 【数据结构】红黑树前置知识——4阶B树
学习目标: 学习4阶B树,使我们更好地理解为何红黑树进行平衡时的操作缘由,理清我们红黑树平衡时局部与整体的关系. 特别说明!!! 1 这里说的4阶B树是针对学习红黑树时对B树进行一定修改得到的4阶B树 ...
- Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树、二叉查找树的插入节点、二叉查找树的删除、二叉树的遍历、平衡二叉树)C 语言实现
Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树.二叉查找树的插入节点.二叉查找树的删除.二叉树的遍历.平衡二叉树)C++语言实现 目录 树的基础知识 1.二叉树的遍-前序 ...
- 二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...
日常中我们见到的二叉树应用有,Java集合中的TreeSet和TreeMap,C++ STL中的set.map,以及Linux虚拟内存的管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树 ...
- 高度为5的3阶b树含有的关键字个数_数据结构要考得好,你心里要有B树
01 知识框架 02 知识点详解 1 B树 ①定义与性质 B树也叫B-树.B树是一种平衡的多分树,通常我们说m阶的B树,是二叉排序树的一种扩展,它必须满足如下条件: 01 每个结点最多只有m-1个关键 ...
- 高度为5的3阶b树含有的关键字个数_第15期:索引设计(索引组织方式 B+ 树)
谈到索引,大家并不陌生.索引本身是一种数据结构,存在的目的主要是为了缩短数据检索的时间,最大程度减少磁盘 IO. 任何有数据的场景几乎都有索引,比如手机通讯录.文件系统(ext4xfsntfs).数据 ...
- 高度为5的3阶b树含有的关键字个数_B-树和B+树的应用:数据搜索和数据库索引...
B-树 1 .B-树定义:有序数组+平衡多叉树 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树 ...
- 【数据结构】m阶B树的特点、插入 和 删除
预备知识:你需要知道什么是二叉搜索树. 一.m 阶 B 树的特点 在严蔚敏的<数据结构>一书中,说"一棵m阶的B树,或为空树,或为满足下列特征的m叉数.如下: 1.每个节点至多有 ...
- 【数据结构】利用4阶B树辅助理解——红黑树删除节点
文章目录 学习目标: 学习内容: 一.删除节点的过程 二. 删除对象的转换 三.失黑的原因&失黑修正原则 3.1失黑的原因 3.2 失黑修正原则 3.2.1 可以在节点内部平衡的情况 3.2. ...
- 二叉排序树、AVL树、红黑树、B树、B+树、Hash树、
二叉排序树 1.基本应用 二叉排序树也称为也叫二叉查找树,二叉搜索树, BST. 满足二叉查找树的一般性质,是指一棵空树具有如下性质: 对于二叉树中的任何一个非叶子节点,要求左子节点比当前节点值小,右 ...
最新文章
- unicode 版本 delphi (如XE2)的 TBytes 转换为 AnsiString
- 4.STM32中对USART1_Config()函数的理解(自定义)
- hdu 2049 不容易系列之(4)——考新郎
- 4.1 深层神经网络
- IPLAT62--弹窗
- Java 8新特性探究(五)重复注解(repeating annotations)
- 系统学习深度学习(二) --自编码器,DA算法,SDA,稀疏自编码器
- PHP字体向右移动,CSS3如何实现文字向右循环闪过效果以及可在移动端使用的实例代码分享...
- qudp socket信号不触发_QT下udpsocket一段时间接收不到数据的问题
- cxfservlet_webService框架CXF的简单使用
- 找不到该项目,请确认该项目的位置的办法
- Python的打包神器—Nuitka!
- 用三个步骤实现响应式网页设计
- On Smoothness of a Vector Field-Application to Optical Flow
- 一文告诉你游戏服务器的架构到底是什么样,各服务器的职责是什么
- C语言中的cbp文件是什么,C语言编程入门——函数(上)
- 计算机读不出相机磁盘,相机存储卡读不出来怎么办?相机存储卡无法读取
- 上海科技大学计算机浙江分数线,上海科技大学2020录取分数线 上海科技大学录取分数线各省汇总...
- 跟我学UDS(ISO14229) ———— 0x2C(DynamicallyDefineDataIdentifier)
- 什么是蜜罐、蜜饵、蜜标、蜜网、蜜场?