作者: dune
日時: 2004/8/26(01:19)
極悪です。

「初心者のためのプログラムを10倍早くする方法」(「速く」ではなく
「早く」です・・・なんかスピード感がない)というメルマガがあって、
そのバックナンバー:

http://backno.mag2.com/reader/BackBody?id=200408031800000000135512000

によると、
「繰り返し回数の多いループを内側にすると繰り返し回数が少なくなる!」
らしいです。なんか直感と違います。例えば VGA サイズの画像のドットを
数えるのに(処理時間も数えた結果=総ドット数に比例すると考える)、

for(int 1 = 0; i < 640; ++i){
    for(int j = 0; i < 480; ++i){
        ++pixel;
    }
}

と書いても

for(int j = 0; i < 480; ++i){
    for(int 1 = 0; i < 640; ++i){
        ++pixel;
    }
}

と書いても結果は同じです。せいぜい、ループの開始・終了のオーバー
ヘッドが減るくらいの効果しかない気がするのですが。記事の内容によ
ると、

外側のループ:640 回        480 回
内側のループ:640x480 回    480x640 回
--------------------------------------
合計        :1844800 回    1844352 回

となるから、繰り返し回数の多いループを内側にもってきた後者のほうが、
1844800 - 1844352 = 1198 回ぶん処理が早く終わるような説明です。なぜ
合計するのかもわかりません。メールを出そうと著者のアドレスまで確認
しましたが、自分の勘違いかもしれないとか、他のことを調べてるうちに
たまたま見つけて読んだだけだしぃ、とも思ってます。どう解釈すればい
いんでしょう?
-- 
極悪, FZH01112 at nifty.com
http://hpcgi1.nifty.com/dune/gwiki.pl?