平衡 树
此條 |
基本 操作 [编辑]
旋转(rotate):几乎
删除(delete):
查询
查询
查询
查询
各 种平衡树[编辑]
- AVL树:
是 最早 被 发明的 自 平衡 二叉查找树。在 AVL树中,任 一节点对应的两棵子树的最大高度差为1,因 此它也被称 为高度 平衡 树。查找、插入 和 删除在 平均 和 最 坏情况下的 时间复杂度 都 是 。增加 和 删除元素 的 操作 则可能 需要 借 由 一 次 或 多 次 树旋转,以实现树的 重 新 平衡 。AVL树得名 于它的 发明者 G. M. Adelson-Velsky和 Evgenii Landis,他 们在1962年 的 论文An algorithm for the organization of information中公 开了这一数 据 结构。 节点的 平衡 因子 是 它的左 子 树的高度 减去它的右子 树的高度 (有 时相反 )。带有平衡 因子 1、0或 -1的 节点被 认为是 平衡 的 。带有平衡 因子 -2或 2的 节点被 认为是 不 平衡 的 ,并需要 重 新平 衡这个树。平衡 因子 可 以直接 存 储在每 个节点 中 ,或 从可能 存 储在节点中 的 子 树高度 计算出来 。 - 树堆(Treap):
是 有 一个随机附加域满足堆 的 性 质的二 叉 搜索 树,其结构相当 于以随 机 数 据 插入 的 二 叉 搜索 树。其基本 操作 的 期 望 时间复杂度 为。相 对于其他的 平衡 二 叉 搜索 树,Treap的 特 点 是 实现简单,且能基本 实现随 机 平衡 的 结构。 伸展 树(Splay tree):能 在 均 摊的 时间内 完成 基 于伸展 (Splay)操作 的 插入 、查找、修 改 和 删除操作 。它是由 丹 尼 尔·斯立特 (Daniel Sleator)和 罗伯特 ·塔 扬在 1985年 发明的 。在 伸展 树上的 一般操作都基于伸展操作:假 设想要 对一个二叉查找树执行一系列的查找操作,为了使 整 个查找时间更小 ,被 查频率 高 的 那 些条目 就应当 经常处于靠 近 树根的 位置 。于是想到 设计一 个简单方法 ,在 每次 查找之 后 对树进行调整,把 被 查找的 条目 搬移到 离树根 近 一 些的地方 。伸展 树应运而生 。伸展 树是一种自调整形式的二叉查找树,它会沿着从某个节点 到 树根之 间的路 径 ,通 过一系列的旋转把这个节点搬移到树根去。 它的优势在 于不需要 记录用 于平衡树的 冗余信 息 。- 红黑树 (Red–black tree):
在 1972年 由 鲁道夫 ·贝尔发明,被 称 为"对称二 叉 B树",它现代 的 名字 源 于Leo J. Guibas和 Robert Sedgewick于1978年 写 的 一 篇 论文。红黑树的结构复杂,但 它的操作 有 着 良好 的 最 坏情况运行时间,并且在 实践中高 效 :它可以在时间内 完成 查找,插入 和 删除,这里的 n是 树中元素 的 数 目 。 加 权平衡树(Weight balanced tree):加 权平衡树的 每 个结点 储存这个结点下 子 树的大小 ,可 以用来 实现顺序统计树操作 。优势在 于占用 空 间相对较小 。- 2-3树:其内
部 节点(存在 子 节点的 节点)要 么有2个孩子 和 1个数据 元素 ,要 么有3个孩子 和 2个数据 元素 ,叶 子 节点没 有 孩子,并且有 1个或2个数据 元素 。2–3树和AA树是 等 距同构的 ,换句话说,对于每 个2–3树,都 至 少 有 1个AA树和它的元素 排列 是 相 同 的 。 - AA树:AA树是红黑树
的 一 种变种,是 Arne Andersson教授 在 1993年 年 在 他 的 论文"Balanced search trees made simple"中 介 绍,设计的 目的 是 减少红黑树考 虑的不 同情 况,区 别于红黑树的是 ,AA树的红节点 只 能 作 为右叶 子 ,从而大 大 简化了 维护2-3树的 模 拟。 替 罪 羊 樹 :其平衡基于部分 重 建 ,在 非 平衡 的 二 叉 搜索 树中 ,每次 操作 以后检查操作 路 径 ,找到最高 的 满足左右 子 树大小 大 于平衡 因子 (alpha)乘 以自身 大小 的 结点,重 建 整 个子树。这样就得到 了 替 罪 羊 树,而被重 建 的 子 树的原 来 的 根 就被称 为替罪 羊 节点。
其他类型[编辑]
应用[编辑]
参考 文献 [编辑]
- ^ 1.0 1.1 Donald Knuth. The Art of Computer Programming, Volume 3: Sorting and Searching, Second Edition. Addison-Wesley, 1998. ISBN 0-201-89685-0. Section 6.2.3: Balanced Trees, pp.458–481.
外部 链接[编辑]
- Dictionary of Algorithms and Data Structures: Height-balanced binary search tree (页面
存 档备份,存 于互联网档案 馆) - GNU libavl (页面
存 档备份,存 于互联网档案 馆), a LGPL-licensed library of binary tree implementations in C, with documentation
|
|