頂点被覆問題(Vertex Cover)の説明は以下の通りです:与えられた において、 は無向グラフであり、グラフ中に という点集合が存在し、 かつ の各頂点が のすべての辺をカバーしているかどうかを問います。つまり、 の各辺の始点または終点が の一つの点であるということです。以下の図を例にとると、 は条件を満たす点集合です。なぜなら、グラフ中の 4 つの辺はすべて の少なくとも一つの点で接続されているからです。
NP 完全性を証明するために、まずは NP 問題であることを証明します。与えられた と に対して、 の各辺を走査し、それが の一つの点と接続されているかどうかをチェックするだけで、 の正当性を判定することができます。明らかにこのプロセスは多項式時間で完了するため、頂点被覆問題は NP 問題です。
次に、NP 困難問題であることを証明するために、3-SAT を頂点被覆問題に帰着します。3-SAT の形式は以下の通りです:
与えられた 3-SAT 式に対して、次の操作を行います:
- 各クラスタ内の 3 つの変数を相互に接続します。
- 異なるクラスタ間で矛盾する同じ変数を接続します。ここで矛盾するとは、異なるクラスタの同じ変数 と が存在し、 が真であれば は偽であり、 が偽であれば は真であることを意味します。
これにより、3-SAT ブール式をグラフに変換し、、 はブール式のクラスタ数となります。例を挙げると、以下のような 3-SAT ブール式があるとします:
上記のルールに従って に対して作成されたグラフは次のようになります:
さて、以下の 2 つの問題を証明しましょう:
(1)3-SAT 問題が解を持つ場合、変換後のグラフ でも頂点被覆問題に解が存在する。 3-SAT に解が存在するため、 です。したがって、この 3-SAT の各クラスタには少なくとも 1 つの変数が真である必要があります。頂点被覆問題の のメンバーとして、その変数以外の 2 つの変数を選び、合計で 個のメンバーを得ることができます。各クラスタについて、変換後のグラフでは三角形が構成されているため、三角形の 3 つの頂点から 2 つの頂点を選ぶと、その三角形のすべての辺が含まれることになります。また、各変数について、異なるクラスタに属する矛盾する変数と接続されています。したがって、3-SAT 問題が解を持つ場合、対応する は を満たすことが必ずしも満たされるため、解が存在します。
(2)頂点被覆問題 が与えられた場合、変換後の 3-SAT 問題も解を持つ。 を上記のルールに従って逆にブール式に変換し、 に属さない頂点に対応する変数を真に設定すると、3-SAT 問題は真となります。
以上より、3-SAT 問題を頂点被覆問題に帰着することができました。したがって、頂点被覆問題は NP 完全です。