次のアルゴリズムの実行時間
int b = 0;
for (i = 0; i < n; i++)
for (j = 0; j < i * n; j++)
b = b + 5;
最初のループがO(n)であることは知っていますが、それは私が得た限りです。2 番目のループはO(n^2)かもしれないと思いますが、考えれば考えるほど意味がなくなります。どんなガイダンスでも大歓迎です。
次のアルゴリズムの実行時間
int b = 0;
for (i = 0; i < n; i++)
for (j = 0; j < i * n; j++)
b = b + 5;
最初のループがO(n)であることは知っていますが、それは私が得た限りです。2 番目のループはO(n^2)かもしれないと思いますが、考えれば考えるほど意味がなくなります。どんなガイダンスでも大歓迎です。
このコードの実行時間を 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)
。
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
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)
複雑さ。