定番アルゴリズム本リスト

どうせ何度も使い回ししそうなので,独立した項目に切り離した.

アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書)

アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書)

アルゴリズムイントロダクション 第3版 第2巻: 高度な設計と解析手法・高度なデータ構造・グラフアルゴリズム (世界標準MIT教科書)

アルゴリズムイントロダクション 第3版 第2巻: 高度な設計と解析手法・高度なデータ構造・グラフアルゴリズム (世界標準MIT教科書)

Introduction to Algorithms (MIT Press)

Introduction to Algorithms (MIT Press)

  • 作者: Thomas H. Cormen,Charles E. Leiserson,Ronald L. Rivest,Clifford Stein
  • 出版社/メーカー: The MIT Press
  • 発売日: 2009/07/31
  • メディア: ペーパーバック
  • 購入: 5人 クリック: 90回
  • この商品を含むブログ (19件) を見る
硬派な定番教科書.マジメに勉強する気があるなら要チェック.*1

追記:

総合版ならKindle版もある.

アルゴリズムイントロダクション 第3版 総合版:世界標準MIT教科書

アルゴリズムイントロダクション 第3版 総合版:世界標準MIT教科書

固定レイアウトなのは残念だが,常時携帯したい人にはいいかもしれない.

入門 データ構造とアルゴリズム

入門 データ構造とアルゴリズム

Data Structures and Algorithms Made Easy

Data Structures and Algorithms Made Easy

http://www.oreilly.co.jp/books/9784873116341/
ごく一般的な参考書.記述言語はC言語*2

アルゴリズムクイックリファレンス 第2版

アルゴリズムクイックリファレンス 第2版

Algorithms in a Nutshell: A Practical Guide

Algorithms in a Nutshell: A Practical Guide

Algorithms in a Nutshell: A Practical Guide (English Edition)

Algorithms in a Nutshell: A Practical Guide (English Edition)

アルゴリズム集.良くまとまってる良書だが,初心者向け学習書ではないので注意.*3

Numerical Recipes with Source Code CD-ROM 3rd Edition : The Art of Scientific Computing

Numerical Recipes with Source Code CD-ROM 3rd Edition : The Art of Scientific Computing

http://numerical.recipes/
数学アルゴリズム集.まあ説明はいらんだろ.*4
CD-ROMつき/なし,CD-ROMのみの各タイプあり.

アルゴリズムパズル ―プログラマのための数学パズル入門

アルゴリズムパズル ―プログラマのための数学パズル入門

Algorithmic Puzzles (English Edition)

Algorithmic Puzzles (English Edition)

練習問題.基礎ができてないとキツいと思う.paizaの糞記事を糞記事と見抜けないレベルの人にはお勧めしない.

類書*5

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問

追記:その続編.

もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問

もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問

面白そうだったので,さらに追記.

問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考

問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考

*6

Modern C++チャレンジ ―C++17プログラミング力を鍛える100問

Modern C++チャレンジ ―C++17プログラミング力を鍛える100問

これはちょっと毛色が違うのかな?

SQLパズル 第2版~プログラミングが変わる書き方/考え方

SQLパズル 第2版~プログラミングが変わる書き方/考え方

普通に「アルゴリズムを勉強する」と書いた場合は,こちらの入門の方を指すと思う.プログラマならば基本的なアルゴリズムを覚えると共に,アルゴリズムの考え方,アルゴリズムを自分のアプリケーションへの適用方法や新しいアルゴリズムを創るスキルを身につける必要がある.

以下のようなアルゴリズムの入門書は最低でも一冊は目を通して,幾つかの例題について実装する練習をしておくべき.英単語帳と同じで,マトモな本ならば基本アルゴリズムについてはそれほど大差は無い.他の分野ほど陳腐化も激しくないので,10〜20年以上前の本でもまあまあ使える.*4 *5そしてまともな書籍なら2冊以上は必ずしも必要ない.(持っていても良い.)

このような本で紹介されているアルゴリズムとデータ構造はプログラミングの基本中の基本なので,

  • もちろん名前は全部知っている.それがどんなアルゴリズムかも説明できる.
  • うち幾つか(5〜8割くらい)については実際に実装した経験がある.
  • その他についても実装する必要があれば,いつでも簡単に実装できる自信がある.
  • そのアルゴリズムの特性,長所と短所,ボトルネック,実装上の注意点,効率化テクニックについて知っている.その理由についても理解している.
  • 計算量やメモリ消費,ディスクアクセスのオーダーを(暗記するのではなく)見積もることができる.*6
  • 必要に応じて自分でそのアルゴリズムをカスタマイズしたり,改良したりできる.またその影響や変更後の計算量を見積もることができる.*7
  • そこで書かれている擬似コードやサンプルを,自分が必要とする言語に移植し,必要に応じて型安全性や例外処理等を追加できる.*8 特にこれは次に示すサンプルコード集の方で重要性が増す.
  • ビッグO記法,多項式オーダー,疑似乱数*7丸め誤差,貪欲(greedy)アルゴリズム,怠け者(lazy)な処理,アトミック(atomic)な処理,NP完全,巡回セールスマン問題,等々のキーワードも,一通り理解しておくこと.(そんなに多くない.むしろ名前が付いてない部分に対する理解も重要.)

くらいになっておくべきだろう.

アルゴリズムとデータ構造」みたいなタイトルが付いているのは入門書の場合が多い.単語帳ほどではないけれど,アルゴリズム本もプログラミング関係の書籍としてはかなり多い方だ.単語集と同様に,各人それぞれに好みがあるだろうから,自分の目で確認して自己責任で入手すること.

http://d.hatena.ne.jp/JavaBlack/20110923/p1

*1:「本屋で立ち読みした瞬間,そっとじ」な人も多いだろう.難易度は高めなのでそのつもりで.

*2:洋書だと,Java版とPython版もあるようだ.

Data Structures and Algorithms Made Easy in Java: Data Structure and Algorithmic Puzzles (English Edition)

Data Structures and Algorithms Made Easy in Java: Data Structure and Algorithmic Puzzles (English Edition)

Data Structures and Algorithmic Thinking with Python: Data Structure and Algorithmic Puzzles (English Edition)

Data Structures and Algorithmic Thinking with Python: Data Structure and Algorithmic Puzzles (English Edition)

*3:旧版

アルゴリズムクイックリファレンス

アルゴリズムクイックリファレンス

Algorithms in a Nutshell (In a Nutshell (O'Reilly))

Algorithms in a Nutshell (In a Nutshell (O'Reilly))

*4:C言語版なら和書もあったが,版が古い. http://gihyo.jp/book/1993/4-87408-560-1#toc

ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ

ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ

原書の初版は88年かな?
Numerical Recipes in C

Numerical Recipes in C

*5:少し古いのだとこんなのもあった.これはbit連載だったかな.

ナノピコ教室―プログラミング問題集

ナノピコ教室―プログラミング問題集

続 ナノピコ教室―プログラミング問題集

続 ナノピコ教室―プログラミング問題集

*6:原書はこれかな.

Programming for the Puzzled: Learn to Program While Solving Puzzles (The MIT Press)

Programming for the Puzzled: Learn to Program While Solving Puzzles (The MIT Press)

*7:http://d.hatena.ne.jp/JavaBlack/20170220/p1