Recursion 的複雜度分析
分析步驟:
- 找出遞迴演算法的
遞迴方程式 T(n)
來表達該演算法的執行次數 - 解這個遞迴方程式來求出該演算法的
時間複雜度
例子
Factorial
Fibonacci
如何解遞迴方程式
通常在討論遞迴演算法時,我們常會一起將這些演算法的遞迴方程式列出。因此,本篇假設遞迴方程式已給定,主要議題則設定在如何解遞迴方程式
- 遞迴方程式的解法與使用時機:
下面來深入探討個別解法
數學解法
直接將遞迴方程式以遞迴的觀念由最末項
往前求解,然後整理出答案
範例 1
範例 2
遞迴樹法
- 適用於母問題由
多個子問題
所構成 - 使用一個
樹狀結構
表示遞迴演算法則在執行過程被遞迴呼叫的情況,這個樹狀結構稱為遞迴樹。其中:Node
: 存放遞迴關係式所相對應之子問題的 CostDegree
: 子問題的數目
- 遞迴樹法的三個步驟:
- 按照遞迴方程式展開
- 對每一層的所有子問題之 cost 加總,得到
每一層之 cost
- 加總每一層的 cost,以得到
total cost
,即為答案
- 通常只能求出 Big-O 或 Ω,若要計算 θ 得用“夾擠"法
範例 1
範例2
支配理論方法
- 當遞迴方程式具有
某種特定型式
時適用 - 【精神】讓 f(n) 和 \(n^{log_ba}\) 比大小
範例 1
範例 2
替代法
- 適用於
檢驗
某個候選解答是否為此遞迴演算法的正確解,而不適用於求遞迴方程式的解答 - 使用步驟:
- 利用猜測、觀察或匯整的方式,找出遞迴方程式的解(很麻煩)
- 利用
數學歸納法
証明此解是正確的
- 由於利用此方法求解遞迴方程式,最難的地方就是如何去猜出、觀察出或匯整出遞迴方程式的解。所以一般只適合當已有候選解時,用來驗証該解是否正確,也就是為了避開第一個步驟。