zoukankan      html  css  js  c++  java
  • c++ 平衡树

    平衡树的性质

    它其实就是一个 BST(Binary Search Tree 二叉搜索树)。
    当然,不同的平衡树会有自己的特性

    BST 的性质

    只有一个:任意一个节点的左子树的所有节点都比它的优先级高,右子树的所有节点都比他的优先级低。
    注意:一个节点也可以当成一颗子树
    如下:

    Why 平衡树?

    看到这里你也许会想:既然平衡树就是一颗 BST ,那还要它干嘛?
    看这里:

    由于 BST 可能会退化成一条链,使得原本 \(O(log n)\) 的速度退化成 \(O(n)\)
    于是,大佬们发明了各种各样的平衡树,避免 BST 退化成一条链

    平衡树的分类

    \[\text{平衡树} \left\{ \begin{array}{**lr**} \text{旋转平衡树} \left\{ \begin{array}{**lr**} \text{Splay} & \\ \text{Treap} \end{array} \right. & \\ \text{非旋平衡树} \left\{ \begin{array}{**lr**} \text{FHQ Treap} & \\ \text{替罪羊树} \end{array} \right. \end{array} \right. \]

    当然这里只是最常用的
    还有更多的平衡树等待着你去学习、发明

    平衡树的效率

    操作 时间复杂度
    插入元素 \(O(log n)\)
    弹出元素 \(O(log n)\)
    查询排名 \(O(log n)\)
    查询第 K 大 \(O(log n)\)
    查询前驱 \(O(log n)\)
    查询后继 \(O(log n)\)
    当然这些是基础功能,还有更多的以后会学到

    平衡树的解析

    FHQ Treap

    这是一个最适合新手学习的
    包含区间反转、可持久化
    FHQ Treap

    Splay

    这个也是必须要掌握的
    包含区间反转、 LCT
    Splay



    The End

  • 相关阅读:
    相机标定/校正(Camera Calibration)
    彩色图像直方图均衡(Histogram Equalization)
    SQL--数据的检索
    SQL--数据的增删改
    SQL--数据库的创建与管理
    java学习笔记之异常、断言
    Mysql学习笔记(二)
    初学机器学习(一)
    Mysql学习笔记(一)
    软件课设Day15
  • 原文地址:https://www.cnblogs.com/KonjakLAF/p/12754844.html
Copyright © 2011-2022 走看看