确定特定循环的 Big(O) 效率
Determing the Big(O) efficiency of a particular loop
有人要求我确定此循环的大 O 表示法。
int x = 1;
int n = 1000;
while (x < (n*n))
{
int y = n;
while (y > 0)
{
y = y-1;
}
x = x+x;
}
现在我看到这是一个嵌套循环。但这绝对不是 N^2,对吗?
我明白是什么让某些事情成为 O(n) 或 O(log(n)),但我将如何确定一个特定的循环,比如这个循环?
内循环从n到0,所以是O(n ).
外循环
while (x < (n*n)) {
...
x = 2*x;
}
是对数,运行从1到n*n,就是O(log(n2)) = O(2 log n) = O(log n).
由于循环是嵌套的,所以将复杂性相乘得到 O(n log n).
有人要求我确定此循环的大 O 表示法。
int x = 1;
int n = 1000;
while (x < (n*n))
{
int y = n;
while (y > 0)
{
y = y-1;
}
x = x+x;
}
现在我看到这是一个嵌套循环。但这绝对不是 N^2,对吗? 我明白是什么让某些事情成为 O(n) 或 O(log(n)),但我将如何确定一个特定的循环,比如这个循环?
内循环从n到0,所以是O(n ).
外循环
while (x < (n*n)) {
...
x = 2*x;
}
是对数,运行从1到n*n,就是O(log(n2)) = O(2 log n) = O(log n).
由于循环是嵌套的,所以将复杂性相乘得到 O(n log n).