嵌套for循环的运行时间

时间:2013-10-03 16:35:39

标签: c++

以下算法的运行时间

int b = 0;
for (i = 0; i < n; i++) 
    for (j = 0; j < i * n; j++)   
        b = b + 5;

我知道第一个循环是 O(n),但这就是我所知道的。我认为第二个循环可能是 O(n ^ 2),但我想的越多,它的意义就越小。任何指导都将非常感谢。

4 个答案:

答案 0 :(得分:1)

我们希望将此代码的运行时间表示为n的函数。请拨打此T(n)

我们可以说T(n) = U(0,n) + U(1,n) + ... + U(n-1,n),其中U(i,n)是内部循环的运行时间,作为in的函数。

内循环将运行i * n次。因此U(i,n)只是i * n

所以我们得到T(n) = 0*n + 1*n + 2*n + ... + (n-1)*n = n * (1 + 2 + ... + (n-1))

(1 + 2 + ... + (n-1))的封闭表单只是(n^2 - n)/2 http://www.wolframalpha.com/input/?i=1+%2B+2+%2B+...+%2B+(n-1)

所以我们得到T(n) = n * (1 + 2 + ... + (n-1)) = n * ((n^2 - n)/2) = (n^3 - n^2) / 2

O(n^3)

答案 1 :(得分:1)

easiest way would be to use a example

assume n=10 

1st for loop runs 10 times o(n)
2nd loop loop runs 0 if i=0
                   10 time for i=1
                   20 times for i=2
                   30 times for i=3
....  100 times(for i=10) o(n^2)

hope it helps you

答案 2 :(得分:1)

外部循环运行n次迭代。

n为0时,内循环执行0*n = 0次 当n为1时,内循环执行1*n = n次 当n为2时,内循环执行2*n = 2n次 当n为3时,内循环执行3*n = 3n次 ... ... 当n为n时,内循环执行n*n = n*n

所以看起来内循环执行总计:

0 + n + 2n + 3n + ... + n*n 

将此值与外循环的n相乘,得到约。 O(n^3)复杂度{{1}}。

答案 3 :(得分:1)

     Statements                                     Iterations
for (i = 0; i < n; i++)           |       n+1
    for (j = 0; j < i * n; j++)   |       0+n+2n+3n...n*n = n*n(n+1)/2
        b = b + 5;                |       n*n(n+1)/2

总体而言:O(n 3