ISBN 9784839941062
プログラミングコンテストチャレンジブック第2版 : 問題解決のアルゴリズム活用力とコーディングテクニッ
概要
競技プログラミングの典型アルゴリズムを理論と実装で体系的に習得する
想定読者
AtCoder などの競技プログラミングで水色〜黄色コーダーレベルを目指す学生・エンジニア
こんな人には向いていない
- 業務系 Web 開発のコーディング力向上が目的のエンジニア(競プロ特有のアルゴリズム問題が中心のため、実務システム設計とは直結しない)
- Python のみで競技プログラミングを進めたい人(サンプルコードが C++ 中心のため、Python ユーザーは別途コード翻訳コストを見込む必要がある)
- アルゴリズムの概念を浅く広く把握したいだけの初学者(問題演習を前提とした構成のため、プログラミング経験がほぼない段階では取っつきにくい)
この本で身につくこと
- グラフアルゴリズム(DFS・BFS・ネットワークフロー・二部マッチング)を問題の制約から選択・実装できる
- 動的計画法の典型パターン(ナップサック・区間 DP・桁 DP 等)を識別し、状態遷移を自力で設計できる
- 計算量オーダーを解析し、制約条件に合うアルゴリズムを素早く判断できる
- 数学的アルゴリズム(中国剰余定理・素数篩・modular 演算)を競プロ問題に即座に応用できる
- 木に関する高度な手法(重心分解・セグメント木・LCA)を実装し、ツリー問題を解けるようになる
ハイライト(外部からの言及)
(通称、蟻本) は日本の競技プログラミングの普及に多大な貢献を果たしています。多くの競技プログラマたちが蟻本を手に取りながらコンテストの世界に没入して行きます。 — 出典
著名競技プログラマ drken による本書評。日本の競プロコミュニティでの本書の位置づけを端的に示す一節
AtCoder を始めた方が最初に目指す登竜門としてとてもよい問題と言えるでしょう。この問題が自然に解けるようになった頃には大分強くなった実感が湧くと思います! — 出典
本書収録問題が実力向上の明確な指標として機能することを示す記述。学習進捗を自己評価できる設計という本書の実用的価値を表す
初級編は全体的に、ABC C 問題 (300 点) 相当の難易度の問題が多いです。一番最初に挙げた[ダーツ]はかなり難しい (400 点相当) ので、本記事の最後に挑むのも良さそうです。 — 出典
本書「初級編」の実際の難易度を AtCoder レーティング基準で具体的に示す記述。「入門」と銘打っていても ABC 300 点相当が中心であり、先頭の例題が既に 400 点相当と知ることで、読者が自分のレベルと本書難易度を照合できる
章立て
第1章 いざチャレンジ! でもその前に — 準備編
競技プログラミングの全体像と本書の進め方を概観する導入章
第2章 基礎からスタート! — 初級編
全探索・貪欲法・動的計画法など基礎アルゴリズムを難易度順に習得
第3章 ここで差がつく! — 中級編
ネットワークフロー・計算幾何・分割統治など水色〜青コーダー水準を扱う中核章
第4章 さらに極める! — 上級編
高難度トピック(文字列・幾何拡張など)を扱う発展章
関連記事 / 参考情報
- AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ — AtCoder 入門者向けロードマップの定番記事。本書を主要参考書として取り組み順序を示す
- レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう】 — 競プロ初学者向けロードマップ。本書の活用タイミングと読み進め方の具体的指針を提示
- AtCoder 版!蟻本 (初級編) — 本書の初級章に対応する AtCoder 練習問題を整理したコンパニオン記事。本書と並行利用が前提
- レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】 — 水色コーダーを目指す中級者に本書の中盤〜後半の活用法を具体的に案内するガイド
- アルゴリズムの世界地図 — 本書で扱うアルゴリズム群を俯瞰するマップ記事。読書前の全体把握や読了後の確認に役立つ
- PythonでAtCoder青になるまで -Pythonで競プロやるときに気をつけること- — Python で競プロを続ける際の注意点。本書(C++ 中心)との差異を踏まえた実践知を補完
- インフラエンジニアの自分が買ってよかったと思う書籍10選 — インフラエンジニア視点での推薦。競プロ外の実務エンジニアへの訴求力を示す事例
- AtCoder 版!蟻本 (中級編) — 本書中級章に対応する AtCoder 問題集。中盤で詰まった際の演習補完として使われる
- 蟻本をPythonで (初級編) — 本書の C++ サンプルを Python で書き直した補完記事。Python ユーザーの参照先定番
- 競技プログラミングについて紹介(初心者向け) — 競プロ入門者向け概要記事。本書が推薦書として紹介されており、入門期の認知度の高さを示す
学習のヒント
- 本書は難易度別に章が構成されており、AtCoder 灰〜茶色コーダーの段階では初級編を、水色を目指す時期に中級編へ進むと消化しやすい。一気に通読するより、コンテストへの参加と並行しながらレベル別に分割して活用するのが現実的
- drken の「AtCoder 版!蟻本」シリーズ(Qiita 掲載、初級〜発展的トピック編の 4 本)を並行参照すると、各章の概念に対応する AtCoder 問題を直接練習できる。本書を読んで問題演習するループが定着への最短経路
- サンプルコードは C++ で書かれているため、Python を主に使う読者は「蟻本をPythonで」シリーズ(Qiita 掲載)を補助教材として活用するとスムーズ
- ネットワークフロー・文字列アルゴリズム・重心分解などの発展トピックは初読時に完全理解しなくてよい。特定の問題パターンに直面したときに戻る辞書的な使い方が実務上も有効
前提知識
- C++ の基本文法(配列・STL の vector/map/priority_queue 程度の読解力)。Python 学習者は C++ コードを読めるか、補助記事を別途用意することが前提
- 高校数学レベルの整数論・組み合わせ論の素養(素数・最大公約数・二項係数・mod 演算の基礎)
- 再帰・スタック・キューなど基本データ構造の概念的理解(実装経験があれば尚良い)
次に読む本
競技プログラミングの鉄則 〜アルゴリズム力と思考力を高める77の技術〜
蟻本(2012 年刊)が典型アルゴリズムの網羅的な理論と C++ 実装を扱うのに対し、こちらは AtCoder の現代的な問題傾向に即した思考プロセスと実装パターンを主眼に置く構成になっている。蟻本で基礎を固めた後、コンテスト本番での判断速度を高める段階で参照すると補完効果が高い。
アルゴリズムイントロダクション 第3版
蟻本が「問題ごとに実装で解く」実践書であるのに対し、CLRS はアルゴリズムの数学的証明・計算量解析・帰納法による正当性検証を体系的に扱う。黄色〜赤コーダーを目指す段階で理論的な裏付けを必要と感じた際に参照すると、実装知識と理論が接続される。
問題解決のための「アルゴリズム×数学」が基礎からわかる本
蟻本の数学的アルゴリズム章(素数・中国剰余定理・行列累乗など)は数学の素養を前提に進む場面があるが、こちらは競プロに特化した整数論・確率・行列の基礎を平易に解説している。数学的背景を補いながら蟻本に戻ると理解が加速する構成で、蟻本の前または並行読みに適している。
出版社による内容紹介
プログラミングコンテストの問題を通してアルゴリズムのしくみや考え方を楽しく習得。世界トップレベルの著者たちがコンテストで得た知識やノウハウを難易度別にまとめました。現役プログラマだけでなくプログラマを目指している方にもぜひ読んでいたただきたい1冊。
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。