算法导论14-2

读书笔记

本小节介绍了扩展数据结构的抽象过程,同时证明了一个定理;

抽象过程

  1. 选择一种基础数据结构
  2. 确定基础数据结构中要维护的附加信息
  3. 检验基础数据结构上的基本修改操作能否维护附加信息
  4. 设计一些新的操作来应用附加信息

红黑树的扩张

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

课后习题

14.2-1

通过为节点增加指针的方式,试说明如何在扩展的顺序统计树上,支持每一动态集合查询操作\(MINIMUM,MAXMUM,SUCCESSOR,PREDECESSOR\)在最坏时间\(O(1)\)内完成。顺序统计树上的其他操作的渐近性能不应受影响。

  1. MINIMUM:用一个指针指向树中最小的元素。每次插入时与 MINIMUM 比较检测是否需要更改。若删除 MINIMUM,则指针指向它的后继。旋转不影响 MINIMUM。

  2. MAXIMUM:同 MINIMUM。

  3. PREDECESSOR、SUCCESSOR:给每个结点新增指向前驱和指向后继的指针。

  4. 插入:时间复杂度仍为 \(O(\lg{n})\),插入 \(x\) 结点时,若 \(x ≠ MAXIMUM\),利用 \(O(\lg{n})\) 时间找到 \(x\) 的后继 \(y\),找到 \(y\) 后,\(y\) 的前驱 \(w\) 则只需 \(O(1)\) 时间,在用 $O(1) $时间更新 \(w, x, y\) 的前驱、后继。若\(x == MAXIMUM\),则利用 \(O(\lg{n})\) 时间找 \(x\) 的前驱,同理。

  5. 删除:和插入类似。

旋转不影响前驱、后继的指针。

14.2-2

能否在不影响红黑树任何操作的渐进性能的前提下,将结点的黑高作为书中结点的一个性能来维护?说明如何做,如果不能,请说明理由。如何维护结点的深度?

树为空时,黑高为\(0\)

只有根节点时,黑高为\(1\)

在插入和删除过程中,重新着色时,修改黑高;

posted @ 2021-01-15 14:08  ijkzen  阅读(335)  评论(0编辑  收藏  举报