1 min read

「プログラマの数学」を読了した

nabeen

結城先生のプログラマの数学を読了した。冬休みの課題図書の一つで、オンスケで読みきった。

内容的には、知識をつけるってよりは、自分の興味範囲を広げてくれるような本だった。てっきり数式とアルゴリズムが結構出てくる類の本かなぁと思って身構えていたんだけど、そんなことは全くなく、結城先生の本らしく非常に読みやすい本だった。

多分 4 時間位で読んだと思う。

目次はこんな感じ。

  • 第 1 章 ゼロの物語――「ない」ものが「ある」ことの意味
  • 第 2 章 論理――true と false の 2 分割
  • 第 3 章 剰余――周期性とグループ分け
  • 第 4 章 数学的帰納法――無数のドミノを倒すには
  • 第 5 章 順列・組み合わせ――数えないための法則
  • 第 6 章 再帰――自分で自分を定義する
  • 第 7 章 指数的な爆発――困難な問題との戦い
  • 第 8 章 計算不可能な問題――数えられない数、プログラムできないプログラム
  • 第 9 章 プログラマの数学とは――まとめにかえて

所感

第 1 章では、10 進法や 2 進法の基本的な話がわかりやすく書かれていたし、第 2 章でも命題を用いて否定やら論理積、論理和などの話がまとめられていた。ドモルガンの法則とかは、超絶久しぶりに聞いた。まぁでもこのへんは慣れ親しんだ話だったので、特別学ぶことってのは、なかったかな。

剰余の話は、ちょっとおもしろかった。余剰の話の中でパリティチェックの話が出てくるとは思わなかったし、ケーニヒスベルクの橋の問題からグラフ理論に発展したんだなぁという学びがあった。

数学的帰納法や順列・組み合わせに関してはそれ自体を久しぶりに聞いたし、これの数式も超絶久しぶりだった。こんなやつね。

nPk=n!(nk)!{}_n \mathrm{P}_k = \frac{n!}{(n-k)!}
nCk=n!(nk)!k!{}_n \mathrm{C}_k = \frac{n!}{(n-k)!k!}

再帰はまぁ見慣れた例のやつ(なお、僕は苦手...)だった。ハノイの塔とか懐かしいね。指数的な爆発の方で「増える」方はまぁそうだろうなって感じだったけど、「減る」方でバイナリサーチ(二分探索)が取り上げられたのを見て、あぁ確かになって感じになった。そもそも減らす方に関しては、あんまり指数関数的なオーダーを意識したことがなかった。

計算不可能な問題では、これまた懐かしき背理法を見たし、対角線論法という手法は知らなかったので、これに関しては単純に知識が増えた。まぁ個人的には背理法自体がなんだか騙し絵というか、ウラノウラのウラをつくみたいな、重箱の角をつつくみたいな感じがして、あんまり馴染んでないけども(もちろん理解はしているが)。そして、ここの話はこの本では唯一小難しい話だったかな。

まぁ全体的には、正直に言うと期待した内容とは違ったけど、楽しく読める本だったって感じ。

P.S.

この本は Coursera の機械学習コースをやって感じた数学力のなさを克服するために読もうと思った本で、結果的にそこのニーズを満たすことは出来なかったけど、いい本だった。

良くも悪くも結城先生の本のイメージそのまんまって感じだった。

数学力に関しては、次のタスクにしている Udemy の講座とかでカバーしていこうと思う。