記録#5『プログラマの数学 第2版』ゼロの意味は?
昨年はPHPでのWebサービス開発や、Pythonを使ったデータ解析にチャレンジしました。その中で扱われるのは"論理"だったり"統計" "ランダム化"だったりして、改めて数学への関心が高まっています。
今月第2版がでた『プログラマの数学』買ってみました。
ゼロの物語:「ない」ものが「ある」ことの意義
第1章のテーマが、ゼロについて。その中で出てくるエピソード。
これは、今でも覚えている小学1年生の思い出です。
「それではノートを開いて、『じゅうに』と書いてください」
と先生は言いました。わたしは新しいノートを開き、きちんと削った鉛筆を握って、大きな数字でこう書きました。
102
なるほど、たしかに。そう書きたくなる気持ちもわかります。IとかVで数字を表すローマ数字で『じゅうに』を書こうとするとXIIで、X (10) とII (2)を並べて書くよなーと。
人間が日常生活で使ってる10進法、コンピュータが使っている2進法・8進法・16進法は『位取り記法』というジャンルに入ります。(ローマ数字は位取り記法ではない)この位取り記法では、0は非常に重要な意味合いを持ちます。
- 場所を確保する:10の位の数字がなくても空欄を書かなくて良くなる
- ルールをシンプルにする:10^0 = 1と定義することで、全ての位を10^nで示せることになる
たしかにたしかに。もっと具体的にイメージするために提示されている、『日常のなかのゼロ』という項目では、
- 予定がないという予定:時間を「空き」として認識することで探す対象になる
- 薬効がない薬:3日飲んで1日休む薬があったとすると、毎日薬を飲むが4日目の薬をダミーのものにしておくほうが習慣化しやすいのでは
などの例が示されています。日常のなかのゼロ、っていう考え方はとても素敵な観察だと思いました。
剰余:周期性・規則性を見つけ出す
第3章は、剰余(割ったときの余り)について。小学校低学年で割り算と余りについて習って以来、あまり意識して使ったことのなかったテーマですが、本の中で紹介されていた例はとても面白かったです。
- Q. 今日が月曜日として、1億日後の曜日は?
- A. 1周間は7日。100,000,000(1億)÷7 = 14,285,714 余り 2になる。つまり14,285×7= 99,999,998日後は同じ月曜日。その2日後である1億日後は水曜日のはず。
確かに。。。簡単で、シンプルで、美しいなぁと思いました。
他にも、恋人探しだったり畳敷きだったり、一筆書きなどなど問題を、"剰余"という視点から捉えなおしていきます。この章は全体の中でも特に面白かったです!
再帰:自分で自身を定義する
プログラムを書いていると、for文なんかで
- x = x + 1
みたいな文を書くことが往々にしてあるんですが、自分自身を定義するために自身を使うこと、これが再帰です。
個人的になるほどなぁと思ったのは、この前の数学的帰納法の章と合わせての説明なんですが、
実は、再帰(recursion)と帰納(induction)はどちらも「大きな問題を、同じ形をした小さな問題に帰着させる」という点では本質的に同じです。
再帰的なプログラムを書くためには、その構造を見抜くことが必要になります。観察の練習をたくさんして、構造をどんどん見いだせる人になりたいです。
指数的な爆発:困難な問題との戦い
第8章は指数・対数について。
最初に出てくる、「10個独立したチェックボックスが必要なWebサービスを作らなきゃいけないとして、その開発をする上でのテストは2^10(1,024)回やらなきゃだめになります」っていう一文。気をつけます。。。
最後に
自分の子供が中学生・高校生とかになったらぜひ読ませたい一冊でした。数学は一つの言葉です。この言葉を知っておくと、世界の捉え方がもっと豊かになるなと思います。