私はBig Oを勉強しようとしていますが、私が今直面したアルゴリズムについて混乱しています。アルゴリズムは次のとおりです。BigO整数のランタイムの合計
void pairs(int[] array){
for (int i=0; i < array.length; i++){
for (int j=i+1; j<array.length; j++){
System.out.println(array[i]+","+array[j]);
}
}
}
私はループの最初はO(n)
であると私は2番目のforループはO(1/2*n(n+1))
である知っていると思います。問題の答えは、関数の実行時間がO(n^2)
であるということでした。私はO(1/2*n(n+1))
をO(1/2*(n^2+n))
に簡略化しました。だから私は、forループがネストされているので、2つのランタイム条件を掛ける必要があると思ったので混乱しています。これはO(n) * O(1/2*(n^2+n))
となります。私はこれをO(1/2n^3 + 1/2n^2)
に簡略化しました。私がビッグ・オーのことを理解してから、あなたは最大の用語だけを保持するので、これはO(n^3)
に縮小されます。誰かが私が間違ったところで私を助けることができますか?答えがO(n^3)
ではなくO(n^2)
であるかどうか不明です。
これは有効なPythonコードではありません。 – BrenBarn
@BrenBarnはい、私はその1つを盗んだ。私はそれをJavaでバックアップしました。 – kdubs
なぜ2番目のループが1/2 * n(n + 1)であると思いますか? – BrenBarn