極悪です。
「初心者のためのプログラムを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?