【发布时间】:2015-05-15 19:07:47
【问题描述】:
根据 Ron Wein 的说法,您能够在 O(log(n)) 时间内完成红黑树的拆分和连接。见他的文章:Efficient Implementation of Red-Black Trees with Split and Catenate Operations
但是我仍然不相信 split 的运行时间是真的。
这个想法是 split 使用最坏情况的 log(n) 连接。这些连接完成得很快,因为我们可以通过记住上次连接的 p 来找到节点 p。
问题在于连接启动了修复(平衡)算法,据我所知,该算法需要 O(log n)(请参阅连接伪代码中的步骤 5)。 这给了我一个 log(n)*log(n) 的运行时间,因为拆分会产生最坏情况下的 log(n) 连接。
Ron Wein 在他的论证中没有考虑修复算法。我在分析中遗漏了什么,还是算法有误?
【问题讨论】:
-
可能是一个摊销论点,暗示并非每个修复都真的很昂贵
-
一个好主意,但事实就是如此,最终结果至少是摊销时间,但事实并非如此。所以不要以为是这样。不过谢谢你的回答
-
我不是这个意思。如果您可以将修复的总工作限制在 拆分操作中(例如通过摊销),那么您将得到拆分的适当最坏情况。
-
"但是,当我们沿着树向下走时,我们可以很容易地同时沿着 T1 的最右边的路径和 T2 的最左边的路径,并找到与 κ 具有相同黑色高度的节点。因此,每个连接操作以恒定摊销时间进行,整个过程的总运行时间为O(C log n)。"
-
是的,作者认为在给定的情况下可以在恒定的摊销时间内完成连接。完整的论点在参考 Tar83a 中。
标签: algorithm split concatenation binary-search-tree red-black-tree