算法分析基礎——遞歸樹求解遞推方程
阿新 • • 發佈:2019-01-22
方法 display gin 標記 nlog eight 遞歸樹 估算 inf
n。另一方面,每層結點的數值之和都是O(n),因此T(n) = O(nlog3/2n) = O(nlogn)。
從求解快速排序算法遞推方程的過程中,我們可以看到,遞推方程不能求出精確的解。即便如此,如果可以用某種方法估算出函數的階,那麽這對於算法分析的工作依然具有意義。本文即介紹了這樣一種估算方法,稱為遞歸樹。
遞歸樹是一棵結點帶權的二叉樹。它是叠代計算的一種模型,也是其圖形表示。其生成過程與叠代過程是一致的,且樹上所有項恰好是叠代之後產生的和式的項。因此,對遞歸樹上的項求和就是叠代後方程的解。運用遞歸樹來估算遞推方程的解,可以使求解過程簡潔、清晰。下面我們來具體了解遞歸樹的生成規則,並通過幾項例子理解遞歸樹的運用。
一、遞歸樹的生成
遞歸樹的生成規則如下:
- 初始時,只有根節點,權標記為W(n)
- 不斷進行如下叠代:將函數項葉結點的叠代式W(m)表示成二層子樹(如圖1),用該子樹替換葉結點。
- 繼續遞歸樹的生成,直到樹中沒有函數項(樹葉都變為W(1))為止。
從遞歸樹的生成過程不難看出,整個叠代過程中,遞歸樹中全部結點的權之和不變,總是等於W(n)。為計算最終所有結點權值之和,可以采用分層計算的方法。
二、遞歸樹的計算
例 求解遞推方程T(n) = T(n/3) + T(2n/3) + n
在這項例子中,方程右部的兩項不一樣,無法合並。使用叠代法歸納求解不是很方便,而用遞歸樹的方法則更加直觀。
首先生成遞歸樹如圖2所示。
設樹的層數為k,則n * (2 / 3)k = 1,解得k = log3/2
算法分析基礎——遞歸樹求解遞推方程