ISBN 9784320120341
データ構造とアルゴリズム
概要
大学理工系向けに計算量からNP困難まで段階的に学ぶアルゴリズム入門
想定読者
大学1〜3年生で情報系の授業を受ける学生、および高校数学を基礎にアルゴリズムを独習したい社会人
こんな人には向いていない
- 競技プログラミング対策として実装例・コードを多数求める読者(本書は概念・証明重視でコード例は限定的)
- すでに大学院レベルの計算幾何・NP困難を業務で扱っているエンジニアには基礎事項の比重が大きい
- 特定言語の実装パターンを直接学びたい実務プログラマ(言語依存の記述はない)
読了後にできるようになること
- 計算量(O記法)の定義と比較方法を証明ベースで理解できる
- リスト・ヒープ・ハッシュ法の各データ構造を性質と用途から選択できる
- グラフ探索(BFS/DFS)・最短路・最大流の各アルゴリズムを手順から追える
- 動的計画法と分割統治の考え方を問題構造に対応付けて適用できる
- ボロノイ図・ドロネー図など計算幾何の基礎アルゴリズムを概念レベルで理解できる
- PとNPの違い・NP完全性の意味を説明し、難問への対処戦略(緩和・分枝限定・局所改良)を選べる
本書のキー概念(章解説)
- 第 1 章 アルゴリズムと計算量 — O記法の定義を最初に押さえる。以降全章の評価軸になる
- 第 2 章 リスト構造 — ポインタの効用を直感的に理解する導入章
- 第 3 章 ヒープ — 優先度付きキューの実装原理として実務でも頻出
- 第 4 章 ハッシュ法とバケット法 — 検索問題の基本。2分探索との使い分けを整理できる
- 第 5 章 再帰呼出しと分割統治
- 第 6 章 グラフ探索 — BFS/DFSの構造的理解。7章の前提として必読
- 第 7 章 最短路問題 — ダイクストラ法の手順と証明を追える。本書を参照するQiita記事が複数存在する章
- 第 8 章 動的計画法
- 第 9 章 縮小法
- 第 10 章 最大流と割当て問題
- 第 11 章 ボロノイ図とドロネー図 — 計算幾何への入り口。後半(12〜13章)と合わせて選択学習が可能
- 第 12 章 3次元凸包とドロネー図
- 第 13 章 平面走査法
- 第 14 章 問題の難しさの測り方 — P/NP/NP完全の概念整理に最適。1〜4章の後に飛んで読んでも成立する
- 第 15 章 難問対策 — NP困難問題への実践的対処法。アルゴリズム設計の全体観をつかむ章
- 第 16 章 難問を利用した情報保護 — ナップザック問題と公開鍵暗号の接続。セキュリティの理論的背景として独立して参照できる
ハイライト
- 1〜4章までは必ず学ぶべき基本事項で、そのあとは講義などで使用される方や独習者の時間と興味に応じて自由に選択が可能です。そのための後に、各章間の関係図・学習順序が示されているので、それぞれの事情に応じて学習するべき章を選ぶのに参考となるでしょう。(章選択の自由度を示す記述。独習者が全章通読しなくても体系を得られる設計が本書の特徴)
- 解説には図版を多用し、より深く確実な理解が得られるように配慮されています。また、すべての章末には演習問題が配置されており、巻末に略解が示されています。(図版中心の解説と章末演習が教科書としての実用性を支えている点を示す)
外部からの言及
- ダイクストラ法の手順と証明を解説するQiita記事で、本書が主要参照元として挙げられている。アルゴリズムの記述を本書から直接引用する形で使われており、大学教科書としての信頼性が評価の根拠となっている(qiita)
編集メモ
Qiita上での言及はISBN直接引用2件(合計likes 8)で、いずれも参考文献欄への掲載にとどまる。Qiita言及量・likes数ともにessential/practical基準には届かないが、2001年刊の専門教科書として継続的に参照されている
読む前に押さえておきたいこと
- 高校数学レベルの集合・関数・対数の概念(第1章の計算量定義に使う)
- プログラミング経験は必須ではないが、変数・繰り返し・条件分岐の概念を把握していると章末問題を解きやすい
学習のコツ
- 1〜4章(計算量・リスト・ヒープ・ハッシュ)は順番通りに通読し、後続章のすべてで参照する評価軸を固める
- 5章以降は著者が提示する章間関係図を先に確認し、自分の目的(グラフ・計算幾何・NP困難など)に合わせて選択的に読む
- 各章末の演習問題は巻末略解で自己採点できるため、半期授業の週次確認テスト代わりに活用できる
- コラム『カーペンターズ・アルゴリズム』は採点対象外として気分転換的に読むとアルゴリズム設計の発想法が広がる
出版社による内容紹介
ソフトウェアを設計するための基礎となるデータ構造とアルゴリズムについて,一般の理工系学部1〜3年生を対象として,高校の数学基礎知識のみを前提とした易しい標準的なテキストまたは入門独習書です。半期授業・1年授業のどちらにも柔軟に対応できるように工夫されており,各章は1回の授業で扱える分量にまとめてあります。1〜4章までは必ず学ぶべき基本事項で,そのあとは講義などで使用される方や独習者の時間と興味応じて自由に選択が可能です。そのための後に,各章間の関係図・学習順序が示されているので,それぞれの事情に応じて学習するべき章を選ぶのに参考となるでしょう。 解説には図版を多用し,より深く確実な理解が得られるように配慮されています。また,すべての章末には演習問題が配置されており,巻末に略解が示されています。さらに,「カーペンターズ・アルゴリズム」というタイトルの囲み記事を設け,新しい計算原理を考えるための柔軟な発想を刺激する機会も作られています。 第1章 アルゴリズムと計算量 1.1 アルゴリズムとは 1.2 計算量 第2章 リスト構造 2.1 ポインタの効用 2.2 リスト構造 第3章 ヒープ 3.1 2進木の素朴な利用 3.2 ヒープ 第4章 ハッシュ法とバケット法 4.1 検索問題と2分探索 4.2 ハッシュ法 4.3 バケット法 4.4 バケットソート 第5章 再帰呼出しと分割統治 5.1 再帰呼出し 5.2 分割統治 第6章 グラフ探索 6.1 グラフとグラフ探索 6.2 探索の基本形 6.3 キューと横型探索 6.4 スタックと縦型探索 6.5 探索のためのデータ構造 第7章 最短路問題 7.1 最短路の探索 第8章 動的計画法 8.1 最適性の原理と動的計画法 8.2 弾性マッチング 第9章 縮小法 9.1 問題の規模縮小化 9.2 定順位要素の抽出 9.3 2次元線形計画法 第10章 最大流と割当て問題 10.1 ネットワークと流れ 10.2 最大流の逐次構成法 10.3 最大マッチング 10.4 割当て問題 第11章 ボロノイ図とドロネー図 11.1 ボロノイ図 11.2 最近点探索 11.3 ドロネー図 11.4 最近点対と最小全域木 第12章 3次元凸包とドロネー図 12.1 3次元凸包の分割統治構成算法 12.2 ドロネー図の構成算法 12.3 最遠点ボロノイ図 12.4 最小包含円と真円度 第13章 平面走査法 13.1 交点列挙問題 13.2 走査直線を用いた平面走査 13.3 2-3木ー平面走査法のためのデータ構造 第14章 問題の難しさの測り方 14.1 PとNP 14.2 NP完全 14.3 NP困難 第15章 難問対策 15.1 問題の緩和 15.2 分枝限定法の例 15.3 局所改良 第16章 難問を利用した情報保護 16.1 秘密鍵暗号と公開鍵暗号 16.2 ナップザック問題 16.3 ナップザック問題を利用した公開鍵暗号系 演習問題の略解 参考図書 索引
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。