見出し画像

【本】結城浩「数学ガール 乱択アルゴリズム」感想・レビュー・解説

本書は、数学を物語形式で扱った「数学ガール」シリーズの第四弾です。今回の副題は「乱択アルゴリズム」。全体的に、アルゴリズム(プログラム)や確率の話が中心になっていきます。
ざっとどんな感じで話が進んでいくのか、概略みたいなものを書いていこうと思います。


まずは基本設定から。このシリーズは高校を舞台にしていて、主要登場人物は4人+1人(プラスの一人は今回初登場)。
まず、主人公の「僕」。高校三年生で、数学が好き。数式が出てくると燃えるタイプで、人と数学の話をするのも好きだけど、一人で数学と格闘するのも好き。


次にミルカさん。「僕」と同じく高校三年生。才媛、という表現が相応しい女性で、数学が好きな人達に、常に教師となって、深遠な世界を垣間見させてくれる存在。クールなんだけど、時々弱さが垣間見える。そういえば今回は、ピアノ弾くシーンはなかったなぁ。
次は、テトラちゃん。高校二年生。「僕」に数学を教わりに来たことがきっかけで、常々数学談義をする仲になる。テトラちゃんは、分からない部分を放っておかず追求し、かつ、『どこが分からないのか明確に言葉で主張できる』という点が素晴らしい。努力家だけど、ドジっ子。


次に、「僕」の従姉妹で中学三年生のユーリ。「~にゃ」というような喋り方をする。時々「僕」の家まで来て、数学を教わっていく。ユーリはまだ中学生で、数学の知識は多くはないけど、論理に強い。侮れない。
そして最後に、本書で初登場のリサ。双倉図書館という、ミルカさんが関わりのある図書館のところの娘。赤髪でハスキーボイス(でも無口)。常にパソコンのキーボードを叩いている。プログラミングが得意。あと、クールに見えて意外に世話焼き。
そんな面々が、放課後集まったり、ファミレスでだったりと、とにかく色んなところで数学談義をする、という物語に乗せて、数学の面白さ・奥深さに迫っていく作品。


まずは、基本的な確率の話。有名な、「モンティ・ホール問題」も出てくる。
それからいきなりアルゴリズムの話が出てきて、僕は結構びっくりした。大学時代、C言語の授業をやったけど、もちろんまったく覚えてないし、プログラミングというのは本当に苦手。だから結局最後まで、アルゴリズムの擬似コードはほとんど読めなかったなぁ。
とはいえ、書いてあることを追っていけば、擬似コードが直接読めなくても理解は出来る。リニアサーチ・アルゴリズムという、ある数列の中にある数があるかどうかを調べるアルゴリズムについて、実行回数をどう評価するか、という展開。ここでの話は、本書におけるアルゴリズムの話の基本となるので、アルゴリズムが苦手な人は、まず初めのこれをちゃんと読むのがよいです。
その次、順列や組み合わせ、パスカルの三角形といった基本的な話が出てきた後で、『確率とは何か』という話になる。『公理から確率を定義する』という話の中で、確率分布や標本空間と言った言葉が出てくる。
そもそも、『確率』という言葉には三種類意味があるというのも初めて知りました。詳しいことは本書を読んでもらうとして、『公理的確率』『古典的確率』『統計的確率』(この三つの名称は、正式名称かもしれないけど、一応本書では、『これらをそれぞれ~~~と呼ぼう』という表現が使われているので、正式な呼び方ではないかもです)の三つがあるみたいなんですね。この話自体、テトラちゃんの、『確からしさ』という言葉に対する疑問から始まったわけで、テトラちゃんらしいなぁ、という感じがしました。
そこからさらに、期待値や期待値の線形性、インディケータ確率変数、なんていう話が出てきた後、僕が凄く面白いなぁ、と思った問題が出てきます。
それが、
『すべての目が出るまで、サイコロを繰り返して投げる。このとき、投げる回数の期待値を求めよ』
です。
なんか簡単そうなんだか難しそうなんだかさっぱりわからないんだけど、どこから考えたらいいんだか全然分からない、という意味では本当に取っ付きにくい問題です。でもこの問題の解答は面白かったなぁ。
そこからアルゴリズムの話に戻って、O記法という表現が出てきます。これは、アルゴリズムの実行ステップ数が、入力のサイズが大きくなった時、スピードがどれぐらい遅くなるのか、を表す表記法です。そしてその後で、バイナリサーチ、比較ソートという二つのアルゴリズムについて、O記法によって実行ステップ数を解析する話になります。やっぱりこの辺りのアルゴリズムの話は、なんとなくわかった気がする、という感じになってしまいますね。アルゴリズムの話は、僕には実に難しいです。
その次は行列の話。これまた学生時代僕の苦手だった分野です。ただ、本当に基本の基本からやってくれるんで(テトラちゃんが、どっちが行でどっちが列なのか分からなくなってしまう、と言った時、あー僕もそうです、と言いたくなりました。そこで書かれていた覚え方で、バッチリ覚えましたけど)、凄く助かります。ケーリーハミルトンの定理とか行列式とか、とにかく行列の一般的な性質について復習、という感じでしょうか。この辺りの話は、行列について知識をちゃんと持ってる人には退屈かもですが、僕みたいに行列苦手ってい人には復習がてら楽しく読めると思います。
そしてそこから、ピアノ問題に入るんです。これもなかなかに斬新な問題でした。このピアノ問題自体も相当面白いんですけど、ここでの話が、まさか最後の方デもう一度使われることになるとは思わなかったんで、その構成の美しさにビックリしましたですよ。
本書のどの問題も大体そうなんですけど、問題は物凄くシンプルで、具体的な例を考えるのはさほど難しくないんです。でも、一般的な式を導いたり解いたりというのはまるで歯が立たない。でも、説明を読んでいると、あーなるほど分かる分かる!という感じになる。そういう、本当に微妙なラインの問題のセレクトが相変わらず素晴らしいなぁ、と思いました。
ピアノ問題の後は、アリスの放浪問題が来て、ここでも、行列的な計算の工夫みたいなものが色々出てきます。
さてその次に、強正美優問題、というのが出てくるんだけど、まさかこの話がP≠NP予想に繋がっていくとは思わなかったんで驚きました。このP≠NP問題、僕はこれまでもいくつか数学の本を読んでる時に出てきたんだけど、イマイチ理解できなかったんですね。そもそも何が問題なのかが理解出来ない、という問題でした、僕の中では。
でもそれが、本書ですぐ解決してしまいました。P≠NP予想について僕が理解したことを書くと、大体こんな感じ。
まずP問題というのは、『効率的に解を見つけることが出来る問題』のこと。一方でNP問題というのは、『その問題の一般的な解を発見できるかどうかはともかく、ある解の候補が与えられた時に、それが確かに正しい解なのかどうかということは効率的に判定できる問題』のこと。
正確さを恐ろしく欠いて具体例を挙げると、たぶんこんな感じの理解でいいんだと思う。
P問題は、例えば『x+3=4』みたいな感じ。これは、x=1と『効率的に解くこと』が出来る。
一方で、例えば『x^100-x^50+1=0』みたいな式があったとしよう。この方程式は、ちょっと一般的な解を見つけるのは難しそうな気がする。でも例えば解の候補として、x=1が与えられたら、これが正しい解なのかどうかは『効率的に判定できる』。こういうのがNP問題。
(一応書いておくけど、ここで挙げた二つの式が、実際にP問題・NP問題なのかは僕には分かりません。ただ、さっき書いた文章をなんとなく理解しやすいようにこんな例を挙げてみました、というだけです)。
で、P≠NP予想というのは、『NP問題の中にP問題ではないものが存在する』という予想だ。現在、『すべてのP問題がNP問題であること』、つまり、『効率的に解くことが出来る問題はすべて、解の候補が与えられた時に正しい解であるかどうか効率的に判定できる』は証明されている。ただ、『すべてのNP問題はP問題である』、つまり、『解の候補が与えられた時に正しい解であるかどうか効率的に判定できる問題のすべては、効率的に解くことが出来る』というものは証明されていない。そしてほとんどのコンピュータ科学者は、『すべてのNP問題はP問題で問題である』という命題は間違っている、つまり、『P≠NPである』と考えている。これがP≠NP予想です。
いやー、初めてすっきりしました、このP≠NP予想について。こんなに分かりやすい説明を読んだのは初めてです。
で、NP問題には、NP完全問題と呼ばれるものがあって、『NP問題の内一つでもP問題であることが証明されれば、すべてのNP問題はP問題であること(P=NP)を証明できる』ということがすでに示されているんだそうです。そこで次は、歴史上初めてNP完全問題であると判明した問題、充足可能性問題(SAT)を、乱択アルゴリズムによってどうたらこうたら…、という話なんだけど、やっぱりアルゴリズムの話は難しくなっちゃうんで、この辺りのことは人に説明できるほど理解は出来ていません。でも、ちゃんと理解は出来なかったと思うけど、論理を追っていくのは楽しいし、ここでまさかピアノ問題と繋がるとは思っていなかったんで、驚きもありました。
最後のクイックソート・アルゴリズムについても同じで、論理を追っていくのは凄く楽しかったけど、やっぱり人に説明できるほどの理解は出来ませんでした。擬似コードを直接読んで理解出来ない自分の脳味噌が残念な感じでした。
大体全体の流れはこんな感じです。
「数学ガール」のシリーズを読んでいて思うのは、『何も考えずにいると、ただ当たり前だとしか思えない事柄を、色んな方法で掘り進めていくことで、当たり前ではないことが見えてくる』
ということなんですね。
「数学ガール」ではとにかく徹底的に、『定義』や『例示』や『前提』といったことに立ち返ります。それらは、自分が今どこにいるのかを知るための錨だったり、あるいは一歩でも前に進むための動力だったりします。はっきり言って、『定義』も『例示』も『前提』も、どれも『当たり前のこと』です(場合によっては『前提』は当たり前じゃないことがあるけど)。でも、そういう当たり前のことからスタートし、それらを駆使して深めていくと、スタート地点からは想像も出来なかったような地平までたどり着いている。これが数学の面白さ・奥深さだし、それはそのまま「数学ガール」の面白さ・奥深さにも繋がっていきます。『「数学ガール」を読むと、数学の面白さが分かる』というのは、まさにこの点を指しているんだと僕は思います。
あと本書では、テトラちゃんが素晴らしかったと思います。本書で「僕」が何度も言及する場面がありますが、テトラちゃんにとって、
『自分は、ほんとうにはまだ分かっていない、という自己認識』
が最大の武器です。
僕は、『分からないところが具体的に分かる』というのは羨ましいと思うんですね。ある意味でそれは一つの才能です。普通は、『どこか分からない部分があるんだけど、どこが分からないのか具体的には指摘できない』とか、『分かっていないことに気づいていない』というケースばっかりだと思うから。テトラちゃんが『分からない』と発言する度に、テトラちゃんの理解度の深さが伝わってきます。『分からない』と発言しているのに、その人物がもの凄くその対象を理解していることが分かる、というのはちょっと凄いですよね。シリーズを通じてのでのテトラちゃんの成長っぷりは素晴らしいものがあるけど、本作でさらに大きく成長したような気がします。
また本作では、ミルカさんの名言もたくさんありますね。

『伝える価値があることを、正しく伝わるように書く。
――それが、論文の本質だ。
これまでの人類の発見に、自分の発見を新たに重ねる。
――それが、研究の本質だ。
過去の上に現在を重ね、未来を見る。
――それが、学問の本質だ。』

『巨人の肩に、立とう』

『約束を守らないのは悪者。約束が守れなくなるのは自己。でも――約束をしないのは弱虫だ』

いいですねー。特に『約束』に関するくだりは、ミルカさんっぽくなくて凄く素敵です。数学の部分だけじゃなくて、ところどころ挟み込まれるストーリーの部分も、結構読ませるんです。
そんなわけで、相変わらずのクオリティ・面白さ・分かりやすさ、素晴らしすぎると思います!本作から読んでも基本的には構いませんが、やっぱり是非シリーズ1巻目から読んでほしいですね。数学は好きなんだけど、計算とか論理を追うのはあんまり得意じゃない、なんていう人にはもってこいだし、数学は得意じゃないんだけど好きになりたいんだ、という人にももちろんオススメです。是非是非読んでみてください!


いいなと思ったら応援しよう!

長江貴士
サポートいただけると励みになります!