以下算法的运行时间
int b = 0;
for (i = 0; i < n; i++)
for (j = 0; j < i * n; j++)
b = b + 5;
我知道第一个循环是 O(n),但这就是我所知道的。我认为第二个循环可能是 O(n ^ 2),但我想的越多,它的意义就越小。任何指导都将非常感谢。
答案 0 :(得分:1)
我们希望将此代码的运行时间表示为n的函数。请拨打此T(n)
。
我们可以说T(n) = U(0,n) + U(1,n) + ... + U(n-1,n)
,其中U(i,n)
是内部循环的运行时间,作为i
和n
的函数。
内循环将运行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 )