B+树、B树

平衡二叉树

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多(查找的时间复杂度为log(n))。
在这里插入图片描述

B-tree

定义

对于一颗M阶B树具有以下性质
1.根节点的子节点数为[2,M]。
2.除根节点与叶节点外的节点子节点数数为[M/2,M]。
3.除根节点每个节点都存放数据个数为[M/2-1,M-1],升序存储。
4.非叶节点存储数据个数为指向子节点指针数-1.
5.所有的叶节点都在同一层。
在这里插入图片描述

使用场景

在数据存储中,AVL树与红黑树的查询时间都是相对低,但在大量数据存储时,往往不能一次性把全部数据都加载到内存当中,因此io次数是查询时间复杂度的决定性因素。对于二叉树来说存储大量数据二叉树的高度会非常高,数据会散列存放在不同的数据块中,在查找时加载数据的io次数就会增加。胖矮的树更能减少io次数,而B树的子节点数多于2,是多阶数,也称多路查找树,能把尽可能多的把相近的数据存放到同一个数据块中,同时降低数的高度,减小查询时间,因此B数适合大数据量存储。mogodb是一种聚合行模型简单的高性能数据库,使用了B树数据结构,将key与数据聚合到一起。

B+树

定义

B+树是B-树的变体,也是一种多路搜索树:

  • 其定义基本与B-树同,除了:
  • 非叶子结点的子树指针与关键字个数相同;
  • 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);
  • 为所有叶子结点增加一个链指针;
  • 所有关键字都在叶子结点出现;
    在这里插入图片描述
使用场景

相对于B树,(1)B+树空间利用率更高,因为B+树的内部节点只是作为索引使用,而不像B-树那样每个节点都需要存储硬盘指针。

  • 所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
  • 不可能在非叶子结点命中;
  • 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值