AVL樹、splay樹(伸展樹)和紅黑樹比較


AVL樹、splay樹(伸展樹)和紅黑樹比較

一、AVL樹:

優點:查找、插入和刪除,最壞復雜度均為O(logN)。實現操作簡單

    如過是隨機插入或者刪除,其理論上可以得到O(logN)的復雜度,但是實際情況大多不是隨機的。如果是隨機的,則AVL    樹能夠達到比RB樹更優的結果,因為AVL樹的高度更低。如果只進行插入和查找,則AVL樹是優於RB樹的,因為RB樹    更多的優勢還是在刪除動作上。

缺點:1)借助高度或平衡因子,為此需要改造元素結構,或額外封裝-->伸展樹可以避免

    2)實測復雜度與理論復雜度上有差距。插入、刪除后的旋轉成本不菲刪除操作后,最多旋轉O(logN)次,(Knuth證明,平 均最壞情況下概率為0.21次),若頻繁進行插入/刪除操作,得不償失。

   3)單詞動態調整后,全樹拓撲結構的變化量可達O(logN)次。-->紅黑樹為O(1)

二、伸展樹(splay tree)、

優點、1)無需記錄節點高度和平衡因子,編程實現簡單易行

    2)分攤復雜度為O(logN)

    3)局部性強,緩存命中率極高時,效率甚至可以更高。

 注:伸展樹是根據數據訪問的局部性而來的主要是:1)剛剛被訪問的節點,極有可能在不就之后再次被訪問到;2)將被訪問 的下一個節點,極有可能就處於不就之前被訪問過的某個節點的附近

缺點:1)仍不能保證單詞最壞情況的出現,不適用效率敏感的場合

    2)復雜度分析比較復雜

三、紅黑樹

優點:1)所有的插入、刪除、查找操作的復雜度都是O(logN)

    2)插入操作能夠在最多2次旋轉后達到平衡狀態,而刪除操作更是能夠在一次旋轉后達到平衡狀態。刪除操作有可能導致遞歸的雙黑修正,但是在旋轉之前,只是染色而樹的結構沒有任何實質性的改變,因此速度優於AVL樹。

3)紅黑樹可以保證在每次插入或刪除操作之后的重平衡過程中,全書拓撲結構的更新僅涉及常數個節點。盡管最壞情況下需對O(logN)個節點重染色,但就分攤意義而言,僅為O(1)個。

缺點:左右子樹高度相差比AVL樹大

 


總結

二叉查找樹:

任意一個節點所包含的鍵值,大於等於左孩子的鍵值,小於等於右孩子的鍵值。 
此外,無論是左旋還是右旋,若旋轉之前這棵樹是二叉查找樹,旋轉之后它一定還是二叉查找樹。

平衡樹(AVL樹):

AVL樹中任何節點的兩個子樹的高度最大差別為1,LL,RR,LR,RL旋轉算法。 
對於1百萬個節點的平衡樹,樹的高度為12-20之間,對於10億個節點的平衡樹,樹的高度為18-30之間。

伸展樹:

當某個節點被訪問時,伸展樹會通過旋轉使該節點成為樹根。

紅黑樹:

主要是用它來存儲有序的數據,它的時間復雜度是O(lgn)),效率非常之高.

AVL樹與紅黑樹比較:

AVL是嚴格平衡樹,因此在增加或者刪除節點的時候,根據不同情況,旋轉的次數比紅黑樹要多。(所以AVL樹插入和刪除時間會稍微多) 
紅黑樹是弱平衡的,用非嚴格的平衡來換取增刪節點時候旋轉次數的降低。 
兩者都屬於自平衡二叉樹,那么降低樹的深度自然會提高查找效率。 
兩者查找,插入,刪除的時間復雜度相同O(lgn)

時間復雜度比較

sequential search - 順序查找 
binary search - 二分查找 
BST - 二叉查找樹 
2-3 tree - 平衡樹 
red-black tree - 紅黑樹

這里寫圖片描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM