平衡二叉树->红黑树->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博客
标签:16k,红黑树,寻址,二叉树,mysql,平衡,节点 来源: https://blog.csdn.net/qq_26471769/article/details/121553780