プログラミング名著100選(2)


「ほげほげのプログラムが書ける」と言った場合、プログラミング言語そのものを理解しているというよりは、何かやりたいことがあって、それをプログラムとして書き起こせる、ということを意味する場合が多い。プログラミング言語の構文をいかに習得しようとも、プログラムが書けないことは多々ある。


少しでもプログラミング言語を勉強した者ならば実感しているだろうが、プログラミング言語そのものにはわずか数十のkeywordしか出てこない。せいぜい、1時間か2時間勉強すれば覚えられるはずだ。だけど、それだけでプログラムが書けるようになるわけではない。一体、何が足りないのだろうか?


これにはいろんな要因があるのだが、まず「データ構造とアルゴリズム」に対する理解が不十分だということが挙げられる。


アルゴリズムC〈第1巻〉基礎・整列
アルゴリズムC〈第2巻〉探索・文字列・計算幾何
アルゴリズムC〈第3巻〉グラフ・数理・トピックス


私はN.ヴィルト先生の『アルゴリズム+データ構造=プログラム』で勉強したが、この本は、いまや入手困難だ。その後、この本をベースにして類書が数多く出版されたので、この分野の入門書として、いくつか挙げておく。アルゴリズムCシリーズはこの手の教科書として定評がある。



定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)
珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造


『定本 Cプログラマのためのアルゴリズムとデータ構造』は入門書にちょうどいい。


『珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造』 この本はC/C++でサンプルが書かれており、入門〜中級者ぐらいが読むのに適している。


まあ、リスト、スタック、キューに始まり、2分木〜ソートetc..について書いてある本は数多くあるし、あまりひとつの本にこだわる必要はないと思う。



Javaプログラマのためのアルゴリズムとデータ構造
Javaによるデータ構造とアルゴリズム解析入門

また、データ構造の説明はCで書くよりJavaで書くほうが(ガーベジコレクタがあったり、説明のためにGUIを利用できたりするので)わかりやすいことは多い。そんなわけでここでは『Javaプログラマのためのアルゴリズムとデータ構造』と『Javaによるデータ構造とアルゴリズム解析入門』の二冊を紹介しておこう。




アルゴリズムイントロダクション 第1巻 数学的基礎とデータ構造
アルゴリズムイントロダクション 第2巻 アルゴリズムの設計と解析手法
アルゴリズムイントロダクション 第3巻 精選トピックス


あと、中級以上の人には、アルゴリズムイントロダクションをお勧めする。これはMITでの計算機アルゴリズムの教科書として利用されている、"Introduction to Algorithms" の翻訳であり、3分冊になっている。


アルゴリズムの設計と解析手法 アルゴリズムイントロダクション
『精選トピックス アルゴリズムイントロダクション
『数学的基礎とデータ構造 アルゴリズムイントロダクション


Introduction to Algorithms, Second Edition




原書は、第2版が出ているので、英語が苦にならなければ原書の『Introduction to Algorithms(2nd Ed)』を読まれたし。




ただ、アルゴリズムとひとことで言っても、その対象とする範囲は広大なので、たとえばグラフ理論ならグラフ理論の教科書で勉強したほうがいいだろうし、数学的な基礎は数学の本で勉強したほうがいいと思う。だからここで紹介するのは本当に基礎的な事項を学ぶために必要なものだけにとどめた。