Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

ネストされたループのパズル:どちらのコードが速く実行される?


この記事では、興味深いプログラミングの問題を紹介します。ネストされた二重ループを含む2つのコード断片を比較し、どちらがより速く実行されるかを考えてみましょう。なお、ここではコンパイラによる最適化は行われないものと仮定します。

セグメント1

for(int i = 0; i < 10; i++){
    for(int j = 0; j<100; j++){
        //code
    }
}

セグメント2

for(int i = 0; i < 100; i++){
    for(int j = 0; j<10; j++){
        //code
    }
}

一見すると、どちらのコードも同じ回数だけ実行されるように見えます。実際、内側のループの中身は、どちらの場合も合計1,000回(10 × 100)実行されます。

しかし、よく観察してみると重要な違いがあります。2番目のコードは、1番目のコードよりも多くの処理を行っているのです。

1番目のコードでは、内側のループが開始されるのはわずか10回です。そのため、ループ変数の初期化・条件判定・インクリメントといった操作は、内側のループに関して10回しか発生しません。

一方、2番目のコードでは、内側のループが100回開始されます。つまり、初期化・条件判定・インクリメントの操作が100回行われることになり、その分だけ余計なオーバーヘッドが生じます。結果として、2番目のコードの方が1番目のコードよりも長い時間がかかるのです。

まとめ

総反復回数が同じでも、ループの構成によってパフォーマンスは変わります。一般的には「外側のループの回数を少なく、内側のループの回数を多く」する構成の方が、内側ループの再初期化の回数が減るため効率的です。ただし、現代のコンパイラは高度な最適化を行うため、実際の性能差は環境によって異なる場合がある点にも注意してください。


  1. HTMLのcodeタグとは?使い方とサンプルコードを解説

    <code>タグは、HTML文書内でソースコードを整形して表示するための要素です。たとえば、Javaなどのプログラムコードを読みやすい形でWebページ上に表示したい場合に、この<code>要素を活用します。 <code>要素で囲まれたテキストは、デフォルトで等幅フォント(モノスペースフォント)で表示されるため、コードが見やすくなります。それでは、実際の実装例を見ていきましょう。 サンプルコード <!DOCTYPE html> <html> <body> <h1>Header Files</h1> &

  2. C言語入門:ネストされたforループとbreak・continue・goto文の使い方を徹底解説

    ネストされたforループ(二重ループ)とは、forループの本体の中に、さらに別のfor文が含まれている構造のことです。表や行列の操作、九九のような組み合わせ処理など、「繰り返しの中でさらに繰り返しが必要な場面」でよく使われます。全体の繰り返し回数は、外側のループの繰り返し回数 × 内側のループの繰り返し回数で求められます。ネストされたforループのサンプルプログラム以下は、ネストされたforループを使用したC言語のプログラム例です。#include<stdio.h> main( ){     int i,j;   &nbs