アルゴリズムを学ぶのに最適な教科書
アルゴリズムの理解に関して多少の疑問を抱いていたので、この前、本屋でアルゴリズム関連の本を見てきた。最近はゲームプログラミング関連の本が充実してきた*1のと同じようにアルゴリズム関連の本もかなり充実していた。
その中でこの本を読んでいればもっと速く理解が深まったはずだ!と私が太鼓判を押す本を忘れないうちにアフィってみたいと思う。
- プログラミングに活かすデータ構造とアルゴリズムの基礎知識 UNIX MAGAZINE LIBRARY
http://www.amazon.co.jp/exec/obidos/ASIN/4756144527/studiokingyo-22
一つ一つのアルゴリズムに関する説明が細かく書かれている。それほど難しい文体でつづられているわけでもなく、詳しい割にとても読みやすい本だった。*2この本さえあれば大体のメジャーなアルゴリズムの詳細を学ぶことが出来るのではないかと思える本だった。私に予算があれば是非手元に置いておきたいと思う。
- プログラミングの宝箱 アルゴリズムとデータ構造 C magazine
http://www.amazon.co.jp/exec/obidos/ASIN/4797324198/studiokingyo-22
これも分かりやすく書かれていて結構いろんなアルゴリズムを説明している良書。
上記の書籍にも引けを取らない内容と載っていないアルゴリズムの解説など これもお勧めできる本だった。
http://www.amazon.co.jp/exec/obidos/ASIN/4874084141/studiokingyo-22
http://www.amazon.co.jp/exec/obidos/ASIN/4774112046/studiokingyo-22
の二冊である。非常に少ない・・・というのはおいといて・・・
とにかくC言語による最新アルゴリズム事典に載っている沢山のアルゴリズムかなり助けられたので
「アルゴリズムの学習はコレくらいで十分かな?必要に応じてインターネット上で拾っていけばいいし・・・」
と高をくくっていた部分があったことは否定できない。
確かに、アルゴリズムの学習を怠っていたので自分でAVL木や赤黒木を組むことが出来ない。
もちろん普通のソフトウェアを作る上で不必要かと思われる動的計画法やその他、純粋数学に近い概念の学習もおざなりであった。
また、ハッシュ法も概要だけしか知らなかったのでどのようにしてハッシュの衝突問題を解決するかという方法も数種しか知らなかった。
しかしながら、前述で紹介した太鼓判を押す本にはその方法を沢山紹介してあったので「なるほど」と感じ入ってしまった。
やはり世の中沢山アルゴリズムが存在するようでそれらを全部理解することは不可能ではないか?と思ったりもするのだが、アルゴリズムの存在と実装の仕方、どのような局面で使用すると効果的かくらいは頭に入れておきたいと思っている。
だが、自分で作ったモジュールにバグが無いかどうかをチェックするにはアルゴリズムへの深い理解が必要だと考えると時間の兼ね合いに関して 痛し痒し といった感じはぬぐいきれない
*1:http://d.hatena.ne.jp/studiokingyo/20060206#p2
*2:詳しい説明の書いている本は読みにくい本であることが多い