研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

改善点3。

2008-04-27 13:07:32 | Weblog
ダイクストラ法では、配列もしくは構造体の配列を一定の値で初期化しなければならない。ダイクストラ法自体の実行時間に比べ、初期化は5%ほどであるため、簡単には無視できない。

用いる型が unsigned int であれば、最大値である 4294967295 の値を INFINITY として扱っているが、通常は以下のような for ループで行うことが多いだろう。


for (i = 0; i < size; i++) {
 node[i] = INFINITY;
}


ただ、構造体のコピー(代入)はコストも高いために、最大値のような値をセットするためには、memset() を用いた方が効率的である。しかしながら、memset() は1バイトずつ書き込むことになるので、決まった値のときに有効である。

たとえば、unsigned int の最大値であれば、全ビットの値が1であるので、以下のようにすれば、セットできる。

memset(node, 255, sizeof(node_t)*size);