最初の例では、これは次のようになりました。O(n)、理由はわかりません。私はこれらのJava関数のBig-Oをどのように誤解していますか?
例1:第二例えば
for (k = 0; k <= n/8; k++) // will be O(n/8) thus, O(n)
System.out.println(k); // will be O(n)
System.out.println("Hello World!"); // will be O(1) because not in a loop
for (p = n; p >= 1; p--) // will be O(n-1) thus, O(n)
System.out.print(p % 2); // not sure what % will do here, but I think it's still O(n)
// Overall I think it's O(n)
。これはO(n^2)であることが分かりました。
例2:第例えば
for (k = 0; k < n - 1; k++) // will be O(n-1) or O(n)
for (m = k + 1; m < n; m++) // will be O(n^2) because nested loop
System.out.println(k * m); // not sure what this will do but I think it will be O(n^2)
// Overall I think it's O(n^2)
、これはO(N)であることが判明したが、なぜわかりません。
例3:
for (i = n - 3; i <= n - 1; i++) { // not sure here, maybe O(n-1), thus O(n)
System.out.println(i); // since it is nested then O(n)
for (k = 1; k <= n; k++) // since this is the second loop, then O(n^2)
System.out.println(i + k); // not sure what this will do, but I think it will be O(n^2)
} // Overall I think it's O(n^2)
は最後の例は、理由がわからない、また、O(N^2)であることが判明しました。
Example4:
for (a = 1; a <= n/3; a++) // will be O(n/3) thus O(n)
for (b = 1; b <= 2 * n; b++) // since it's a nested loop it will be O(2n^2) thus O(n^2)
System.out.println(a * b); // not sure what this will do, but I think it will be O(n^2)
// Overall I think it's O(n^2)
誰かがこれらを読みと私が間違っているのかを説明してもらえます。私の推論は、ユーザーが入力したものであり、その成長の仕組みを見ているので、 'n'変数を追跡するということです。単一のステートメントの場合、O(n^2)のネストされたループ内にある場合、そのループはデフォルトでO(n)である場合、定数時間O(1)です。
あなたの例1、2の推測と4はあなたのソリューションに等しいので はあなた
例3はO(n^2)でなければなりません...どこにそれはO(n)は? –
1であると言うん、2、4の場合は、理由を説明するコメントが既にあります! –
例3: '(n) - (n-3))* n'は' 3 * n'に単純化されています。 ) '。 – john16384