- 作者: ジョン・マコーミック,長尾高弘
- 出版社/メーカー: 日経BP社
- 発売日: 2012/07/19
- メディア: 単行本
- 購入: 15人 クリック: 437回
- この商品を含むブログ (21件) を見る
Kindle版もあります。こちらのほうが低価格。
- 作者: ジョンマコーミック
- 出版社/メーカー: 日経BP社
- 発売日: 2013/10/10
- メディア: Kindle版
- この商品を含むブログ (6件) を見る
内容紹介
コンピュータを使い物にするアルゴリズムにはどういうものがあるか、今日的な視点から選んだ実際に役立っている9のアルゴリズムのアイデアを、章ごとに掲げてわかりやすく説明した読み物です。
図を多用し、その仕組みをたとえを使いながら見せることに重点を置いています。著者が選んだ基準は、
(1)インターネットでメールやブラウザを利用する一般ユーザーの日常のコンピュータで使われていること、
(2)特定の状況や高度のソフトウェアだけに使えるものは除くこと、
(3)基本的にコンピュータ・サイエンスの理論に基づくこと、です。
扱っている9のアルゴリズムのテーマは、検索エンジンのインデクシング、ページランク、公開鍵暗号、誤り訂正符号、パターン認識、データ圧縮、データベース、デジタル署名、計算不能性。
世界中で、かなりの数の人が、Googleを日常的に使っています。
しかしながら、「検索エンジンというのは、どういうふうにして、適切な検索をしているのか?」というのを考えてみたことがある人は、案外少ないのではないでしょうか?
ブログやサイトを運営している人には「検索エンジン対策」を意識している人も多いと思われますが、そういう人でも「コンピューターは、何を基準にして検索をし、ページをランキングしているのか?」を熟知している人は、そんなにいないはずです。
一昔前ならともかく、最近は「検索順位を上げるための、キーワードばかりを含んだダミーページ」みたいなのも、かなりの高確率で取り除いてくれていますし。
どんな優秀なコンピュータでも、それを動かすプログラムがないと何もできない。
そして、そのプログラムのなかで、実際に作業の「やりかた」を指定する「アルゴリズム」は、人間の手作りなのです。
いったんその「公式」を決めてしまえば、どんなに計算が早い人間でもコンピュータにはかないませんが、その「公式」は、いまのところ、人間にしかつくれないのです。
この本では、実際にコンピュータで使われている「アルゴリズム」が、なるべくわかりやすく説明されています。
読んでいくと、日頃何気なく使っているコンピュータのプログラムの中には、こんなにさまざなま人間のアイディアが反映されているのか、と感動してしまうのです。
「公開鍵暗号法」の章のなかで、著者は、こんな質問を読者にしてきます。
あなたは友人のアーノルド、敵対するイブの2人と同じ部屋にいる。イブがメッセージを理解できないようにしながら、アーノルドにメッセージを秘密裡に送りたい。メッセージはクレジットカード番号でもよいが、話がややこしくならないように、そのクレジットカード番号は、1から9までの1桁の数字というおそろしく短いものだということにしよう。また、アーノルドとの通信では、イブも立ち聞きできるくらい大声で話すという方法しか使えないものとする。耳打ちするとか、手書きのメモを手渡すといった巧妙な方法は許されていない。
もしあなただったら、どんな方法を使って、アーノルドに「秘密の番号」を伝えますか?
僕はこれを読んで、ちょっと考え込んでしまったんですよね。
答えを言われてみれば、そんなに難しい話ではないのだけれども。
その答えのうちのひとつとして、著者はこう述べています。
あなたが送ろうとしているクレジットカード番号は7だとする。条件を満たす方法が1つある。まず、アーノルドは知っているがイブは知らない番号について考える。たとえば、あなたとアーノルドは昔からの友人で、子どもの頃は同じ番地に住んでいたとする。実際、322プレザントストリートのあなたの家の前庭で、あなたたち2人はよく遊んだものとする。また、イブは子どもの頃のあなたのことを知らず、特に、あなたとアーノルドがよく遊んだこの家の住所を知らないものとする。その場合、あなたはアーノルドに次のように言うことができるだろう。「ねえ、アーノルド、僕たちが子どもの頃よく遊んだプレザントストリートのうちの家の番地を覚えている? その番地の数字に私が今考えているクレジットカードの1桁番号を足すと、答えは329になるよ」。
こういうふうに「共有の秘密」を使えば、第三者に知られることなく「番号の伝達」ができるというわけです。
そしてこういう発想が、コンピュータ上の「秘密保持」にも利用されているのです(もちろん、セキュリティのために使われているのは、もうちょっと複雑なシステムなのですが)。
この本を読んでいてあらためて感じるのは、複雑そうにみえるコンピュータのシステムも、基本になっているのはシンプルな考えであることと、コンピュータの運用というのは、セキュリティであるとか、万が一のアクシデントの際に、いかに致命的なミスを起こさないようにするかが重要視されていること、なんですよね。
コンピュータのアルゴリズムの話ではあるのですが、読んでいると「こういうふうにコンピュータを運用できる人間って、やっぱりけっこうすごいんだな」と感心してしまいます。
いや、本当にすごいのは「ごく一部の天才」なのかもしれないけれども。
この本の最後の章では「コンピュータでは絶対に解決できない問題があることの証明」が紹介されています。
そこで、こんな言葉が出てきます。
しかし、はっきり言えることが1つだけある。人間の脳が原則としてコンピュータによってシミュレートできるものだと考えるなら、脳にもコンピュータと同じ制限がかかっているということだ。言い換えれば、どんなに賢く、どんなに訓練しても、人間の脳が解決できない問題がある、ということである。
人間の脳は、コンピュータでシミュレートできるのか?
僕は「将来的にはできるようになるのではないか」と考えています。
僕が生きているあいだには、難しいのではないかと思うけれども。
もしかしたら、「コンピュータの限界を知ること」は、「人間の脳の限界を知ること」なのかもしれませんね。
正直、「同じような内容の本のなかでは、わかりやすいほうだと思うけれど、数学的思考が苦手な人には、けっこう理解するのが大変」だと思います。
僕も数学はあまり得意ではないので、とくに後半の章は、ざっと読み流すような感じになってしまいました。
「よくこんなこと考えつくなあ」と、ただ感心するばかりで。
プログラムとかコンピュータが動く仕組みに興味があり、予備知識もある人にとっては、すばらしい内容だと思いますので、興味のある方は、ぜひ読んでみてください。
やっぱり「ルールをつくれる人」って、すごい。