1. 程式人生 > >演算法導論-紅黑樹基本概念

演算法導論-紅黑樹基本概念

剛剛接觸到紅黑樹的時候,感覺很奇怪,二叉樹已經很好用了,為什麼要發明紅黑樹??看到演算法導論的目錄才明白,二叉樹在執行查詢,刪除操作的時候,時間複雜度為O(h),這時間複雜度與二叉樹的高度有關,如果二叉樹高度較小,自然很方便,但是如果遇到樹的高度較高時(所有的資料都在一根樹枝上),二叉樹和連結串列就差別不大了。所以發明了紅黑樹,紅黑樹是一種平衡搜尋樹,紅黑樹的高度最多為2lg(n+1),時間複雜度為O(h'),h'<2lg(n+1),所以紅黑樹相對於二叉樹而言效能更好。

首先說明紅黑樹的五大性質:

1.每個節點不是黑色就是紅色,非黑即紅。

2.根節點一定是黑色。

3.每個葉節點一定是黑色。

4.每個紅色節點的兩個子節點為黑色。

5.對於每個節點,該節點到所有後代葉節點的路徑上黑色節點的數目相同。

然後定義:紅黑樹的節點的黑高指得是節點x某支路上黑色節點的數目(不包括節點x,但是包括葉節點(NIL))。

引理:一棵具有n個節點的紅黑樹,其樹高至多為2lg(n+1)

證明:

方法1(數學歸納法):

首先我們要證明節點x的紅黑樹具有2^bh(x)-1個內部節點(bh(x)表示節點x的黑高)

1.當具有節點x的紅黑樹的樹高為0時,黑高也為0,則內部節點為0,符合上述公式。

2.假設當節點x的紅黑樹高度不為0時,不妨設黑高為bh(x),則其子節點的黑高為bh(x)或bh(x)-1,假設其子節點滿足上述式子,則有

其子節點至少有2^(bh(x)-1)-1個內部節點,則節點x的內部節點可得2^(bh(x)-1)-1+2^(bh(x)-1)-1+1=2^bh(x)-1,結果與上述結論相同,故命題得證。

由紅黑樹的性質4可知,黑色節點一定比紅色節點多,則樹高h<=2bh(x),則有n>2^(h/2)-1,化簡可得h<=2lg(n+1)。

方法2:

                                                     

假設紅黑樹如上圖所示,現將紅色節點與其黑色的父節點合併,合併後的紅黑樹圖如下圖所示:

                                                

這是一顆2-3-4樹,這棵樹的高度等於黑高bh(x),每個節點最少包含兩個最多包含四個節點,則該樹內部節點數目2^(bh(x))-1<n<4^(bh(x))-1,得到了證明一同樣的結論,同理可知h<2bh(x),同上可知h<2lg.(n+1)。