本書は、長年にわたって数多くの優秀なシステムエンジニア、プログラマーに愛読されてきた、良いプログラムを書くための必須知識をまとめたテキストです。
うまくつくられたプログラムは、理解しやすく実行効率も高いものですが、一方、そうでないものは解読も困難なうえに、やたら時間や領域をくいます。さらに、そのようなまずいプログラムには、えてしてミスや内容的な誤りも隠されているものです。
本書は、新たなアルゴリズムで新たなプログラミングを行うために覚えておかなくてはいけない必須知識、そしてアルゴリズムの設計、実現における基礎を、実用上の価値に重点を置いてまとめています。
今回の改訂においては、多くの読者の声をよく参考にして、よりわかりやすく、簡明になるよう見直しを行ったほか、接尾辞木について新たな解説を加えています。
システムエンジニア、プログラマーとして活躍される方の五輪書です。
https://www.ohmsha.co.jp/book/9784274223914/
正誤表やDLデータ等がある場合はこちらに掲載しています
第1章 アルゴリズムとその計算量
第2章 基本的なデータ構造
第3章 順序つき集合の処理
第4章 整列のアルゴリズム
第5章 アルゴリズムの設計
第6章 アルゴリズムの実現
付記:Cメモ
演習問題:ヒントと略解
第1章 アルゴリズムとその計算量
1.1 計算とアルゴリズム
1.2 アルゴリズムの例
1.3 計算量の評価
1.4 プログラムの設計をめぐる話題
演習問題
第2章 基本的なデータ構造
2.1 リストとその実現
2.2 スタック,待ち行列など
2.3 グラフ,木と2分木
2.4 集合と辞書
2.4.1 集合
2.4.2 辞書とハッシュ表
2.5 集合族の併合
演習問題
第3章 順序つき集合の処理
3.1 順序の定義と必要な作業
3.2 優先度つき待ち行列,ヒープ
3.3 2分探索木
3.4 平衡探索木
演習問題
第4章 整列のアルゴリズム
4.1 整列アルゴリズム概観
4.2 バブルソート
4.3 バケットソートと基数ソート
4.3.1 バケットソート
4.3.2 基数ソート
4.4 ヒープソート
4.5 クイックソート
4.6 整列アルゴリズムの計算量の下界
4.7 第p要素の選択
4.7.1 QUICKSELECTとSELECT
4.7.2 確率アルゴリズムLAZYSELECT
演習問題
第5章 アルゴリズムの設計
5.1 整列データの処理
5.1.1 整列配列の併合
5.1.2 2分探索
5.1.3 ニュートン法による零点の計算
5.2 分割統治法
5.2.1 マージソート
5.2.2 長大数の掛け算
5.2.3 再帰方程式の漸近解
5.3 動的計画法
5.3.1 SUBSET-SUM問題
5.3.2 直線上の配達スケジューリング
演習問題
第6章 アルゴリズムの実現
6.1 簡単な最適化問題
6.1.1 資源配分問題
6.1.2 ナップサック問題
6.2 グラフに関するいくつかの問題
6.2.1 最小木
6.2.2 最短路問題
6.2.3 深さ優先探索と関節点の計算
6.3 文字列の照合
6.4 計算幾何の話題から
6.4.1 初等幾何学の計算
6.4.2 ボロノイ図
6.5 関係データベースの処理
演習問題
付記:Cメモ
演習問題:ヒントと略解