正三郎さんのお薦めという事で、手に入れてみた。
共立出版「アルゴリズム・サイエンスシリーズ」: ホットコーナーの舞台裏そのとき、見つけたのが、休刊したbit誌など我々コンピュータ業界ではおなじみの共立出版が新たに刊行を開始した「アルゴリズム・サイエンスシリーズ」。
本シリーズ「アルゴリズム・サイエンス」の嚆矢である「入口からの超入門」ならびに「出口からの超入門」は、読んで字のごとくアルゴリズムの入門である。入口と出口に分けているのがニクい。入口はまだアルゴリズムというものを意識していない人々のための、そして出口はすでにアルゴリズムの威力は知っていても、日々の業務に負われて仕様書をそのままプログラムに書き直すのに疲れ気味の人々にアピールするよう出来ている。
入口からの超入門 目次- 数式における括弧の威力
- 変数の威力
- プログラムの威力
- コンパイラの威力
- ループの威力
- 配列の威力
- データ構造の威力
- 分岐命令の威力
- 再帰の威力
- 2分探索の威力
- 乱数の威力
- 計算幾何学の威力
- ウォームアップ
- 情報を漏らさない
- 通信量を減らそう
- 乱数を利用する
- オンラインアルゴリズム
- 近似アルゴリズム
- 厳密アルゴリズム
- 幾何の計算
- 分散アルゴリズム
- オークション
- ウェブグラフ
- 利己的ルーティング
- あとがきに代えて
それでは、アルゴリズムとはなにか、方法である。それも、「愛情をこめて」とか「気合いで」とかという、解釈が曖昧で誰でも実行できるとは限らない、昨今巷にあふれている「〜の技術」という本に書かれた「技術」ではなく、「その方法を一つ一つ愚直にたどれば、必ずその問題が解決する」という方法である。だからアルゴリズムは計算機でなくても役に立つ。が、曖昧さを許さない、しかし愚直に実行する機械である計算機と相性が抜群だということは、アルゴリズムという言葉を知らない人でも直感的に理解できるだろう。
その意味で、アルゴリズムは一生ものだ。いや、一生ものどころかその寿命は半永久的。互除法のように数千年前に見つかって(Euclidよりに前に見つかっていたのは確実)、今でも実地で使われているものも少なくない。それに比べれば、電脳言語ですら刹那的であり、極論してしまえば言語も単にアルゴリズムを清書するための道具に過ぎない。
その点を考慮すると、「超入門」の二冊は安い。確かに2,400円という価格は、ページ数の少なさを考えれば高く感じるが、各ページにのっていることの価値を考えれば充分おつりがくる。「入口からの超入門」に書いていることが血肉になっている人であれば、ソフトウェアエンジニアとしては確実に職を得る事ができるだろうし、「出口からの超入門」に書いてあることを抑えている人であれば、そのエンジニアの中でも一目おかれる存在となることは折紙をつける。
その一方で、アルゴリズムというのはとっつきにくいものである。純粋な方法であるがゆえに、最も純粋な言語=数学で書かれていることも多く、それがこういった学術的な書から人々を遠ざけているところもある。しかし、噛み砕きすぎてはもっともおいしいところを書き損ねる恐れもある。このあたりのバランスが「超入門」は絶妙で、数式ではなく人が読みやすい、Cに似たコードないしCそのもので書かれているし、例題も難しすぎず易しすぎない。
きっちり学びたい人には最適の二冊だと思う。それにしても日本の人は幸いである。こういう基礎本を自国語で読む事ができるのだから。
Dan the Bit Cruncher
P.S. 「入口からの超入門」の以下の問題は、誤植なのか書き落としなのか。
P.221.2 整数を32ビットで表現するとき、表現できる最大の整数は約20億桁であった.では,倍の64ビットを使うと、何桁の整数まで扱えるようになるか.
文脈からいくと「桁」を間違えて入れているようにも見える。32ビット「アドレス空間」に相当する表現も出て来ていない。
コードなどはほとんどないですよ。
アルゴリズムはほとんど自然言語で記述されています。
「入り口〜」は古典的かつ有名なアルゴリズム、
「出口〜」は最近のACMの学会でAcceptされるような話題の紹介が多いかと思います。