E869120's Blog

アルゴリズムや競技プログラミングに関する記事を書きます。

書籍「競技プログラミングの鉄則」を書きました

1. はじめに

こんにちは、東京大学 2 年生の米田優峻(E869120)と申します。私は競技プログラミングが趣味で、AtCoder国際情報オリンピックなどに出場しています1。また、2021 年 12 月には、初の著書となる『「アルゴリズム×数学」が基礎からしっかり身につく本』を出版しました(2 万部突破)。

さて、このたびはマイナビ出版から、2 冊目の本を出版させていただくことになりました。競技プログラミングで必要となる「アルゴリズム」や「思考テクニック」を学ぶことができる、全く新しい教科書です。

発売日は 2022/9/16 です。電子書籍版も同じ日(9 月 16 日)に出る予定です。この記事では、本書の内容と想定読者について説明させていただきます。


2. 本書の構成

本書は、競技プログラミングの全く新しい教科書です。序章「競技プログラミングとは」および終章「さらに上達するには」を除くと、10 個の章で構成されています。紙面はフルカラーであり、長さは 464 ページです。以下、各章の内容について簡単に記します。

第 1 章

第 1 章「アルゴリズムと計算量」では、競技プログラミングの問題を解くための基礎となる、アルゴリズムや計算量といったキーワードについて概観します。同時に、全 5 問の例題を通して競技プログラミングの問題形式に慣れることを目指します。

第 2~9 章

第 2~9 章では、競技プログラミングで頻出の「典型アルゴリズム」や「考察テクニック」を学びます。各章では以下のようなトピックが解説されています(節ごとの目次は後述)。

内容
第 2 章 累積和
第 3 章 二分探索
第 4 章 動的計画法
第 5 章 数学的問題
第 6 章 考察テクニック
第 7 章 ヒューリスティック
第 8 章 データ構造とクエリ処理
第 9 章 グラフアルゴリズム

第 10 章

第 10 章「総合問題」では、問題を解くためのヒントの見つけ方について概説した後、第 9 章までに学んだ知識をフル活用して実戦レベルの問題を解きます。

詳しい目次

本書の具体的な目次は下図のようになります。なお、文字が小さすぎて読めないという方は、こちらのリンク からご覧ください。


3. 本書の特徴

本書は「競技プログラミングを始めるならこれだ!」「競技プログラミングの実力アップならこれだ!」という教科書を目指しました。そのため、大きく分けて以下の 5 つの特徴を持っています。特に、わかりやすさと一定の網羅度を両立していることは、類書と比べても大きな特徴です。

特徴 1:フルカラーの図でわかりやすい!

第一の特徴は「分かりやすさ」です。本書の執筆にあたっては、フルカラーの図版を 320 点以上利用し、初学者でも理解しやすい工夫を施しました。紙面サンプルを以下に示します。(フルカラーの競技プログラミング書籍は、ほぼ初めてです)

特徴 2:演習問題で定着しやすい!

第二の特徴は「定着しやすさ」です。本書では、例題 75 問・応用問題 58 問・力試し問題 20 問、つまり計 153 問の演習問題が掲載されています。

そのうえ、すべての演習問題が自動採点システム(プログラムが合っているかどうかを自動で判定するシステム)に対応しているため、間違った理解をしていないかを確認しながら学習を進めることができます。

特徴 3:新傾向「ヒューリスティック最適化」にも対応!

第三の特徴は、最近人気のヒューリスティック系コンテスト(AtCoder Heuristic Contest など)にも対応しているということです。本書の第 7 章では、このようなコンテストで使える代表的な手法である、貪欲法・局所探索法・焼きなまし法・ビームサーチなどを解説しています。

特徴 4:競技プログラミングで必要な部分を網羅!

第四の特徴は「網羅度」です。本書では全探索から最大フロー問題まで、たくさんのトピックを扱っており、競技プログラミングで必要な部分の多くを網羅しています(詳しくは 2. の目次をご覧ください)2

しかしながら、網羅度は必ずしも難しいことを意味するとは限りません。特徴 1 にも記した通り、多くの図を使うなど、初学者にも理解できるような工夫を行っています。

特徴 5:C++PythonJAVA に対応!

本書ではページ数調整の都合上、紙面に掲載されているソースコードC++ のみとなっています。しかし、他のプログラミング言語で学習を進めたい方もいると思うので、本書のサポートページには PythonJAVAソースコードも掲載しております。


4. 本書の対象読者

本書は、「わかりやすさ」と「一定の網羅度」を兼ね備えたものを目指して作成されました。そのため、

の両方がターゲット層になっています。特に後者に関しては、AtCoder のレーティングが 0 以上 2000 未満の幅広い実力層にオススメできる内容になっています。

また、競技プログラミング参加者以外でも、アルゴリズムを本格的に学びたい方、思考力を身に付けたい方などが本書を活用することができます。たとえば、「アルゴリズム×数学」本を読んで、より深くアルゴリズムを学びたい、と思った方にはオススメです(もちろん、アルゴリズムを初めて学ぶ方にもぜひ読んでいただきたいです)。


5. おわりに

本の執筆は今回も非常にハードなものであり、時間数にして 750 時間以上を要しました。しかし、本の原稿を丹念に読み、たくさんの指摘をしてくださったり、自動採点システムの作成に協力してくださったりした 19 名の reviewer を含め、多くの方々のおかげで完成に至ることができました。本当にありがとうございます。

最後に、本書によって何か一つでも有益な知識が得られ、皆さんの人生の可能性を広げる一助となれば、筆者としては本当に嬉しいです。


6. 諸注意(競技プログラマー向け)

この本は、「競プロ典型 90 問」とほぼ無関係であることに注意してください。演習問題全 153 問のうち、典型 90 問に含まれているものは 2 問(1.3%)のみであり、大半がオリジナル問題になっています。


  1. AtCoder 赤。国際情報オリンピック(IOI)2018 金メダル相当、2019・2020 金メダル獲得。

  2. 現在出版されている競技プログラミング関連の書籍では、蟻本の次に網羅度が高いと思います。