【问题标题】:Red Black Trees Rebalancing红黑树再平衡
【发布时间】:2015-08-10 16:24:08
【问题描述】:

我想在我的树 -3、-2、-1、0、1、2 和 3 中插入​​ 7 个项目。当我按以下顺序插入时,我得到一个高度为 3 且不进行旋转的平衡树:0, -2, 2, -1, 1, -3, 3。但是当我按升序插入所有项目时,根节点的右侧部分会重新平衡,但根节点的左侧部分不会。我见过的所有重新平衡算法都是从插入的节点到根节点进行重新平衡,然后它们停止。他们不应该继续到根节点的另一部分吗?而且我感觉如果我按升序(如 0 到 100)插入大量项目,情况会变得更糟。最后,树是平衡的,但高度没有优化。

【问题讨论】:

    标签: algorithm red-black-tree


    【解决方案1】:

    平衡二叉搜索树(R/B 树、AVL 树等)都不能提供绝对平衡,也就是说,它们都不能提供最小的可能高度。这是因为不可能快速进行如此“完全”的再平衡。如果我们希望始终保持尽可能低的高度,则通常需要对树操作进行大量重新平衡,因此重新平衡在O(log N) 中不起作用。结果,所有的操作(插入、更新、删除等)在O(log N)时间也不会起作用,这将破坏平衡树的整个思想。

    平衡树保证的是对树高的不那么严格的要求:树高是O(log N),对于一些常数C,即C*log N。所以树不能保证是理想平衡的,但平衡总会离理想不远。

    【讨论】:

    • 我按升序添加了 1000 个项目,最终得到了 16 的高度!即使树不是 100% 平衡,看起来也不错。
    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 2019-09-07
    • 2018-06-30
    • 2015-07-21
    • 2016-03-30
    • 2021-12-13
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多