首页 > 编程语言 > 详细

c++ 平衡树

时间:2020-05-06 13:05:42      阅读:63      评论:0      收藏:0      [点我收藏+]

平衡树的性质

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

BST 的性质

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

Why 平衡树?

看到这里你也许会想:既然平衡树就是一颗 BST ,那还要它干嘛?
看这里:
技术分享图片
由于 BST 可能会退化成一条链,使得原本 \(O(log n)\) 的速度退化成 \(O(n)\)
于是,大佬们发明了各种各样的平衡树,避免 BST 退化成一条链

平衡树的分类

\[平衡树 \left\{ \begin{array}{**lr**} 旋转平衡树 \left\{ \begin{array}{**lr**} Splay & \ Treap \end{array} \right. & \ 非旋平衡树 \left\{ \begin{array}{**lr**} FHQ\ Treap & \ 替罪羊树 \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
更新中...



The End

c++ 平衡树

原文:https://www.cnblogs.com/KonjakLAF/p/12754844.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!