最大クリーク問題
与えられたグラフ の最大クリークを求める NP 困難な最適化問題である.
最大クリークとは
グラフ の「クリーク clique」とは, 頂点部分集合 で, のどの 2 頂点も辺で結ばれているものをいう. すなわち, において が誘導する誘導部分グラフ は完全グラフである.
- クリーク の頂点数 のことを の「大きさ」といい,
大きさ のクリークを「 クリーク -clique」と呼ぶ.
- の任意のクリーク に対して,
を満たすようなクリーク を の「最大クリーク maximum clique」という. 最大クリークの大きさを の「クリーク数 clique number」と呼ぶ.
- 自身を除く の任意ののクリークの部分集合でないようなクリークを「極大クリーク maximal clique」という.
たとえば, 上図のグラフにおいて, 極大クリークは , で, 最大クリークは である. したがって, このグラフのクリーク数は 4 である.
最大クリークを見つけるアルゴリズム
たとえば, 適当な1頂点 (=1クリーク) から深さ優先探索でクリークを拡大していき, 極大クリークを見つけていく. 極大クリークを見つけるたびに最大のものを記憶しておき, 探索終了後にそれを出力すればよい.
既に見つけたクリークに含まれる頂点は探索する必要がないことや, クリークの彩色数などを利用して分枝限定を行うことで効率化を図れる.
ABC002-D
AtCoder Beginner Contest 002 の D 問題「派閥」は, 与えられたグラフのクリーク数を求める問題となっている.