在O(logn)中找到RBTREE中的算法

时间:2010-02-10 11:00:08

标签: algorithm binary-tree red-black-tree

我需要找到一个数据结构,我可以通过以下操作来完成:

  • 构建(S,k) - O(nlogn)
  • 搜索(S,k) - O(logn)
  • 插入(S,k) - O(logn)
  • 删除(S,k) - O(登录)
  • 降低 - 上升(s,k,d) - O(logn) - 该方法应该减去d(d> 0)每个节点<&lt; = k

显而易见的第一个选择是RedBlackTree。

但是,我不能在O(Logn)中找到关于Decrease-Upto的解决方案。 如果k大于树中的最大密钥会发生什么 - 这种情况我必须更新整个树。

有人可以建议吗?也许有些提示?

1 个答案:

答案 0 :(得分:4)

您可以在树的每个节点中存储一个额外的值,我们称之为delta。您将节点的增量添加到存储在其所有后代中的键以获取实际键。因此,要获取特定节点中密钥的实际值,请将从根到该节点的所有增量求和,并将此总和添加到存储的密钥中。

要执行Decrease-Upto,只需在根路径上更改O(log n)节点的增量。

在此操作之后,您不必更改树的结构,因为它不会更改键的顺序。