《算法导论》第14章 数据结构的扩张 个人笔记

第14章 数据结构的扩张

14.1 动态顺序统计

顺序统计树:在红黑树的基础上,增加一个属性x.size,这个属性表示以x为根的子树(包括x本身)的内结点(不包括NIL)数,有等式:

x.size = x.left.size+x.right.size+1

元素的秩为在中序遍历树时输出的位置。

  • 查找具有给定秩的元素
    查找以x为根的子树中包含第i小关键字的结点
OS-SELECT(x,i)
r = x.left.size + 1
if i == r
    return x
if i < r
    return OS-SELECT(x.left,i)
else return OS-SELECT(x.right,i-r)
  • 确定一个元素的秩
OS_RANK(T,x)
r =x.left.size + 1
y = x
while y != T.root
    if y == y.p.right
        r = r + y.p.left.size + 1
    y = y.p
return r
  • 对子树规模的维护
    插入:第一阶段维护子树的规模,对由根至叶子的路径上遍历的每一个结点x,都增加x.size属性,新增结点的size为1.第二阶段,旋转次数至多为2次,仅会使两个结点的size属性失效。故只需在LEFT-ROTATE(T,x)代码中增加下面两行:
y.size = x.size
x.size = x.left.size + x.right.size + 1

14.2 如何扩张数据结构

定理(红黑树的扩张):设f是n个结点的红黑树T扩张的属性,且假设对任一结点x,f的值仅依赖于结点x、x.left和x.right的信息,还可能包括x.left.f和x.right.f。那么,我们可以在插入和删除操作期间对T的所有结点的f值进行维护,并且不影响两个操作的 O(lgn) 渐进时间性能。

14.3 区间树

区间重叠 i i重叠,则有 i.lowi.high i.lowi.high
扩张:

  • 1、基础数据结构
    选择一颗红黑树,每个结点x包含一个区间属性x.int,且x的关键字为区间的低端点x.int.low。
  • 2、附加信息
    x.max,是以x为根的子树中所有区间的端点的最大值
  • 3、对信息的维护
x.max = max(x.int.high, x.left.max, x.right.max)
  • 4、设计新的操作
    用来找出树T中与区间i重叠的那个结点,若不存在与i重叠的结点,则返回指向哨兵T.nil的指针
INTERVAL-SEARCH(T,i)
x = T.root
while x!=T.nil && i does not overlap x.int
    if x.left != T.nil && x.left.max >= i.low
        x = x.left
    else x = x.right
return x
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值