《算法导论》笔记 第14章 14.3 区间树
2014-04-25 15:51
148 查看
【笔记】
待码!!!!!把一个区间[t1,t2]表示为一个对象i,其各个域为low[i]=t1(低端点),high[i]=t2(高端点)。
我们说区间i和i'重叠,如果i∩i'≠ Ø。亦即如果low[i]<=high[i'],且low[i']<=high[i]。
任意两个区间i和i'满足区间三分法,也就是下列三种性质之一:
a) i 和 i' 重叠
b) i 在 i' 左边
c) i 在 i' 右边
区间树是一种对动态集合进行维护的红黑树,该集合中的每个元素x都包含一个区间int[x]。区间树支持下列操作:
INTERVAL-INSERT(T,x):将包含区间域int的元素x插入到区间树T中。
INTERVAL-DELETE(T,x):从区间树中删除元素x。
INTERVAL-SEARCH(T,i):返回一个指向区间树T中元素x的指针,使int[x]与i重叠;若集合中无此元素存在,则返回nil。
基础数据结构:红黑树,每个结点x包含一个区间域int[x],x的关键字为区间的低端点low[int[x]]。
附加信息:max[x],即以x为根的 子树中所有区间的端点的最大值。
对信息的维护:max[x] = max{ high[int[x]], max[left[x]], max[right[x]] }
设计新的操作:SEARCH,若left[x]!=nil且max[left[x]]>=low[i]则向右子树查询。
【练习】
14.3-1 写出作用于区间树的结点、并于O(1)时间内更新max域的LEFT-ROTATE的伪代码。先维护旋转后的子树,在维护新的根。
14.3-2 重写INTERVAL-SEARCH代码,使得当所有的区间都是开区间时,它也能正确的工作。
其实把所有开区间都-1+1不就好了。
14.3-3 请给出一个有效的算法,使对给定的区间i,它返回一个与i重叠的、具有最小低端点的区间;或者,不存在返回nil。
SEARCH。
14.3-4 给定一个区间树T和一个区间i,请描述如何能在O(min(n,klgn))时间内,列出T中所有与i重叠的区间,此处k为输出区间数。
一个尽可能向右找的SEARCH。
14.3-5 支持操作INTERVAL-SEARCH-EXACTLY(T,i),它返回一个指向区间树T中结点x的指针,使low[int[x]]=low[i],high[int[x]]=high[i],不包含则返回nil。所有操作对于n结点树运行时间为O(lgn)。
暂缺
14.3-6 请说明如何来维护一个支持操作MIN-GAP的动态数集Q,使该操作能给出Q中最近的两个数之间的差幅。使操作INSERT,DELETE,SEARCH和MIN-GAP尽可能的高效,并分析它们的运行时间。
略
相关文章推荐
- snmp- Simple Network Management Protocol
- 一些java错误
- 【cocos2d-x 3.0-Mac配置篇】
- 递归处理多层嵌套列表
- 快速排序算法
- Direct3D 10教程7:纹理映射和常量缓存
- 文件打开时从中心文件分离用Revit API如何实现
- [linux]ubuntu 新建用户及相关问题
- 作为Team Leader应该怎样做?良好团队文化的源泉
- ASP.NET MVC 4 (一)路径映射
- 备份文件和文件组 (SQL Server)
- HOOK专题[来自微软中国社区]
- jquery 静态类和实体类的写法
- Spring AOP(一、xml文件配置实现)
- Java List /ArrayList 三种遍历方法
- mac 浏览器 强刷快捷键
- 在外部调用私有成员函数的方法
- VBO
- 你问题不给力,我不愿意回答
- web项目在tomcat上不能部署的解决方法