遞歸樹
遞歸樹的結點有兩個域,如下圖:
T(size)指問題大小爲size時,函數的複雜度。nonrec.cost指問題大小爲size時的非遞歸代價。
根結點的每個子結點都代表了這個問題分拆的一個子問題的複雜度。就這樣遞歸地分解問題。一直到達葉子結點,也就是base-case.在前面的討論中,我們沒有涉及base-case,在使用遞歸樹分析複雜度時,我們假設base-case的複雜度爲1。
舉一個例子就可以很明白的說明如何構造遞歸樹。
Example1: 由遞歸方程T(n)=2T(n/2)+n構造遞歸樹
首先,構造根接點
它的子結點是
……,以此類推。所以,最後的遞歸樹爲:
遞歸樹規則:
根結點的複雜度=所有非葉結點的非遞歸複雜度+葉子結點的複雜度。
所以,在上面的例子中,每層的非遞歸複雜度爲n,而base-case出現在大約lgn層(n/2^d =1;d = lgn)。由於base-case的複雜度爲1,所以T(n)≈nlgn,即
遞歸樹是分析和計算遞歸方程的一個重要工具。它可以直觀地表示出遞歸函數的複雜度,並使人易於理解。