紅黑樹複雜度的數學證明
紅黑樹的時間複雜度為: 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)
第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)”。