foo1和foo2之间的区别是for循环中的等号。当我们评估运行时,不等式如何影响我们的输出?
int foo1(int n)
{
int i, j, x = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
x++;
return x;
}
int foo2(int n)
{
int i, j, x = 0;
for (i = 1; i < n; i++)
for (j = 1; j < n; j++)
x++;
return x;
}
答案 0 :(得分:3)
带<=
的循环可以重写为仅<
的循环,反之亦然。
int foo1(int n)
{
int i, j, x = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
x++;
return x;
}
int foo2(int n)
{
int i, j, x = 0;
for (i = 1; i <= (n-1); i++)
for (j = 1; j <= (n-1); j++)
x++;
return x;
}
现在我们可以看到foo1
中的循环都循环n
次,给出foo1
O(n²),而foo2
中的循环都循环{{ 1}}次,给出(n-1)
O((n-1)²)= O(n²-2n + 1),它也反映在foo2
的返回值中。
但就整体复杂性而言,这两个函数都被认为是O(n²),因此无论你使用x
还是<
并不重要,至少在你喜欢的循环中如此所示。