我需要建議一個算法,採取BST(二進制搜索樹),T1
有2^(n + 1) - 1
鍵,並建立一個具有相同鍵的AVL樹。該算法應該在最差和平均時間複雜度方面有效(作爲n
的函數)。建立AVL樹的二進制搜索樹
我不知道我該如何解決這個問題。很明顯,具有2^(n + 1) - 1
密鑰的BST的最小尺寸是n
(並且如果它是完整/平衡的,情況就是這樣),但它對我有什麼幫助?
存在被每次加的T1
根部到AVL樹,然後從T1
除去它遍歷樹,所述直線前進方法:
- 由於
T1
可能會失去平衡的刪除可在最壞的情況下花費爲O(n) - 插入到AVL將花費O(log n)的
- 有
2^(n + 1) - 1
因此,總共花費O(n*logn*2^n)
,這是可笑的昂貴。
但是我爲什麼要從T1
中刪除?我在那裏付了很多錢,沒有什麼好的理由。 所以我想,爲什麼不使用樹遍歷了T1
,併爲每個節點,我拜訪,把它添加到AVL樹:
- 有
2^(n + 1) - 1
節點,以便穿越將耗資O(2^n)
(訪問每個節點一次) - 將當前節點每次去AVL將耗資
O(logn)
因此,在總,這將花費O(logn * 2^n)
。 這是我能想到的最好的時間複雜性,問題是,它能以更快的速度完成嗎?像在O(2^n)
? 某種方式,將插入到AVL樹只需要O(1)?
我希望我很清楚,我的問題屬於這裏。
非常感謝你,
諾姆
非常感謝你的男人 – Noam
@Noam沒問題,如果你找到了答案有幫助那麼請不要忘記將其標記爲已接受。祝你好運! –
會做。你也可以給我的問題+1,如果它是清楚和有用的。 – Noam