数据结构Note:伸展树(Splay Tree)
来源:互联网 发布:2konline巅峰科比数据 编辑:程序博客网 时间:2024/06/14 02:40
基本思想: 每个节点被访问时,使用旋转操作将其移动到根。
旋转是自底向上的,因此需要设置父亲指针
核心操作:伸展
Splay(x)保持伸展树有序性的前提下,将元素x调整到树的根部
单次双旋,分若干种情况讨论
!p->father x==y->left Zig(x)
- x==y->right Zag(x)
p->father (令p=x->father)
- x==p->left
- p==p->father->left Zig(p) Zig(x)
- p==p->father->right Zig(x) Zag(x)
- x==p->right
- p==p->father->left Zag(x) Zig(x)
- p==p->father->right Zag(p) Zag(x)
伸展操作:不断重复的双旋
while ((p=x->father)!=NULL) DoubleRotate;
接口实现:五种基本操作
Search 查找 正常Search以后Splay
Insert 插入 正常Insert以后Splay
Merge 合并 设待合并集合为A,B,首先伸展A中的最大元素,然后将B作为它的右子树
Split 分裂 对分裂中心进行伸展,那么它的左右子树就是分裂后的两个集合
Delete 删除 首先以待删除元素作为中心进行分裂,然后对分裂结果进行合并
其它操作:伸展可能会提供更多便利
n个结点的伸展树m次操作的总时间开销为O(mlogn)。
阅读全文
0 0
- 数据结构Note:伸展树(Splay Tree)
- Splay Tree(伸展树)
- Splay Tree 伸展树
- 伸展树splay tree
- Splay Tree(伸展树)
- splay tree(伸展树)
- 伸展树(Splay tree)
- 伸展树(Splay tree)
- Splay Tree(伸展树)
- splay - tree 伸展树
- 伸展树Splay Tree
- Splay Tree(伸展树)
- 伸展树splay tree
- 伸展树(splay tree)
- 伸展树 splay tree
- 伸展树(Splay Tree)
- 伸展树(splay tree)
- 【数据结构】伸展树 Splay
- c++中关于最短路径问题的Dijkstra算法的实现
- echarts3.x实用配置
- EVM误差矢量幅度
- 用户 角色 权限(管理方案)
- 逆转链表
- 数据结构Note:伸展树(Splay Tree)
- hdu 2546 饭卡(01背包)
- php学习笔记——redis扩展
- QPS与TPS简介
- 前端各个框架兼容性
- 浅谈强联通分量,双联通分量
- 计算机网络学习(1)
- 【Spring】配置数据库资源
- Ubuntu14.04 PostgreSQL卸载又重装后遇到的问题及解决方法