求出递归T(n)= 2T(n / 2)+ n ^ 4

时间:2011-01-05 04:50:20

标签: algorithm math big-o recurrence big-theta

我正在学习使用麻省理工学院课件和CLRS书籍算法导论。

我目前正在尝试解决重复问题(来自第107页)

  

T(n)= 2T(n / 2)+ n 4

如果我制作一个重复树,我得到:

  

0级:n 4

     

1级2(n / 2) 4

     

2级4(n / 4) 4

     

3级8(n / 8) 4

树有lg(n)级别。因此我认为复发应该是

  

T(n)=Θ(n 4 lg n)

但是,如果我使用主定理,我就得到了

  

T(n)=Θ(n 4

显然这两个都不对。哪一个是正确的?我的推理在哪里出错?

4 个答案:

答案 0 :(得分:6)

第二个看起来正确。请注意,您的重复树看起来像

  

n 4 + 2(n / 2) 4 +4(n / 4) 4 + ... + 2 i (n / 2 i 4

但是2(n / 2) 4 ≠n 4 ,因为(n / 2) 4 = n 4 < / sup> / 16,所以2(n / 2) 4 = n 4 / 8。事实上,如果你计算出数学,你就会得到在第一级完成的工作由

给出
  

n 4 /(2 -3i

因此我们得到(1 + 1/8 + 1/64 + 1/512 + ...)n 4 ,可以显示小于2n 4 。所以你的函数是Θ(n 4 )。

答案 1 :(得分:2)

对于递归,它是Θ(n ^ 4)

T(n) = 2*T(n/2) + n^4 
T(n) = 2( 2*T(n/4) + (n/2)^4) + n^4 = 4*T(n/4) + 2*(n/2)^4 + n^4
T(n) = 4(2*T(n/8) + (n/4)^4) + 2*(n/2)^4 + n^4 = 8*T(n/8) + 4*(n/4)^4 + 2(n/2)^4 + n^4

T(n) = 8*T(n/8) + n^4*(1 + 1/(2^3) + 1/(2^6))
...

T(n) = 2^k*T(n/(2^k)) + n^4*(1+ 1/(2^3) + 1/(2^6) + 1/(2^9)...+ 1/((2^(k-1))^3)

We know T(1) = 1

n = 2^k so k = log2(n) Then

T(n) = n*T(1) + n^4*( 1 - (1/(2^3))^k)/(1-1/8)

T(n) = n + (8/7)*n^4*(1 - n^(-3))

T(n) = n + (8/7)*(n^4 - n)

T(n) = (8/7)*n^4 - (1/7)*n


Θ(T(n)) = Θ((8/7)*n^4 - (1/7)*n)
Θ(T(n)) = Θ(n^4)

Θ(n ^ 4)

答案 2 :(得分:1)

您可以直接使用主定理。

该等式适用于主定理的情况1,其中log (a) base b < f( n)

a:复发次数 b:子部件数量

log a base b = log 2 base 2 = 1 < n^4

因此,通过大师定理,T(n) = theta(f(n)) = theta(n^4)

答案 3 :(得分:0)

通过大师定理

a = 2,b = 2,f(n)= n ^ 4

第一步-计算n ^(log a到b的底)=> n(log 2到b的底)= n * 1 = n 第二步-是f(n)>第一步结果=> n ^ 4> n =>是 这意味着使用主定理的案例3。

第三步-检查规律性条件

Edit -> Current Project's Triggers

是的,满足正则条件,所以我们的解决方案必须是。

a. f(n/b) <= c. f(n) where c>1 
a(n/b) . log(n/b) <= c. f(n)
2.(n/2) . log(n/2) <= c. n^4
n.log(n/2) <= c.n^4