分析演算法時間複雜度 主項定理

2021-07-25 16:59:50 字數 2285 閱讀 1967

在分析根據遞迴方程分析演算法的時間複雜度時,常見到如下形式的方程,

t(n) = a * t(n/b) + f(n) 

a ³ 1,b > 1,f(n)一般是個簡單函式

這時可以有2種方法,來計算時間複雜度。一是用遞迴樹,逐層代入原式,最終形成乙個級數,

然後用乙個函式來表達,得到t(n)。

二是應用主項定理master method 。其實,主項定理也就是對遞迴樹方法的一種歸納,形成了

固定的計算方式,並分三種情形來計算。

這三種情形主要是比較 nlog

ba 與 f(n),為什麼要比較這兩個函式呢?

觀察原式,可以看出,nlog

ba其實相當於用遞迴樹方法解出的遞迴方程的右側的第一項,

而f(n)則是遞迴方程的右側的第二項,這樣,主項定理實際上是在比較組成結果的兩個函式項,

而且這種比較是按照數量級(或者說是變化幅度)來比較的,也就是說,如2n 與 28n是

數量級(變化幅度)相當的。

這樣就有了三種不同的情形:

f(n) < nlog

ba                

也就是 f(n) = o(nlog

ba - e

) ,e > 0為任意小的常數

或者說,f(n) 比 n

logb

a變化的慢,慢n

e那麼,t(n) î

q (nlogba)

f(n) > nlogba

也就是 f(n) = w(nlog

ba +e

) ,e > 0為任意小的常數

或者說,f(n) 比 n

logb

a變化的快,快n

e那麼, t(n) î

q(f(n))

可以簡單地說,遞迴方程的右側的兩項,哪項變化的塊,t(n)就屬於哪項的數量級

f(n) = nlogba

也就是兩項的數量級相當,就給這個數量級乘上乙個lg n 

t(n) î

q(nlog

ba * lg n)

examples(以下示例**於網路):

t(n) = 5t(n/2) + q(n2)

case 1: if f(n) = o(nlog

ba - e

) for some constant e > 0 then t(n) î

q(nlogba)

determine: a, b, f(n) and logba

is f(n) î o(nlg 5 - e

) for e > 0 ?

yes. f(n) = q(n2) î o(nlg 5 - e

) = o(n2.32 - e

) for e ≈ 0.32

t(n) î

q(nlog25)

2. t(n) = 2t(n/2) + n

determine: a, b, f(n) and logb(a)

case 3: if f(n) = q(nlog

ba ) then t(n) î

q(nlog

ba lg n)

f(n) = n î

q(nlog

22) = q(n1)

t(n) î

q(nlog

22 lg n) = q(n lg n)

3. t(n) = 5t(n/2) + q(n3)

determine: a, b, f(n) and logb(a)

case 2: if f(n) = w(nlog

ba+e

) for some constant e > 0

f(n) = q(n3) î

w(nlog

25+e

) = w(n2.32+e

) for e ≈0.68

andaf(n/b) ≤ cf(n) for some constant c < 1 and all sufficiently large n

5(n/2)3

≤ cn3

5n3/8 ≤ cn3

c = 5/8 < 1

then t(n) î

q(n3)

演算法複雜度分析 主定理

規模為n的問題通過分治,得到a個規模為n b的問題,每次遞迴帶來的額外計算為c n d t n at n b c n d 那麼就可以得到問題的複雜度為 可見,每次遞迴把問題分為a個規模為n b的子問題。從根節點開始,共有logb n 1層,葉子節點數為a logb n 那麼,第j層共有aj個子問題,...

遞迴時間複雜度分析 主定理分析

標籤 演算法 複雜度分析 以下是評估遞迴時間複雜度的主定理,例如有遞迴形式 t n at n b f n 其中,a 1 和 b 1 均為常數,f n 是乙個確定的正函式。在 f n 的三類情況下,我們有 t n 的漸近估計式 若對於某常數 0 有 f n o n 則 t n theta n 若 f ...

演算法時間複雜度分析

定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 求解演算法的時間複雜度的具體步驟是 1 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。2 計算基本語句的執行次數的數量級 ...