平衡二叉树->红黑树->B树->B+树->B*树

写了一半发现有个大哥写的太好了大家直接转到这里吧

【数据结构】B-Tree, B+Tree, B*树介绍 转 - 最初的梦想 - 博客园

平衡二叉树(AVL)的性质 

它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。

区别: 

1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。

2、平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。

第一次考虑这个问题是因为mysql哈,相信很多同学也是为了这个面试题来的。所以用mysql的实现来讲b树。

红黑树和b树的区别。这里纠正一个翻译错误没有b减树哈,应该是b-tree。翻译过来应该是B树。那么B树从红黑树演变过来的意义是什么呢。

没错是为了减少磁盘寻址。(磁盘的一个基本读取空间叫磁页。当然还有一些基于寻址的优化,顺序寻址什么的,在分布式存储中的应用大家有兴趣可以Google一下)

那么B树怎么减少寻址次数呢。尽量的装满一页数据。B树存储的是地址,地址的长度是固定的,所以B树节点的容量就等于16k/(32/64系统内存地址长度),对于mysql来说,索引存储主键值加地址就是16k/(key(大小)+指针(在mysql中为6字节))

 B+ 树呢就是继续上面的宗旨,尽量用满一页减少寻址。b树有个特点就是叶子节点是目的地,只有一个数据,这怎么能行呢,妥妥的浪费啊,那就利用起来。让根节点直接存储数据。那么这时候叶子节点容量是16k/行数据大小。一行超过一页就没意思了哈。有这个问题的请转道Mysql中innodb引擎表页大小16KB超出大小怎么办?_star_xing123的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值