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+树的简单概念:一种特殊的平衡查找树,所有记录节点都是按键值大小顺序存放于同一层的叶子节点,各叶子节点以指针进行衔接,键值小在左,键值大在右 。

    叶子节点从左到右顺序遍历便可得到所有键值的顺序排序,这也是为什么联合索引需满足“最左前缀匹配”的原因。
  • 相关阅读:
    LeetCode 1275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game
    LeetCode 307. 区域和检索
    LeetCode 1271 十六进制魔术数字 Hexspeak
    秋实大哥与花 线段树模板
    AcWing 835. Trie字符串统计
    Leetcode 216. 组合总和 III
    Mybatis 示例之 复杂(complex)属性(property)
    Mybatis 示例之 复杂(complex)属性(property)
    Mybatis 高级结果映射 ResultMap Association Collection
    Mybatis 高级结果映射 ResultMap Association Collection
  • 原文地址:https://www.cnblogs.com/cbxBlog/p/9192895.html
Copyright © 2011-2022 走看看