問題. DAGの最小道被覆問題
DAG が与えられる. の最小道被覆を求めよ.
定義. 有向非巡回グラフ
有向非巡回グラフ(directed acyclic graph; DAG)とは有向閉路が存在しない有向グラフのことである.
定義. 道被覆
有向グラフ の道被覆(path cover)とは, の有向道の集合でどの頂点もちょうど1つの有向道に含まれるもののことである.ここで,有向道とは頂点の重複がないものとし,有向道を道と呼ぶことにする.
サイズが最小の道被覆を最小道被覆(minimum path cover)という.
例. 最小道被覆
有向グラフ としたとき, の道被覆は となります.また,頂点1だけからなるものも道とします.したがって,どんなグラフでも道被覆は存在します.
は3つの道を含むのでサイズ3となり,後で確認しますが は の最小道被覆となります.
解法. 二部グラフの最大マッチング問題への帰着
一般グラフの最小道被覆問題はNP困難ですが,DAGに制限すると多項式時間で解くことができます.解法を大雑把に言うと二部グラフの最大マッチング問題に帰着します.ここでの解法と証明は 蟻本 のpp. 242--244 を参考にしています.
DAG-MSCP
入力 : DAG
出力 : の最小道被覆のサイズ
Step1. 部グラフを とする二部グラフ を次のように構成する.
・
・
Step2. の最大マッチング を求める
Step3. を出力する
上の例で用いたグラフに対して上のアルゴリズムを適用したときに得られる二部グラフとその最大マッチングは次のようになります.このとき,最大マッチングは となり,道被覆に含まれる弧全体と等しくなります.
命題. DAG-MSCP の解の正当性
証明.
の任意の道 を考える. の頂点集合と弧集合をそれぞれ とすると, となる.したがって, の任意の道被覆 に対して, より,
となる.ここで, は のすべての頂点を含み, の道は互いに素であることから,
となる.よって,道被覆のサイズの最小化は道被覆に含まれる弧の最大化に等しい.
ここで, を最大にする の道被覆 を求めることを考える.DAG-MSCP のステップ1 で構成した二部グラフを とする.
のマッチング を考える. を の弧 を道被覆のある道の弧として選択することにして, に対応する の弧全体を とする. と の各頂点が によって被覆される辺は高々1つなので, の各頂点の による出次数と入次数は高々1である.よって, は の道被覆となる.
逆に, の道被覆によって選ばれる弧全体は のマッチングとなる.したがって, の道被覆に含まれる弧の最大化は のマッチングのサイズの最大化に等しい. ❏
まとめ
DAGの最小道被覆問題は順序集合の反鎖の最大サイズを求めるのに用いられます(参照: Dilworthの定理).順序集合のグラフ表現(反射性による自己ループを取り除いた有向グラフ)は推移性を満たすDAGとなるのでこのアルゴリズムが利用できます.順序集合は楽しいです!!