2007年05月30日 04:00 [Edit]

書評 - アルゴリズム・サイエンス (入口|出口)からの超入門

正三郎さんのお薦めという事で、手に入れてみた。

共立出版「アルゴリズム・サイエンスシリーズ」: ホットコーナーの舞台裏
そのとき、見つけたのが、休刊したbit誌など我々コンピュータ業界ではおなじみの共立出版が新たに刊行を開始した「アルゴリズム・サイエンスシリーズ」。

本シリーズ「アルゴリズム・サイエンス」の嚆矢である「入口からの超入門」ならびに「出口からの超入門」は、読んで字のごとくアルゴリズムの入門である。入口と出口に分けているのがニクい。入口はまだアルゴリズムというものを意識していない人々のための、そして出口はすでにアルゴリズムの威力は知っていても、日々の業務に負われて仕様書をそのままプログラムに書き直すのに疲れ気味の人々にアピールするよう出来ている。

入口からの超入門 目次
  1. 数式における括弧の威力
  2. 変数の威力
  3. プログラムの威力
  4. コンパイラの威力
  5. ループの威力
  6. 配列の威力
  7. データ構造の威力
  8. 分岐命令の威力
  9. 再帰の威力
  10. 2分探索の威力
  11. 乱数の威力
  12. 計算幾何学の威力
出口からの超入門 目次
  1. ウォームアップ
  2. 情報を漏らさない
  3. 通信量を減らそう
  4. 乱数を利用する
  5. オンラインアルゴリズム
  6. 近似アルゴリズム
  7. 厳密アルゴリズム
  8. 幾何の計算
  9. 分散アルゴリズム
  10. オークション
  11. ウェブグラフ
  12. 利己的ルーティング
  13. あとがきに代えて

それでは、アルゴリズムとはなにか、方法である。それも、「愛情をこめて」とか「気合いで」とかという、解釈が曖昧で誰でも実行できるとは限らない、昨今巷にあふれている「〜の技術」という本に書かれた「技術」ではなく、「その方法を一つ一つ愚直にたどれば、必ずその問題が解決する」という方法である。だからアルゴリズムは計算機でなくても役に立つ。が、曖昧さを許さない、しかし愚直に実行する機械である計算機と相性が抜群だということは、アルゴリズムという言葉を知らない人でも直感的に理解できるだろう。

その意味で、アルゴリズムは一生ものだ。いや、一生ものどころかその寿命は半永久的。互除法のように数千年前に見つかって(Euclidよりに前に見つかっていたのは確実)、今でも実地で使われているものも少なくない。それに比べれば、電脳言語ですら刹那的であり、極論してしまえば言語も単にアルゴリズムを清書するための道具に過ぎない。

その点を考慮すると、「超入門」の二冊は安い。確かに2,400円という価格は、ページ数の少なさを考えれば高く感じるが、各ページにのっていることの価値を考えれば充分おつりがくる。「入口からの超入門」に書いていることが血肉になっている人であれば、ソフトウェアエンジニアとしては確実に職を得る事ができるだろうし、「出口からの超入門」に書いてあることを抑えている人であれば、そのエンジニアの中でも一目おかれる存在となることは折紙をつける。

その一方で、アルゴリズムというのはとっつきにくいものである。純粋な方法であるがゆえに、最も純粋な言語=数学で書かれていることも多く、それがこういった学術的な書から人々を遠ざけているところもある。しかし、噛み砕きすぎてはもっともおいしいところを書き損ねる恐れもある。このあたりのバランスが「超入門」は絶妙で、数式ではなく人が読みやすい、Cに似たコードないしCそのもので書かれているし、例題も難しすぎず易しすぎない。

きっちり学びたい人には最適の二冊だと思う。それにしても日本の人は幸いである。こういう基礎本を自国語で読む事ができるのだから。

Dan the Bit Cruncher

P.S. 「入口からの超入門」の以下の問題は、誤植なのか書き落としなのか。

P.22
1.2 整数を32ビットで表現するとき、表現できる最大の整数は約20億桁であった.では,倍の64ビットを使うと、何桁の整数まで扱えるようになるか.

文脈からいくと「桁」を間違えて入れているようにも見える。32ビット「アドレス空間」に相当する表現も出て来ていない。


この記事へのトラックバックURL

この記事へのトラックバック
アルゴリズム・サイエンス:入口からの超入門 (アルゴリズム・サイエンスシリーズ―超入門編) 大学の先生が書いた、大学の教科書を意識したアルゴリズム入門本。 電卓とコンピュータ...
[本]アルゴリズム・サイエンス:入口からの超入門【水玉製作所】at 2009年05月29日 14:34
「プログラムの基礎は知っておきたいけど、「アルゴリズム・サイエンス (入口|出口)からの超入門」まで手に入れて基礎からしっかりやるだけの根気も時間もないし、という方にはうってつけの本。 プログラムのからくりを解く 高橋麻奈 本書を読んでもプログラムを....
書評 - プログラムのからくりを解く【404 Blog Not Found】at 2007年06月04日 00:49
この記事へのコメント
>>すがちゃんさん
コードなどはほとんどないですよ。
アルゴリズムはほとんど自然言語で記述されています。
「入り口〜」は古典的かつ有名なアルゴリズム、
「出口〜」は最近のACMの学会でAcceptされるような話題の紹介が多いかと思います。
Posted by 通りすがり at 2007年06月03日 02:47
両方とも読んでみたいのですが、A5版てのに抵抗があります。
非常に小さく感じますが、コードが読み難くないですか?
それとシリーズ全16巻てのが怖い。全部欲しくなったら大変です(^^;
既に書評以外の数冊が気になってますけど…
Posted by すがちゃん at 2007年06月01日 18:32
こちらのエントリを見て、早速本屋に走ったのですが、
池袋大手書店A、B共に売り切れでした。
注文にしたのですが、出版元に在庫があるかどうか確認中だとか。

月末にはまとまった時間がとれるので、その時には手に入っていて、
読めているといいなと思いました。
Posted by 勉強中 at 2007年05月31日 12:04
-- とまっているよ さおのさき --

> 日々の業務
「負われて」ならば、それはまぼろしであると愚考いたします。
Posted by hirosp at 2007年05月30日 07:43
「2進で桁が倍なら10進でも桁が倍」という意図の問題を作りたかった。

というわけで最初は

整数を32ビットで表現するとき、表現できる最大の整数は10桁であった。

という文を書いた。でも

符号付整数のとき、ビット数を b とすると
表せる最大の整数は 2^(b-1) - 1.
それが10進でk桁で表せるということは、-1を無視すると
2^(b-1) = a*10^(k-1) (1 <= a < 10).
だから、ビット数が倍のとき
2^(2b-1) = 2 * a^2 * 10^(2k-2)
となって、10進の桁数は
a < sqrt 5 なら2倍引く1
a > sqrt 5 なら2倍.

というように a が重要で、桁だけじゃダメだなー
と思い、20億という具体的な数字に直した…
Posted by 邪推 at 2007年05月30日 07:13