1. 程式人生 > >紅黑樹複雜度的數學證明

紅黑樹複雜度的數學證明

紅黑樹的時間複雜度為: O(lgn)
下面通過“數學歸納法”對紅黑樹的時間複雜度進行證明。

定理:一棵含有n個節點的紅黑樹的高度至多為2log(n+1).

證明:
    "一棵含有n個節點的紅黑樹的高度至多為2log(n+1)" 的逆否命題是 "高度為h的紅黑樹,它的包含的內節點個數至少為 2h/2-1個"。
    我們只需要證明逆否命題,即可證明原命題為真;即只需證明 "高度為h的紅黑樹,它的包含的內節點個數至少為 2h/2-1個"。

    從某個節點x出發(不包括該節點)到達一個葉節點的任意一條路徑上,黑色節點的個數稱為該節點的黑高度(x's black height),記為bh(x)。關於bh(x)有兩點需要說明: 
    第1點:根據紅黑樹的"特性(5)

,即從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點"可知,從節點x出發到達的所有的葉節點具有相同數目的黑節點。這也就意味著,bh(x)的值是唯一的
    第2點:根據紅黑色的"特性(4),即如果一個節點是紅色的,則它的子節點必須是黑色的"可知,從節點x出發達到葉節點"所經歷的黑節點數目">= "所經歷的紅節點的數目"。假設x是根節點,則可以得出結論"bh(x) >= h/2"。進而,我們只需證明 "高度為h的紅黑樹,它的包含的黑節點個數至少為 2bh(x)-1個"即可。

    到這裡,我們將需要證明的定理已經由
"一棵含有n個節點的紅黑樹的高度至多為2log(n+1)"


    轉變成只需要證明
"高度為h的紅黑樹,它的包含的內節點個數至少為 2bh(x)-1個"。


下面通過"數學歸納法"開始論證高度為h的紅黑樹,它的包含的內節點個數至少為 2bh(x)-1個"。

(01) 當樹的高度h=0時,
    內節點個數是0,bh(x) 為0,2bh(x)-1 也為 0。顯然,原命題成立。

(02) 當h>0,且樹的高度為 h-1 時,它包含的節點個數至少為 2bh(x)-1-1。這個是根據(01)推斷出來的!

    下面,由樹的高度為 h-1 的已知條件推出“樹的高度為 h 時,它所包含的節點樹為 2bh(x)-1”。

    當樹的高度為 h 時,
    對於節點x(x為根節點),其黑高度為bh(x)。


    對於節點x的左右子樹,它們黑高度為 bh(x) 或者 bh(x)-1。
    根據(02)的已知條件,我們已知 "x的左右子樹,即高度為 h-1 的節點,它包含的節點至少為 2bh(x)-1-1 個";

    所以,節點x所包含的節點至少為 ( 2bh(x)-1-1 ) + ( 2bh(x)-1-1 ) + 1 = 2^bh(x)-1。即節點x所包含的節點至少為 2bh(x)-1。
    因此,原命題成立。

    由(01)、(02)得出,"高度為h的紅黑樹,它的包含的內節點個數至少為 2^bh(x)-1個"。
    因此,“一棵含有n個節點的紅黑樹的高度至多為2log(n+1)”。