[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?
2022-02-21 18:10:17
質問内容
コード 1
int i = 0;
int j = 0;
while(i < n){
while(j < n){
printf("{%d,%d}",arr[i],arr[j]);
j++;
}
i++;
j = 0;
printf("\n");
}
コード2
int result = 0;
int i = 0;
while (i < n / 2){
result += arr[i];
i += 1;
while (i >= n / 2 && i < n){
result += arr[i];
i += 1;
}
}
printf("%d\n", result);
forループの時間計算の方法だけは知っていますが、whileループについては不明です。 どなたか、各コードの総実行時間を求めるのを手伝っていただけると幸いです。
どのように解決するのですか?
最初のサンプルは、ごく一般的なforループのコードです。その複雑さはO(n^2)です。これは、内側のループの計算量がO(n)であり、それがn回実行されるからである。
2つ目は少し難しいですが、入れ子でないループと同等であることがわかるまで(チェックの複雑さは無視します)。
int result = 0;
int i = 0;
while (i < n){
result += arr[i];
i += 1;
}
printf("%d\n", result);
その複雑さはO(n)であることを意味する
時間の複雑さを計算する最も良い方法は、実際にアルゴリズムがどのように動作するかを理解し、演算を数えてみることです。2番目の例では、外側のループが最後の反復を行うまで内側のループは決して実行されません。また、両者は同じコードを実行しているので、全体を1つのループにまとめることができます。
もう一つ良い例がこれです。
for(i=0;i<n;i++){
for(j=i;j<n;i++){
//do something
}
}
操作を数えてみよう。1 + 2 + 3 + 4 + ... + これは、n*n/2となり、O(n^2)となる。
関連
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】strcmpが機能しない
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】malloc():メモリ破壊
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ビッグ・オー、どうやって計算・概算するんだ?
-
[解決済み] ヒープの構築はどうして時間計算量O(n)になるのですか?
-
[解決済み] 再帰的関数の複雑さの決定(Big O記法)
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】未定義参照 makefile が間違っているのかも?