快感

今日、仕事で他人が書いたプログラムの手直しを頼まれた。そのプログラムはいわゆる便利ツールで、昔は処理すべきデータが少かったから十分な測度で動作したが、最近急激にデータ量が増えて、どうしようもなく遅くなったようだ。それを実用に耐えうる測度にしてほしいとのことらしい。プログラムをもらった時点での/usr/bin/timeの結果は以下の通り

30.33user 0.01system 0:33.79elapsed 89%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (435major+211minor)pagefaults 0swaps

約30秒。プログラムの内容は一般的な(1)データの読み込み(2)検索(3)整形(4)出力というもので、結構頻繁に使われるものらしい(私は使ったことが無い)。その手のもので30秒はたしかに遅い。

で、ひたすら最適化した結果。

0.08user 0.00system 0:00.51elapsed 15%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (437major+166minor)pagefaults 0swaps

約0.08秒。つまり、約379分の1の時間で終わる。われながら感動。もちろん手直しどころじゃないぐらい変更をした(ほぼスクラッチから書き直したと言っても良い)。やっぱり、ある程度大量のデータを扱うときはデータ構造をちゃんと考えないとダメ。データ構造によって検索周りの処理がいくらでも速くなるから。


なんか、この作業しているときに『俺、やっぱりプログラム書くの好きだな』って思った。そう、これが言いたかった。