我正在努力计算分裂计划的运行时间,
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)
我是在正确的轨道上,我有点困惑,你还要考虑印刷线吗?
答案 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 theorumT(n)= O(n ^ loga)// base 2
<强> T(N)= N ^ 2 强>