以下代码的复杂性是什么?

时间:2013-07-28 13:13:18

标签: java c data-structures complexity-theory

我编写的代码如下所示,但我对此算法的复杂性是O(n)还是O(n 2 )感到困惑。任何人都能确认一下吗?

  for(int i=0, j=i+1;i<array.length;j++)
    {

        if(j==array.length)
        {
            if(array[i]==3)
                System.out.println(array[i]);
            i++;                
            j=i;
            continue;
        }

        int k=array[i]+array[j];
        if(k==3)
        {
            System.out.println("{"+array[i]+","+array[j]+"}");
        }

    }

5 个答案:

答案 0 :(得分:4)

唯一重要的部分是:

for (int i=0, j=i+1; i < array.length; j++)
{
    if (j == array.length)
    {
        ...
        i++;                
        j=i;
        continue;
    }
 ...
 }

循环正在j = i+1j == array.length;然后i递增,j上的循环重复。

因此,这是一个O(n 2 )算法。

答案 1 :(得分:2)

是O(n ^ 2),

i = 0;
    j = 1;==>j =array.length.
i = 1;
    j = 1;==>j =array.length.
i = 2;
    j = 2;==>j =array.length.
...
i = n;
    j = n;==>j =array.length.
...
i = array.length;
    j =array.length.

所以,循环运行 n(n-1)/ 2 次。它是O(n ^ 2)。

以下是O(n ^ 2):

for(i=0;i<n;++i)
{
    for(j = 0; j<n;++j)
    {
        if(...)
           ...
        else
           ...
        ...  
    }
}

答案 2 :(得分:2)

O(n^2)i仅在j遍历整个数组后递增。这发生在循环的每次迭代中,每次迭代输入变小1。所以n*(n-1)/2次,O(n^2)

答案 3 :(得分:2)

这是O(n^2)

i=0开始:对于j = 1 - &gt; array.length =&gt; n interations

步骤2:i = 1 =&gt;对于j = 2 - &gt; array.length =&gt; n - 1次迭代

...

步骤n-1:i = array.length - 2 =&gt;对于j = array.length - 1 - &gt; array.length =&gt; 1次迭代

因此,复杂度为n * (n + 1) / 2,即n^2

答案 4 :(得分:1)

这是O((n(n + 1))/ 2)

是O(n ^ 2)