这个功能的复杂性是什么?

时间:2012-04-11 04:29:20

标签: algorithm complexity-theory

我总是在我的访谈中提供这样的解决方案,但我不确定O(n ^ 2),O(nlogn)的复杂程度是什么?

for(i = 0; i < limit; i++)
{
    for(j = i; j < limit; j++)
    {
        // do something
    }
}

3 个答案:

答案 0 :(得分:2)

只是理解,将限制设为6.现在,我可以从零到5,j可以从i到5。 当i = 0 j = 0到5时,      i = 1 j = 1到5,      i = 2 j = 2到5,      i = 3 j = 3到5,      i = 4 j = 4到5,      i = 5 j = 5

所以,&#34;做某事&#34;程序的一部分运行5,4,3,2和1次。 这意味着限制总共15次= 6.或者n(n + 1)/ 2次是从1到n的数字之和。 (假设极限由n表示。

我发现它不是n ^ 2的复杂性,但随着n变大,n ^ 2项将占主导地位。因此在我看来它是O(n ^ 2)。

答案 1 :(得分:1)

让我们分析它..外部循环将运行limit次。

First iteration of outer loop, i=0.. Inner loop runs limit times..
Second iteration of outer loop, i=1.. Inner loop runs limit-1 times.. 
.
.
.
.
Limit-th iteration of outer loop, i=limit-1.. Inner loop runs 1 time.. 

这为我们提供了O(limit) * O(limit-1) * O(limit-2)*..*O(1)的复杂性,这反过来又使这段代码变得复杂O(n2)

答案 2 :(得分:0)

这种复杂性当然是O(N ^ 2)。为什么,让我们用演绎方式以简单的方式分析它。

    Limit = 10, the iterations are = 10 + 9 + 8 + 7 + ... + 1 = 10*(10+1) / 2
    Limit = 20, the iterations are = 20 + 19 + 18 + ... + 1 = 20*(20+1) / 2
    .
    .
    .
    Limit = N, the iterations are = N + N-1 + N-2 + ... + 1 = (N)(N+1)/2 
    In big-Oh notation, its complexity is O( (N)(N+1)/2 ) = O( (N^2 + N) / 2 ) which gives O(N^2)