Myślę, że ten problem jest trudny NP. Próbuję naszkicować redukcję z MinSAT. W przypadku problemu MinSAT otrzymujemy CNF, a naszym celem jest zminimalizowanie liczby spełnionych klauzul. Ten problem jest trudny NP, patrz np. Http://epubs.siam.org/doi/abs/10.1137/S0895480191220836?journalCode=sjdmec
Podziel wierzchołki na dwie grupy - niektóre będą reprezentować literały, inne klauzule, więc gdzie v jest liczbą zmiennych CNF (zwykle oznaczoną przez n ), a c jest liczbą klauzul. Kieruj krawędź z każdego dosłownego wierzchołka do klauzuli-wierzchołka, w której występuje. Zdefiniuj S dla dosłownego wierzchołka reprezentującego x i jako { i , i + v + k } (gdzie k jest dowolnym parametrem), więc albo f ( x i )n=2v+cvncSxi{i,i+v+k}k oraz f + k + 1 , …f(xi)=i lub f ( ˉ x i ) = i oraz f ( x i ) = i + v + k . Dla każdego wierzchołka zdania niech S = { v + 1 , … , v + k , 2 v , n }f(x¯i)=i+v+kf(x¯i)=if(xi)=i+v+kS={v+1,…,v+k,2v+k+1,…,n} , więc wierzchołków klauzul jest `` małe ''.k
Teraz CNF ma przypisanie, w którym co najmniej klauzul jest fałszywych wtedy i tylko wtedy, gdy problem można rozwiązać dla powyższej instancji. Problem MinSAT polega właśnie na sprawdzeniu, czy formuła CNF φ ma przypisanie, które powoduje, że co najmniej klauzule k są fałszywe, więc pokazuje to, że twój problem jest trudny NP.kφk
Aby pomóc ci zrozumieć tę redukcję, oto intuicja: małe etykiety ( ) odpowiadają wartości prawdy Fałsz, a duże etykiety ( v + k + 1 , … , 2 v + k ) odpowiadają Prawdziwe. Ograniczenia dla dosłownych wierzchołków zapewniają, że każdy x i ma wartość Prawda lub Fałsz oraz że ¯ x i1,2,…,v+kv+k+1,…,2v+kxixi¯¯¯¯¯ma przeciwną wartość prawdy. Krawędzie zapewniają, że jeśli dowolny literał ma wartość PRAWDA, wówczas wszystkie zawierające go wierzchołki klauzul mają również wartość PRAWDA. (W przeciwieństwie do tego, jeśli wszystkie literały w klauzuli mają wartość False, wówczas ta struktura graficzna pozwala na przypisanie wierzchołka klauzuli albo False, albo True.) Na koniec, wybór zapewnia, że k wierzchołków klauzuli ma False i c - k z nich ma przypisane True. Tak więc, jeśli istnieje ważny rodzaj topologiczną z tego wykresu, to nie jest zadanie dla zmiennych sprawia, że co najmniej k klauzul cpkkc−kkφfalse (wszystkie z wierzchołków klauzul, którym przypisano wartość False, oraz ewentualnie niektóre z tych, którym przypisano wartość True). I odwrotnie, jeśli jest przypisanie do zmiennych sprawia, że co najmniej klauzul cp fałszywe, to nie jest ważny rodzaj topologiczna tego wykresu (wypełniamy etykiet dla dosłownych-wierzchołków w oczywisty sposób, a dla każda klauzula cp to prawda, dajemy jej odpowiednia klauzula-Vertex etykietę, która odpowiada true; pozostałe wierzchołki-klauzuli może otrzymać etykiety odpowiadające dowolnej wartości logicznej).kφφ
Zauważ, że jeśli złagodzisz problem, pozwalając być arbitralnym (niekoniecznie dwuskładnikowym), wówczas staje się wielomianowy. Algorytm przebiega podobnie do sortowania topologicznego: numerujesz wierzchołki jeden po drugim, zachowując zbiór U nienumerowanych wierzchołków, których sąsiadów zostały ponumerowane. O ile to możliwe, wybierasz wierzchołek x ∈ U i numerujesz go najmniejszym elementem S ( x ) większym niż liczba jego sąsiadów. Nietrudno dostrzec, że instancja ( G , S ) ma rozwiązanie w stosunku do poprzedniego algorytmu uruchomionego na ( G ,f U x∈U S(x) (G,S) (G,S)
źródło
Trywialna obserwacja jest taka, że jeśli| S.( x ) | ≤ 2 dla wszystkich x , then this problem is solvable in polynomial time, by reduction to 2SAT.
Oto jak. Wprowadź zmiennąvx , ja dla każdego wierzchołka x i każdy ja takie, że i ∈S(x) . For each pair x,y of vertices, if there is a path from x to y , we get some constraints: if i∈S(x) , j∈S(y) , and i>j , then we get the constraint ¬vx,i∨¬vy,j . Bijectivity gives us another set of constraints: for each pair x,y of vertices with x≠y , if i∈S(x) and i∈S(y) , we add ¬vx,i∨¬vy,i . Finally, the requirement that each vertex must be assigned a label gives us yet another set of constraints: for each x , if S(x)={i,j} , we get the constraint vx,i∨vx,j . (Note that only the last set of constraints exploit the promise that |S(x)|≤2 for each x .)
I realize this observation won't help you in your particular situation. Sorry about that.
źródło