红色黑色树中具有相同字符串的最大整数

时间:2015-04-30 19:22:18

标签: algorithm data-structures binary-search-tree red-black-tree

我有一组带有一组数字的树,其中每个数字都有2个相关的字符串:a和b。所以结构看起来像:

  

一个数-B

每个节点

我想获得树中的最大数量,其中a = b在O(log n)最坏情况下运行时间。

我的方法: 试过一棵红黑树。如果数字在右子树中,则其具有O(log n)。 但如果数字在左子树中,则为O(n)。

不能使用常规BST,因为在最坏的情况下,它有O(n)作为运行时。

2 个答案:

答案 0 :(得分:2)

对于每个子树,您可以在树的节点中存储最大可能值。

对于给定的树,可以从根读取所需的最大值。

在插入/删除/旋转期间,此属性可以在O(log n)时间内维护。

Cormen等人的算法导论(通常称为CLR书)中有一章叫做扩充数据结构。就此而言。

我建议你看看。相关定理是定理14.1,其中陈述

  

f成为增加Tn个节点的红黑树f的字段   假设只能使用计算节点x的{​​{1}}的内容   节点xleft(x)right(x)中的信息,包括f(left(x))和   f(right(x))。然后,我们可以在f的所有节点中维护T的值   在插入和删除过程中没有渐近地影响   O(log n)执行这些操作。

left(x)是x等的左子项。

对于您的情况,如果g(node)node.number定义为node.a == node.b,否则定义为-infinity

f(x)定义为max f(left(x)), f(right(x)), g(x)

答案 1 :(得分:1)

一种解决方案是保持两棵树;一个是a == b,另一个是!= b。对于大多数函数,您可能需要调用两个树,但这将最终成为相同的大O复杂度,因为2 * O(log n) - > O(log n)。