算法导论 14章 数据结构的扩张

本章介绍了两种红黑树的扩张

一,动态顺序统计

秩:在集合线性序中的位置,中序遍历树时输出的位置。

顺序统计树:向红黑树的结构中添加一个size域,表示包含自身节点的当前节点的子树节点的数目。

(1)查找给定秩的元素

OS_SELECT(x,i)
     r = size[left[x]]+1; //先计算x的处于的位置
     if i = r         //x正好是第i小的关键字
         then return x;
     else if i < r   //x比第i关键字大,则在其左子树查找
         then return OS_SELECT(left[x],i)
     else return OS_SELECT(right[x],i-r)  //x比第i关键字小,则在其右子树查找

(2)确定一个元素的秩

OS_RANK(T,x)
    r = size[left[x]]+1;   //获取以x为根子树中x的位置(中序遍历)
    y = x;
    while y != root[T]    //从下向上直到根节点
          do if y = right[p[y]]   //如果是右子树
                  then  r = r + size[left[p[y]]]+1; 
          y = p[y]; //向上移动
    return r;

(3)对树的维护

二,如何扩张数据结构

对一种数据结构的扩张过程分为四个步骤:

1)选择基础数据结构

2)确定要在基础数据结构中添加哪些信息

3)验证可用基础数据结构上的基本修改操作来维护这些新添加的信息

4)设计新的操作

(1)对红黑树的扩张

定理14.1

三,区间树

区间树:一种对动态集合进行维护的红黑树,其中每个元素x都包含一个区间x.int。

支持操作:

INTERVAL_INSERT(T,x):将包含区间域int的元素x插入到区间树T中

INTERVAL_DELETE(T,X):从区间树T中删除元素x

INTERVAL_SEARCH(T,i):返回一个指向区间树T中元素x的指针,使int[x]与i重叠,若集合中无此元素存在,则返回nil[T]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值