我试图以某种方式解决这个问题,我已经知道它的复杂性是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)插入m=logn和我得到的BigTheta((logn)^2)是不一样的。
发布于 2018-01-01 14:16:10
你采取了正确的方法,我的朋友。不过有个小小的错误。
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)值放回
发布于 2018-01-01 14:25:01
好的,这里的错误在这一行中:
现在,如果我让
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)https://stackoverflow.com/questions/48050136
复制相似问题