標籤:
1.概念
紅/黑樹狀結構是一種自平衡二叉尋找樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。它是在1972年由魯道夫·貝爾發明的,他稱之為"對稱二叉B樹",它現代的名字是在 Leo J. Guibas 和 Robert Sedgewick 於1978年寫的一篇論文中獲得的。它是複雜的,但它的操作有著良好的最壞情況已耗用時間,並且在實踐中是高效的: 它可以在O(log )時間內做尋找,插入和刪除,這裡的是樹中元素的數目。
它的統計效能要好於平衡二叉樹(有些書籍根據作者姓名,Adelson-Velskii和Landis,將其稱為AVL-樹),因此,紅/黑樹狀結構在很多地方都有應用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)應用了紅/黑樹狀結構的變體(SGI STL中的紅/黑樹狀結構有一些變化,這些修改提供了更好的效能,以及對set操作的支援)。其他平衡樹還有:AVL,SBT,伸展樹,TREAP 等等。
2.性質
紅/黑樹狀結構是每個節點都帶有顏色屬性的二叉尋找樹,顏色或紅色或黑色。在二叉尋找樹強制一般要求以外,對於任何有效紅/黑樹狀結構我們增加了如下的其他需求:
性質1. 節點是紅色或黑色。
性質2. 根節點是黑色。
性質3 每個分葉節點是黑色的。
性質4 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
性質5. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
這些約束強制了紅/黑樹狀結構的關鍵性質: 從根到葉子的最長的可能路徑不多於最短的可能路徑的兩倍長。結果是這個樹大致上是平衡的。因為操作比如插入、刪除和尋找某個值的最壞情況時間都要求與樹的高度成比例,這個在高度上的理論上限允許紅/黑樹狀結構在最壞情況下都是高效的,而不同於普通的二叉尋找樹。
要知道為什麼這些特性確保了這個結果,注意到性質4導致了路徑不能有兩個毗連的紅色節點就足夠了。最短的可能路徑都是黑色節點,最長的可能路徑有交替的紅色和黑色節點。因為根據性質5所有最長的路徑都有相同數目的黑色節點,這就表明了沒有路徑能多於任何其他路徑的兩倍長。
紅/黑樹狀結構