View on GitHub

cp-library

Chordal Graph の判定

C++ 用ライブラリ一覧に戻る

ソースコード

nachia/graph/chordal-graph-recognizer.hpp

主な機能

単純無向グラフが与えられたとき、それが chordal graph であるかどうか判定する。また、

以下、用語の説明。

(perfect elimination ordering) 無向グラフの頂点を並べ替えた列において、任意の頂点 $v$ について、 $v$ に隣接して $v$ よりも後にくる頂点は互いに隣接するとき、この頂点列を perfect elimination ordering と呼ぶ。

(誘導部分グラフ) グラフ $G$ と $G$ の頂点集合の部分集合 $V$ とする。これに対し、 $G$ の辺のうち両端が $V$ に含まれるような辺すべての集合を $E$ としたとき、 $V$ , $E$ からなるグラフを誘導部分グラフと呼ぶ。

(chordal graph) 無向グラフが chordal graph (弦グラフ) であるとは、そのグラフに perfect elimination ordering が存在することである。この条件は、長さ $4$ 以上のサイクルが誘導部分グラフとして得られないことと同値であることが知られている。

struct ChordalGraphRecognizer

コンストラクタ

ChordalGraphRecognizer(Graph g);

nachia::Graph とは?

getMaximumCardinalitySearchOrder

std::vector<int> getMaximumCardinalitySearchOrder();

maximum cardinality search の探索順として有効な頂点列を返す。

探索中、既に訪れた頂点の集合を $X$ とする。 maximum cardinality search の次のステップでは、まだ訪れていない頂点のうち $X$ との隣接が最大の頂点から $1$ つ選んで探索する。

$G$ が chordal graph ならば、この頂点列の逆順は perfect elimination ordering である。

isChordalGraph

bool isChordalGraph();

$G$ が chordal graph なら true 、そうでないなら false を返す。

findInducedCycle

std::vector<int> findInducedCycle();

長さ $4$ のサイクルをなすような誘導部分グラフが存在する場合、そのうちの $1$ つについて、そのサイクルを $1$ 周するような順番に並べた頂点列を返す。存在しない場合の戻り値は不定であるので、代わりに isChordalGraph の返り値で判断すること。

getPerfectEliminationOrdering

std::vector<int> getPerfectEliminationOrdering();

perfect elimination ordering が存在する場合、それを $1$ つ求めて返す。存在しない場合の戻り値は不定であるので、代わりに isChordalGraph の返り値で判断すること。

参考


TOP PAGE