読書メモ:プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
最近読んだ
『問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本』
『問題解決力を鍛える!アルゴリズムとデータ構造』
の両方で本書が推奨されていたため、プログラミングコンテストに興味があるわけでありませんが、アルゴリズムの技術書として購入しました。
本書の位置づけ
内容としては、上記2冊の内容をベースに、それらをプログラミングコンテスト形式の問題としてまとめた本、という印象です。
アルゴリズムそのものを丁寧に解説するというより、「コンテスト必要な基本問題の解説集」に近い構成になっています。
そのため、アルゴリズムの基礎知識がある程度身についていることが前提になっており、初学者向けの技術書というよりは、実践寄りの問題集と捉えたほうが良さそうです。
技術書として体系的な理解を目的に購入した自分にとっては、理解のしやすさという点では、前述の2冊のほうが上でした。
難易度について
Amazonのレビューでは「簡単すぎる」という意見も見かけましたが、個人的には必ずしもそうは感じませんでした。
独特な問題設定や、アルゴリズムを応用するタイプの問題も多く、恥ずかしながら理解できない問題も少なくありませんでした。
特に印象に残ったのが、ヒューリスティック探索の章に登場する8パズルや15パズルです。
二分木とパズル状態の関係について、ソースコードを読んでも直感的に理解しづらい部分があり、アルゴリズムの背景理解が不足していると厳しいと感じました。
まとめ
本書は、理論をじっくり学ぶというよりも、実際に問題を解きながら身につけていくタイプの書籍です。
そのため、
- アルゴリズムの全体像や理論を体系的に理解したい人
- 初学者として一冊目を探している人
には、先に上記のなどの書籍を読む方が理解が進むと思います。
一方で、
- プログラミングコンテストの形式に慣れたい
- 基本アルゴリズムを「使う」練習をしたい
という目的であれば、有用な一冊です。
なお、計算幾何学など一部のアルゴリズムについては、仕事などで必要に応じて本書をレファレンス的に必要なときだけ参照する使い方が合っていると感じました。
