【发布时间】:2013-11-17 10:50:20
【问题描述】:
我无法弄清楚以下代码的复杂性。虽然,我知道正确的答案。只是想知道为什么会这样。
void main()
{
int i, j, n, x;
for(i=0; i < n; i++)
{
for(j=0; j*j <= n; j++)
{
x=10;
}
}
}
复杂度为 O(n√n)。
【问题讨论】:
-
如果我们忽略 n 没有初始化为一个值。由于 x 总是变成 10,一个好的编译器会直接删除循环并将 x 设置为 10,因此没有复杂性。
-
@Johan Emmm.... 没有“没有复杂性”这样的东西。它被称为 O(1)
-
@Johan 如果使用
-O0执行,即使是好的编译器也不应该这样做:-) -
甚至不需要分配
x,因为它是一个局部变量。该程序没有明显的副作用。