如何将两个展开树与log(n)的摊余成本合并?
答案 0 :(得分:0)
我假设您要合并的展开树每个都包含n
个对象。 (即总共有2n
个对象)。然后我认为不可能将它们与摊销的log(n)
费用合并,除非你强加一些进一步的假设。如果您没有关于树中包含的对象的任何信息,则必须至少查看两棵树之一的每个元素,因此成本为O(n)
。
但是,如果您可以对对象做出某些假设,则可以在O(log(n))
中执行此操作。您可以提取某些子树,以便将整个子树插入到另一个splay树中。但是,我不知道如何获得O(log(n))
的精确算法。例如,如果我们知道Tree1
中的最大对象小于Tree2
中的最小对象,那么我们可能只是展开Tree2
的最左边节点,然后我们挂起根Tree1
的新根目录下的Tree2
。