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

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



The End

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值