紅黑樹與AVL(平衡二叉樹)的區別


關於紅黑樹和AVL樹,來自網絡:

1 好處 及 用途

        紅黑樹 並不追求“完全平衡 ”——它只要求部分地達到平衡要求,降低了對旋轉的要求,從而提高了性能。

紅黑樹能夠以 O(log2  n)  的時間復雜度進行搜索、插入、刪除操作。此外,由於它的設計,任何不平衡都會在三次旋轉之內解決。當然,還有一些更好的,但實現起來更復雜的數據結構 能夠做到一步旋轉之內達到平衡,但紅黑樹能夠給我們一個比較“便宜”的解決方案。紅黑樹的算法時間復雜度和AVL相同,但統計性能比AVL樹更高。

 

        當然,紅黑樹並不適應所有應用樹的領域。如果數據基本上是靜態的,那么讓他們待在他們能夠插入,並且不影響平衡的地方會具有更好的性能。如果數據完全是靜態的,例如,做一個哈希表,性能可能會更好一些。

 

在實際的系統中,例如,需要使用動態規則的防火牆系統,使用紅黑樹而不是散列表被實踐證明具有更好的伸縮性。

典型的用途是實現關聯數組

 

 

 AVL樹是最先發明的自平衡二叉查 找樹。在AVL樹中任何節點的兩個兒子子樹的高度最大差別為一,所以它也被稱為高度平衡樹。查找、插入和刪除在平均和最壞情況下都是O(log n)。增加和刪除可能需要通過一次或多次樹旋轉來重新平衡這個樹。AVL樹得名於它的發明者 G.M. Adelson-Velsky 和 E.M. Landis,他們在 1962 年的論文 "An algorithm for the organization of information" 中發表了它。

 

引入二叉樹的目的是為了提高二叉樹的搜索的效率,減少樹的平均搜索長度.為此,就必須每向二叉樹插入一個結點時調整樹的結構,使得二叉樹搜索保持平衡,從而可能降低樹的高度,減少的平均樹的搜索長度. 

AVL樹的定義: 
一棵AVL樹滿足以下的條件: 
1>它的左子樹和右子樹都是AVL樹 
2>左子樹和右子樹的高度差不能超過1 
從條件1可能看出是個遞歸定義,如GNU一樣. 

性質: 
1>一棵n個結點的AVL樹的其高度保持在0(log2(n)),不會超過3/2log2(n+1) 
2>一棵n個結點的AVL樹的平均搜索長度保持在0(log2(n)). 
3>一棵n個結點的AVL樹刪除一個結點做平衡化旋轉所需要的時間為0(log2(n)). 

從1這點來看 紅黑樹是犧牲了嚴格的高度平衡的優越條件 為 代價紅黑樹能夠以O(log2 n)的時間復雜度進行搜索、插入、刪除操作。此外,由於它的設計,任何不平衡都會在三次旋轉之內解決。當然,還有一些更好的,但實現起來更復雜的數據結構 能夠做到一步旋轉之內達到平衡,但紅黑樹能夠給我們一個比較“便宜”的解決方案。紅黑樹的算法時間復雜度和AVL相同,但統計性能比AVL樹更高.


免責聲明!

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



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