この問題はNP困難だと思います。MinSATから削減をスケッチしようとします。MinSAT問題ではCNFが与えられ、目標は満足する節の数を最小限にすることです。この問題はNPハードです。たとえば、http://epubs.siam.org/doi/abs/10.1137/S0895480191220836?journalCode = sjdmecを参照してください。
頂点を2つのグループに分割します。一部はリテラルを表し、その他は句を表します。したがって、n=2v+cで、vはCNFの変数の数(通常示されますn)、cは句の数です。各リテラル頂点からエッジが発生する節頂点にエッジを向けます。x iを{ i 、i + v + k }(kは任意のパラメーター)として表すリテラル頂点のSを定義します。したがって、f (x i)xi{i,i+v+k}kf(xi)=i及びf(x¯i)=i+v+kまたはf(x¯i)=i及びf(xi)=i+v+k。各節頂点について、なので、節頂点の kは「小さい」です。S={v+1,…,v+k,2v+k+1,…,n}k
現在、CNFには、上記のインスタンスで問題を解決できる場合にのみ、少なくとも句がfalse であるという割り当てがあります。MinSATの問題は、CNF式φに少なくともk句が偽になる代入があるかどうかを正確にテストすることであるため、これは問題がNP困難であることを示しています。kφk
あなたはこの減少を理解するために、ここでの直感です:小さなラベル()真理値をFalseに相当し、大規模なラベル(V + K + 1 、... 、2 V + K)対応へ本当です。リテラル頂点の制約は、各ていることを確認し、X iのいずれかのTrueまたはFalse、それである¯ X I1,2,…,v+kv+k+1,…,2v+kxixi¯¯¯¯¯反対の真理値を持ちます。エッジにより、いずれかのリテラルがTrueの場合、それを含むすべての節頂点にもTrueが割り当てられます。(対照的に、節内のすべてのリテラルにFalseが割り当てられている場合、このグラフ構造により節頂点にFalseまたはTrueを割り当てることができます。)最後に、を選択すると、節頂点のkにFalse それらのc - kにはTrueが割り当てられます。このグラフの有効なトポロジカルソートがあるのであれば、その後、少なくとも作るの変数への代入があるk個の節のφは、kkc−kkφfalse(Falseが割り当てられたすべての節頂点と、場合によってはTrueが割り当てられたものの一部)。逆に、φの節の少なくともを偽にする変数への割り当てがある場合、このグラフの有効なトポロジカルな並べ替えがあります(明白な方法でリテラル頂点のラベルを記入します;そしてφの各節が真である場合、対応する節頂点にTrueに対応するラベルを付けます。他の節頂点は、任意の真理値に対応するラベルを受け取ることができます。kφφ