2D for循环的大O.

时间:2012-09-10 11:13:35

标签: java algorithm big-o

我必须记下算法的Big O符号,我必须考虑我的作业。

我可以告诉下面的代码是O(n^2)。因为对于每一个x,我必须经历所有的y,随着世界变大,它变慢。

int[][] world = new world[20][20];
for (int x = 0; x < 20; x++)
{
    for (int y = 0; y < 20; y++)
    {
        ..
    }
}

但是,对于另一个问题,我必须经历世界的下半部分,所以我的y循环减半。

int[][] world = new world[20][20];
for (int x = 0; x < 20; x++)
{
    for (int y = 10; y < 20; y++)
    {
        ..
    }
}

我不太确定Big O符号适用于上述循环,它仍然是O(n^2),因为世界变得越大它仍然会变慢吗?或者它是O(log n),因为y减半了?

3 个答案:

答案 0 :(得分:10)

它简单地说O(n*n/2)=O(n^2),因为常量不在大O中。

答案 1 :(得分:4)

它是O(n^2),因为y仍然是n的函数,即O(n^2/2)仍为O(n^2)

答案 2 :(得分:4)

你的两个算法实际上都是O(n)(假设n是输入中的位数,这是常见的定义)。第一个触摸世界数组中的每个“像素”一次,因此很容易看出它是O(n)。第二个接触一半像素,但由于O(n / 2)= O(n),仍然是O(n)。在这两种情况下,将世界数组的大小加倍会使执行时间增加或减少一倍,这是O(n)算法的典型特征。