はじめに
「アルゴリズムの勉強をしたいが、何をしたらいいのかわからない」人は多い。
そこでおすすめなのがプログラミングコンテストだ。プログラミングコンテストは、アルゴリズムの知識や、プログラミングの速さを競うコンテストだ。
今回は、僕が読んだアルゴリズムやプログラミングコンテストに関する本を3冊紹介する。
- プログラミングコンテストチャレンジブック
- 最強最速アルゴリズマー養成講座
- プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
プログラミングコンテストチャレンジブック
「プログラミングコンテスト」や「競技プログラミング」と聞いて一番有名な本がこれ。表紙がアリの柄なので「蟻本」と呼ばれている。
特徴は以下の通りである。
- サンプルコードはC++
- 章末にAOJ(Aizu Online Judge: http://judge.u-aizu.ac.jp/onlinejudge/)やPOJ(http://poj.org/)の問題が付いているので、学習後実践ができる
- 難易度は高め
この本は、本気でプログラミングコンテストで勝ちたい人が読む本 であり、 難易度は高め である。
アルゴリズム初心者は、後述の『最強最速アルゴリズマー養成講座』または『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』おすすめする。
下記2冊を読んだ上で、もっと高度なアルゴリズムを勉強したい場合はこの本を読むとよいだろう。
最強最速アルゴリズマー養成講座
最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド
- 作者:高橋 直大
- 発売日: 2013/08/14
- メディア: Kindle版
AtCoder社の高橋直大社長によって書かれた本である。表紙がチーター柄なので、「チーター本」などと呼ばれている。
特徴は以下の通りである。
- 練習問題にtopcoderの問題を採用している
- サンプルコードが C#, C++, Java と豊富
- 難易度は非常に易しい
難易度はかなり低く、今回紹介する3冊の中では最も簡単だろう。この本で物足りなさを感じたら、一番上の「蟻本」を読むと良い。
アルゴリズム初心者にはよい本なのだが、練習問題にtopcoderを採用しているのが微妙。
アルゴリズムの勉強をするのであれば、プログラミングコンテストのサイトを使って勉強するのが最適である。自分の書いたコードが正しいかどうか、採点によってわかるからである。
プログラミングコンテストサイトは、topcoder *1, AtCoder *2, AOJ (Aizu Online Judge)*3 等が有名だが、AtCoderやAOJと比べて、topcoderはサイトが分かりづらい。
後述の『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』は、AOJを利用していてわかりやすいので、基本的にはこちらの本をおすすめしたい。*4
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
- 作者:渡部 有隆
- 発売日: 2015/01/30
- メディア: Kindle版
これら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#などの豊富なサンプルコードが欲しいなら『最強最速アルゴリズマー養成講座』
かなと思う。一番のオススメは「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」である。是非参考にして欲しい。
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
- 作者:渡部 有隆
- 発売日: 2015/01/30
- メディア: Kindle版
番外編
新しく『問題解決力を鍛える!アルゴリズムとデータ構造』という本も出たので気になる人は読んでほしい。「蟻本」でおなじみの秋葉さんが監修しており、比較的有名な本である。『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』よりさらに新しい本なので、きっとわかりやすいはずである。
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
- 作者:大槻兼資
- 発売日: 2020/12/16
- メディア: Kindle版
『世界で闘うプログラミング力を鍛える150問』というのも割と有名ではあるが、この本はプログラミングの本とは少し違うので、プログラミングやアルゴリズムを学びたいのであれば、上記3冊をおすすめする。
世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~
- 作者:Gayle Laakmann McDowell
- 発売日: 2012/11/13
- メディア: 単行本(ソフトカバー)
*3:会津大学が運営しているプログラミングコンテストサイト http://judge.u-aizu.ac.jp/onlinejudge/
*4:高橋直大先生は「『最強最速アルゴリズマー養成講座』は、連載をそのまま本に落としただけなので、書籍用に書き直して第二版を書きたい」とずっと言っている