問題:若某算法的計算時間表示爲遞推關係式:T(N)=2T(N/2)+NlogN 且 T(1)=1
則該算法的時間複雜度爲( )。
O(Nsqrt(N))
O(NlogN)
O(N(logN)^2)
O(N^2logN)
O(N^2)
解析:
應該是 O(N(logN)^2)
參考網址:主定理和《算法導論》
但是博主說其實你不會主定理也沒事兒,只要能找幾個特殊值帶入,並根據符號O的意義排除選項即可。所以……其實可以投機取巧。(望天)
主定理在《算法導論》的第53頁時間複雜度章節有講到(是的,黑色的很厚的那本)
對於三種情況的每一種,我們將函數f(n)與函數nlogba進行比較。 直覺上, 兩個函數較大者決定了遞歸式的解。若函數nlogba更大,如情況1,則解爲T(n)=Θ(nlogba)。若函數f(n)更大,如情況3,則解爲T(n)=Θ(f(n))。若兩個函數大小相當, 如情況2,則乘上一個對數因子,解爲T(n)=Θ(nlogbalgn)=Θ(f(n)lgn)。
注意, 這三種情況並未覆蓋f(n)的所有可能性。情況1和情況2之間有一定間隙,f(n)可能小於nlogba但不是多項式意義上的小於。 類似地,情況2和情況3之間也有一定間隙 ,f(n)可能大於nlogba.但不是多項式意義上的大於。如果函數f(n)落在這兩個間隙中,或者情況3中要求的正則條件不成立,就不能使用主方法來求解遞歸式。
在第一種情況中,不是 f(n)小於nlogba就夠了,
而是要多項式意義上的小於
。 也就是說,f(n)必須漸近小於nlogba,要相差一個因子nϵ,其中ϵ是大於0的常數。 在第三種情況中,不是f(n)大於nlogba就夠了,而是要多項式意義上的大於,而且還要滿足“正則”
條件af(n/b)≤cf(n)。我們將會遇到的多項式界的函數中, 多數都滿足此條件。
假設我們有遞推關係式:
根據這個題,T(N)=2T(N/2)+NlogN且T(1)=1,可知 a=2,b=2,f(n)=NlogN,所以將函數f(n)=NlogN與函數Nlog22logN=NlogN進行比較,他們複雜度相近,是情況2。從而根據公式:
f(n)=Θ(nlogbalogkn),則T(n)=Θ(nlogbalogk+1n)。
有:
Γ(n)=nlog22∗(log2n)=n(logn)2
類題試解:
1.二叉樹的遍歷:T(n)=2T(2n)+Θ(1)
可知a=2,b=2,f(n)=1, nlog22=n比f(n)=Θ(1)大,是情況1,則根據公式,解爲T(n)=Θ(nlog22)=Θ(n)
2.二分搜索(折半搜索)T(n)=T(2n)+Θ(1)
可知a=1,b=2,f(n)=Θ(1),
nlog21=n0=1,故f(n)和O(1)複雜度相近,是情況2,
根據公式,T(n)=lgn
3.最大子數組問題和歸併排序的分治算法的運行時間:T(n)=2T(2n)+Θ(n)
可知a=2,b=2,f(n)=Θ(n)
nlog22=n和f(n)=Θ(n)相近,是情況2,
根據公式,T(n)=Θ(nlogbalgn)=Θ(f(n)lgn)。
可得T(n)=Θ(nlog22lgn)=Θ(nlog2n)。
4.遞歸式T(n)=3T(n/4)+nlgn
我們有a=3,b=4,f(n)=nlgn,而nlog43=O(n0.793)
由於f(n)=Ω(nlog43+ϵ)=Ω(n0.793+ϵ),其中ϵ≈1−0.793=0.2, f(n)=nlgn>nlog43滿足情況3。且對常數c=0.75和所有足夠大的n有3(n/4)lg(n/4)≤0.75nlgn=cf(n)
故解爲T(n)=Θ(nlgn)
5.矩陣乘法問題第一個分治算法T(n)=8T(2n)+Θ(n2)
有a=8,b=2,f(n)=n2,nlog28=n3可以看出f(n)=n2<n3,應該是情況1,其中ϵ=1
故T(n)=Θ(n3)
6.Strassen算法的運行時間T(n)=7T(n/2)+Θ(n2)
有a=7,b=2,nlog27≈n2.805>n2,故f(n)<n2.805,應用情況1公式:
故T(n)=Θ(nlog27)
改寫底爲lg7
log27=lg2lg7=0.30.84=2.807
算法導論中的lg以2爲底
故T(n)=Θ(nlg7)=Θ(n2.807)
不能使用主定理的情況:T(n)=2T(n/2)+Θ(nlgn)
其中a=2,b=2,f(n)=nlgn
而log22=n 而f(n)=nlgn漸進大於n,而不是多項式大於n
(多項式意義上的大於,顧名思義,就是兩個函數的商大於一個多項式。
嚴格表述爲如下形式:當我們說f(x)多項式意義上大於g(x)時,我們是指:存在實數e>0,使得f(x)>g(x)*n^e。)
因此, 遞歸式落入了情況2和情況3之間的間隙,不可以使用主定理。
不過可以利用公式:
f(n)=Θ(nlogbalogkn),則T(n)=Θ(nlogbalogk+1n)。
根據算法導論P73的上下界取整:
可知O(Nlog22N)是T(n)的上界(O(N3)也是上界,但是不是緊確界)