1. 程式人生 > >算法分析基礎——遞歸樹求解遞推方程

算法分析基礎——遞歸樹求解遞推方程

方法 display gin 標記 nlog eight 遞歸樹 估算 inf

從求解快速排序算法遞推方程的過程中,我們可以看到,遞推方程不能求出精確的解。即便如此,如果可以用某種方法估算出函數的階,那麽這對於算法分析的工作依然具有意義。本文即介紹了這樣一種估算方法,稱為遞歸樹

遞歸樹是一棵結點帶權的二叉樹。它是叠代計算的一種模型,也是其圖形表示。其生成過程與叠代過程是一致的,且樹上所有項恰好是叠代之後產生的和式的項。因此,對遞歸樹上的項求和就是叠代後方程的解。運用遞歸樹來估算遞推方程的解,可以使求解過程簡潔、清晰。下面我們來具體了解遞歸樹的生成規則,並通過幾項例子理解遞歸樹的運用。

一、遞歸樹的生成


遞歸樹的生成規則如下:

  1. 初始時,只有根節點,權標記為W(n)
  2. 不斷進行如下叠代:將函數項葉結點的叠代式W(m)表示成二層子樹(如圖1),用該子樹替換葉結點。
  3. 繼續遞歸樹的生成,直到樹中沒有函數項(樹葉都變為W(1))為止。

技術分享圖片

從遞歸樹的生成過程不難看出,整個叠代過程中,遞歸樹中全部結點的權之和不變,總是等於W(n)。為計算最終所有結點權值之和,可以采用分層計算的方法。

二、遞歸樹的計算


例 求解遞推方程T(n) = T(n/3) + T(2n/3) + n

在這項例子中,方程右部的兩項不一樣,無法合並。使用叠代法歸納求解不是很方便,而用遞歸樹的方法則更加直觀。

首先生成遞歸樹如圖2所示。

技術分享圖片

設樹的層數為k,則n * (2 / 3)k = 1,解得k = log3/2

n。另一方面,每層結點的數值之和都是O(n),因此T(n) = O(nlog3/2n) = O(nlogn)。

算法分析基礎——遞歸樹求解遞推方程