ISBN 9784839977504
競技プログラミングの鉄則 : アルゴリズム力と思考力を高める77の技術
概要
競技プログラミングに必要なアルゴリズム77技術を体系的に習得する
想定読者
AtCoder などの競技プログラミングで茶〜水色以上を目指したい人、またはアルゴリズムを実務の武器として本格的に体得したいエンジニア・情報系学生
こんな人には向いていない
- プログラミング自体が初めてで、変数・関数・繰り返し処理がまだ定着していない段階の人
- アルゴリズムの理論的な証明や数学的厳密性を主目的とする研究者・大学院生
- すでに赤・橙コーダー水準に達しており、発展的なアドバンスドグラフや多項式演算を求める人
読了後にできるようになること
- 累積和・二分探索・動的計画法などの頻出アルゴリズムを図解で直感的に理解し、実装できる
- セグメント木・Union-Find・ダブリングなどの高度データ構造を適切な問題に選択できる
- ダイクストラ法・最小全域木・最大フロー・二部マッチングを含むグラフアルゴリズムを実装できる
- 山登り法・焼きなまし法・ビームサーチによるヒューリスティック・最適化手法の設計方針を理解できる
- imo 法をはじめとする累積和の応用パターンを、他書では得にくい具体性で習得できる
- 153 問の演習問題を AtCoder の自動採点システムで検証しながら定着できる
本書のキー概念(章解説)
- 序章 競技プログラミング入門 — 環境構築と AtCoder の使い方を確認する章、すでに参加経験があれば読み飛ばせる
- 第 1 章 アルゴリズムと計算量 — O 記法の感覚を掴む基盤。以降の章を読む前に確実に理解しておきたい
- 第 2 章 累積和 — imos法など他書では詳述されにくい応用まで踏み込む章
- 第 3 章 二分探索 — 配列の探索だけでなく答えで二分探索するパターンまでカバー
- 第 4 章 動的計画法 — ナップザック問題からビット DP・最長増加部分列まで段階的に発展
- 第 5 章 数学的問題 — 素数判定・ユークリッドの互除法・繰り返し二乗法・包除原理を網羅
- 第 6 章 考察テクニック — 偶奇・一手先・後ろから考えるなど、ヒューリスティック的思考の訓練
- 第 7 章 ヒューリスティック — 山登り法・焼きなまし法・ビームサーチを扱う新傾向対応の章
- 第 8 章 データ構造とクエリ処理 — セグメント木・ダブリング・文字列ハッシュなど高度構造を実装レベルで解説
- 第 9 章 グラフアルゴリズム — DFS/BFS から最大フロー・二部マッチングまで通し、実務応用にも使える射程を持つ
- 第 10 章 総合問題 — 複数手法を組み合わせる問題で実力を測る章
ハイライト
- ジャンルごとで問題と内容がまとめられているため、自身の足りてない箇所をピンポイントで学ぶことができます。(本書のジャンル別構成が苦手分野の集中学習に直結する点を端的に示した箇所)
- 累積和の応用として、imos法の使い方を具体的に載せている本を、鉄則本以外で見た事がありません(他書にない独自カバレッジとして、imos法の具体的解説が唯一の書籍と評した箇所)
- 各問題の解説はフルカラーの図で丁寧にされており、各アルゴリズムの雰囲気を直感的に掴みやすい(320点超のフルカラー図解という本書の最大の可読性特徴を示す)
外部からの言及
- 競技プログラミングを学ぶ上で2023年以降の標準的な推薦書として定着しており、エンジニア向け技術書まとめ・AtCoder 学習エッセイの双方で繰り返し言及される。『自分の弱点をピンポイントで補える』というジャンル別構成が共通して評価されている(qiita)
- 累積和の imos 法を具体的かつ詳しく解説している書籍として唯一の存在、という評価が複数の実践者から出ている。水色帯までの典型アルゴリズムをほぼ網羅しており、初心者が中級者へ移行する際のアルゴリズム学習環境を大きく底上げしたとされる(qiita)
- 320点超のフルカラー図解と AtCoder 常設コンテストとの連動が可読性と定着度を支えている、という実体験が複数記事に記述される。特に中卒や 40 代といった多様な経歴の学習者が水色到達を報告した記事の中で『鉄則本で学んだ』と触れる例が目立つ(qiita)
編集メモ
Qiita で likes 1940 の技術書紹介記事・likes 798 のエッセイ・likes 485 の学習記など複数の高 likes 記事で推薦。2022年9月刊行以降、AtCoder 学習ロードマップを扱う記事での引用が継続しており、水色以下の層における標準的な学習書として定着している。imos 法を具体的に解説する唯一の書という評価が複数記事に共通する
読む前に押さえておきたいこと
- 任意の言語(C++ / Python / Java など)で for 文・関数・配列を扱えるプログラミング基礎
- AtCoder または類似の競プロ環境にアカウントを持ち、コードを提出した経験が1問以上あること
- 高校数学レベルの対数・組合せ・素数の概念(第5章の数学パートを読む前に確認)
学習のコツ
- 第1章(計算量)を確実に理解した上で各章に進む。O 記法の感覚がないと、なぜそのアルゴリズムを選ぶかの判断軸が身につかない
- 各章末の演習問題は必ず AtCoder の常設コンテストで実際に提出する。解説を読んで分かった気になるだけでは定着しない
- 苦手なジャンルだけを集中して読む使い方ができる。全章通読より『コンテストで詰まったジャンルを翌日に鉄則で補完する』サイクルが効果的
- 第7章(ヒューリスティック)は他のアルゴリズム書ではほぼ扱われない領域なので、AHC(AtCoder Heuristic Contest)に挑戦する前の必読章として活用できる
- 序章は AtCoder 経験者なら読み飛ばしてよい。第2章から直接入って問題を解きながら前後を参照する形でも学習は成立する
出版社による内容紹介
競技プログラミング(競プロ)は、問題を解くことでプログラミング能力を競う大会です。本書では、競プロで必要なアルゴリズム・データ構造・考察テクニックを丁寧に解説します。さらに、知識を定着させるための例題・演習問題が150問以上掲載されています。 本書は、競プロのコンテストで勝ちたい、アルゴリズムを本格的に学びたい、技術力向上に繋げたいなど、様々な目的で利用できるものとなっています。 [本書の特徴] ・競プロで必要な77個のテクニックを網羅 ・320点超のフルカラーの図でわかりやすく解説 ・知識を身に付ける演習問題153問 ・全問題が「自動採点システム」に対応 ・新傾向の「ヒューリスティック・最適化」も解説 [本書の構成] 序章 競技プログラミング入門 第1章 アルゴリズムと計算量 第2章 累積和 第3章 二分探索 第4章 動的計画法 第5章 数学的問題 第6章 考察テクニック 第7章 ヒューリスティック 第8章 データ構造とクエリ処理 第9章 グラフアルゴリズム 第10章 総合問題 終章 さらに上達するには [本書で扱うトピック(抜粋)] 全探索/2進法/一次元の累積和/二次元の累積和/配列の二分探索/答えで二分探索/しゃくとり法/半分全列挙/部分和問題/ナップザック問題/ビットDP/最長増加部分列問題/素数判定法/ユークリッドの互除法/繰り返し二乗法/包除原理/ゲーム問題/偶奇を考える/一手先を考える/後ろから考える/山登り法/焼きなまし法/ビームサーチ/スタック/キュー/優先度付きキュー/連想配列/文字列のハッシュ/ダブリング/セグメント木/深さ優先探索/幅優先探索/ダイクストラ法/Union-Find/最小全域木問題/最大フロー問題/二部マッチング問題/ほか多数 序章 競技プログラミング入門 第1章 アルゴリズムと計算量 第2章 累積和 第3章 二分探索 第4章 動的計画法 第5章 数学的問題 第6章 考察テクニック 第7章 ヒューリスティック 第8章 データ構造とクエリ処理 第9章 グラフアルゴリズム 第10章 総合問題 終章 さらに上達するには
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。