1. 程式人生 > 實用技巧 >python--資料結構--紅黑樹

python--資料結構--紅黑樹

1. 紅黑樹

此處只講了插入操作,未講刪除操作
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

2. 紅黑樹與平衡二叉樹的區別

RB-Tree和AVL樹作為BBST,其實現的演算法時間複雜度相同,AVL作為最先提出的BBST,貌似RB-tree實現的功能都可以用AVL樹是代替,那麼為什麼還需要引入RB-Tree呢?

1、紅黑樹不追求"完全平衡",即不像AVL那樣要求節點的 |balFact| <= 1,它只要求部分達到平衡,但是提出了為節點增加顏色,紅黑是用非嚴格的平衡來換取增刪節點時候旋轉次數的降低,任何不平衡都會在三次旋轉之內解決,而AVL是嚴格平衡樹,因此在增加或者刪除節點的時候,根據不同情況,旋轉的次數比紅黑樹要多。

2、就插入節點導致樹失衡的情況,AVL和RB-Tree都是最多兩次樹旋轉來實現復衡rebalance,旋轉的量級是O(1)

3、刪除節點導致失衡,AVL需要維護從被刪除節點到根節點root這條路徑上所有節點的平衡,旋轉的量級為O(logN),而RB-Tree最多隻需要旋轉3次實現復衡,只需O(1),所以說RB-Tree刪除節點的rebalance的效率更高,開銷更小!

4、AVL的結構相較於RB-Tree更為平衡,插入和刪除引起失衡,如2所述,RB-Tree復衡效率更高;當然,由於AVL高度平衡,因此AVL的Search效率更高啦。
針對插入和刪除節點導致失衡後的rebalance操作,紅黑樹能夠提供一個比較"便宜"的解決方案,降低開銷,是對search,insert ,以及delete效率的折衷,總體來說,RB-Tree的統計效能高於AVL.

5、故引入RB-Tree是功能、效能、空間開銷的折中結果。

  • (1) AVL更平衡,結構上更加直觀,時間效能針對讀取而言更高;維護稍慢,空間開銷較大。
  • (2) 紅黑樹,讀取略遜於AVL,維護強於AVL,空間開銷與AVL類似,內容極多時略優於AVL,維護優於AVL。
  • (3) 基本上主要的幾種平衡樹看來,紅黑樹有著良好的穩定性和完整的功能,效能表現也很不錯,綜合實力強,在諸如STL的場景中需要穩定表現。

紅黑樹的查詢效能略微遜色於AVL樹,因為其比AVL樹會稍微不平衡最多一層,也就是說紅黑樹的查詢效能只比相同內容的AVL樹最多多一次比較,但是,紅黑樹在插入和刪除上優於AVL樹,AVL樹每次插入刪除會進行大量的平衡度計算,而紅黑樹為了維持紅黑性質所做的紅黑變換和旋轉的開銷,相較於AVL樹為了維持平衡的開銷要小得多

總結:實際應用中,若搜尋的次數遠遠大於插入和刪除,那麼選擇AVL,如果搜尋,插入刪除次數幾乎差不多,應該選擇RB。


[學習視訊和部落格]
P3 3-紅黑樹原理以及構建流程詳解
紅黑樹與平衡二叉樹的比較