数据结构-- B树和 B+ 树

B树定义

完整定义如下:如果B树的度为M

  • 节点至少有两个子节点
  • 其它节点至少有M/2个子节点
  • 每个节点最多有M-1个key,并且以升序排列
  • 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间 key 反映了value的大小)

B-tree树即B树。B即Balanced平衡,因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树。(只有B树,和后面B树变种B+树,在没有别的。我之前一直以为有个B减树。)

B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点最多有M-1个子节点。同时,B树具有2-3 查找树自平衡的性质。

M = 3就是一个2-3 查找树吗?

是的。B树是2-3查找树的扩展,2-3查找树是一个M=3时的B树。具体的可以参考下图是一个M=3的B树。

 (图片来自互联网)

B+ 树定义

B+树是对B树的一种变形树,它与B树的差异在于:

  • 有k个子结点的结点必然有k个关键码;
  • 非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
  • 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。

在变形时,在子节点(默认为右子节点)保留一个那个将要提升的node(包含数据),然后新建与此node相同但是不含数据的node作为父节点,并向上合并node。

 

B树在存储中的应用

 文件系统及数据库系统的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的,在实际实现B-Tree还需要使用如下技巧:

        每次新建一个节点的同时,直接申请一个页的空间( 512或者1024),这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。如,将B树的度M设置为1024,这样在前面的例子中,600亿个元素中只需要小于4次查找即可定位到某一存储位置。

参考链接:

浅谈算法和数据结构: 十 平衡查找树之B树 - yycoding (注意,此链接中B+树的演示应该存在错误)

CodingLabs - MySQL索引背后的数据结构及算法原理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值