三种情况下的大O符号复杂性

时间:2018-06-03 09:05:42

标签: algorithm data-structures big-o

以下算法是否在O(n)时间运行?

1

s=0
for(i=0; i<n; i++)
{
    for (j=0; j<n; j++)
    {
        s=s+i*j;
    }

    s=s+1
}

这是一个O(n ^ 2),因为这里的性能与输入数据集的大小的平方成正比N

2

 s=0
    for(i=0; i<n; i++)
    { if (i>20)
        for (j=0; j<n; j++)
        {
            s=s+i*j;
        }

        s=s+1
    }

第3

 s=0
    for(i=0; i<n; i++)
    { if(i<4)
        for (j=0; j<n; j++)
        {
            s=s+i*j;
        }

        s=s+1
    }

请解释if语句如何影响O(n)?在两种情况下(#2和#3),第一个循环是O(n),如果N> 1,则第二个循环将运行。 20或N <20。分别为4。但这如何影响复杂性?这些仍然是O(n ^ 2),而if i > 20会减少20 ^ 2次操作而减少if i < 4 4 ^ 2吗?还有Big O假设N会无限吗?

1 个答案:

答案 0 :(得分:2)

<强> 2

O(N^2)。循环总共运行

20 +(N - 20)* N次迭代(并且每次迭代是常数)==&gt; O(N ^ 2)

第3

O(N)。循环总共运行

N * 4 +(N-4)次迭代(并且每次迭代是常数)==&gt; O(N)