アルゴリズムデザインの夢

キリンハートランド

なんか、今日、アルゴリズムデザインを読む夢をみてた
夢の中で、id:kiwanamiの人が「これを読んでアルゴリズムを覚えても、全部はどうせ覚えられないから意味がない」などと言ってた。
実物のid:kiwanamiは、もちろんそういうことを言う人ではなく、むしろ逆に、そういうことを言われたときに説明をする側なので、どうしてその発言がid:kiwanamiマッピングされたのかというのは面白いのだけど、最近よく話をするのがid:kiwanamiなので、手近なところがでてきただけというのが有力なんだと思う。


まあ、それはいいとして、実際問題、アルゴリズムデザインに対して「これを読んでアルゴリズムを覚えても、全部はどうせ覚えられないから意味がない」ということを思う人はいるのではないかと思う。
まあ、これは夢の中のセリフなので、現実的に考えると、「アルゴリズムを勉強しても、どうせ代表的なアルゴリズムは実装されているし、アルゴリズムが必要になる仕事も少ないし、たとえ必要になったとしてもそのとき調べればいい」と思う人は多いと思う。


たとえば、アルゴリズムの勉強が、ソートや検索、リストやキューの実装方法について学ぶことであれば、確かに現在の処理系では、すでに実装されたライブラリが標準でそなわっていて、改めて学ぶ必要性は低い。
また、数値計算やグラフィックのアルゴリズムでは、自分で実装したものを実戦に投入することは難しいし、そもそも実戦で使えるようなグラフィックアルゴリズムの勉強は「アルゴリズムの勉強」の範疇を超えている。


けれども、アルゴリズムの勉強は、特定の問題についての実装法を勉強することではない。
そうではなくて、アルゴリズムの勉強は、問題が与えられたときにそれを実現するための実装にたどりつくための方法を勉強することで、ソートや検索などは、その例としてあげられているにすぎない。
そう考えれば、プログラマとして仕事をするときに、問題から実装を得るための方法が必要ないとはいえないだろうし、アルゴリズムの勉強をしていないと、アルゴリズムの勉強として出てくるような解決方法が必要になったことすら気付かないことも多い。
その結果、いびつで実行効率が悪く結果も良くない実装を時間をかけて大量のコードで記述した、ということになる。


そうは言っても、「アルゴリズム入門」と題して、アルゴリズムの実装の羅列を行っているだけのJavaによるはじめてのアルゴリズム入門のような本も少なくない。
ここまでひどくないにしても、データ構造→ソート→探索ときて最後に付けたしのようにアルゴリズム設計が載っているような構成になっているアルゴリズム本は多い。
データ構造やソート・探索は基本だし、それなりに記述量が必要なので、こういう構成になるのは仕方ないのだけど、こんな本ばっかりだと、アルゴリズムの勉強というのはソートと探索の実装方法を知ることだと思ってしまうのも無理はない。


問題だったのは、アルゴリズムの設計手法に焦点を絞った定番の本がなかったことだと思う。アルゴリズムデザインは書名のとおりアルゴリズムの設計手法についての本で、定番になりうる内容のよさもある。
目次を見ると、他のアルゴリズムのように、問題のカテゴリごとに章がわけられているのではなく、動的計画法、分割統治法というようなアルゴリズムの設計手法ごとに章がわけられていることでもわかる。
http://www.amazon.co.jp/gp/product/toc/4320122178/


ただ、この本はレベルが高い情報系大学でも院まで教科書として使えるような内容で、一般のプログラマスキルアップのために読む本としては難易度が高すぎる。
ファインマン物理学を読む」とか「ソフィーの世界の世界」みたいに、「アルゴリズム・デザインを読む」のような本が必要なんじゃないかと思う。

アルゴリズムデザイン

アルゴリズムデザイン