是否存在具有给定2-3 tree T的算法和指向所述树中某个节点v的指针,算法可以更改节点v的密钥,因此T将保持合法的2-3树, O(logn / loglogn)摊销效率?
答案 0 :(得分:2)
没有。
假设有可能,使用算法f,我们将展示我们可以对O(n*logn/loglogn)
时间复杂度的数组进行排序。
sort array A of length n:
(1) Create an 2-3 tree of size n, with no importance to keys. let it be T.
(2) store all pointers to nodes in T in a second array B.
(3) for each i from 0 to n:
(3.1) f(B[i],A[i]) //modify the tree: pointer: B[i] new value: A[i]
(4) extract elements from T back to A inorder.
<强>正确性:强>
每次激活f
后,树都是合法的。完成对f
的所有元素和T
的所有元素的激活A
后,该树是合法的并包含所有元素。因此,从A中提取元素,我们返回已排序的数组。
<强>复杂性:强>
(1)创建一个树[不重要我们放置哪些键] O(n)
我们可以将0
放在所有元素中,这没关系
(2)迭代T
并创建B
为O(n)
(3)激活f
为O(logn/loglogn)
,因此调用它n
次为O(n*logn/loglogn)
(4)提取元素只是一个遍历:O(n)
因此:总复杂度为O(n*logn/loglogn)
但排序是基于比较算法的Omega(nlogn)
问题。矛盾。
结论:期望的f
不存在。