条件判定の数を削減するために置くダミーのデータ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/22 02:53 UTC 版)
「番兵」の記事における「条件判定の数を削減するために置くダミーのデータ」の解説
ループの終了条件が複数ある場合に、条件判定の数を削減するために置くダミーのデータ。この意味での番兵を使った最適化技法を番兵法(-ほう)と呼ぶ。 まず、1の語義に近い例を見る。 以下のC言語プログラムは、整数 entry と要素数 len の配列 a が与えられたときに、a[i] <= entry < a[i+1] となる添字 i を求める。ただし a[len-1] <= entry のときは、a[len] は存在しないが、len-1 を返す。また entry < a[0] のときは -1 を返す。 int selectEdge(int entry, int a[], size_t len){ int i; for (i = len - 1; i >= 0; i--) { if (a[i] <= entry) break; } return i;} このプログラムには、ループ終了判定として i >= 0 と a[i] <= entry の2つの条件が現れる。しかし、a[0] にダミーのデータとして、常に a[0] < entry を満たす値を入れておけば、以下のように単一の終了条件に書き直すこともできる。 int selectEdge(int entry, int a[], size_t len){ int i; for (i = len - 1; ; i--) { if (a[i] <= entry) break; } return i;} 番兵法はループ中の条件判断を削減できるため、実行時間の削減が非常に重要な場合によく検討される。1 回の条件判断にかかる時間は短くても、ループで繰り返す場合には大きな差となる場合がある。しかしソース上で終了条件がわかりにくくなる可能性も高く、現代の高速化したコンピュータにおいては必ずしも歓迎される技法ではない。採用にあたっては、その利点・欠点を十分に考慮する必要がある。
※この「条件判定の数を削減するために置くダミーのデータ」の解説は、「番兵」の解説の一部です。
「条件判定の数を削減するために置くダミーのデータ」を含む「番兵」の記事については、「番兵」の概要を参照ください。
- 条件判定の数を削減するために置くダミーのデータのページへのリンク