Skip to content

drken1215/algorithm

Repository files navigation

様々なアルゴリズムの実装例

データ構造や数論的アルゴリズムまで、様々な分野のアルゴリズムたちを C++23 で実装しています。
アルゴリズム系の研究開発において計算機実験が必要になる場面や、 プログラミングコンテストに参加する場面などを想定して、 「実装例」または「ライブラリ」として使用することを念頭に置いています。

 

分類 内容 具体例
DATA STRUCTURE 各種データ構造 Union-Find、Sparse Table など
DATA STRUCTURE : SEGMENT 区間クエリに強いデータ構造 セグメント木、BIT など
GEOMETRY 計算幾何 円の交点など
GRAPH グラフアルゴリズム 強連結成分分解など
GRAPH : NETWORK FLOW ネットワークフローアルゴリズム Ford-Fulkerson 法など
MATH : ALGEBRA 代数的アルゴリズム 行列計算など
MATH : COMBINATORICS 組合せ論的アルゴリズム modint、Nim など
MATH : NUMBER THEORY 整数論的アルゴリズム 素因数分解、最大公約数など
OPTIMIZATION 最適化や探索のアルゴリズム 二分探索, 三分探索など
STRING 文字列アルゴリズム Suffix Array、KMP 法など
TREE 木上のデータ構造とアルゴリズム Euler ツアー、木の直径など
OTHERS その他 xorshift、サイコロなど

難易度表記の目安

  • (★☆☆☆):一般教養、NoviSteps グレード基準で 2Q 以下
  • (★★☆☆):初等典型、NoviSteps グレード基準で 1Q, 1D
  • (★★★☆):中堅典型、NoviSteps グレード基準で 2D, 3D
  • (★★★★):高度典型、NoviSteps グレード基準で 4D 以上

 

データ構造 (DATA STRUCTURE)

各種データ構造の実装です

Union-Find

ヒープ

  • (★☆☆☆) 二分ヒープ
  • (★★★★) Skew Heap (マージ可能ヒープ)
  • (★★★★) Paring Heap (マージ可能ヒープ)
  • (★★★★) Radix Heap
  • (★★★★) Fibonacci Heap

キュー

ハッシュ

ハッシュテーブル

  • (★★★☆) ハッシュマップ
  • (★★★☆) ハッシュ関数
  • (★★★☆) ハッシュ構造体

N 以下の非負整数の順序つき集合

その他

 

区間系データ構造 (DATA STRUCTURE : SEGMENT)

セグメント木や BIT など、区間クエリに強いデータ構造の実装です

セグメント木

Binary Indexed 木

Sparse Table

ウェーブレット行列

平衡二分探索木

  • (★★★★) RBST
  • (★★★★) Treap
  • (★★★★) Splay 木
  • (★★★★) AVL 木
  • (★★★★) 赤黒木
  • (★★★★) 永続赤黒木
  • (★★★★) 遅延伝播反転可能 RBST
  • (★★★★) 遅延伝播反転可能 Treap
  • (★★★★) 遅延伝播反転可能 Splay 木

各種高速化アルゴリズム

その他

 

幾何 (GEOMETRY)

幾何ライブラリです

基本要素

点, 線分, 三角形などの位置関係

射影, 交差判定, 距離

直線や円の交点

接線

多角形

三次元幾何

その他

 

グラフ (GRAPH)

グラフアルゴリズムです

グラフ探索

連結成分分解

最短路問題 (基本)

全域木, 路に関する問題

その他

   

ネットワークフロー (GRAPH : NETWORK FLOW)

グラフネットワークフロー関連のアルゴリズムです

最大流

最小カット

  • (★★★☆) 最小カット (= 最大流)
  • (★★★★) 全域最小カット (Stoer-Wanger 法)
  • (★★★★) 全頂点対間最小カット (Nagamochi-Ibaraki 法)
  • (★★★★) Gomory-Hu 木

劣モジュラ関数のグラフ表現

マッチング

  • (★★★☆) 二部マッチング (Hopcroft-Karp 法, O(E√V))
  • (★★★☆) 重みつき二部マッチング (Hungarian 法)
  • (★★★★) 一般グラフの最大マッチング (Edmonds 法)
  • (★★★★) 一般グラフの最大マッチング (行列補間)
  • (★★★★) 重み付き一般グラフの最大マッチング

マッチングの応用

最小費用流

最小費用 b-flow

最小費用流の応用

  • (★★★★) 需要供給量にも上限と下限を設けた最小費用 b-flow の拡張
  • (★★★★) 最小費用テンション (最小費用流問題の双対問題)
  • (★★★★) 最小凸費用流
  • (★★★★) 最小凸費用テンション (最小凸費用流問題の双対問題)

 

代数 (MATH : ALGEBRA)

行列計算など代数的計算に関するアルゴリズムです

体上の行列

環上の行列

行列式

行列のアルゴリズム

  • (★★★☆) XOR 基底 (俗称:noshi 基底)
  • (★★★☆) 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))
  • (★★★★) 二項係数行列の作用
  • (★★★★) スターリング数行列の作用

FFT, NTT, Convolution

形式的冪級数 (FPS)

FPS のアルゴリズム

さまざまな FPS

  • (★★★★) オンライン FPS
  • (★★★★) 多変数 FPS

多項式の基底変換

多項式のアルゴリズム

さまざまな値の高速計算

  • (★★★☆) floor sum
  • (★★★★) 自然数の 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 法

 

組合せ (MATH : COMBINATORICS)

組合せ論的アルゴリズムたちです

二項係数

さまざまな数

高速なソート

さまざまなソート

集合族に関する問題

  • (★★★☆) 2-SAT
  • (★★★☆) マトロイド上の Greedy 法
  • (★★★★) マトロイド交差

集合冪級数 (SPS)

ゲーム

  • (★★☆☆) Nim
  • (★★☆☆) Grundy 数
  • (★★★★) Nim Product
  • (★★★★) Grundy 数と多項式環の変換
  • (★★★★) 超現実数

その他

 

整数 (MATH : NUMBER THEORY)

整数論的アルゴリズムたちです

Modint

約数, 倍数

素数

エラトステネスの篩

乗法的関数

  • (★★★★) 高速ゼータ変換:約数倍数関係
  • (★★★★) 添字 GCD Convolution
  • (★★★★) 添字 LCM Convolution
  • (★★★★) Multivariate Multiplication
  • (★★★★) 乗法的関数の列挙
  • (★★★★) 乗法的関数の prefix sum の列挙
  • (★★★★) オイラー関数の和
  • (★★★★) 無平方数の個数
  • (★★★★) N 以下の素数の個数 (O(N^{2/3}))

方程式

多倍長整数

有理数

  • (★★★☆) 有理数
  • (★★★☆) Stern-Brocot 木
  • (★★★★) Stern-Brocot 木上の二分探索
  • (★★★★) Enumerate Convex
  • (★★★★) Enumerate Quotients

その他

 

最適化, 探索 (OPTIMIZATION, SEARCH)

最適化や探索に関するアルゴリズムです

さまざまな全探索

動的計画法

Convex Hull Trick

Monge 性を活用する DP 高速化技法

その他の DP 高速化技法

  • (★★★★) Slope Trick
  • (★★★★) Min Plus Convolution (凸と任意)
  • (★★★★) Min Plus Convolution (凸と凸)
  • (★★★★) Min Plus Convolution (凹と任意)

数理最適化

  • (★☆☆☆) 二次方程式
  • (★☆☆☆) 二分探索法 (方程式の解を 1 つ求める)
  • (★★☆☆) 三分探索法
  • (★★☆☆) 黄金探索法
  • (★★★☆) Newton 法
  • (★★★★) 単体法 (二段階単体法)
  • (★★★★) 分枝限定法
  • (★★★★) SAT Solver

さまざまな探索法

  • (★★★☆) α-β 探索
  • (★★★☆) 焼き鈍し法
  • (★★★☆) A*
  • (★★★☆) IDA*

指数時間アルゴリズム

  • (★★★★) Set Cover
  • (★★★★) k-Cover (O(2^N N))
  • (★★★★) k-partition (O(2^N N^3))

 

文字列 (String)

文字列アルゴリズムです

構文解析

文字列検索

  • (★★☆☆) ローリングハッシュ
  • (★★★☆) 単一パターン検索 (KMP 法)
  • (★★★☆) 単一パターン検索 (Boyer-Moore 法)
  • (★★★★) 複数パターン検索 (Aho-Corasick 法)
  • (★★★★) 二次元ローリングハッシュ
  • (★★★★) セグメント木上のローリングハッシュ

Suffix Array

さまざまな文字列アルゴリズム

さまざまな文字列データ構造

  • (★★★☆) Trie 木
  • (★★★★) Palindromic 木 (AOJ 2292)

その他

 

木 (Tree)

木上のクエリに答えるデータ構造や、木に関する問題を解くアルゴリズムの実装です

木の亜種 (Functional Graph など)

木 DP

Euler Tour

HL 分解

重心分解

Link-Cut 木

  • (★★★★) Link-Cut 木
  • (★★★★) 部分木加算 (by Link-Cut 木)
  • (★★★★) 遅延伝播 Link-Cut 木

toptree

  • (★★★★) toptree

さまざまな木

  • (★★★☆) Union-Find のマージ過程を表す木
  • (★★★☆) Cartesian Tree
  • (★★★☆) Auxiliary Tree
  • (★★★☆) Inclusion Tree

その他の問題

 

その他 (OTHERS)

その他のアルゴリズムです

入出力

グリッド

その他

 

コードテンプレート

 

License

These codes are licensed under CC0. CC0

About

Implementation of various algorithms

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages