第二个for-loop的时间复杂度是多少?

时间:2016-11-02 21:56:04

标签: algorithm time-complexity

for(int i = 0; i < n; i++) {
    for(int j = 0; j < i; j++) { 
        //Code
    }
}

我知道第一个for循环是O(n),但是第二个呢?

2 个答案:

答案 0 :(得分:0)

第二个循环的复杂性实际上等于1 + 2 + 3 + 4 ... + n-1
或者:

  n-1
O( Σ )
  i=0

为什么-1
因为你的for循环条件是<而不是<=
试试这个程序:

#include <iostream>

int main()
{
    for (int n = 0; n < 100; n++) {
        int count = 0;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < i; j++)
                count++;
        std::cout << "n = "<< n << " : " << count << std::endl;
    }
    while (1); // Yeah, I know....
}

您可以看到所有结果按n

的最后一个值递增

答案 1 :(得分:0)

对于给定的代码,

for(int i = 0; i < n; i++) {
    for(int j = 0; j < i; j++) { 
        //Code
    }
}

外部循环执行O(n)次,如果仅考虑内部循环,则执行O(i)次。内循环中的代码执行的总次数是1 + 2 + 3 + ... + n-2 = ((n-2)*(n-1))/ 2 =(n 2 -3n + 2)/ 2。因此,整个代码的复杂性是O(n 2 )。