day9 B树

何为B树?B树是一种平衡的多路搜索树,多用于文件系统,数据库的实现

下面上几张B树图:

3阶
4阶
5阶

从B树图中可以看出一些特点:1个节点可以存储超过2个元素,可以拥有超过2个子节点,每个节点的所有紫薯高度一致

m阶B树的性质(m\geq 2)

假设一个节点存储的元素个数为x

如果该节点是根节点:1\leq x \leq m-1 ,如果是非根节点ceil(m/2)  - 1 \leq x \leq m-1,如果有子节点,子节点个数y=x + 1;那根节点的子节点个数2\leq y \leq m ,非根节点的的个数:ceil(m/2)\leq y \leq m

B树VS二叉搜索树

二叉搜索树
3阶B树

可以发现B树和二叉搜索树,在逻辑上是等价的,可以这样理解3阶B树是由二叉搜索树2~n代合并组成的,于是由下面这样一些性质:

2代合并的超级节点,最多拥有4个子节点(至少是4阶B树),3代合并的超级节点,最多拥有8个子节点(至少是8阶B树),n代合并的超级节点,最多拥有2^n 个子节点(至少是2^n 阶B树),m阶B树,最多需要\log_2 m 代合并

B树搜索

1.现在节点内部从小到大开始搜索元素

2.如果命中,搜索结束

3.如果未命中,再去对应的子节点中搜索元素,重复步骤1

B树添加

新添加的元素必定是添加到叶子节点的(从上面往下比,然后一直到最后)


示例图

假如现在插入55

插入55

但是这里你会发现,如果所有叶子节点都达到饱和的情况下,或者要添加的那个叶子节点达到饱和的时候,就会出现一个问题节点上溢

添加-上溢的解决(假设5阶)

从前面可以知道一个性质,就是如果B树发生上益那么上溢节点的元素个数必然等于m,上溢的解决方式如下:

假设上溢节点最中间的元素位置为k,将k位置的元素向上与父节点合并,然后将[0,k-1]和[k+1,m-1]位置的元素分类成2个子节点,这2个子节点的元素个数,必然都不会低于最低限制(ceil(m/2)-1),如果一次分类完毕后,有可能导致父节点上溢,依然按照上面说的方式解决,一层一层往上处理,最极端的情况,就是有可能一直分裂到根节点;给个展示图:

上溢处理图

再示范多一个添加过程图:

B树添加

B树删除

删除分叶子节点删除和非叶子节点删除,如果需要删除的元素在叶子节点,那么直接删除就可以了例如下面图:

删除叶子节点

如果删除的是非叶子节点,那么就要先找到前驱或后继元素,覆盖所需删除元素的值,再把前驱或后继元素删除,如下图:

删除非叶子节点

从图中可以得出结论:非叶子节点的前驱或后继元素,必定在叶子节点中,真正删除的元素都是发生在叶子节点中;

但是删除节点有可能会导致下溢情况的出现,例如下面这种情形:

下溢

假设上面这个图是一棵5阶B树,那么如果删掉元素22之后,元素个数可能就会低于最低限制(\geq ceil(m/2)-1),这个时候我们就要解决下溢的问题了

删除-下溢的解决

下溢节点的元素数量必然等于ceil(m/2)-2,如果这个时候下溢节点临近的兄弟节点,有至少ceil(m/2)个元素,可以向其借一个元素,如下图:

下溢1

但是如果下溢节点临近的兄弟节点,只有ceil(m/2)-1个元素呢?这个时候我们需要从父节点中挪取元素下来跟左右子节点进行合并,合并后的节点元素个数等于ceil(m/2)+ceil(m/2)-2,不超过m-1,但是这个操作可能会导致父节点下溢,依然按照上述方法解决,下溢现象可能会一直往上传播,示例图:

下溢2

举一个例子说明展示实际情况:

删除例子

B树大概就学习到这里先吧,后续如果我还能学到新的东西的时候再补充吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354