伸展树(splay)
来源:互联网 发布:战地2 for mac 百度云 编辑:程序博客网 时间:2024/06/06 04:58
Preface
首先呢,这是一棵二叉排序树。
然后呢,它还要是平衡的。
诸如RBT,SBT,Treap等等都可以的。
splay是理解和实现都比较简单,平均效率也比较好的一种。
但是splay的复杂度比较的玄学(这个待会会讲)
Text
一棵二叉排序树,左子树小于当前点,右子树大于当前点。
在不断删点加点的时候,我们需要用某些算法重构这棵树,使其达到相对的“平衡”,即使最大深度尽量小,这样每次复杂度就能达到O(logN)。
splay的核心思想就是旋转。
旋转即当前点移到它的父亲的位置,然后相应的变换。图中左到右的就是x旋转到f,右图相反。
核心操作splay即将某一个点旋转到某一个点下面(转到根就是0之类的)
但是有一种情况,就是三个点连在一起并且同一方向,旋最下面的,要先将中间的旋转,再旋下面的。
单点操作splay到根直接做。
对于区间[x,y],只需要想办法将这个区间提取出来。
只需要将x-1转到根,y+1转到根下,那么y+1的左子树就是这个区间了。
修改就打上标记,在向下查找的时候顺便下传即可。
分析复杂度。
实际上通过它的原理可以发现,事实上一次操作最坏是O(N)的。
但是因为我们有旋转操作,在不断旋转中整棵树就渐渐平衡,具体严谨证明可以参考网上其他的资料,我这蒟蒻也不会。
总的来讲,它的均摊复杂度是O(Nlog N)的
0 0
- 伸展树(splay树)
- Splay树(伸展树)
- Splay Tree(伸展树)
- Splay Tree 伸展树
- Splay伸展树&模板
- Splay 伸展树
- 伸展树splay tree
- Splay Tree(伸展树)
- splay tree(伸展树)
- 【数据结构】伸展树 Splay
- 伸展树(Splay tree)
- 伸展树(Splay tree)
- 伸展树-splay
- 伸展树splay+uva11922
- Splay Tree(伸展树)
- splay - tree 伸展树
- 伸展树Splay Tree
- bzoj1208 splay伸展树
- POJ 2299 Ultra-QuickSort 树状数组
- Android开发-如何去掉一个页面的标题栏和状态栏
- Poj 2387 单源最短路径
- mybatis ForEach Collection集合等规范解析(转)
- [LNMPA搭建四]Apache详细安装步骤
- 伸展树(splay)
- python中的setattr的使用
- mac El Capitan+ brew update error 无法访问
- 所谓数据结构
- HDU1372 Knight Moves
- hdu1044 Collect More Jewels —— dfs + bfs
- vs如何运行外部 C++ 文件
- NYOJ小白的成长之路 A+B problem
- Betheme 主题,超强大的wordpress建站主题,很适合企业站