算法分析之-主方法分析遞歸式

主方法

在算法分析中,我們主要使用代入法,遞歸樹法,和主方法來分析遞歸式
而主方法爲如下形式的遞歸式提供了一套“菜譜”式解法:

T(n)=aT(nb)+f(n)T(n)=aT(\frac nb)+f(n)


幾個主要形式:

1.

若對某個常數 ε>0\varepsilon \gt 0

f(n)=ο(nlogbaε)f(n) = \omicron (n^{\log_b{a-\varepsilon} })

那麼
T(n)=θ(nlogba)T(n) = \theta (n^{log_ba})


2.


f(n)=θ(nlogba)f(n)=\theta(n^{log_ba})

T(n)=θ(nlogbalgn)T(n)=\theta(n^{log_ba}\lg n)


3.

若對某個常數 ε>0\varepsilon>0
f(n)=Ω(nlogba+ε)f(n) = \Omega(n^{\log_b{a+\varepsilon} })

且對於某個常數c<1和所有足夠大的n有
af(nb)cf(n)af(\frac nb)\le cf(n)


T(n)=θ(f(n))T(n) = \theta(f(n))


證明:

這個要死記硬背那可太難了,還是證明一下怎麼來的比較好

T(N)=aT(Nb)+θ(Nk)T(N)=aT(\frac Nb) + \theta (N^k)

aN/ba表示一個問題分解成子問題的數目,N/b表示每個子問題的規模

N=bmmT(1)=1不妨設N=b^m,即大問題是子問題規模的m次冪,且T(1)=1

T(bm)=aT(bm1)+(bk)m於是原式有:T(b^m)=aT(b^{m-1})+(b^k)^m

amT(bm)am=T(bm1)am1+(bka)m左右同除a^m:\frac {T(b^m)}{a^m}=\frac {T(b^{m-1})}{a^{m-1}}+(\frac {b^k}a)^m

m=0T(1)/1=1於是我們的到了一個等差數列,初項設m=0,T(1)/1=1

T(bm)am=i=0m(bka)i求和之後得到:\frac {T(b^m)}{a^m}=\displaystyle\sum_{i=0}^m(\frac {b^k}a)^i
T(N)=ami=0m(bka)i即爲:T(N)=a^m\displaystyle\sum_{i=0}^m(\frac {b^k}a)^i

1.a>bkk=logbaεf(n)=θ(Nk)=ο(nlogbaε)1.當a>b^k \hspace3ex即k=log_ba- \varepsilon \hspace3ex即f(n) = \theta(N^k)=\omicron (n^{\log_b{a-\varepsilon} })
T(N)=O(am)=O(alogbN)=O(Nlogba)此時級數的和爲一個小於無窮大的常數,於是T(N)=\Omicron(a^m)=\Omicron(a^{log_bN})=\Omicron(N^{log_ba})

2.a=bkk=logbaf(n)=θ(Nk)=θ(Nlogba)2.當a=b^k \hspace3ex即k=log_ba \hspace3ex即f(n)=\theta(N^k)=\theta(N^{\log_ba })
mT(N)=(m+1)am=O(NlogbalogbN)此時級數的和爲m,於是T(N)=(m+1)a^m=\Omicron(N^{\log_ba }log_bN)

3.a<bkk=logba+εf(n)=θ(Nk)=Ω(nlogbaε)3.當a<b^k \hspace3ex即k=log_ba+\varepsilon\hspace3ex即f(n)=\theta(N^k)=\Omega(n^{\log_b{a-\varepsilon} })
(bk/a)m1bk/a1T(N)=am(bk/a)m1bk/a1=O(Nk)此時級數的和爲\frac{(b^k/a)^m-1}{b^k/a-1},於是T(N)=a^m{\frac{(b^k/a)^m-1}{b^k/a-1}}=\Omicron(N^k)

例如:矩陣相乘的Strassen算法:
T(N)=7T(N/2)+O(N2)T(N)=7T(N/2)+O(N^2)
T(N)=O(Nlog27)=O(N2.81)有T(N)=O(N^{log_27})=O(N^{2.81})
很方便很炫酷有沒有!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章