「プログラマの数学」で、苦手な数学の勉強をしてみる

数学とお別れして、約20年。
対数とか言われても、なんだったか覚えていないレベルです。
なんとなく、プログラミングやっていくには、数学的に考えられる必要があるのではと思い(根拠はないです)、書店で気になって買いました。

ということで、かなり自分流の解釈も含まれると思いますが、備忘メモ。


はじめに:
・数学的な考え方の例: 条件分岐(if)と論理、繰り返し(for)と数学的帰納法、場合分けと数え上げの法則(和の法則、積の法則、順列、組み合わせなど)
・その他:再帰、指数、対数、剰余など

1章:ゼロの物語
2章:論理
3章:剰余
4章:数学的帰納法
5章:順列・組み合わせ
6章:再帰
7章:指数的な爆発
8章:計算不可能な問題
9章:プログラマの数学とは

1章:ゼロの物語
・位取り記数法
・N進法の特徴:使われる数字は、0,1,2,3....,N-1のN種類、右から順にNの0乗の位、Nの1乗の位、Nの2乗の位・・・と基数の右肩に乗っている数字(指数)が増えていく・・(=基数(底)はN)
・指数が1減ると、全体は10分の1となる、と考えると、10の0乗は、10の1乗の10分の1、つまり1と考えられる
・さらに10の-1乗は、10分の1・・・と「定義」することができる
(メモ:わかりやすいところで、法則を見つけて、それから0乗のように直感的にわかりにくいところの値を、ルールをシンプルにするように定める、という数学的なテクニック)
・位取り記数法(我々になじみの深い表記)で、0を使って「何もない」ことを明示的に書くことで、桁を埋める役割を果たし、ゼロのおかげで、ルールをシンプルにできる
 (ゼロの役割=プレイスホルダー)
・どうして人間は数の表記法を考える必要があったのか
 =大きな問題は小さなまとまりに分けて解く
 私たちが取り扱う数は大きくなっている。位取り記数法でも大きすぎる数は、比較など難しい。そこで、指数を使った表現が重要となる


2章:論理
自然言語の論理は、あいまいになりがち
・命題=正しいか正しくないかを判断できる文のこと
・命題は必ずtrueかfalseになる
・規則に照らして、命題を判断するが、その際、規則には「もれがない」(=どんな場合でも真偽の判定ができる)ことと、「だぶりがない」(=適用するルールがだぶらない)ことが大事
・数直線で表現するとわかりやすい
・もれ・だぶり、は境界に注意する
・もれがない(=網羅的である)
・だぶらない(=排他的である)
・例 if文は、網羅的で排他的な分割を表現している

【複雑な命題を組み立てる】
1.否定:Aではない(¬A)
 命題Aがtrueのとき、¬Aはfalse

2.論理積:AかつB(英語ではand)A∧B
 AとBの両方がtrueの場合だけtrue

3.論理和:AまたはB(英語ではor)A∨B

4.排他的論理和:AまたはB(でも両方ではない):英語ではexclusive or。A⊕B

5.等値:AとBは等しい(A=B)
 なお、¬(A⊕B)は、A=Bと等しい。これは、AとBの真偽に関わらず常にtrueになる命題(=恒真命題)

6.含意:AならばB:A⇒B
 例 命題A:乗客の年齢は10歳以上、命題B:乗客の年齢は6歳以上
 注意:Aがfalseなら、Bがtrueでもfalseでも、A⇒Bはtrueとなるところが、自然言語の感覚と異なる
 ベン図の見方のコツ:ベン図の染めていないところを「穴」と考え、「あなたがAに立っているなら、あなたはBに立っている」と見る。そうでないと穴に落ちてしまう
 その他:B⇒Aは、A⇒Bの「逆」という。「逆は必ずしも真ならず」
 ただし、¬B⇒¬Aを、A⇒Bの「対偶」といい、「元の論理式が真(偽)なら、対偶も真(偽)」

【ド・モルガンの法則】
¬A∨¬B=¬(A∧B):Aではない、または、Bではない = AかつBではない
¬A∧¬B=¬(A∨B):Aではない、かつBではない = AまたはBではない


 



3章:剰余
4章:数学的帰納法
5章:順列・組み合わせ
6章:再帰
7章:指数的な爆発
8章:計算不可能な問題
9章:プログラマの数学とは