はじめに
米田優峻さんの『問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本』を読んだので、自分用のメモ程度に記録していきます。
https://gihyo.jp/book/2022/978-4-297-12521-9
私がこれを読んだ背景としては、paizaのSランクが時間オーバーゆえにどうしても合格できず、計算量に対する考え方・効率的なアルゴリズムを知りたかったためです。
結果として、ど文系かつエンジニア歴の短い私でもpaizaのSランクには合格することができたので、読んで良かったと思いました。
(Sランク1つを合格できただけで、他の問題も簡単に・必ず解けるのかと言われたらそんなことはないと思います、、)
1章:アルゴリズムと数学の密接なかかわり
アルゴリズムとは何かということや、アルゴリズムを考える上で使えるざっくりとした思考の道筋が説明されています。
イントロダクション的な感じで10ページほどです。
2章:アルゴリズムのための数学の基本知識
式に対する説明、演算子、関数とは などが優しく説明されています。
また、少し難しくは感じましたが、計算量の考え方やシグマ記号に対する説明もありました。
中学数学から怪しい自分にとっては基礎から説明してくれてありがたく感じました。
3章:基本的なアルゴリズム
素数を判定する「素数判定法」や最大公約数などを求める際に使用できる「ユークリッドの互除法」、その他にも場合の数や動的計画法などが紹介されています。
このアルゴリズムを知っていれば解けるが、自分で0から考えるのは難しいなと思ったので、このように紹介されていることは非常に助かります。
また、各節の最後には「節末問題」としてその節で学んだ内容を応用してとく問題が掲載されています(1章からあります)。
この節末問題で知識を確認できるので、ちょっと難しくなってきた3章では非常にありがたく感じました。
4章:発展的なアルゴリズム
※ 本の冒頭に「数学が苦手な方は、章を1→2→3→5→4の順で読むと良い」とあったので、私はこの章を最後に読みました。
ベクトル・グラフ・積分など、正直私には難しい話が多くありました。
また、私がこの本を現在読んだ目的が「paizaでSを獲る」だったため、paizaでSを獲るために必要なさそうな難しいところは正直読み飛ばしてしまいました、、理解できないと本を読むモチベが下がってしまうので、、
一方で、この章で紹介されていた「最短ルートを求める際のアルゴリズム」を使うことで、私はpaizaのSランク問題を解くことができました。
5章:問題解決のための数学的考察
アルゴリズムを考える上での、数学的な思考法が紹介されています。
この章は他の章と比べると、抽象的な問題解決方法が紹介されている章になりますが、個人的にはこの章がとても学びになりました。
というのも、アルゴリズムを考える際の土台となる考え方を知ることができたと感じているためです。
規則性を見出すこと・集合を考えた際に見えてくること・足された回数を利用すること など、これだけ読むと何のことかわからないかもですが、問題解決のために必要な思考法を与えてくれたと感じています。
さいごに
元々数学にとても苦手意識を持っている私なため、「数学がめっちゃ分かった!」「競プロでどんな問題でも解けるぜ!」のような状態にはなっていませんが、それでも当初の目標を果たすことができたので、この本はとても良い本だと感じています。
「競プロをやっているが全然結果が出ない」「アルゴリズム関連の本を読んでみたが全然わからなくて挫折した」などの方にはおすすめの1冊になるかなと思います。