计算2个递归调用的大Theta绑定

时间:2016-02-09 01:52:21

标签: algorithm recurrence big-theta

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

谢谢!

1 个答案:

答案 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),你得到了错误的结果!