爲何紅黑樹的效率比較高

紅黑樹屬於平衡二叉樹。它不嚴格是由於它不是嚴格控制左、右子樹高度或節點數之差小於等於1,但紅黑樹高度依然是平均log(n),且最壞狀況高度不會超過2log(n)。數據結構

紅黑樹(red-black tree) 是一棵知足下述性質的二叉查找樹:指針

1. 每個結點要麼是紅色,要麼是黑色。數學

2. 根結點是黑色的。二叉樹

3. 全部葉子結點都是黑色的(實際上都是Null指針,下圖用NIL表示)。葉子結點不包含任何關鍵字信息,全部查詢關鍵字都在非終結點上。搜索

4. 每一個紅色結點的兩個子節點必須是黑色的。換句話說:從每一個葉子到根的全部路徑上不能有兩個連續的紅色結點數據

5. 從任一結點到其每一個葉子的全部路徑都包含相同數目的黑色結點查詢

 

紅黑樹相關定理紅黑樹

1. 從根到葉子的最長的可能路徑很少於最短的可能路徑的兩倍長。語言

      根據上面的性質5咱們知道上圖的紅黑樹每條路徑上都是3個黑結點。所以最短路徑長度爲2(沒有紅結點的路徑)。再根據性質4(兩個紅結點不能相連)和性質1,2(葉子和根必須是黑結點)。那麼咱們能夠得出:一條具備3個黑結點的路徑上最多隻能有2個紅結點(紅黑間隔存在)。也就是說黑深度爲2(根結點也是黑色)的紅黑樹最長路徑爲4,最短路徑爲2。從這一點咱們能夠看出紅黑樹是 大體平衡的。 (固然比平衡二叉樹要差一些,AVL的平衡因子最多爲1)時間

 

2. 紅黑樹的樹高(h)不大於兩倍的紅黑樹的黑深度(bd),即h<=2bd

      根據定理1,咱們不難說明這一點。bd是紅黑樹的最短路徑長度。而可能的最長路徑長度(樹高的最大值)就是紅黑相間的路徑,等於2bd。所以h<=2bd。

 

3. 一棵擁有n個內部結點(不包括葉子結點)的紅黑樹的樹高h<=2log(n+1)

      下面咱們首先證實一顆有n個內部結點的紅黑樹知足n>=2^bd-1。這能夠用數學概括法證實,施概括於樹高h。當h=0時,這至關因而一個葉結點,黑高度bd爲0,而內部結點數量n爲0,此時0>=2^0-1成立。假設樹高h<=t時,n>=2^bd-1成立,咱們記一顆樹高 爲t+1的紅黑樹的根結點的左子樹的內部結點數量爲nl,右子樹的內部結點數量爲nr,記這兩顆子樹的黑高度爲bd'(注意這兩顆子樹的黑高度必然一 樣),顯然這兩顆子樹的樹高<=t,因而有nl>=2^bd'-1以及nr>=2^bd'-1,將這兩個不等式相加有nl+nr>=2^(bd'+1)-2,將該不等式左右加1,獲得n>=2^(bd'+1)-1,很顯然bd'+1>=bd,因而前面的不等式能夠 變爲n>=2^bd-1,這樣就證實了一顆有n個內部結點的紅黑樹知足n>=2^bd-1。

        在根據定理2,h<=2bd。即n>=2^(h/2)-1,那麼h<=2log(n+1)

        從這裏咱們可以看出,紅黑樹的查找長度最多不超過2log(n+1),所以其查找時間複雜度也是O(log N)級別的。



紅黑樹的操做

 

由於每個紅黑樹也是一個特化的二叉查找樹,所以紅黑樹上的查找操做與普通二叉查找樹上的查找操做相同。然而,在紅黑樹上進行插入操做和刪除操做會致使不 再符合紅黑樹的性質。恢復紅黑樹的屬性須要少許(O(log n))的顏色變動(實際是很是快速的)和不超過三次樹旋轉(對於插入操做是兩次)。 雖然插入和刪除很複雜,但操做時間仍能夠保持爲 O(log n) 次 。

 

紅黑樹的優點

 

紅黑樹可以以O(log2(N))的時間複雜度進行搜索、插入、刪除操做。此外,任何不平衡都會在3次旋轉以內解決。這一點是AVL所不具有的。

並且實際應用中,不少語言都實現了紅黑樹的數據結構。好比 TreeMap, TreeSet(Java )、 STL(C++)等。

相關文章
相關標籤/搜索