java - 计算程序运行时间?

标签 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)

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

最佳答案

分析到最后都是正确的,解决方案是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 上查看此结果

关于java - 计算程序运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348988/

相关文章:

javascript - Rails crontab rake javascript 运行时未找到

java - intellij idea如何使用项目A作为项目B的库

java - 打开zip文件或JAR list 丢失时出错

java - 删除文件第一行/顶行的最快 Java 方法(如堆栈)

python - 将一个矩形分割成n个大小相等的矩形

algorithm - 将迭代算法转换为递归算法的问题

Java JFrame 操作执行

algorithm - 产品的最大总和

c# - 如何在 C# 中一次播放多个频率的声音?

go - Go 运行时中的中间轮 AES 加密是如何工作的?