著者:近藤 嘉雪[こんどう・よしゆき](1961-)
装丁:米谷 テツヤ[よねたに・てつや]
件名:アルゴリズム
件名:データ構造
NDC:007.64 情報科学
定本Javaプログラマのためのアルゴリズムとデータ構造 | SBクリエイティブ
・サポートページ(コードや正誤表など。ただし目次にはミスがある(「3.2 データ構造の実現」のあたり))。
定本Javaプログラマのためのアルゴリズムとデータ構造 - 近藤嘉雪のプログラミング工房
【目次】
はじめに(2011年1月 西東京にて 近藤嘉雪) [iii-iv]
CONTENTS [v-xii]
第1部 アルゴリズムとデータ構造の基本
1. アルゴリズムとは? 003
1.1 はじめに 003
1.2 アルゴリズムとデータ構造の関係 005
1.3 なぜアルゴリズムを勉強するのか? 008
2. 計算量 010
2.1 アルゴリズムの性能の基準 010
2.2 計算量 011
2.2.1 線形探索法による探索の計算量
2.2.2 二分探索法による探索の計算量
2.2.3 データの登録に必要な計算量
2.2.4 線形探索法と二分探索法の比較
2.2.5 ハッシュ法
2.2.6 アルゴリズムを選択する基準
3. データ構造とは? 031
3.1 抽象データ型 031
3.2 データ構造の実現 033
3.2.1 プリミティブ型
数値型
オートボクシング
ブール型 boolean
3.2.2 参照型
オブジェクトのコピーを作る
変更不能オブジェクト
オブジェクトの同一性と等価性:==演算子とequalsメソッド
hashCodeメソッドを定義する
3.2.3 配列
Javaにおける配列の扱い
配列のコピー
配列初期の落とし穴
3.2.4 列挙型
3.3 ジェネリック型 069
第2部 基本的なデータ構造
4. 配列 079
4.1 リスト 079
4.2 スタック[stack] 081
4.3 待ち行列[queue] 085
4.4 配列によるデータ構造の実現 086
4.4.1 リストの実現
4.4.2 スタックの実現
4.4.3 スタックの使用例――逆ポーランド電卓
4.4.4 待ち行列の実現
5. 連結リスト 107
5.1 連結リスト 107
5.1.1 連結リストとは?
5.1.2 連結リストの基本的性質
5.1.3 連結リストの操作
要素の挿入
要素の削除
境界条件の扱い
5.1.4 連結リストに対するイテレータ
イテレータとは?
イテレータを実装する
5.2 循環リスト 135
5.2.1 循環リストとは?
5.2.2 循環リストの操作
5.2.3 リストの頭を用いた循環リスト
5.3 双方向リスト 142
5.3.1 双方向リストとは?
5.3.2 双方向リストの操作
5.3.3 双方向リストを実装する
6. 木構造 157
6.1 木構造とは? 157
6.2 順序木と無順序木 163
6.3 二分木 164
6.4 木のなぞり 167
6.4.1 木をなぞる手順
6.4.2 行きがけ順のなぞり
6.4.3 通りがけ順のなぞり
6.4.4 帰りがけ順のなぞり
6.4.5 二分木をなぞるメソッド
6.5 数式の木 174
6.6 木の実現 177
第3部 探索
7. 探索とは? 183
7.1 探索という操作 183
7.2 線形探索法と二分探索法 184
8. ハッシュ法 186
8.1 ハッシュ法の原理 186
8.2 衝突 188
8.3 チェイン法 190
8.3.1 チェイン法の原理
8.3.2 チェイン法のプログラム
8.3.3 チェイン法の解析
8.4 オープンアドレス法 200
8.4.1 オープンアドレス法の原理
8.4.2 オープンアドレス法のプログラム
8.4.3 再ハッシュ手順
8.4.4 オープンアドレス法の解析
8.5 ハッシュ関数 214
8.6 ハッシュ法の応用 215
8.7 ハッシュ法の性質 216
9. 二分探索木 218
9.1 二分探索木とは? 218
9.2 二分探索木の操作 219
9.2.1 二分探索木の探索
9.2.2 二分探索木への挿入
9.2.3 二分探索木からの削除
9.3 二分探索木の性質 239
10. 平衡木 243
10.1 平衡木とは? 243
10.2 AVL木 244
10.2.1 AVL木の考え方
10.2.2 AVL木の操作
10.3 B木 252
10.3.1 B木の考え方
10.3.2 B木の操作
B木の探索
B木への挿入
B木からの削除
10.3.3 B木のプログラム
10.3.4 B*木
第4部 整列
11. 整列とは? 285
11.1 整列という操作 285
11.1.1 内部整列と外部整列
11.1.2 比較による整列と比較によらない整列
11.2 整列アルゴリズムの種類 288
11.3 整列の計算量 289
11.4 安定な整列 290
11.5 java.util.Arrayクラスのsortメソッド 292
12. 単純な整列アルゴリズム 294
12.1 単純な整列アルゴリズムとは? 294
12.2 バブルソート 295
12.3 選択ソート 297
12.4 挿入ソート 300
12.5 単純な整列アルゴリズムの性能 302
13. シェルソート 305
13.1 シェルソートの原理 305
13.2 シェルソートの計算量 307
13.3 増分の選択 309
13.4 シェルソートのプログラム 312
14. クイックソート 315
14.1 クイックソートの原理 351
14.1.1 クイックソートの考え方
14.1.2 分割のアルゴリズム
14.2 クイックソートのプログラム 320
14.3 クイックソートの計算量 324
14.4 クイックソートの改善 326
15. マージソート 332
15.1 マージソートの原理 322
15.1.1 マージ
15.1.2 マージソートのアルゴリズム
15.2 配列によるマージソート 338
15.3 マージソートの性質 342
15.4 連結リストによるマージソート 344
15.5 外部整列 351
15.5.1 外部記憶の性質
15.5.2 マージソートを利用した外部整列
16. ヒープソート 356
16.1 ヒープソートの原理 356
16.1.1 探索を利用して整列を行う
16.1.2 優先順位付き待ち行列
16.1.3 半順序木
16.1.4 ヒープ
16.1.5 Heapクラス:ヒープを実現する
16.1.6 ヒープによるdeleteMinの実現
16.1.7 ヒープによるinsertの実現
16.2 ヒープソートのプログラム 370
17. 比較によらないソート 379
17.1 比較によらない整列アルゴリズム 379
17.2 ビンソート[bin sort] 380
17.2.1 ビンソートの原理
17.2.2 ビンソートのプログラム
BinSortDataクラス
BinSortクラス
BinSortMainクラス
17.2.3 ビンソートの性質
17.3 分布数え上げソート 389
17.3.1 分布数え上げソートの原理
17.3.2 分布数え上げソートのプログラム
17.3.3 分布数え上げソートの性質
17.4 基数ソート 396
17.4.1 基数ソートの原理
17.4.2 基数ソートのプログラム
17.4.3 基数ソートの性質
第5部 文字列の探索
18. 文字列の探索 411
18.1 文字列に対する探索 411
18.2 力まかせのアルゴリズム 412
18.2.1 力まかせのアルゴリズムの原理
18.2.2 力まかせのアルゴリズムの計算量
18.3 洗練されたアルゴリズム 416
18.4 Knuth-Morris-Prattのアルゴリズム 417
18.4.1 KMP法の原理
18.4.2 KMP法の性質
18.5 Boyer-Mooreのアルゴリズム 422
18.5.1 BM法の原理
18.5.2 BM法の実際
18.5.3 BM法のプログラム
18.5.4 BM法の性質
第6部 いろいろなアルゴリズム
19. バックトラック法 437
19.1 バックトラック法とは? 437
19.2 8クイーン問題 438
19.2.1 8クイーン問題とは?
19.2.2 8クイーンの解法
19.2.3 バックトラック法の実現
19.2.4 8クイーンのプログラム
19.2.5 すべての解を求める
20. 動的計画法 457
20.1 動的計画法とは? 459
20.2 ナップザック問題 460
20.2.1 ナップザック問題とは?
20.2.2 ナップザック問題の解き方
20.2.3 ナップザック問題を解くプログラム
20.2.4 ナップザック問題の計算量
参考文献 [477-479]
索引 [481-487]
著者紹介 [489]