ninjinkun's diary

ninjinkunの日記

アルゴリズム・クイックリファレンス第2版を読んだ

現場プログラマーアルゴリズム再入門本(勝手に付けた副題)、アルゴリズム・クイックリファレンス第2版を読んだ。今年の2月に訳者の @hydrakecat さんから献本いただいていたのだが、感想を書くのが遅くなってしまって申し訳ない。

ちなみにこの本を読んでいる自分の背景を説明すると、一応大学は情報系だが、アルゴリズムや理論寄りの話は苦手。仕事ではスマートフォンアプリのコードを書くことが多く、アルゴリズムに直接触る機会はほとんど無いという人間である。

内容

第1版をぱらぱら読んだことはあり、コンパクトで読みやすい本だなと感じていた。第2版では赤黒木が削られたり、Pythonのコードが追加されたりしたようだが、受ける印象はそんなに変わってなかった(と言いつつ第1版と比較してみると、C言語の箇所が減っている)。

前の版から引き続き、とにかく実際に動くコード、実際の計算機での動き方にページが割かれている。アルゴリズムの性能比較についても、計算量の表記に加えて、実際に動かしたベンチマーク結果が付いているのは、この手の本としては珍しいのではないかと思う。

原題の Algorithms in a Nutshell をそのまま訳するとたぶん「アルゴリズムのかいつまんだ説明」という感じになると思うが、解説は本当に簡潔で、証明はほぼ省かれている*1

一方で、AIにおける経路探索(ここで言うAIはゲームの敵キャラクターの移動ルーチン)や計算幾何学は一般的なCSの教科書には含まれないものだと思う(ゲーム作りの教科書には書いてあるかもしれないが)。全体を貫いている簡潔さの方針からすると、ここを削ってもっとコンパクトにする手もあったと思うので、これはあえて入れているのだろう。アルゴリズムの多様性を知って欲しいという著者の意思を感じる。

最後の「12章 結び: アルゴリズムの諸原則」には実際にコードを書く上で大事なことがコンパクトに詰まっているので、ここだけでも読む価値があると思う。「汝のデータを知れ」「空間と時間のトレードオフを使え」「問題を別の問題に帰着させよ」という節のタイトルだけでもはっとさせられる。

おわりに

自分は定期的にCSの基礎を復習することには、思わぬ再発見があったり、書くコードに自信が持てる効果があると感じている。「このような強固な基盤の上に自分の仕事がある」と再確認できることは、ソフトウェア製品を作る自信を高めてくれると思うのだが、他のソフトウェアエンジニア諸兄はどうお考えですか。

何にせよ、アルゴリズムの勉強は競技プログラマーにはほど遠い自分のような人間にも楽しい。これからも時々本書を取り出して、ぱらぱらめくって楽しみたい。

アルゴリズムクイックリファレンス 第2版

アルゴリズムクイックリファレンス 第2版

*1:アルゴリズムの教科書としてはアルゴリズム・イントロダクションが有名だと思うが、かなりボリュームがある上に証明が多くて難しいので、自分にとっては正直に言って日常的に読むには重い。本書はアルゴリズム・インロトロダクションのさらにイントロダクション版というか、抜粋版としても機能すると思う。