algorithm - 加入两棵红黑树的最佳方式

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

最简单的方法是将两棵树存储在两个数组中,将它们合并并构建一个新的红黑树,该树的排序数组需要 O(m + n) 次。

有没有时间复杂度更小的算法?

最佳答案

您可以在 O(m log(n/m + 1)) 时间内合并两棵红黑树,其中 n 和 m 是输入大小,WLOG,m ≤ n。请注意,此界限比 O(m+n) 更严格。这是一些直觉:

  • 当两棵树的大小相似时 (m ≈ n),边界大约为 O(m) = O(n) = O(n + m)。
  • 当一棵树明显大于另一棵时 (m ≪ n),边界大约为 O(log n)。

您可以找到算法的简要说明 here .可以在 recent paper 中找到更深入的描述,该描述可以推广到其他平衡方案(AVL、BB[α]、Treap 等)。 .

关于algorithm - 加入两棵红黑树的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43697546/

相关文章:

algorithm - 我应该使用什么编程语言、算法来进行字典翻译?

java - SwingWorker要更新TreeModel吗?

java - 显示树中每片叶子的完整路径

algorithm - 我不明白 sigma 符号和 for 循环

algorithm - 交叉点 : Strassen's Algorithm

c++ - vector push_back 的空间复杂度

string - 使用长公共(public)前缀进行更快的字符串排序?

c++ - 在类中使用 tostring。 C++

java - 在 ZooKeeper 中,有没有办法不用自己实现分布式锁,原子地编写层次结构?

algorithm - 具有最大最小元素的固定长度连续子序列