微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 RB 树的动态集

如何解决使用 RB 树的动态集

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

解决方法

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

通常,您可以使用额外的属性(子树的大小)扩展树节点。对于叶子,它是 1,对于内部节点,它是

size(left_subtree) + size(right_subtree) + 1

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。