【问题标题】:Dynamic sets using RB trees使用 RB 树的动态集
【发布时间】:2021-05-30 01:10:12
【问题描述】:

假设我们有一个动态的整数集合 S 和一个索引 i,我们希望找到 S 中按升序写入的第 i 个最小的负数,如果有的话。 例子: S= {-5, -2, -1, 2, 5} 对于 i=3,naswer 是 -1,对于 i = 4 是未定义的。 目标是选择红黑树作为底层数据结构,并定义一个附加属性,允许在 O(lg n) 时间内解决问题。应该使用任何有关算法的指南来解决这样的问题吗?

【问题讨论】:

标签: algorithm data-structures set red-black-tree


【解决方案1】:

称为订单统计树 (https://en.wikipedia.org/wiki/Order_statistic_tree)。

一般来说,您使用一个额外的属性来扩展您的树节点,即子树的大小。对于叶子,它是 1,对于内部节点,它是

size(left_subtree) + size(right_subtree) + 1

Wiki 有清晰的解释和伪代码。它适用于任何类型的平衡树(RB/AVl/Treap/etc),您需要在旋转(或任何树修改)期间支持子树的大小。

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 2012-06-13
    • 2020-06-21
    • 2010-12-08
    • 2012-12-16
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多