14.3-1
在CLRS 13.2节中的LEFT-ROTATE
最后添加两行代码:
y.max = x.max
x.max = max(α.max,β.max,x.int.high)
14.3-2
将书上的INTERVAL-SEARCH
第三行的if
语句中的 ≥ 改为 > 即可。
14.3-3
对于INTERVAL-SEARCH
,首先检查区间
MIN-INTERVAL-SEARCH(T, i)
return MIN-INTERVAL-SEARCH-FROM(T, T.root, i)
MIN-INTERVAL-SEARCH-FROM(T, x, i)
if x.left ≠ T.nil and x.left.max ≥ i.low
y = MIN-INTERVAL-SEARCH-FROM(T, x.left, i)
if y ≠ T.nil
return y
elseif i overlaps x.int
return x
else return T.nil
elseif i overlaps x.int
return x
else return MIN-INTERVAL-SEARCH-FROM(T, x.right; i)
时间复杂度是 O(lgn)。
14.3-4
INTERVAL-OVERLAP-LIST(T, x, i)
if i overlaps x.int
print x
if x.left != T.nil and x.left.max ≥ i.low
INTERVAL-OVERLAP-LIST(T, x.left, i)
if x.int.low ≤ i.high and x.right != T.nil and x.right.max ≥ i.low
INTERVAL-OVERLAP-LIST(T, x.right, i)
14.3-5
先找到和区间 i 的低端点相等的区间(由于低端点是关键字),再比较找到的这个区间的高端点和区间
INTERVAL-SEARCH-EXACTLY(T, i)
x = SEARCH(T, i.low) //普通红黑树查找
if x.high == i.high
return x
return T.nil
14.3-6
1、基础数据结构
以集合中的数据作为关键字的红黑树。SEARCH
和普通红黑树的TREE-SEARCH
一样。
2、附加信息
每个结点 x 的扩张属性如下:
x.max.val:记录以x为根结点的树中最大的关键字;
3、信息维护
上面三个属性可以直接从结点和结点的孩子计算出来,从定理14.1可以知道插入删除操作只需 O(lgn) 时间。
4、新操作
Min_Gap()
:返回根结点的min-gap值,运行时间 O(1)。 返回最接近的差值时间是 O(lgn)。
14.3-7
基本思想是:采用一颗区间树,树中每个结点存放的区间是矩形的 y 区间。然后沿
1.按矩形的
2.扫描排序列表(按
时间:排序是