我的推理:一个简单的1递减循环将在O(n)时间内运行。但是,此算法对参数n进行三重嵌套传递,以将所有三个变量递减为零。 n * n * n = n ^ 3。
public static void downByThree (int n) {
int x = n;
while (x > 0) {
int y = n;
while (y > 0) {
int z = n;
while (z > 0) {
z--;
}
y--;
}
x--;
}
}
答案 0 :(得分:2)
此循环
int a = n;
while (a > 0) {
<body>
a--;
}
是使用while
循环实现重复执行的概念的示例,假设<body>
不修改a
。用伪代码看起来像这样:
REPEAT n TIMES
<body>
因此,您的代码具有以下伪代码结构:
REPEAT n TIMES
REPEAT n TIMES
REPEAT n TIMES
<no-op>
虽然编译器可能会发现代码是<no-op>
的n 3 重复并对其进行优化,但算法的O(n 3 )结构。
答案 1 :(得分:1)
是的,正如您提到的,这在O(n ^ 3)中。您的推理是正确的,您使Z循环为O(n),然后使y循环为O(n ^ 2)和最后一个O(n ^ 3)。
答案 2 :(得分:1)
您相信100%正确。是的,以上算法的运行时间为O(n ^ 3)。
基本上,以上代码等效于:
for(int x = n; x>0 ; --x){
for(int y = n; y>0 ; --y){
for(int z = n; z>0 ; --z){
}
}
}
正如我们看到的,有3个嵌套的for循环长度恰好为 n ,我们可以得出时间复杂度为O(n ^ 3)。
更明确地说, z 变量每 n 个 < em> y 变量[O(n * n)],并且每 x 次,该现象发生 n 次变量。因此,总体时间复杂度将为 O(n ^ 3)。