猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

プログラミングコンテストとかアルゴリズムとかを学びたい人向けの本3選

はじめに

「アルゴリズムの勉強をしたいが何をしたらいいのかわからない」人は多いだろう。そこでおすすめなのがプログラミングコンテストだ。プログラミングコンテストはアルゴリズム力やプログラミングの速さを競うコンテストだ。今回は僕が読んだことあるアルゴリズムやプログラミングコンテストに関する本を3冊紹介する。

  • プログラミングコンテストチャレンジブック
  • 最強最速アルゴリズマー養成講座
  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテストチャレンジブック

「プログラミングコンテスト」あるいは「競技プログラミング」と聞いて一番有名な本がこれだろう。表紙が蟻の柄なので「蟻本」と呼ばれている。特徴は以下の通りである。

この本は、本気でプログラミングコンテストで勝ちたい人が読む本 であり、 難易度は高め である。アルゴリズムにあまり触れたことがない人は、後述の『最強最速アルゴリズマー養成講座』または『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』おすすめする。下記2冊を読んだ上で、もっと高度なアルゴリズムを勉強したい場合はこの本を読むとよいだろう。

最強最速アルゴリズマー養成講座

高橋直大さんという、AtCoder社の社長によって書かれた本である。表紙がヒョウ柄(=チーター柄)なので「チーター本」などと呼ばれている。*1 特徴は以下の通りである。

  • 練習問題にtopcoderの問題を採用している
  • サンプルコードが C#, C++, Java と豊富
  • 難易度も易しい

難易度はかなり低く、今回紹介する3冊の中では最も簡単だろう。簡単なので物足りなさを感じる人も多いだろうが、そう感じたら上記の「蟻本」を呼んだら良い。アルゴリズム初心者にはよい本なのだが、練習問題にtopcoderを採用しているのが難点である。

アルゴリズムの勉強をするのであれば、プログラミングコンテストのサイトを使って勉強するのが最適である。自分の書いたコードが正しいことが採点によってわかるからである。プログラミングコンテストサイトは、topcoder *2, AtCoder *3, AOJ (Aizu Online Judge)*4 あたりが有名だが、AtCoderやAOJと比べてtopcoderはサイトが分かりづらい。後述の「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」はAOJを利用していてわかりやすいので、基本的にはこちらの本をおすすめしたい。*5

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

これら3冊の本の中では一番新しい本で、AOJ(Aizu Online Judge: http://judge.u-aizu.ac.jp/onlinejudge/)にも関わっている会津大学の渡辺先生が執筆した本である。秋葉さん(プログラミングコンテストチャレンジブックの著者)も参加している。特徴は以下の通りである。

  • Aizu Online Judge の問題と対応しているため実践しやすい
  • サンプルコードはCまたはC++
  • 難易度もそこまで高くない

AOJを使う前提の本なので、本を読んでAOJで実践・答え合わせができるし、AOJの使い方が乗っているのも初心者にはありがたい。新しい本なので、図も多く内容も分かりやすい。難易度も平易なところからスタートするので、本気の人向けの本ではないが、アルゴリズムを学びたい人にはぴったりだろう。

注意点としては、サンプルコードがCまたはC++しかない点である。サンプルコードの豊富さでは「チーター本」には負ける。ただ、Javaで書いてもRubyで書いてもPythonで書いてもAOJに提出すれば正しく採点はしてくれるのでその点は大丈夫。AOJでは他人の書いたコードも見れるので、それを参考にしても良い。新しい本でわかりやすいので基本的にはこの本をおすすめしたい。

まとめ

アルゴリズムの勉強を実践的に(実際にコードを書きながら)したいなら、この3冊のどれかになると思う。

  • とにかくわかりやすさなら「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」
  • 本気でプログラミングコンテストの勉強をしたいなら「プログラミングコンテストチャレンジブック」
  • JavaやC#などの豊富なサンプルコードが欲しいなら「最強最速アルゴリズマー養成講座」

かなと思う。一番のオススメは「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」である。是非参考にして欲しい。

番外編

番外編で「世界で闘うプログラミング力を鍛える150問」というのも割と有名ではあるが、この本はプログラミングの本というより、プログラマーチックな考え方、みたいな内容の本なので、これよりは上記の3冊をおすすめしたい。

アップデート

  • 2019年4月1日: 結構読まれているようなので内容を書き直しました

*1:普通はヒョウ柄と余分だろうが、最速とチーターをかけているんだと思われる。

*2:https://www.topcoder.com/

*3:https://atcoder.jp/

*4:会津大学が運営しているプログラミングコンテストサイト http://judge.u-aizu.ac.jp/onlinejudge/

*5:高橋直大先生は「『最強最速アルゴリズマー養成講座』は、連載をそのまま本に落としただけなので、書籍用に書き直して第二版を書きたい」とずっと言っている