drken1215 / algorithm

Implementation of various algorithms

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

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

分類 内容 具体例
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、サイコロなど

データ構造 (DATA STRUCTURE)

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

Union-Find

キュー, ヒープ

ハッシュ

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

永続データ構造

  • (★★★★) 永続配列
  • (★★★★) 完全永続 Union-Find
  • (★★★★) 永続キュー
  • (★★★★) 永続セグメント木
  • (★★★★) 永続赤黒木

その他

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

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

セグメント木, Binary Indexed 木

セグメント木の応用

動的・二次元セグメント木

Sparse Table

ウェーブレット行列

平衡二分探索木

  • (★★★★) RBST
  • (★★★★) Treap 木
  • (★★★★) AVL 木
  • (★★★★) Splay 木
  • (★★★★) 赤黒木

各種高速化アルゴリズム

幾何 (GEOMETRY)

幾何ライブラリです

全般

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

射影, 交差判定, 距離

直線や円の交点

接線

多角形

三次元幾何

その他

  • (★★★☆) 最近点対
  • (★★★☆) 線分併合
  • (★★★☆) 線分アレンジメント
  • (★★★☆) 3 点を通る円
  • (★★★☆) アポロニウスの円
  • (★★★☆) 双対変換
  • (★★★★) 最小包含円
  • (★★★★) kd 木

グラフ (GRAPH)

グラフアルゴリズムです

DFS, BFS

連結成分分解

最短路問題 (基本)

最短路問題 (応用)

  • (★★★☆) SPFA
  • (★★★★) 補グラフの最短路
  • (★★★★) d-辺最短路
  • (★★★★) Monge グラフ上の d-辺最短路

全域木, 路に関する問題

  • (★★☆☆) 最小全域木 (Kruskal 法)
  • (★★★☆) 有向 Euler 路
  • (★★★☆) 無向 Euler 路
  • (★★★★) 最小有向全域木 (Chu-Liu/Edmonds 法)
  • (★★★★) 行列木定理
  • (★★★★) 最小シュタイナー木 (O(V 3^t + V^2 2^t + V^3))

グラフ上の有名問題

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

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

最大流

最小費用流

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

カット

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

マッチング

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

代数 (MATH : ALGEBRA)

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

行列

特殊な行列

  • (★★★★) Toeplitz 行列 (乗算, 連立方程式が O(n^2))
  • (★★★★) 巡回行列 (乗算が O(n^2))
  • (★★★★) コンパニオン行列
  • (★★★★) 三重対角行列 (連立方程式が O(n))

FFT, NTT, Convolution

多項式 (Polynomial)

形式的冪級数 (FPS)

  • (★★★★) 形式的冪級数:全部乗せ
  • (★★★★) Sparse な形式的冪級数
  • (★★★★) Bostan-Mori 法
  • (★★★★) Fiduccia 法 (高速きたまさ法)
  • (★★★★) Berlekamp-Massey 法
  • (★★★★) 関数の合成
  • (★★★★) 逆関数

さまざまな和

  • (★★★☆) floor sum
  • (★★★★) Bk = Σ{i=0}^{n-1} i^k を係数とする多項式
  • (★★★★) Σ{i=0}^{n-1} r^i i^d
  • (★★★★) Σ{i=0}^{∞} r^i i^d

組合せ (MATH : COMBINATORICS)

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

二項係数

さまざまな数

高速なソート

さまざまなソート

集合族に関する問題

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

集合冪級数 (SPS)

  • (★★★☆) 高速ゼータ変換
  • (★★★★) 高速アダマール変換
  • (★★★★) AND Convolution
  • (★★★★) OR Convolution
  • (★★★★) XOR Convolution
  • (★★★★) Subset Convolution
  • (★★★★) 集合冪級数の exp
  • (★★★★) 集合冪級数の合成

その他

整数 (MATH : NUMBER THEORY)

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

Mod の処理

約数, 倍数

素数

エラトステネスの篩

方程式

さまざまな数

その他

最適化, 探索 (OPTIMIZATION, SEARCH)

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

さまざまな全探索

動的計画法

動的計画法 (DP) の高速化技法

  • (★★★★) Slope Trick
  • (★★★★) Monotone Minima
  • (★★★★) Alien DP
  • (★★★★) LARSCH

Convex Hull Trick

数理最適化 (Optimization)

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

さまざまな探索法

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

指数時間アルゴリズム

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

文字列 (String)

文字列アルゴリズムです

構文解析

文字列検索

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

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

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

その他

木 (Tree)

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

木 DP

LCA

木上のクエリ処理

その他の問題

その他 (OTHERS)

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

入出力

グリッド

その他

License

These codes are licensed under CC0. CC0

About

Implementation of various algorithms

License:Creative Commons Zero v1.0 Universal


Languages

Language:C++ 100.0%