zoukankan      html  css  js  c++  java
  • 【13】算法 (平衡二叉树AVL、红黑色RBT、B+树、B-树详解)

    平衡二叉搜索树(AVL)

     特性:

      (1)左右子树的深度之差不超过1

    红黑树(RBT)

    红黑树的由来,解决了什么问题:

      为了维持二叉搜索树的平衡性(避免元素一边倒,变成链表),数据结构内出现了各种类型的树,如AVL树(即平衡搜索树,特性是维持左右子树的高度差不超过1)

      而红黑树使用了颜色的概念维持树的平衡,使得二叉搜索树的左右子树的高度差保持在固定的范围

    红黑树与AVL树对比:

      由于AVL是非常严格的平衡树,导致在增删节点的时候,根据不同的情况,旋转次数比红黑树多

      红黑树是弱平衡树,因此非严格的平衡会换取增删节点时,旋转次数的减少;

      总结:

        若搜索次数远大于插入和删除节点的次数,选择AVL树;

        若搜索次数与插入和删除节点次数差不多,选择红黑树;

    本质:

      一棵二叉搜索树,满足二叉搜索树的特征(即任意节点的值大于它得左子节点,小于它的右子节点)

    特征:

    • 根节点必须是黑色;
    • 相同的红色不能相连,红色的节点,它的叶节点(NULL节点)只能是黑色;
    • 从任一个节点,到其每个叶子的所有路径,都包含相同数目的黑节点;

    为了保持平衡,不退化成链表,有几种方式操作

    • 变颜色
    • 左旋
    • 右旋

    B-树

    定义:

      一种平衡多路搜索树(并不是二叉)

    特征:

      【1】根节点至少有两个子女。

      【2】每个中间节点都包含K-1个元素和K个孩子,其中  m/2<=k<=m

      【3】每个叶子节点都包含k-1个元素,其中  m/2<=k<=m

      【4】所有的叶子节点都位于同一层

      【5】每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划

    由来:

      从算法逻辑来说,二叉查找树的查找速度和比较次数都是最小的,为什么还需要衍生出B-树的概念?

      原因:考虑到磁盘IO的效率,数据库索引是存储在磁盘上的,当数据量比较大的时候,索引的大小甚至有几个G,当利用索引查询时,将整个索引加载到内存中,消耗是非常大的,

      举例:用二叉查找树,查找元素10,查找的次数是4(9->13->11->10)所以最坏的情况下,磁盘IO次数等于索引树的高度。

      总结:为了减少磁盘IO次数,需将搜索树由“瘦高”->“矮胖"的转变

      二叉查找树:

           

       B - 树

         

     

    B+树

     定义:

      B+树是B-树的一种变体,查询性能比B-树更高

    B-树 可参考

    https://www.sohu.com/a/154640931_478315

    https://www.cnblogs.com/linhaostudy/archive/2019/09/10/11497320.html

    做一个优秀的程序媛
  • 相关阅读:
    C# 异步锁
    C#异步编程基础入门总结
    C#异步编程基础入门总结
    C#与数据结构--图的遍历
    C#中IEumerable的简单了解
    C# prism 框架 MVVM框架 Prism系列之事件聚合器
    .NET Core 3 WPF MVVM框架 Prism系列之对话框服务
    C# prism 框架
    TaskAwaiter<TResult> 结构
    利用Eventlog Analyzer分析日志
  • 原文地址:https://www.cnblogs.com/oytt/p/13626078.html
Copyright © 2011-2022 走看看