0

重複の可能性:
変数カウントをインクリメントするステートメントが実行される頻度を n の関数として決定する

わかりましたので、私はまだアルゴリズムの分析に慣れていないので、これについて共有できる助けをいただければ幸いです。if ステートメントが n の関数として実行される頻度を判断しようとしています。外側のループは n で、内側のループも n だと思いますが、if 文に問題があります。ヒントをいただければ幸いです。ループは次のとおりです。

for (int k = 0; k < n.length;  k++) {

     for (int j = k; j > 0; j--) {

          if (n[j] < n[j-1]) {

            int x = n[j];
            n[j] = n[j-1];
            n[j-1] = x;
4

3 に答える 3

4

この宿題の問題を解いていた場合、n の小さな配列 (つまり n.length は小さい) から始めて、たとえば 3 または 4 にして、それを手作業で処理します。すぐにパターンが表示されます。

于 2012-11-20T23:57:10.383 に答える
1

この例はあなたを助けるかもしれません

int[] n = new int[] { 1, 2, 3, 4 };
int count =  0;
for (int k = 0; k < n.length; k++) {
    for (int j = k; j > 0; j--) {
        count++; // if program reaches here, the below 'if' condition will be executed
        if (n[j] < n[j - 1]) {
            int x = n[j];
            n[j] = n[j - 1];
            n[j - 1] = x;
        }
    }
}
System.out.println("If condition executed - "+count+" times.");
于 2012-11-21T08:20:48.887 に答える
1

上記の両方の答えの一部です!

呼び出しの明確な数を取得するには、カウンターを挿入し、いくつかの println/printf-Debugging を実行します (またはロガーを使用します)。

これらのループで何が起こっているのかを理解し、複雑さを計算するには、n の値を小さくして手動で反復する方がよいでしょう。

宿題を完全に理解するには、上記の両方の回答に従う必要があります。

于 2012-11-21T08:33:32.357 に答える