B树和B+树 红黑树

有关于B树的漫画博客:https://www.jianshu.com/p/8b653423c586;

首先,B树的创建就是为了优化数据库查找,如果采用二叉查找树(时间复杂度只要LogN)来进行查找,那么在磁盘进行I/O操作时,(数据太大需要进行分页)每个磁盘页对应一个节点;最坏情况:查找次数等于输的高度(时间复杂度LogN),

自顶向下查找10:需要4次

《B树和B+树 红黑树》

那这样的话,通过将树变成矮树胖树即可;

B树的结构:

《B树和B+树 红黑树》

每个节点不超过磁盘页的大小(这里是3阶B树,每个磁盘页大小是3)即可;

每个节点的结构:

《B树和B+树 红黑树》

 

 

 

B+树是B树的变种:

《B树和B+树 红黑树》

优点:

1.单一节点存储更多的元素,使得查询的IO次数更少。(非子叶结点都存放的是索引,只有子叶结点才带有卫星数据;而B树的每个节点都有卫星数据,那这样B+树的结点会多出空间来放元素,也意味着B+树比B树还要矮胖);

2.所有查询都要查找到叶子节点,查询性能稳定。(B树最好的情况是根结点就是结果,最坏是子叶结点;而B+树的数据都要在子叶结点中的卫星数据获取)

3.所有叶子节点形成有序链表,便于范围查询。(如果想查询一个范围,B树的时间复杂度要比B+树高很多)

 

 

红黑树(logN):

《B树和B+树 红黑树》

 第五点很重要,每次自平衡的时候都要依据这一点来进行调整;

《B树和B+树 红黑树》

 

 TreeSet和TreeMap中都用到了红黑树的结构,Java8中HashMap的冲突解决中也采用了红黑树的结构;

    原文作者:B树
    原文地址: https://blog.csdn.net/emmmsuperdan/article/details/82700189
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞