Tree-LSM

二分法

  • 二分法很简单,很精妙!一半一半的舍弃,一倍一倍的填充。(O(LogN))->树

树的类型

什么是普通的树?

  • 无序、混沌、自然、简单、墒减!

什么是动态查找树?

  • 动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)。

  • 其都是动态结构。在删除,插入操作的时候,都不需要彻底重建原始的索引树。最多就是执行一定量的旋转,变色操作来有限的改变树的形态。

  • 其查找的时间复杂度大体维持在O(log(N))数量级上。可能有些结构在最差的情况下效率将会下降很快,比如:BST。

什么是二叉查找树(Binary Search Tree)/二叉排序树/二叉搜索树?

  • 每个结点有key、卫星数据(需要存储的value)。还包含属性:lchild、rchild和parent,分别指向结点的左孩子、右孩子和双亲(父结点)。(二叉树
  • 若它的左子树不为空,则左子树上的所有节点的值都小于它的根节点的值;若它的右子树不为空,则右子树上所有节点的值都大于它的根节点的值;其他的左右子树也分别为二叉查找树;(左根右,中序遍历有序
  • 二叉查找树是动态查找树,在查找的过程中可添加和删除相应的元素,在这些操作中需要保持二叉查找树的以上性质。(在删除,插入操作的时候,都不需要彻底重建原始的索引树。
  • 查找、插入、删除的时间复杂度为O(logN),但是有极端情况,变为类似线性链表的结构,时间复杂度为O(N)。(不平衡

什么是平衡树(Balance Tree)?

  • 我们约定:任意节点的子树的高度差都小于等于1,即为平衡。(平衡
AVL树
  • 二叉平衡搜索(排序)树(AVL树):AVL得名于其发明者的名字( Adelson-Velskii 以及 Landis),是一种平衡二叉树。本质上是一棵二叉查找树。
  • 平衡因子(Balance Factor,简写为bf):结点的平衡因子 = 左子树的高度 - 右子树的高度在 AVL树中,所有节点的平衡因子都必须满足: -1<=bf<=1
  • 插入保持平衡性,需要旋转操作:LL、LR、RL、RR。
红黑树
  • 是一种特殊的二叉查找树。本质为2-3-4B树。

  • 特点:

    1. 每个节点是黑色或者红色。
    2. 根节点是黑色的。
    3. 叶子节点是黑色的。此处是指为NIL(NULL)的叶子节点。
    4. 红色节点的子节点是黑色的,即红色节点不可以直接相邻。
    5. 从一个节点到该节点的子孙节点的所有路径上,包含相同数目的黑色节点。(确保没有一条路径会比其他路径长出两倍,因而红黑树是相对接近平衡的二叉树)->插入节点为红色。
    
    上述特点隐含的信息:
    1. bh(x)值是唯一的,且节点x的亲子节点的黑高,(当x为红色)要么是bh(x),(当x为黑色)要么是bh(x)-1。
    2. 2bh(x)>h(x),从节点x到叶子节点,所经历的黑色节点数目>=所经历的红色节点数目。
    
  • 时间复杂度分析:数学归纳法

    假设:一棵红黑树,树高为h(x),黑色节点的高度为bh(x),且叶子节点NIL(NULL)为黑色且高度为0,即bh(x)=0。
    引理(人们研究总结发现的规律):以结点x为根的红黑树树至少包含2^bh(x)-1个内节点(不包括叶子节点NIL(NULL))。即:高度为h(x)的红黑树,它包

你可能感兴趣的:(小小的天,天天JAVA,Algorithm,数据结构,算法,LSM,Tree)