Ich denke, dieses Problem ist NP-schwer. Ich versuche eine Reduktion von MinSAT zu skizzieren. Im MinSAT-Problem erhalten wir einen CNF und unser Ziel ist es, die Anzahl der erfüllten Klauseln zu minimieren. Dieses Problem ist NP-schwer, siehe z. B. http://epubs.siam.org/doi/abs/10.1137/S0895480191220836?journalCode=sjdmec
Teilen Sie die Eckpunkte in zwei Gruppen ein - einige stellen Literale dar, die anderen Klauseln, also wobei v die Anzahl der Variablen des CNF (normalerweise mit n bezeichnet ) und c die Anzahl der Klauseln ist. Richten Sie eine Kante von jedem Literal-Vertex zu dem Klausel-Vertex, an dem sie auftritt. Definiere S für einen Literal-Vertex, der x i als { i , i + v + k } darstellt (wobei k ein beliebiger Parameter ist), also entweder f ( x i )n=2v+cvncSxi{ i , i + v + k }k und f ( ˉ x i ) = i + v + k oder f ( ˉ x i ) = i und f ( x i ) = i + v + k . Für jeden Vertix sei S = { v + 1 , … , v + k , 2 v + k + 1 , …f( xich) = if( x¯ich) = i + v + kf( x¯ich) = if( xich) = i + v + k , also sind k der Klauselknoten `` small ''.S={v+1,…,v+k,2v+k+1,…,n}k
Jetzt hat der CNF eine Zuweisung, bei der mindestens Klauseln genau dann falsch sind, wenn Ihr Problem für die obige Instanz gelöst werden kann. Das MinSAT-Problem besteht genau darin, zu testen, ob eine CNF-Formel φ eine Zuweisung hat, die mindestens k- Klauseln falsch macht. Dies zeigt also, dass Ihr Problem NP-schwer ist.kφk
Um Ihnen das Verständnis dieser Reduktion zu erleichtern, ist hier die Intuition: Kleine Bezeichnungen ( ) entsprechen dem Wahrheitswert False und große Bezeichnungen ( v + k + 1 , … , 2 v + k ) entsprechen Wahr. Die Einschränkungen für literal-Eckpunkte sicherzustellen , dass jedes x i entweder wahr oder falsch ist und dass ¯ x i1,2,…,v+kv+k+1,…,2v+kxixi¯¯¯¯¯hat den entgegengesetzten Wahrheitswert. Die Kanten stellen sicher, dass, wenn ein Literal True ist, alle Klauselscheitelpunkte, die es enthalten, ebenfalls True zugewiesen werden. (Wenn im Gegensatz dazu allen Literalen in einer Klausel False zugewiesen wird, kann der Klauselscheitelpunkt in dieser Diagrammstruktur entweder False oder True zugewiesen werden.) Schließlich wird durch die Auswahl von sichergestellt, dass k der Klauselscheitelpunkte False und zugewiesen wird c - k von ihnen sind True zugeordnet. Wenn es also eine gültige topologische Sortierung dieses Graphen gibt, dann gibt es eine Zuordnung zu den Variablen, die mindestens k der Klauseln von φ ergibtkkc−kkφfalse (alle Klauselscheitelpunkte, denen False zugewiesen wurde, plus möglicherweise einige derjenigen, denen True zugewiesen wurde). Umgekehrt gibt es, wenn es eine Zuordnung zu den Variablen gibt, die mindestens der Sätze von φ falsch macht, eine gültige topologische Sortierung dieses Graphen (wir füllen die Bezeichnungen für die Literalscheitelpunkte auf offensichtliche Weise aus; und für Für jeden Satz von φ , der wahr ist, geben wir seinem entsprechenden Satz-Eckpunkt eine Bezeichnung, die wahr entspricht (die anderen Satz-Eckpunkte können Bezeichnungen erhalten, die einem beliebigen Wahrheitswert entsprechen).kφφ
Beachten Sie: Wenn Sie das Problem lösen, indem Sie zulassen, dass willkürlich ist (nicht unbedingt bijektiv), wird es polynomisch. Der Algorithmus funktioniert ähnlich wie bei der topologischen Sortierung: Sie nummerieren die Scheitelpunkte nacheinander und behalten dabei die Menge U der nicht nummerierten Scheitelpunkte bei, deren Nachbarn nummeriert wurden. Wann immer möglich, wählen Sie einen Eckpunkt x ∈ U und nummerieren ihn mit dem kleinsten Element von S ( x ), das größer ist als die Anzahl seiner Nachbarn. Es ist nicht schwer zu erkennen, dass eine Instanz ( G , S ) eine Lösung hat, wenn der vorherige Algorithmus auf ( G , S ) ausgeführt wird.f U x ∈ U S( x ) ( G , S) endet mit allen nummerierten Eckpunkten.( G , S)
quelle
Mir ist klar, dass diese Beobachtung Ihnen in Ihrer speziellen Situation nicht helfen wird. Das tut mir leid.
quelle