【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

 

posted @ 2020-09-07 11:57  欧阳图图的少年成长记  阅读(194)  评论(0编辑  收藏  举报