zoukankan      html  css  js  c++  java
  • 算法导论笔记——第十二~十四章 数据结构(二)树

    第十二章 二叉搜索树

    >=左子树的所有key,<=右子树的所有key

    在一棵高度为h的二叉搜索树上,动态集合上的操作SEARCH,MINIMUM,MAXIMUM,SUCCESSOR,PREDECESSOR,INSERT和DELETE可以在O(h)时间内完成。

    h>=(lgn向下取整)

    和快速排序算法一样,其平均性能更接近于最好情形。

    随机构建二叉搜索树期望高度为O(lgn).

    各种操作请自行查阅。

    第十三章 红黑树

    是一种(近似)平衡的二叉搜索树。可以保证在最坏情况下基本动态集合操作的时间复杂度为O(lgn).

    保证没有一条路径会比其他路径长出两倍。

    1 每个结点或是红色的,或是黑色的。

    2 根节点是黑色的。

    3 每个叶节点(NIL)是黑色的。

    4 如果一个结点是红色的,则它的两个子节点都是黑色的。

    5 对每个结点,从该结点到其所有后代结点的简单路径上,均包含相同数目的黑色结点。

    黑高bh(x):从某个结点x出发(不含该结点)到达一个叶节点的任意一条简单路径上的黑色结点个数.

    引理13.1 一棵有n个内部结点的红黑树的高度至多为2lg(n+1)。

    各种操作请自行查阅。

    第十四章 数据结构的扩张

    14.1 动态顺序统计

    快速找到一个集合中的第i小的数,或给出一个指定元素在集合的全序中的位置。

    顺序统计树:修改红黑树使之包括以此结点为根的子树的大小。

    第九章的方法O(n)。顺序统计树可达到O(lgn)。当然需要先建立红黑树花费时间O(n)。

    增加以x为根的子树(除哨兵外)的结点个数。

    插入删除元素时,维护红黑树的时间是O(lgn)。

    14.2 如何扩张数据结构

    四个步骤:

    1 选择一种基础数据结构

    2 确定基础数据结构中要维护的附加信息

    3 检验基础数据结构上的基本修改操作能否维护附加信息

    4 设计一些新操作

    对红黑树的扩张:

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

    14.3 区间树

    步骤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 设计新操作

    INTERVAL-SEARCH(T,i)
      x = T.root
      while x != T.nil and i does not overlap x. int
        if x. left != T.nil and x. left.max >=  i. low
          x = x. left
        else x = x.right
      return x

    定理14.2 INTERVAL-SEARCH(T,i)的任意一次执行,或者返回一个其区间与i重叠的结点,或者返回T.nil,此时树T中没有任何结点的区间与i重叠。

  • 相关阅读:
    excel unixtime与北京时间互转
    vim的漫漫长征路
    const常量
    第一章:绪论
    2.4奇偶校验
    2.3数据校验的基本原理
    2.2定点与浮点数据表示
    2.1机器数及其特点
    1.2计算机系统性能评价
    冯诺依曼结构原理及层次分析
  • 原文地址:https://www.cnblogs.com/justinh/p/6565735.html
Copyright © 2011-2022 走看看