AtCoderなどの競技プログラミングで使える、アルゴリズムの概要と実装例を紹介するリポジトリです。
初心者から上級者まで、全レベルの競技プログラマーを対象としています。
algorithms/
├── algorithm/ # 基本的なアルゴリズム
├── data_structures/ # データ構造
├── graph/ # グラフ理論
├── dp/ # 動的計画法
└── math/ # 数学・整数論
- Union-Find - 素集合データ構造
- セグメント木 - 区間クエリ・要素更新
- BIT (Binary Indexed Tree) - 累積和・区間和
- BFS (幅優先探索) - 最短経路(重みなし)
- DFS (深さ優先探索) - グラフ探索・連結成分
- ダイクストラ法 - 単一始点最短経路(非負辺)
- ベルマンフォード法 - 単一始点最短経路(負辺対応)
- 最小全域木 - クラスカル法・プリム法
- ナップサック問題 - 0-1ナップサック
- LCS (最長共通部分列) - 文字列の類似度
- メモ化再帰 - トップダウンDP
- ビットDP - 集合の状態管理
- 区間DP - 区間の最適化
- 木DP - 木構造でのDP
各アルゴリズムのフォルダには以下が含まれています:
README.md- アルゴリズムの概要、計算量、使用場面の説明*.cpp- C++による実装例
実装例はそのままコピーして使用できるほか、理解を深めるための学習教材としても利用できます。
- 累積和、二分探索、尺取り法
- DFS/BFS、Union-Find
- ダイクストラ法、最小全域木
- セグメント木、BIT
- メモ化再帰、いもす法
- ベルマンフォード法
- ビットDP、区間DP、木DP
- 全方位木DP
- 重みなし → BFS
- 非負の重み → ダイクストラ法
- 負の重み → ベルマンフォード法
- 区間和 → 累積和、BIT、セグメント木
- 区間加算 → いもす法
- 区間最小/最大 → セグメント木
- グループ管理 → Union-Find
- 部分集合の最適化 → ビットDP
- 部分列 → LCS
- 編集距離 → メモ化再帰
本リポジトリのコードは自由に使用・改変できます。