書評「ベッドルームで群論を」

ベッドルームで群論を
タイトルを見ると、群論の本かと思うかも知れない。しかし、それはフェイクだ。騙されてはいけない。これは第一級のプログラムの本だと思って間違いはない。
好きな話をピックアップすると

    • ベッドルームで群論

タイトルにもなった群論の話。マットレスをずっと同じままで使うと凹み位置が偏るので一定周期でひっくり返す必要がある。表裏と、上下と組み合わせはさていくつ?という話題から群論に入る。素晴らしい。が、プログラムの話はでない。

    • 資源としてのランダムさ

乱数発生についての話、さりげなくlispという単語が出てくる、基本的にはモンテカルロ法についての話。注意深く読めばawkのsrand()の話をしていることに気がつくだろう。それ以外の話についてもクソ面白い。なるほど、十分にランダムを求めるには原子崩壊を使うのか、とかさりげなくCSMA/CD(イーサネット)の衝突後のランダム待ちに触れていたり。

    • 金を追って

富の分配をシミュレーションする話。金持ちはより金持ちになり、貧乏は増えていくという話。ゼロサムなモデルでこんなに解り易い解説を初めて読んだ気がする。FXとかやる人はこういう話は知っておいた方がいいと思う。

    • 遺伝暗号をひねり出す

DNAの二重らせんの導出までの過程に光をあてる。なぜかジョージ・ガモフの名前が出てくる(ビッグバンって名前をつけた物理学者)なぜか暗号の話になる。ATGCとか生化学の知識がなくてもパズルであったことを説明してくれる。面白い。

    • 死を招く仲違いに関する統計

戦争による死亡者をマグニチュードとして捉え、対数グラフを作り、話を展開し、戦争を分析する。どの年代の戦争が戦死者が最も多いのか、を説く。これは素晴らしい数学と社会の融合の例だと思う。

    • 大陸を分ける

アメリカの話。分水嶺の線の引き方についての考察。と思ったら、分水嶺を引くためのアルゴリズムの話になり、実際にプログラムを動かした結果が出てくる。

    • 歯車の歯について

歯車の歯の数についてのアルゴリズムについての説明。素晴らしい。なんと、あのクヌース先生の小切手が載っている。額面はきっちり256(←笑うとこ)

    • 一番簡単な難問

子どもたちを二つの均等な能力のチームに分ける手法から入り、NP完全問題の話に入り、物性論との類似性を紹介する。本当にため息が出るほど素晴らしい。

    • 名前をつける

あるインターネットサービスでブライアンという名前は既に使われているのでブライアン13311ではどうだろう、という話(sengoku38みたいなもんかね?)から、名前空間として使える総数と、現在の使用率についての説明が始まる。インターネットの国別のドメインの話にからめてIANAの話が出てくる。そして、ハッシュ法についての解説がある。

    • 第三の基数

3進法がいかに便利かを説く。目からウロコがボロボロおちた。大変素晴らしい。特に2よりも3の方が、eに近いというのは驚いた(知らなかったよ、というか意識したこともなかったよ)

見る限り、モロにプログラムの話。javaだと、==(等号演算子)と、.equalsの使い分けの話。そして、代入演算子の説明
。algol系の代入演算子とC言語の代入演算子との違いとか。プログラマならここからディープコピーとシャロウコピーの話とかしそう。だが、本書は数学の本だから、実は全ての電子は同一ではないのか、という話につなげる、ぉぃぉぃ、それは物理だよ。しかし、濃い話だな。面白い。

    • 長く使える時計

1万年使える時計の話、やっぱりアルゴリズムと歯車の話。ネタの使い回しではなく、カレンダーについての深い知識を歯車で実装する方法についての説明だった。ええ、面白いです。満足しました。


帯にマーティンガードナーが「退屈なページなど1ページもない」と書いてあるが、これは誇張ではなくその通り。
惜しいのはこの本が本屋の数学の書棚に置かれていること、これは間違いなく「ハッカーと画家」の隣に置くべき本です。プログラマにとって必須の知識かと言われると迷う部分もあるけど、プログラマならこの本の面白さが理解できるはず。
おまけ:著者ブライアンヘイズのブログ http://bit-player.org/