T(m,n)= 2T(m / 2,n)+ n,假设如果m <2或n <2,则T(m,n)是常数 所以我不明白的是,使用Master Theorem可以解决这个问题吗?如果是这样的话?如果没有,这个表是否正确?
level # of instances size cost of each level total cost
0 1 m, n n n
1 2 m/2, n n 2n
2 4 m/4, n n 4n
i 2^i m/(2^i), n n 2^i * n
k m 1, n n n*m
谢谢!
答案 0 :(得分:0)
主定理在这里可能有点过分,你的求解方法也不错(log
意味着以2
为基础的对数,c=T(1,n)
):
T(m,n)=n+2T(m/2,n)=n+2n+4T(m/4,n)=n*(1+2+4+..+2^log(m))+2^log(m)*c
=n*(2^(log(m)+1)-1)+m*c=Theta(n*m)
如果您通过将n
视为常数来使用主定理,那么根据T(m,n)=Theta(m*C(n))
,您可以轻松获得C
常数n
,但主定理并没有告诉你这个常数C
。如果你太聪明和不专心,你很容易被烧伤:
T(m,n)=n+2T(m/2,n)=n*(1+2/nT(m/2,n))=n*Theta(2^(log(m/n)))
=n*Theta(m/n)=Theta(m)
现在,因为你在第三步中遗漏了C(n)
,你得到了错误的结果!