B+ Tree

什么是B+

  • B+ tree是平衡二叉树
  • 每个节点包含k个元素, k的范围在 d <= k <= 2d 之间(也就是Minimun 50% occupancy, except for root)
  • d 被叫做 the order of the tree
  • 比如d = 2,则 2 <= k <= 4, k最小是2, 保证 Minimun 50% occupancy
  • 叶子节点用链表相连
  • B+ 的主要功能是作为数据库的索引
  • 节点只存索引, 叶子节点存数据
    在这里插入图片描述

B+ 树的时间复杂度和高度

  • 时间复杂度为
    log ⁡ f N \log_{f}{N} logfN
    f = f a n o u t , N = 叶子节点 . f = fanout, N = 叶子节点. f=fanout,N=叶子节点.
  • B+树高度计算公式
    h = l o g d ′ [ ( n + 1 ) 2 d ′ ′ ] + 1 h = log_{d'}{[\frac{(n+1)} {2d''}]} + 1 h=logd[2d′′(n+1)]+1
    其中 d ′ 为内部节点的度数 , d ′ ′ 为叶子节点的度数 其中d'为内部节点的度数, d''为叶子节点的度数 其中d为内部节点的度数,d′′为叶子节点的度数

Example: 假设有3000W条数据,每个节点保存64个索引. 计算B+树的高度

  • 计算B+树的叶子节点的度数: 每个节点最多可以保存64个索引,因此叶子节点的度数也为64. 也就是 d’’ = 64
  • 计算B+树的内部节点的度数:由于B+树的叶子节点与内部节点的结构不同,因此它们的度数也不同。对于B+树的内部节点,其度数需要满足以下条件:每个节点内最少包含2个子节点(即分支数至少为2),最多包含64个子节点。因此,可以选择一个适当的度数d’,使得一个节点可以容纳足够多的子节点,同时保持树的平衡性。常见的做法是将d’设置为B+树的叶子节点度数的一半,即d’ = 32
    h = l o g 32 [ ( n + 1 ) 2 d ′ ′ ] + 1 h = log_{32}{[\frac{(n+1)} {2d''}]} + 1 h=log32[2d′′(n+1)]+1

假设有3000W条数据,每个节点保存64个索引。
那么索引的高度就是(log2^25)/log64=25/6=4

Insert

简单的insert

Insert 16.5
在这里插入图片描述
在这里插入图片描述
Insert 17
在这里插入图片描述
在这里插入图片描述

复杂的Insert

Insert 8
在这里插入图片描述

  • 左边第一个node已经满了, 则需要拆分node
  • 2 3 5 7 8 重新组成两个节点 2 3 和 5 7 8,同时需要将5放进root作为新的索引
    在这里插入图片描述
  • root此时也满了 5 13 17 24 30, 则需要分裂root为两个新node 5 13和24 30, 17作为新的root
    在这里插入图片描述

Insert 40
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Delete

简单的delete

delete 19
在这里插入图片描述
在这里插入图片描述

复杂的delete

delete 20
在这里插入图片描述
在这里插入图片描述

  • 22这个节点元素太少, 不符合 Min 50% rule, 所以从旁边的sibling 借元素填充
    在这里插入图片描述

delete 24
在这里插入图片描述

  • 左右两边的sibling 都只有min数量的元素, 所以不能借
  • 需要合并两个节点
    在这里插入图片描述
  • 合并后父节点只剩一个元素, 所以需要将root和子节点合并在这里插入图片描述

时间复杂度

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值