1、代換法
1. 猜想結果
2. 用數學概括法驗證
3. 解出使解成立的常係數
☆ 錯誤的例子:
證實 n = O(1):
基準狀況 1 = O(1)
假設 n-1 = O(1)
則 n = (n-1)+1 = O(1)
錯誤!由於不能對大O符號進行概括,每一處的 O(1) 的常數是變化的。
若是對有限個 O(1) 加倍是沒問題的,但進行 n 次加倍就不對了,
此時常數是依賴於 n 變化的。
☆
例:T(n) = 4T(n/2) + n
基準狀況:T(1) = Θ(1)
①
能夠猜一種結果:如 T(n) = O(n
3
)
假設:當 k < n,存在 c > 0,使得 T(k) ≤ c·k
3
則 T(n) = 4T(n/2) + n ≤ 4c·(n/2)
3
+ n
= cn3/2 + n
= cn3 - (cn3/2 - n)
若 T(n) ≤ cn
3
,則 cn
3
/2-n ≥ 0
∵ n ≥ 1,可取 c ≥ 2,此時不等式成立
又 T(1) =
Θ(1) ≤ c·13 = c,任取 C
0 > 0,當 c > C0 時不等式成立
∴ T(n) = O(n3) (非緊界)
②
可由 輸入:n/2 -> n,n -> 2n,輸出 ×4 猜想得
T(n) = O(n
2
)
1°
嘗試假設:當 k < n,存在 c > 0,使得 T(k) ≤ c·k
2
則 T(n) = 4T(n/2) + n ≤ 4c·(n/2)
2
+ n
= cn2 + n
若 T(n) ≤ cn
2
,則有 n ≤ 0 與 n ≥ 1 矛盾
儘管結果正確,T(n) = cn
2
- (-n) = O(n
2
) - O(n) = O(n
2
),但不能完成概括
接下來思路:改進概括假設,上面的是同時假設了它沒有低階項。
2°
假設:當 k < n,存在 c1 > 0,c2 > 0,使得 T(k) ≤ c1k2 - c2k
則 T(n) = 4T(n/2) + n ≤ 4·[
c
1(n/2)
2
- c
2n/2
] + n
=
c
1
n
2
+ (1-2·
c
2
)·
n
=
c
1
n
2
-
c
2
n -
(
c
2
-1
)·
n
∴ 當
c
2
-1 ≥ 0,即
c
2
≥ 1 時,
T(n) ≤
c
1
n
2
-
c
2
n
當 n = 1,T(1) =
Θ(1) ≤
c
1
- c
2
,∴ 對任意
c
2
≥ 1,應有
c
1
≥
c
2
。
綜上,
T(n) = O(n
2
) 得證。
(
緊界
)
一樣可用代換法證實 當 0 ≤
c
2
≤1 ≤
c
1
時,T(n) =
Ω
(n
2
) 成立。因此
T(n) = Θ
(n
2
)
2、遞歸樹法
1.
構造遞歸樹
2. 算出全部節點的運行時間和
3. 得出遞歸式的解
注:爲更嚴謹,能夠用遞歸樹法得出答案後再用代換法驗證。固然一般來講沒必要如此。
例:T(n) = T(n/4) + T(n/2) +n2
∴ T(n) ≤ ( 1 + 5/16 + 25/256 + ... + 5k/16k + ... ) · n2
< 2n2 = O(n2)
同時可知 T(n) =
Ω
(n
2
)
3、主方法(Master定理)
僅適用於形式以下的遞歸式:
T(n) = a·T( [n/b] ) + f(n),其中常數 a ≥ 1,b > 1,n 爲非負整數,函數 f(n) 是漸近正函數。
有 a 個子問題,每一個子問題的規模都是 n/b,加上非遞歸的代價 f(n) 。
注:f(n) 漸近正:
存在
n
0
> 0,當 n ≥ n
0
,f(n) > 0 。即 n 足夠大時函數值總爲正值。
三種狀況(
主定理
):
1.
存在 ε > 0,有 f(n) = O(
),(即 f(n) 多項式地小於
)
則 T(n) =
Θ
(
)
2.
存在 ε > 0,k ≥ 0,有 f(n) =
Θ
(
),
則 T(n) =
Θ
(
)
3.
存在 ε > 0,有 f(n) =
Ω
(
),且存在 ε' > 0,使 a·f(n/b) ≤ (1-ε')·f(n)
則 T(n) =
Θ( f(n) )
例:① T(n) = 4T(n/2) + n,易知
T(n) =
Θ
(n
2
)
②
T(n) = 4T(n/2) + n2,易知 T(n)=
Θ
(n
2
·log2n)
③
T(n) = 4T(n/2) + n3,易知 T(n)=
Θ
(n
3
)
④
T(n) = 4T(n/2) + n2/log2n,這時主方法不適用。