概要
- データ構造とは (コンピュータ科学における役割)
- 抽象データ型 (ADT)とデータ構造の関係
- データ構造の分類 (線形構造、非線形構造など)
- データ構造の選択基準 (時間計算量、空間計算量、操作の種類)
1. 配列 (Array)
- 基本概念
- 操作と計算量
- 種類と応用
- プログラミング言語における配列
- 利点と欠点
2. 連結リスト (Linked List)
- 基本概念
- 操作と計算量
- 種類
- 応用
- 利点と欠点
- 比較
3. スタック (Stack)
- 基本概念
- 操作
- 実装方法
- 応用例
4. キュー (Queue)
- 基本概念
- 操作
- 実装方法
- 種類と応用
5. ハッシュテーブル (Hash Table)
- 基本概念
- ハッシュ関数 (Hash Function)
- 衝突 (Collision) と解決法
- 操作と計算量
- リハッシュ (Rehashing)
- 応用例
- 利点と欠点
- 高度なトピック
6. 木構造 (Tree)
- 基本概念
- 木の種類
- 二分木 (Binary Tree) MOC
- 二分木とは (各ノードが高々2つの子を持つ木)
- 二分木の特性
- 二分木の表現方法 (配列表現、ポインタ・参照表現)
- 二分木の走査 (Traversal)
- 二分木の応用例 (式木、ハフマン木など)
- 二分探索木 (Binary Search Tree - BST) MOC
- 二分探索木とは (左の子孫 ⇐ 親 ⇐ 右の子孫 の制約)
- 二分探索木の特性と中順走査によるソート済み順序の取得
- 二分探索木の基本操作
- 二分探索木の時間計算量 (平均O(log n), 最悪O(n))
- 平衡二分探索木 (Balanced Binary Search Tree) MOC
- 二分探索木の利用例 (ソート済みデータの効率的な管理、辞書や集合の実装)
- B木 (B-Tree) とその派生 MOC
7. ヒープ (Heap)
- 基本概念
- 実装
- 操作
- ヒープへの要素挿入 (insert ・ add) とヒープ条件の再構成 (heapify-up ・ sift-up ・ bubble-up)
- ヒープからの最大・最小要素の取得 (peek ・ get-max ・ get-min)
- ヒープからの最大・最小要素の削除 (extract-max ・ extract-min) とヒープ条件の再構成 (heapify-down ・ sift-down ・ bubble-down)
- ヒープの構築 (build-heap): 複数の要素から一度にヒープを形成する
- (オプション) ヒープ内の要素の値の変更 (decrease-key ・ increase-key)
- ヒープ操作の時間計算量
- 応用
- 種類
- 二項ヒープ (Binomial Heap) (マージ操作が効率的)
- フィボナッチヒープ (Fibonacci Heap) (償却計算量が非常に小さい)
- d-ary ヒープ
8. グラフ (Graph)
- 基本概念
- グラフの種類と用語
- 無向グラフ (Undirected Graph) と有向グラフ (Directed Graph ・ Digraph)
- 重み付きグラフ (Weighted Graph) と重みなしグラフ (Unweighted Graph)
- 単純グラフ (Simple Graph) と多重グラフ (Multigraph)
- 自己ループ (Self-loop)
- 頂点の次数 (Degree): 入次数 (In-degree) と出次数 (Out-degree)
- パス (Path)、単純パス (Simple Path)、閉路 (Cycle)、単純閉路 (Simple Cycle)
- 連結グラフ (Connected Graph) と非連結グラフ (Disconnected Graph)
- 強連結成分 (Strongly Connected Components - SCC) (有向グラフ)
- 弱連結成分 (Weakly Connected Components) (有向グラフ)
- 部分グラフ (Subgraph)、誘導部分グラフ (Induced Subgraph)
- 完全グラフ (Complete Graph)
- 二部グラフ (Bipartite Graph)
- 木 (Tree) はグラフの一種 (連結で閉路のない無向グラフ)
- 有向非巡回グラフ (Directed Acyclic Graph - DAG)
- グラフの表現方法
- グラフの走査 (Traversal) / 探索 (Search)
- グラフアルゴリズム MOC (主要なアルゴリズム群)
- 最短経路問題 (Shortest Path Problems)
- 単一始点最短経路問題 (Single-Source Shortest Path - SSSP)
- ダイクストラ法 (Dijkstra’s Algorithm) (非負の辺重み)
- ベルマンフォード法 (Bellman-Ford Algorithm) (負の辺重み対応、負閉路検出)
- 有向非巡回グラフ (DAG) における単一始点最短経路 (動的計画法)
- 全点対最短経路問題 (All-Pairs Shortest Path - APSP)
- フロイド・ワーシャル法 (Floyd-Warshall Algorithm) (動的計画法)
- ジョンソン法 (Johnson’s Algorithm) (疎なグラフ向け)
- 単一始点最短経路問題 (Single-Source Shortest Path - SSSP)
- 最小全域木 (Minimum Spanning Tree - MST) (連結な無向重み付きグラフ)
- 最小全域木とは (定義と特性)
- プリム法 (Prim’s Algorithm)
- クラスカル法 (Kruskal’s Algorithm) (Union-Findデータ構造の利用)
- フローネットワーク (Flow Networks) (高度なトピック)
- 連結性 (Connectivity)
- 閉路検出 (Cycle Detection)
- トポロジカルソート (Topological Sort) (DAGのみ)
- グラフ彩色 (Graph Coloring) (NP困難問題)
- マッチング (Matching) (例: 二部グラフの最大マッチング)
- 最短経路問題 (Shortest Path Problems)
- グラフの応用例