algorithm
さまざまなアルゴリズムとデータ構造の実装例
データ構造やネットワークフローなど、さまざまな分野のアルゴリズムを C++20 で実装しています。
リンクが付いていないものは、実装予定であることを意味します。
アルゴリズム系の研究開発やプログラミングコンテストへの参加といった場面で、「実装例」「ライブラリ」として使用することを想定しています。
目次
難易度表記の目安
- (★☆☆☆):一般教養、NoviSteps グレード基準で 2Q 以下相当
- (★★☆☆):初等典型、NoviSteps グレード基準で 1Q, 1D 相当
- (★★★☆):中堅典型、NoviSteps グレード基準で 2D, 3D 相当
- (★★★★):高度典型、NoviSteps グレード基準で 4D 以上相当
NoviSteps グレード基準
基礎的なデータ構造 (DATA STRUCTURE : BASIC)
Union-Find など、基礎的なデータ構造の実装です。
Union-Find
ヒープ・キュー
ハッシュ・ハッシュテーブル
順序付き集合
その他
区間系データ構造 (DATA STRUCTURE : SEGMENT)
セグメント木や BIT など、区間クエリに強いデータ構造の実装です。
セグメント木
さまざまなセグメント木
BIT (Binary Indexed Tree)
セグメント木・BIT の応用
Sparse Table
ウェーブレット行列
Splay 木
- (★★★★) Splay 木
- (★★★★) 遅延伝播反転可能 Splay 木
赤黒木
その他平衡二分探索木
- (★★★★) RBST
- (★★★★) Treap
- (★★★★) AVL 木
- (★★★★) 遅延伝播反転可能 RBST
- (★★★★) 遅延伝播反転可能 Treap
高度なデータ構造 (DATA STRUCTURE : ADVANCED)
その他の高度なデータ構造の実装です。
高度なヒープ
- (★★★★) Skew Heap (マージ可能ヒープ)
- (★★★★) Paring Heap (マージ可能ヒープ)
- (★★★★) Radix Heap
- (★★★★) Fibonacci Heap
動的データ構造
- (★★★★) 動的 bitset
- (★★★★) 動的 Union-Find
- (★★★★) 動的セグメント木
- (★★★★) 動的二次元セグメント木
- (★★★★) 動的 BIT
- (★★★★) 動的二次元 BIT
- (★★★★) 動的ウェーブレット行列
並列データ構造
- (★★★☆) 並列二分探索
- (★★★★) 並列 Union-Find
永続データ構造
- (★★★★) 永続配列
- (★★★★) 永続 queue
- (★★★★) 永続セグメント木
- (★★★★) 完全永続 Union-Find
- (★★★★) 永続赤黒木
その他
- (★★★☆) 根付き木のハッシュ
- (★★★★) 領域 Union-Find
- (★★★★) Dynamic Connectivity
ㅤ
フロー (FLOW)
フロー関連のアルゴリズムです。
最大流
最小カット
最小費用流
最小費用 b-flow
二部マッチング
重み付き二部マッチング
二部マッチングの応用
劣モジュラ関数のグラフ表現
特殊なグラフ上の最小費用流の slope trick 帰着
- (★★★★) 1 端子 + パスグラフ上の最小費用流 (by slope trick)
- (★★★★) K 端子 + パスグラフ上の最小費用流 (by maroon 典型)
- (★★★★) 2 x N グリッドグラフ上の最小費用流 (by series-parallel -> slope trick)
最小費用流の応用
幾何 (GEOMETRY)
幾何アルゴリズムです。
基本要素
点, 線分, 三角形などの位置関係
射影, 交差判定, 距離
直線や円の交点
多角形
円
ボロノイ図
三次元幾何
- (★★★☆) 三次元幾何一式
- (★★★☆) 四面体 (AOJ 2060)
その他
- (★★☆☆) 垂直二等分線
- (★★★☆) 最近点対
- (★★★☆) 線分併合
- (★★★☆) 線分アレンジメント
- (★★★☆) 双対変換
- (★★★★) kd 木
グラフ (GRAPH)
グラフアルゴリズムです
グラフ
- (★☆☆☆) グラフテンプレート
- (★★★☆) ランダムツリー生成
- (★★★☆) ランダムグラフ生成
グラフ探索
連結成分分解
最短路問題
全域木, 路
グラフ上の指数時間アルゴリズム
一般グラフのマッチング
その他
線形代数 (MATH : LINEAR ALGEBRA)
行列計算など、線形代数に関するアルゴリズムです
体上の行列
環上の行列
行列式
F2 体上の線形代数
その他の行列アルゴリズム
- (★★★★) Strassen 法
- (★★★★) 余因子行列
- (★★★★) 多項式行列の prefix product M(0)M(1)…M(K-1)
- (★★★★) ハフニアン (完全マッチングの個数に帰着)
- (★★★★) パフィアン
さまざまな行列
- (★★★★) Black Box Linear Algebra (行列式計算 in O(N^2 + N T(N)))
- (★★★★) 巡回行列 (行列式計算 in O(N^2))
- (★★★★) 上三角 Toeplitz 行列 (行列式計算 in O(N^2))
- (★★★★) K 重対角行列 (行列式計算 in O(NK^2))
- (★★★★) 二項係数行列の作用
- (★★★★) スターリング数行列の作用
組合せ数学 (MATH : COMBINATORICS)
数え上げやゲームなど、組合せ数学に関するアルゴリズムです。
Modint
二項係数
- (★☆☆☆) 二項係数 (オーソドックス, n<=10^7, r<=10^7, p<=10^9)
- (★☆☆☆) 二項係数 (愚直計算, n<=10^9, r<=10^7, p<=10^9)
- (★☆☆☆) 二項係数 (漸化式計算, n<=5000, r<=5000, p<=10^9)
- (★★★☆) 二項係数 (任意 mod, n<=10^7, r<=10^7, m<=10^9)
写像12相
その他の数
- (★★★☆) ベルヌーイ数
- (★★★☆) モンモール数
集合冪級数 (SPS)
- (★★★☆) 高速ゼータ変換・高速メビウス変換
- (★★★★) 高速アダマール変換
- (★★★★) AND Convolution
- (★★★★) OR Convolution
- (★★★★) XOR Convolution
- (★★★★) Subset Convolution
- (★★★★) 集合冪級数の exp
- (★★★★) 集合冪級数の合成
ゲーム
- (★★☆☆) Nim
- (★★☆☆) Grundy 数
- (★★★★) Nim Product
- (★★★★) Grundy 数と多項式環の変換
- (★★★★) 超現実数
その他
整数論 (MATH : NUMBER THEORY)
整数論的アルゴリズムです。
約数, 倍数
modpow, modinv
素数
原始根, 位数, 離散対数
エラトステネスの篩
乗法的関数
- (★★☆☆) Euler のトーティエント関数
- (★★★★) Euler のトーティエント関数の和
- (★★★★) 高速ゼータ変換:約数倍数関係
- (★★★★) 添字 GCD Convolution
- (★★★★) 添字 LCM Convolution
- (★★★★) Multivariate Multiplication
- (★★★★) 乗法的関数の列挙
- (★★★★) 乗法的関数の prefix sum の列挙
- (★★★★) 無平方数の個数
- (★★★★) N 以下の素数の個数 (O(N^{2/3}))
方程式
多倍長整数
有理数
その他
探索・最適化 (OPTIMIZATION : SEARCH)
探索や最適化に関するアルゴリズムです。
さまざまな全探索法
さまざまな動的計画法
さまざまな最適化技法
SAT
- (★★★☆) 2-SAT
- (★★★★) SAT Solver
ヒューリスティック探索
- (★★★☆) α-β 探索
- (★★★☆) 焼き鈍し法
- (★★★☆) A*
- (★★★☆) IDA*
指数時間アルゴリズム
- (★★★★) Set Cover
- (★★★★) k-Cover (O(2^N N))
- (★★★★) k-partition (O(2^N N^3))
ㅤ
離散凸性 (OPTIMIZATION : CONVEXITY)
離散凸性に関するアルゴリズムです。
区分線形凸関数の活用 1: Slope Trick
区分線形凸関数の活用 2: Min Plus Convolution
- (★★★☆) Min Plus Convolution (凸と凸)
- (★★★★) Min Plus Convolution (凸と任意)
- (★★★★) Min Plus Convolution (凹と任意)
- (★★★★) Axiotis-Tzamos Knapsack
区分線形凸関数の活用 3: Convex Hull Trick
Li Chao Tree (一般関数は Pairwise Single Crossing 性を仮定)
- (★★★★) Extended Li Chao Tree (線分挿入対応, 区間一次式加算対応)
- (★★★★) Extended Li Chao Tree (線分挿入対応, 区間最小値取得対応)
- (★★★★) General Li Chao Tree (一般関数対応)
- (★★★★) Extended General Li Chao Tree (単調な一般関数対応, 区間最小値取得対応)
行最小値問題・単一始点最短路問題
Monge 単一始点最短路問題
その他 Monge 性, L 凸性
さまざまなマトロイド
- (★★★☆) 二値マトロイド
- (★★★☆) グラフマトロイド
- (★★★☆) 分割マトロイド
- (★★★☆) 横断マトロイド
- (★★★☆) マトロイド上の Greedy 法
その他マトロイド, M 凸性
- (★★★★) マトロイド交差
- (★★★★) 重み付きマトロイド交差
- (★★★★) マトロイド Union
- (★★★★) 線形マトロイドパリティ
- (★★★★) 最大辺数最小重みの辺素な二つの全域森
- (★★★★) 基多面体
ㅤ
形式的冪級数・多項式 (POLYNOMIAL)
形式的冪級数や多項式に関するアルゴリズムです
FFT, NTT, Convolution
形式的冪級数 (FPS)
FPS のアルゴリズム
さまざまな FPS
- (★★★★) オンライン FPS
- (★★★★) 多変数 FPS
多項式の基底変換
多項式のアルゴリズム
さまざまな値の高速計算
- (★★★★) 自然数の k 乗和 (Faulhaber の公式)
- (★★★★) Σ{i=0}^{n-1} r^i i^d
- (★★★★) Σ{i=0}^{∞} r^i i^d
- (★★★★) Σ{i=0}^{n-1} a^i f(i)
- (★★★★) N! mod P (by FPS, O(√P log P))
- (★★★★) Tetration
- (★★★★) 二項係数の prefix sum の多点評価
- (★★★★) Karatsuba 法
文字列 (String)
文字列アルゴリズムです。
構文解析
文字列検索
Suffix Array
さまざまな文字列アルゴリズム
さまざまな文字列データ構造
- (★★★☆) Trie 木
- (★★★★) Palindromic 木 (AOJ 2292)
有名問題
その他
木 (Tree)
木上のクエリに答えるデータ構造や、木に関する問題を解くアルゴリズムの実装です
木
木の亜種 (Functional Graph など)
木 DP
Euler Tour
HL 分解
重心分解
Link-Cut 木
- (★★★★) Link-Cut 木
- (★★★★) 部分木加算 (by Link-Cut 木)
- (★★★★) 遅延伝播 Link-Cut 木
toptree
さまざまな木
- (★★★☆) Union-Find のマージ過程を表す木
- (★★★☆) Cartesian Tree
- (★★★☆) Auxiliary Tree
- (★★★☆) Inclusion Tree
その他の問題
その他 (OTHERS)
その他のアルゴリズムです
入出力
典型処理
ソート
その他
コードテンプレート
License
These codes are licensed under CC0.

Verification Status
DataStructure
Optimization
Others
.