算法导论(六)——扩充的数据结构的应用
来源:互联网 发布:软件授权码破解 编辑:程序博客网 时间:2024/06/07 06:57
算法导论(六)——扩充的数据结构的应用
选择数据结构(红黑树);决定附加信息(计算节点子树大小);验证数据结构不受修改操作影响(插入删除后需旋转);在新的结构上进行新的操作
1. 动态有序统计:(SELECT在动态集中返回第i小的数,RANK在有序集中返回排名为i的元素)
【已知】对于一个无序的集合,能够在O(n)的时间内确定任何的顺序统计量
【目标】修改红黑树,使得在O(lgn)时间内确定任何的顺序统计量
——>顺序统计树:在每个结点上存储附加信息的一棵红黑树。
【节点信息】附加属性x.size = x.left.size + x.right.size + 1
【对子树规模的维护】维护size时间复杂度:O(1)。所以插入、删除,包括维护size属性,都只需要O(lgn)时间。
OS-SELECT( x, i ) // 过程返回一个指针,指向以x为根的子树中包含第i小关键字的结点
r= x.left.size + 1
if i == r
return x
else if i < r
return OS-SELECT( x.left, i )
else
return OS-SELECT( x.right, i - r )
OS-RANK( T, x ) // 过程返回T中序遍历对象的线性序中x的位置
r= x.left.size + 1
y= x
while y != T.root
if y == y.p.right
r += y.p.left.size + 1
y = y.p
return r
2. 区间树(找到与目标区间重合的区间)
【节点信息】每个结点的关键字为区间int(低端点x.int.low)。附加信息包含一个值x.max,它是以x为根的子树中,所有区间的端点的最大值。
【对子树规模的维护】一次旋转后,更新max属性只要O(1)的时间;所以插入和删除的运行时间为O(lgn)。
参考:
http://blog.csdn.net/loveprogram_1/article/details/32318211
http://blog.csdn.net/lu597203933/article/details/43459035
- 算法导论(六)——扩充的数据结构的应用
- MIT:算法导论——11.扩充的数据结构、动态有序统计和区间树
- 【算法导论】第十一课 扩充的数据结构、动态有序统计和区间树
- 算法导论14(数据结构的扩张)
- 数据结构(六)——栈的应用
- 数据结构导论—一门算法基础的书
- 算法导论-数据结构的扩张
- 算法导论(三)——数据结构
- 算法导论学习笔记(15)——用于不相交集合的数据结构
- 数据结构的扩张—算法导论第14章(194)
- 算法导论(六)——图算法
- 第十四章 数据结构的扩充
- 数据结构算法——单链表的应用
- 算法导论21(用于不相交集合的数据结构)
- 算法导论读书笔记(14)数据结构的扩张
- 算法导论 ch14 数据结构的扩张
- 算法导论第十四章:数据结构的扩张
- 算法导论第十四章数据结构的扩张
- EasyUI实现页面右下角弹出提示框
- 凸优化相关资料
- Matrix Cookbook 公式推导
- kali 2.0 2017源更新记录【关于中文输入法】
- session与cookie的区别
- 算法导论(六)——扩充的数据结构的应用
- Skyline TE加载地形服务
- 【复习记录】并查集
- android 之 读取本地json文件返回string
- Pat 1008. 数组元素循环右移问题 (20)
- EasyUI实现日期时间输入标签只可以输入日期
- Effective Java阅读笔记
- python list存放对象,按对象某个属性排序
- 生成式和生成器 、迭代器、装饰器