1. アルゴリズムの基本 MOC
- 定義と性質
- 記述方法
- 正当性の検証
- 効率性の分析 (計算量)
- 計算量とは (アルゴリズムの性能評価指標)
- 時間計算量 (Time Complexity)
- 空間計算量 (Space Complexity)
- オーダー記法 (Asymptotic Notation)
- 計算量のクラス
- 分析のケース
- 償却分析 (Amortized Analysis)
- 再帰アルゴリズムの分析
- 問題の種類
2. アルゴリズム設計戦略 (Algorithm Design Paradigms) MOC
- アルゴリズム設計戦略とは (問題解決のための一般的なアプローチ)
- Exhaustive Search) MOC
- 分割統治法 (Divide and Conquer) MOC
- 分割統治法の考え方 (分割・統治・結合)
- 分割統治法の設計手順
- 分割統治法の適用例
[[マージソート]](詳細はソートアルゴリズムにて)[[クイックソート]](詳細はソートアルゴリズムにて)[[二分探索]](詳細は探索アルゴリズムにて)- 最近傍点対問題の分割統治解法
- 大整数の乗算 (Karatsubaアルゴリズム)
- 行列の乗算 (Strassenアルゴリズム)
- 分割統治法の計算量分析 (マスター定理の適用)
- 動的計画法 (Dynamic Programming - DP) MOC
- 貪欲法 (Greedy Algorithms) MOC
- 貪欲法とは (局所最適解の積み重ね)
- 貪欲法の適用条件 (貪欲選択性、最適部分構造)
- 貪欲法の正当性の証明の難しさ (交換論法など)
- 貪欲法の適用例
- 活動選択問題 (Interval Scheduling)
- フラクショナルナップサック問題
- ハフマン符号化 (Huffman Coding)
[[クラスカル法]](最小全域木)[[プリム法]](最小全域木)[[ダイクストラ法]](単一始点最短経路)- コイン問題 (特定の条件下での最適解)
- 貪欲法が最適解を与えない例
- バックトラッキング法 (Backtracking) MOC
- 分岐限定法 (Branch and Bound) MOC
- ランダム化アルゴリズム (Randomized Algorithms) MOC
- ランダム化アルゴリズムとは (アルゴリズム内で乱数を利用)
- ラスベガス法 (Las Vegas Algorithm) (常に正しい解、実行時間は確率的)
- モンテカルロ法 (Monte Carlo Algorithm) (確率的に正しい解、実行時間は確定的)
- ランダム化アルゴリズムの適用例
[[ランダム化クイックソート]][[ミラー・ラビン素数判定法]]- モンテカルロ法による円周率の推定
- Skip List
- 乱数生成の重要性
- 近似アルゴリズム (Approximation Algorithms) MOC
- ヒューリスティックアルゴリズム (Heuristic Algorithms) MOC
3. ソートアルゴリズム (Sorting Algorithms) MOC
- ソートアルゴリズムとは (定義、目的、キー)
- 分類
- 基本的な比較ソートアルゴリズム (O(n^2))
- 効率的な比較ソートアルゴリズム (O(n log n))
- マージソート (Merge Sort) MOC
- クイックソート (Quick Sort) MOC
- ヒープソート (Heap Sort) MOC
- (オプション) シェルソート (Shell Sort) MOC
- (オプション) イントロソート (Introsort) MOC (クイックソート、ヒープソート、挿入ソートのハイブリッド)
- (オプション) Timsort MOC (マージソートと挿入ソートのハイブリッド、PythonやJavaで採用)
- 非比較ソートアルゴリズム (線形時間ソート)
- 外部ソート (External Sorting) MOC (データがメモリに収まらない場合)
- ソートアルゴリズムの選択基準と使い分け
- 各種ソートアルゴリズムの比較表 (計算量、安定性、空間など)
4. 探索アルゴリズム (Searching Algorithms) MOC
- 探索アルゴリズムとは (特定の要素を見つけるプロセス)
- 基本的な探索アルゴリズム
- (オプション) 補間探索 (Interpolation Search) MOC
- (オプション) 指数探索 (Exponential Search) MOC
- ハッシュテーブルを用いた探索 (詳細はハッシュテーブル MOCにて)
- 木構造を用いた探索 (詳細は二分探索木 MOCなどにて)
- グラフ探索 (詳細はグラフアルゴリズム MOCにて)
5. グラフアルゴリズム (Graph Algorithms) MOC
- (このセクションはデータ構造 MOCのグラフ MOC内のアルゴリズム項目と重複・関連しますが、アルゴリズムの視点から詳細化・拡充します)
- グラフアルゴリズムの重要性と多様な応用
- グラフ探索 (Graph Traversal)
- 最短経路問題 (Shortest Path Problems)
- 単一始点最短経路 (Single-Source Shortest Path - SSSP)
- ダイクストラ法 (Dijkstra’s Algorithm) MOC
- ベルマン・フォード法 (Bellman-Ford Algorithm) MOC
- SPFA (Shortest Path Faster Algorithm) MOC (ベルマン・フォード法のキューによる最適化、特定のケースで高速)
- 有向非巡回グラフ (DAG) における単一始点最短経路アルゴリズム (動的計画法/トポロジカルソート利用、O(V+E))
- 全点対最短経路 (All-Pairs Shortest Path - APSP)
- フロイド・ワーシャル法 (Floyd-Warshall Algorithm) MOC
- ジョンソン法 (Johnson’s Algorithm) MOC (疎なグラフ向け、ダイクストラ法とベルマン・フォード法の組み合わせ)
- 単一始点最短経路 (Single-Source Shortest Path - SSSP)
- 最小全域木 (Minimum Spanning Tree - MST)
- ネットワークフロー (Network Flow)
- フローネットワークの定義 (ソース、シンク、容量、フロー)
- 最大フロー問題 (Maximum Flow Problem) MOC
- 残余グラフ (Residual Graph) と増加道 (Augmenting Path)
- フォード・ファルカーソン法 (Ford-Fulkerson Algorithm) MOC (増加道を繰り返し見つける汎用的な方法)
- エドモンズ・カープアルゴリズム (Edmonds-Karp Algorithm) MOC (BFSで増加道を探す、O(VE^2))
- (オプション) Dinicのアルゴリズム (Dinic’s Algorithm) MOC (ブロッキングフロー、より高速)
- 最小カット問題 (Minimum Cut Problem) MOC
- (オプション) 最小費用流問題 (Minimum Cost Flow Problem) MOC
- (オプション) 二部グラフの最大マッチングと最大フローの関係
- 連結性 (Connectivity)
- Union-Find)
- 強連結成分 (Strongly Connected Components - SCC) MOC (有向グラフ)
- 強連結成分の定義
- コサラジュのアルゴリズム (Kosaraju’s Algorithm) (2回のDFS)
- タージャンのアルゴリズム (Tarjan’s Algorithm) (1回のDFSとスタック)
- Cut Edges) の検出アルゴリズム (DFSベース)
- トポロジカルソート (Topological Sort)
- サイクル検出 (Cycle Detection)
- (オプション) その他のグラフ問題
- グラフ彩色問題 (Graph Coloring Problem) (NP困難)
- Cycle Problem) (NP困難)
- 巡回セールスマン問題 (Traveling Salesperson Problem - TSP) (NP困難、近似アルゴリズムで扱うことも)
- グラフ同型問題 (Graph Isomorphism Problem)
6. 文字列アルゴリズム (String Algorithms) MOC
- 文字列アルゴリズムの重要性と応用 (テキスト処理、バイオインフォマティクスなど)
- 文字列探索 (String Matching / Pattern Searching)
- Naive String Search) MOC
- KMP法 (Knuth-Morris-Pratt Algorithm) MOC
- ボイヤー・ムーア法 (Boyer-Moore Algorithm) MOC
- ラビン・カープ法 (Rabin-Karp Algorithm) MOC
- (オプション) Aho-Corasickアルゴリズム (Aho-Corasick Algorithm) MOC (複数のパターンを同時に検索、トライ木ベース)
- (オプション) Zアルゴリズム (Z-Algorithm) MOC (文字列内の自身の接頭辞と一致する部分文字列の長さ配列)
- 文字列に関する問題
- 高度な文字列データ構造
7. 数値計算アルゴリズム (Numerical Algorithms) MOC (基本的なもの)
- 数値計算アルゴリズムの概要と誤差の問題
- 整数論的アルゴリズム
- 最大公約数 (GCD) の計算
- ユークリッドの互除法 (Euclidean Algorithm)
- 拡張ユークリッドの互除法 (Extended Euclidean Algorithm) (ax + by = gcd(a,b)の解)
- 最小公倍数 (LCM) の計算 (GCDを利用)
- 素数判定 (Primality Testing)
- 素因数分解 (Integer Factorization) (一般に困難)
- モジュラ演算 (Modular Arithmetic)
- 合同式と剰余演算の性質
- モジュラ逆数 (Modular Multiplicative Inverse) (拡張ユークリッドの互除法またはフェルマーの小定理利用)
- べき乗計算 (Exponentiation)
- Binary Exponentiation) (a^n mod m を効率的に計算)
- (オプション) 中国剰余定理 (Chinese Remainder Theorem)
- 最大公約数 (GCD) の計算
- 基本的な行列演算
- 基本的な数値解析アルゴリズム
8. 計算幾何学アルゴリズム (Computational Geometry Algorithms) MOC (基本的なもの)
- 計算幾何学の概要と基本要素 (点、線分、多角形)
- 基本的な幾何学的プリミティブ
- 基本的な問題とアルゴリズム
- 点が多角形の内部にあるかどうかの判定
- 凸包 (Convex Hull) の構築
- 凸包の定義と性質
- グラハムスキャン (Graham Scan Algorithm) (O(n log n))
- Gift Wrapping Algorithm) (O(nh), hは凸包の頂点数)
- (オプション) Monotone Chain Algorithm (Andrew’s Algorithm) (O(n log n))
- (オプション) Quickhull Algorithm (クイックソートに類似)
- 最近傍点対問題 (Closest Pair of Points Problem)
- (オプション) Voronoi図とDelaunay三角形分割 (概念と応用)
- (オプション) 線分アレンジメントと掃引線アルゴリズム (Sweep Line Algorithm)
9. 計算複雑性理論 (Computational Complexity Theory) MOC (アルゴリズムとの関連)
- 計算複雑性理論とは (計算問題の困難さの分類)
- 計算モデル (概要)
- 問題クラス
- 困難性の概念
- P vs NP問題
- NP困難問題へのアプローチ
- 指数時間アルゴリズムによる厳密解法 (小規模なインスタンス向け)
[[近似アルゴリズム]][[ランダム化アルゴリズム]][[ヒューリスティックアルゴリズム]]- パラメータ化計算量 (Parameterized Complexity) (概要)
- (オプション) その他の複雑性クラス