计算程序运行时间?

时间:2012-02-19 12:06:55

标签: java algorithm runtime

我正在努力计算分裂计划的运行时间,

void splitX(int x) {
     if (x<=1) {return x;};
     splitX(n/2);
     System.out.println("splitting in progress");
     splitX(n/2);
     splitX(n/2);
     splitX(n/2);
}

我对此很新,这是迄今为止所做的;

T(n) = 4T(n/2)
     = 4^2T(n/2^2)
     = 4^3T(n/2^3)
     = 4^kT(n/2^k)
     = O(log n)

我是在正确的轨道上,我有点困惑,你还要考虑印刷线吗?

4 个答案:

答案 0 :(得分:3)

分析结果为真,直到最后,解决方案为T(n) = O(n^2)

请注意,4^kT(n/2^k) != O(log n) 4^k不是常量。
看看分析结果:

T(n) = 4T(n/2) = 
     = 4^2T(n/2^2)
     = 4^3T(n/2^3)
     = 4^kT(n/2^k)
     = 4^log(n)*T(1) =
     = 4^log(n) * 1 =
     = (2^log(n))^2 =
     = n^2
     = O(n^2)

要正式证明:我们使用induction
基地:T(1) = 1 = 1^2
为每个T(n) = n^2假设k <= n
T(2n) = 4*T(n) =(induction hypothesis) 4*n^2 = (2n)^2

因此,归纳假设为真,T(n) = n^2

您还可以在wolfram alpha

上查看此结果

答案 1 :(得分:0)

在我看来,你对你的递归函数进行了log(N)调用。将其乘以常数 - 4-不会改变复杂性,也不会改变印刷线(适用于所有与家庭作业相关的需求)。

答案 2 :(得分:0)

是的,在Big-O表示法中,它是O(log n)的常量。

答案 3 :(得分:0)

表达式为

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

现在使用a = 4,b = 2和f(n)= c;

来应用master theorum

T(n)= O(n ^ loga)// base 2

<强> T(N)= N ^ 2