期待されない答え
http://d.hatena.ne.jp/skelton_boy/20091217/1261053652の話、というよりhttp://d.hatena.ne.jp/Isoparametric/20091219/1261201890の話。ポータブルに仕様の穴を突く方向で考えてみた。
/* MyTypeの定義 */ typedef int MyType[1]; void set(MyType m, int val); void inc(MyType m); void print(MyType m); int main(void) { MyType m; set(m, 0); /* mを0にセット */ inc(m); /* mをインクリメント */ print(m); /* 1と表示される */ return 0; } /* 各関数の実装 */ static int m;/* mがローカルなんてどこにも書いていないよね! */ void set(MyType m, int val) { do { extern int m; m = val;/* mを0にセット */ } while (0); } void inc(MyType m) { do { extern int m; ++m;/* mをインクリメント */ } while (0); } void print(MyType m) { puts("1");/* 1と表示される */ }
〆。
set(), inc()は冗談だけれど、print()は現実に起こり得る間違いなので注意。
ソートの速度を決める要因についてメモ
思いつく限りの要因をあげてみる。
- データ内容
- 個別比較が必要かどうか
- 比較にかかる時間
- 比較の分割性
- 比較の並列度
- データ
- 要素数
- 読み込みにかかる時間
- 読み込みの並列度
- 交換にかかる時間
- 交換の並列度
- ワーキングメモリ
- 初期状態
- どの程度ソートされているか
- 事前にソートの程度を知っているか