contents memorandum はてな

目次とメモを置いとく場

『定本Javaプログラマのためのアルゴリズムとデータ構造』(近藤嘉雪 ソフトバンククリエイティブ 2011//2004)

著者:近藤 嘉雪[こんどう・よしゆき](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]