2012-01-19 31 views
1

是否存在一個算法,該算法對於給定的2-3 tree T和指向該樹中某個節點v的指針,算法可以更改節點v的密鑰,因此T將保持合法的2- 3樹,O(logn/loglogn)攤銷效率?在2-3 BST樹中查找算法

回答

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每次激活後的樹是合法的。在T的所有元素和A的所有元素上完成激活f後,該樹是合法的幷包含所有元素。因此,從A中提取元素,我們返回排序後的數組。

複雜:
(1)創建一棵樹[並不重要,我們把它鍵]是O(n)我們可以把0中的所有元素,不要緊
(2)迭代T和創建BO(n)
(3)活化fO(logn/loglogn),從而調用它n倍是O(n*logn/loglogn)
(4)提取的元素僅僅是一個遍歷:O(n)
因此:總的複雜性是O(n*logn/loglogn)

但排序是基於比較的算法Omega(nlogn)問題。矛盾。
結論:想要的f不存在。

+0

更強大的結果是,你不能以比Omega更快的速度進行更新(log n),因爲出於同樣的原因,你將能夠打破Omega(n log n)排序障礙。 – templatetypedef