zoukankan      html  css  js  c++  java
  • Mysql与索引有关的树的概念

    1.简单地认识下与索引有关的数据结构: 
    树的简单概念:由n个节点组成具有层次关系的集合,根朝上叶朝下 
    树的特点:每个节点有0或多个子节点,无父节点称为根节点,每个非根节点有且只有一个父节点,每个节点可分为多个不相交的子树(父节点除外) 

    二叉树的简单概念:每个节点最多有2个子树的树结构,有左右子树之分 

    二叉查找树的简单概念:二叉树的前提下,左子树上所有节点的值均小于/等于其父节点的值,右子树上所有几点的值均大于/等于其父节点的值,左右子树也分别为二叉查找树 
    二叉查找树的查找步骤:小于往左,大于往右,相等则查找成功,子树为空不成功 

    但是,二叉查找树遇到以下的情况效率会很低 

    存在某一节点高度过高

    就有了平衡二叉树的存在
    二叉平衡树的简单概念:在二叉查找树的前提下,任何节点的两棵子树的高度最大差为1(|BF|<=1) 
    平衡因子(BF):BF=左子树深度—右子树深度 
    要维持二叉平衡树的平衡,最为重要的是找到其最小不平衡树,最小不平衡树可以这样来找:找距离插入节点最近且平衡因子的绝对值大于1的结点为根的子树,找到最小不平衡树之后呢,需要将其变为平衡,主要是依靠旋转来实现的 
    如何维持平衡(3种最小不平衡树,3种旋转方式): 
    a.左旋:BF< -1时,父节点变为该节点的左节点 
    b.右旋:BF> 1时,父节点变为该节点的右节点 
    c.左旋+右旋 or 右旋+左旋:插入节点后,最小不平衡树的BF与它的子树的BF符号相反时,依具体情况先旋转一次使符号相同后,再反向旋转一次 

    但是,二叉树每一个节点最多也就对应2个子节点,节点一多的话树的高度就会很大,查找起来要遍历的层数会很多,效率还是个问题,于是,B+树便应运而生了 。
    
    B+树的简单概念:一种特殊的平衡查找树,所有记录节点都是按键值大小顺序存放于同一层的叶子节点,各叶子节点以指针进行衔接,键值小在左,键值大在右 。

    叶子节点从左到右顺序遍历便可得到所有键值的顺序排序,这也是为什么联合索引需满足“最左前缀匹配”的原因。
  • 相关阅读:
    什么是wsgi,uwsgi,uWSGI
    Flask 和 Django 路由映射的区别
    简述浏览器通过WSGI请求动态资源的过程
    前端qq交流群
    python qq交流群
    python 魔法方法 __str__和__repr__
    python 使用for 实现死循环
    查看Django版本
    pep8 python 编码规范
    python random.randint(9,10)结果是什么?
  • 原文地址:https://www.cnblogs.com/cbxBlog/p/9192895.html
Copyright © 2011-2022 走看看