[英]Solving running time of T(n)=2T(n/2)+nlogn
我試圖以某種方式解決這個問題,我已經知道它的復雜性是 BigTheta(nloglogn) ,但如果我執行以下操作,我不會得到相同的答案:
let m = logn
then n = 2^m
we get T(2^m) = 2T(2^(m-1))+(2^m)*m
multiply by 1/(2^m)
we get T(2^m)/2^m = 2T(2^(m-1))/2^m + m
= T(2^(m-1))/(2^(m-1)) + m
現在,如果我讓S(m)=T(2^m)/2^m
我將有S(m)=S(m-1)+m
。
現在我用回代法求解S(m)=S(m-1)+m
。
S(m) = S(m-1)+m=S(m-2)+(m-1)+m = S(m-3)+(m-2)+(m-1)+m = S(m-4)+(m-3)+(m-2)+(m-1)+m=... = S(m-k)+(m-k+1)+..+(m-3)+(m-2)+(m-1)+m = ... = S(1)+2+...+m = m(m-1)/2 = BigTheta(m^2)
BigTheta((logn)^2)
回m=logn
並且我得到BigTheta((logn)^2)
這不一樣。
你遵循了正確的方法,我的朋友。 不過有一個小錯誤。
S(m) = S(m-1) + m
這是正確的,我們得到S(m) = BigTheta(m^2)
。
現在S(m) = T(2^m)/(2^m) = BigTheta(m^2)
。 這意味着T(2^m) = T(n) = (2^m) * BigTheta(m^2)
。
放回我們得到的值T(n) = n*BigTheta(lognlogn) = BigTheta(n*lognlogn)
好的,所以這里的錯誤在這一行:
現在,如果我讓
S(m)=T(2^m)/2^m
我將有S(m)=S(m-1)+m
。
事實上,如果你讓S(m)=T(2^m)/2^m
,那么你將有S(m)=2S(m-1)+m
,因為除以2^(m-1)
。
通過此更正,我們有:
S(m) = 2S(m - 1) + m
= 2S(2S(m - 2) + m) + m
= 4S(m - 2) + (m − 1) + m
= 4S(2S(m - 3) + (m - 2)) + (m − 1) + m
= 8S(m - 3) + (m - 2) + (m - 1) + m
這給了我們一般的形式:
S(m) = 2^m S(0) + m(m+1)/2
重新插入,我們有:
T(2^m) = 2^m T(0) + m(m+1) 2^(m-1)
然后我們可以重新插入 n:
T(n) = nT(1) + n/2 (logn)(1 + logn) = O(n(logn)^2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.