Skip to content

グラフ ​

最短経路 ​

アルゴリズム何ができるか適用条件計算量
BFS単一始点最短経路重みなしO(V+E)
0-1 BFS単一始点最短経路辺重みが0か1O(V+E)
Dijkstra単一始点最短経路辺重みが非負O((V+E) log V)
Bellman-Ford単一始点最短経路・負閉路検出負辺も可O(VE)
Warshall-Floyd全点対最短経路負辺も可・負閉路検出可能O(V³)

探索・連結性・構造 ​

アルゴリズム何ができるか計算量
DFS深さ優先探索・到達可能性・連結成分O(V+E)
BFS幅優先探索・到達可能性・連結成分O(V+E)
Union Find無向グラフの連結性の管理償却 O(α(V)) / 操作
SCC強連結成分分解・DAGへの縮約O(V+E)
トポロジカルソートDAGの順序付け・閉路検出O(V+E)
二部グラフ判定二部グラフ判定・2グループ分けO(V+E)
サイクル検出有向・無向グラフの閉路検出と復元O(V+E)

木 ​

アルゴリズム何ができるか計算量
木の直径木の最長パス・両端点の取得O(V)
LCA木の2頂点の最小共通祖先・距離前処理 O(V log V)、クエリ O(log V)
オイラーツアー部分木の区間化・部分木クエリO(V)

全域木 ​

アルゴリズム何ができるか計算量
Kruskal最小全域木O(E log E + E α(V))
Prim最小全域木O((V+E) log V)

フロー ​

アルゴリズム何ができるか
最大フロー最大流量・最小カット・二部マッチング
最小費用流指定した流量を最小コストで流す

グラフ構造 ​

名前特徴・何ができるか
Functional Graph各頂点の出次数が1、サイクルと木からなる
DAG有向閉路がなく、トポロジカル順にDPができる

注意点 ​

  • Dijkstraは負辺があると正しく動作しない場合がある
  • BFSは重みなしグラフの最短経路に使える
  • DFSは一般グラフの最短距離を求めるものではない
  • DFSは再帰が深くなる場合にスタックオーバーフローに注意