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

1、动态顺序统计
顺序统计树:向红黑树的结构中添加一个size域,表示包含自身节点的当前节点的子树节点的数目。修改后可以快速支持顺序统计量操作。
  1)检索具有给定排序的元素

    过程OS_SELECT(x,i)返回一个指向以x为根的子树中包含第小关键字的结点的指针,即为了找出顺序统计量树T中的第i小关键字。
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)确定一个元素的秩(位置)

  给定指向一顺序统计树T中节点x的指针,求x在顺序统计树中序遍历得到的线性序中的位置。
  

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)对子树规模的维护

  在红黑树中添加size域后,能够通过OS_SELECT和OS_RANK迅速计算出所需的顺序统信息。通过修改红黑树的插入和删除操作,在此过程是通过旋转来修改size域。

2、如何扩张数据结构

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

1)选择基础数据结构

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

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

4)设计新的操作

3、区间树

  这小结讲的是扩张红黑树以支持由区间构成的动态集合上的操作。区间可以很方便的表示各占用一段连续时间的一些事情。区间树是一种动态集合进行维护的红黑树,该集合中的每个元素x都包含在一个区间int[x]。区间树支持下列操作:

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、付费专栏及课程。

余额充值