簡體   English   中英

在AVL樹的二進制搜索樹

[英]Binary search tree over AVL tree

據我所知, AVL樹和二進制搜索樹之間的時間復雜度在平均情況下是相同的,在最壞的情況下AVL擊敗BST。 這給了我一個提示,即AVL總是優於BST以各種可能的方式與它們進行交互,在平衡實現方面可能會增加一些復雜性。

是否有任何理由首先應該使用BST而不是AVL?

首先,獲得最佳性能並不是編程的最終目標。 因此,即使選項B總是更快並且消耗的內存少於A,但這並不意味着它總是更好的選擇,如果它更復雜的話。 更復雜的代碼需要更長的時間來編寫,更難理解並且更可能包含錯誤。 因此,如果更簡單但效率更低的選項A對您來說足夠好,那么這意味着它是更好的選擇。

現在,如果你想在沒有平衡的情況下將AVL樹與簡單的二進制搜索樹(BST)進行比較,那么AVL將消耗更多的內存(每個節點必須記住它的平衡因子)並且每個操作都可以更慢(因為你需要保持平衡因素,有時進行輪換)。

如你所說,沒有平衡的BST有一個非常糟糕(線性)的最壞情況 但是如果你知道這種最壞的情況不會發生在你身上,或者如果在極少數情況下你的運作速度很慢,那么沒有平衡的BST可能比AVL更好。

由於檢查和更新平衡因子和旋轉節點會增加額外的開銷,因此與非平衡BST相比,AVL樹中的插入和刪除可能相當慢。

由於緊密的平衡,搜索永遠不會采取類似線性的時間,因此您可能希望在搜索比更新樹更頻繁的操作的情況下使用AVL樹。

我的假設是:當你提到BST時,你指的是沒有平衡的BST。

可以說,如果你需要一個可導航的數據結構,並且你知道你的數據不是最壞情況(排序)並且有點小,那么BST(沒有平衡)就足夠了。

但這很可能是罕見的情況。

AVL樹也是一個BST,但它可以重新平衡自己。 這種行為使得在最壞的情況下更快。 它保持自我重新平衡,因此在最壞的情況下,當普通BST將采用O(n)時,它將消耗O(log n)時間。 那么,你的問題的答案:實現AVL樹總是比普通的BST更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM