在评估运行时时,不等式是否重要?

时间:2018-05-28 18:23:53

标签: algorithm big-o

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;
}

1 个答案:

答案 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还是<并不重要,至少在你喜欢的循环中如此所示。