みんなと率直に話すために、これは宿題です。誰かが私に何度も答えを出してくれるとは思っていません。これは、私が物事を正しく理解していることを確認するため、または私が間違っていることを理解するためです.
Big-Oh がどのようなものになるかを判断するために、いくつかのコードの断片が与えられました。それぞれが for ループを扱っていますが、与えられた最後の 2 つは少し気が遠くなります。最初:
sum = 0;
for (i = 0; i < n; i++) //1
for (j = 0; j < i * i; j++) //2
for (k = 0; k < j; k++) //3
sum++;
これのビッグオーはO(n^4)だと思います。#1 は n 回実行され、#2 は n^2 回実行され、#3 は n 回実行され、n^4 になります。ただし、これを C++ で適切に記述し、n 値を 10、100、および 1000 に指定すると (割り当てに従って)、n = 10 は 7524 を返します (良い、10,000 未満) n = 100 は 975,002,490 の値を返しますが、上限は100,000,000になります。明らかに、私はループの分析のどこかから外れていますが、どこにあるのかよくわかりません。n = 1000 が何を返すかはわかりません。私のコンピューターはしばらく処理を続けていて、まだ答えを出す準備ができていないようです。
2 番目のフラグメントは次のとおりです。
sum = 0;
for (i = 0; i < n; i++) //1
for (j = 0; j < i * i; j++) //2
if (j % i == 0) //3
for (k = 0; k < j; k++) //4
sum++;
if ステートメントの実行時間はテストの実行時間とその内容の合計になるため、if ステートメントを安全に無視できると思います。つまり、再び O(n^4) を考え出すことになります。