私は2つのコード断片と、どのBig Oカテゴリに該当するのか説明しています。しかし、私のように試してみてください。私はそれを見たり、サンプルを実行したりすることで、何が出てくるのか説明することはできません。2つのコードフラグメントのBig O表記
最初:この
long count = 0;
long n = 1000;
long i, j, k;
for(i = 0; i < n; i++)
for (j = 0; j < i * i; j++)
for (k = 0; k < j; k++)
count++;
サンプルの実行には、一貫して私を与えるN^4、私は与えられてきた答えは、jが同じ大きさ可能性がある、I^2と同じ大きさにすることができます」ですN^2であり、kはjと同じ大きさであり、N^2である。したがって、実行時間はN^N^2^N^2に比例する。これはO(N^5)である。
スニペット:
long i, j, k;
long n = 1000;
long count = 0;
for (i = 1; i < n; i++)
for (j = 1; j < i * i; j++)
if (j % i == 0)
for (k = 0; k < j; k++)
count++;
これについては、「if文は実行されていますdをN3回まで、前の議論で求めることができますが、O(N^2)回だけ真です(これはiごとに正確にi回になるためです)。したがって、最も内側のループはO(N^2)回だけ実行されます。 O(j^2)= O(N^2)時間が経過するたびに、O(N^4)の合計が得られます。
これはN^4 (しかし、私はN^4/10の結果を得ていますが)モジュロ計算は各i毎に真であるだけですが、ループに入るのはずっと少なくなっています。
?誰もが、私は最初のもののために
"Big Nは乗法定数を無視します。" N^4/10'の結果が得られます。あなたは最初のものを理解していますか、それについての説明も必要ですか? – meowgoesthedog