Złożoność obliczeniowa/Wykałd 5: Problemy NP-zupełne

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Wstęp

Jak czytelnikowi wiadomo, w aktualnym stanie wiedzy NP-zupełność jest podstawowym narzędziem do badania probelu algorytmicznego pod kątem jego trudności obliczeniowej. Na tym wykładzie dla wielu znanych klasycznych problemów z teorii grafów, kombinatoryki, logiki i innych podajemy definicje ich decyzyjnych wersji i wykazujemy ich NP-zupełność. Z problematyką ta spotkaliśmy się już na kursie Algorytmy i struktury danych. Tutaj rozbudowujemy te wiadomości, czynimy je bardziej formalnymi posługując się modelem maszyny Turinga i redukcją logarytmiczną. Na przedstawionych przykładach omawiamy również techniki dowodzenia NP-zupełności. Następny wykład pokazuje wykorzystanie tych technik do analizy złożoności problemu i jego zawężeń.

O problemie SAT

Aby wykazać, że dany problem Q z klasy NP jest NP-zupełny, zgodnie z własnościami redukcji logarytmicznej (przechodniość) wystarcza pokazać, dla dowolnego problemu QNPC, że Q redukuje się do Q. Innymi słowy, proces dowodzenia że dany problem Q jest w NPC składa sie z nastepujących kroków:

  • dowieść że Q należy do NP
  • wybrać znany problem NP-zupełny Q i skonstruować redukcję z Q do Q.

Przypomnijemy, że redukcja z problemu A do B dowodzi, że B jest niełatwiejszy niż A. Zatem dla konstrukcji takiej redukcji łatwiej jest, gdy (są to rozważania czysto intuicyjne):

  • problem A nie jest skomplikowany, tzn. instancje tego problemu

wykazują pewną regularność, łatwą do "opisu" lub "zmierzenia"

  • problem B dopuszcza konstrukcje różnorodnych instancji, jest "bogaty

strukturalnie"

Stąd dla wypracowania sobie "warsztatu" dla konstruowania dowodów NP-zupełności warto rozpocząć od dowiedzenia tej własności dla kilku nieskomplikowanych (pod wzgledem opisu struktury) problemów. W rzeczywistości, w literaturze dotyczącej tych zagadnień, można wyodrębnić niewielką grupę klasycznych w tym sensie problemów, które najczęściej wystepują jako lewa strona redukcji w dowodach NP-zupełnosci. Poniżej definiujemy lub przypominamy grupe takich problemów, dość różnorodnego pochodzenia i zastosowania, i dowodzimy ich NP-zupełności.

Najpierw 3SAT

Zaczynamy od sytuacji, w której jedynym znanym problemem NP-zupełnym (a więc możliwą lewą stroną redukcji) jest problem SAT. Jest on dość niewygodny jako problem źródłowy, redukcja z SAT do innego problemu na ogół wymaga skomplikowanego opisu. Okazuje się (wykazał to już Cook w swojej fundamentalnej pracy o NP-zupełności), że podproblem problemu SAT, w którym wymagamy aby każda klauzula zawierała nie więcej niz 3 literały jest sam w sobie NP-zupełny, a dowód tego faktu jest dość łatwy.

Twierdzenie

Problem 3SAT jest NP-zupełny.

Dowód

Problem 3SAT, jako podproblem problemu w klasie NP, sam należy do NP, zatem pierwsza część dowodu jest za nami.

Konstruujemy redukcję z problemu SAT do 3SAT. Na wejściu mamy formułe ϕ=C1Cm nad zmiennymi x1,,xn. Każdą z klauzul Cj przekształcamy osobno. Bez straty ogólności załóżmy, że Cj=x1xk, gdzie xi,i=1,,k są parami różne. Jeśli k3 to kładziemy Dj=Cj.

Niech k>3. Dodajemy k3 nowych zmiennych y2,,yk2, i zastepujemy Cj przez


Dj=(x1x2y2)(¬y2x3y3)(¬y3x4y4)...(¬yk2xk1xk)


Nietrudno spostrzec, że jeśli Cj jest spełniona przez pewne wartościowanie zmiennych x1,...,xk, to da się tak dobrać wartości dla zmiennych y2,...,yk2, aby spełnione były wszystkie klauzule w Dj. Na odwrót, jeśli Dj jest spełniona dla pewnego wartościowania zmiennych x1,...,xk,y2,...,yk2, to łatwo wydedukować, że xi=1 dla pewnego 1ik. Mianowicie, jeśli x1=x2=0, to z pierwszej klauzuli w Dj wynika że y2=1. Ale wtedy z drugiej klauzuli mamy x3=1 lub y3=1. W pierwszym przypadku rozumowanie jest zakończone, w drugim przenosimy rozumowanie na trzecią klauzulę i tak dalej.

Zatem, po przekształceniu kolejno wszystkich alternatyw powstaje równoważna formuła o co najwyżej trójskładnikowych alternatywach. Pozostaje wykazać, że przekształcenie to realizowalne jest w pamięci logarytmicznej. Zauważmy jednak, że aby wypisać formułę wynikową, MT potrzebuje pamięć roboczą tylko na licznik bieżącej alternatywy Cj oraz licznik wygenerowanych do tej pory nowych zmiennych.

Uwaga 1

Zapewne zauważyłaś(-łeś), że w wielu podręcznikach do algorytmiki również mówi się o NP-zupełności. Na ogół korzysta się wtedy z redukcji wielomianowej. Złożoność czasowa jest łatwiejsza do analizy w przypadku modelu obliczeń takiego jak (uproszczony) język programowania wysokiego poziomu. Analiza złożoności pamięciowej (i to tylko z uwzględnieniem pamięci roboczej) może być trudniejsza.

Redukcja logarytmiczna jest bardziej uniwersalna i dlatego stosujemy ją w teorii złożoności.

Uwaga 2

W literaturze przyjmuje sie również nieco inną definicję problemu 3SAT, w której zakłada sie dodatkowo, że w każdej klauzuli występują dokładnie 3 parami różne literały. Dowód NP-zupełności tej wersji otrzymujemy przez uzupełnienie dowodu powyższego w następujący sposób:

Załóżmy że k=2. Wprowadzamy nową zmienną y i kładziemy Dj=(x1x2y)(x1x2¬y). Jeśli istnieje wartościowanie spełniające formułę ϕ, to w tym wartościowaniu formuła ψ powstała z ϕ przez zastąpienie klauzuli Cj formułą Dj jest również spełniona. I na odwrót, jeśli pewne wartościowanie spełnia formułę ψ, to aby Dj było prawdziwe x1 lub x2 musi mieć wartość 1, a zatem to samo wartościowanie (bez zmiennej y) spełnia formułę ϕ.

Analogicznie, jesli Cj składa się tylko z jednego literału, to przekształcamy go w koniunkcję czterech trójskładnikowych klauzul, z dodanymi dwiema nowymi zmiennymi.

Z tego spostrzeżenia będziemy korzystać w następnych dowodach NP-zupełności.

Odnotujmy w tym miejscu, że dalsze zawężenie problemu polegające na dopuszczeniu klauzul o co najwyżej dwóch literałach, 2SAT, jest problemem obliczeniowo łatwym. Dowód tego faktu odkładamy do nastepnej lekcji.

MAXSAT

Warto wspomnieć o innych NP-zupełnych wersjach problemu spełnialnosci. Na przykład, możemy zapytać o istnienie wartościowania spełniającego co najmniej zadaną liczbe k klauzul (a niekoniecznie wszystkie). Problem ten nosi nazwę MAXSAT, i jest ogólniejszy niż SAT (a zatem jest również w NPC). Jego trudność przejawia sie również w tym, że zawężenie do klauzul długości dwa w przeciwieństwie do SAT, pozostawia ten problem trudnym.

Twierdzenie [MAX2SAT]

Problem MAX2SAT jest NP-zupełny.

Dowód

Konstruujemy redukcję z problemu 3SAT. Na wejściu mamy formułę ϕ=C1...Cm. Każdą klauzulę Cj=abc przekształcamy w zbiór 10 klauzul, dla wygody rozważań podzielonych na trzy grupy, następujacej postaci:

  1. (a)(b)(c)(z)
  1. (¬a¬b)(¬b¬c)(¬a¬c)
  1. (a¬z)(b¬z)(c¬z)

Tych 10 klauzul ma następujace własności:

  1. Jeśli a=b=c=0, to niezależnie od wartości zmiennej z co najwyżej 6 klauzul jest spełnionych.
  1. Jeśli któryś z literałów a, b lub c jest równy 1, to

można dobrać wartość z tak, że 7 klauzul jest spełnionych. Można sie o tym przekonać analizując wszystkie przypadki. Na przykład, jeśli a=1, b=c=0, to kładziemy z=0; jeśli a=b=1, c=0, to również kładziemy z=0, jeśli natomiast a=b=c=1 to 7 klauzul jest spełnionych gdy z=1.

Pozostaje zdefiniować żądaną liczbę spełnionych klauzul w formule wynikowej na 7m. Z wymienionych własności wynika, że formuła wynikowa posiada wartościowanie spełniające dokładnie 7m alternatyw wtedy i tylko wtedy gdy formuła wejściowa jest spełnialna.

Maszyna Turinga realizująca redukcję potrzebuje pamieci roboczej jedynie na liczniki, zatem działa w pamięci logarytmicznej.

NP-zupełne problemy grafowe

Pokrycie wierzchołkowe

Pierwszym z serii problemów grafowych, dla których udowodnimy NP-zupełność, jest problem pokrycia wierzchołkowego. Dla grafu nieskierowanego G=(V,E) mówimy, że podzbiór VV jest pokryciem wierzchołkowym, jeśli każda krawędź w G ma co najmniej jeden z końców w zbiorze V.

Problem NODE COVER

Wejście: Graf nieskierowany G=(V,E), liczba całkowita k|V|

Wyjście: TAK jeśli G ma pokrycie wierzchołkowe o liczności k, NIE w przeciwnym przypadku.

Twierdzenie [Problem NODE COVER]

Problem NODE COVER jest NP-zupełny.

Dowód

Dla podanego podzbioru zbioru wierzchołków bardzo łatwo sprawdzić czy stanowi on pokrycie, zatem NODECOVERNP.

Redukujemy problem 3SAT do NODE COVER. Na wejściu mamy formułę ϕ=C1...Cm, i zgodnie z uwagą poczyniona przy dowodzie NP-zupełności 3SAT zakładamy, że każda alternatywa Cj zawiera dokładnie 3 różne literały. Konstruujemy graf następujący: każde wystąpienie literału jest wierzchołkiem grafu, wystąpienia wewnątrz jednej klauzuli tworzą trójkąt. Ponadto, dla każdej pary literałów przeciwnych wystepujących w różnych klauzulach odpowiadające im wierzchołki łączymy krawędzią. Na koniec, kładziemy k=2m.


rys_5_1.jpg(Redukcja 3SAT do NODE COVER)


Teraz należy wykazać, że formuła wejsciowa jest spełnialna wtedy i tylko wtedy gdy wygenerowany graf ma pokrycie wierzchołkowe o liczności k. Z ograniczenia na wielkość pokrycia wynika, że z każdego trójkąta do pokrycia muszą być wybrane dokładnie dwa wierzchołki. Jeśli formuła jest spełnialna, to w każdym trójkącie można wyróżnić jeden wierzchołek v odpowiadający literałowi równemu 1. Do pokrycia wybieramy pozostałe dwa wierzchołki. Pokrywają one wszystkie krawędzie trójkątów oraz wychodzące z tych wierzchołków krawędzie między trójkątami. Każda pozostała krawędź, wychodząca z wierzchołka v, prowadzi do pewnego wierzchołka w odpowiadającego zaprzeczeniu literału wierzchołka v, zatem literał wierzchołka w ma wartość zero i w jest wybrane do pokrycia w trójkącie w którym występuje. Zatem krawędź (v,w) też jest pokryta.

W drugą stronę, załóżmy, że dane jest pokrycie. W każdym trójkącie, dla wierzchołka który nie jest w pokryciu, ustawiamy wartość odpowiedniej zmiennej tak aby literał w tym wierzchołku był równy 1. Należy zauważyć że takie wartościowanie jest niesprzeczne. Wynika to stąd, że przeciwne literały zawsze odpowiadają dwóm wierzchołkom z różnych trójkątów połączonych krawędzią. Co najmniej jeden z tych wierzchołków jest w pokryciu, a więc odpowiadający mu literał nie bierze udziału w obliczaniu wartościowania.

Zauważmy, że tak jak i poprzednio, do realizacji redukcji wystarczy pamięć robocza rzędu n, co kończy dowód.

Klika, zbiór niezależny

Przypomnijmy definicje obu problemów:

\bigskip \noindent {\bf Problem} INDEPENDENT SET\\ {\it Wejście:} Graf nieskierowany Parser nie mógł rozpoznać (błąd składni): {\displaystyle G=(V,E)<math>, liczba całkowita <math>k |V|<math>\\ {\it Wyjście}: TAK jeśli <math>G<math> ma zbiór niezależny (indukowany podgraf bez krawędzi) o <math>k<math> wierzchołkach, NIE w przeciwnym przypadku. \bigskip \noindent {\bf Problem} CLIQUE\\ {\it Wejście:} Graf nieskierowany <math>G=(V,E)<math>, liczba całkowita <math>k |V|<math>\\ {\it Wyjście}: TAK jeśli <math>G<math> ma podgraf pełny (klikę) o <math>k<math> wierzchołkach, NIE w przeciwnym przypadku. ====section==== Wykaż, że problem INDEPENDENT SET jest NP-zupełny. \beginhintJeśli <math>V'<math> jest pokryciem wierzchołkowym, to jaką własność ma zbiór <math>V-V'<math>? </div></div> \beginsolutionDopełnienie pokrycia jest oczywiście zbiorem niezależnym. Zatem redukcja z problemu NODE COVER, mając na wejściu graf <math>G=(V,E)<math> i liczbę <math>k<math> generuje instancję <math>G'=(V',E'),k'<math> problemu INDEPENDENT SET, kładąc <math>G'=G<math>, <math>k'=|V|-k<math>. </div></div> ====section==== Wykaż, że problem INDEPENDENT SET jest NP-zupełny, wykorzystując pokazaną wyżej redukcję z 3SAT do NODE COVER, zmieniając tylko rozumowanie tak, aby odnosiło sie do problemu INDEPENDENT SET. ====section==== Wykaż, że problem CLIQUE jest NP-zupełny. \beginhintRozważ dopełnienie grafu. </div></div> \beginsolutionRedukcja z problemu INDEPENDENT SET. Graf wynikowy jest dopełnieniem grafu źródłowego, a parametr <math>k<math> ma tę sama wartość. </div></div> ===Cykl i ścieżka Hamiltona=== \bigskip \noindent {\bf Problem} HAMILTONIAN CYCLE\\ {\it Wejście:} Graf nieskierowany <math>G=(V,E)<math>\\ {\it Wyjście}: TAK jeśli <math>G<math> ma cykl Hamiltona, czyli cykl przchodzący przez każdy wierzchołek dokładnie raz, NIE w przeciwnym przypadku. {{twierdzenie|[Uzupelnij]|| CYKL HAMILTONA jest NP-zupełny. }} {{dowod|[Uzupelnij]|| Przynależnośc do klasy NP jest oczywista. Konstruujemy redukcje z problemu NODE COVER. na wejściu mamy nieskierowany graf <math>G=(V,E)<math> oraz liczbę całkowitą <math>k |V|<math>. Oznaczmy graf wynikowy jako <math>G'=(V',E')<math>. Redukcja przeprowadzona jest techniką gadżetu (w literaturze angielskiej uzywa sie również terminu {\em widget}). Gadżet to fragment struktury wynikowej, o określonych własnościach. W naszym przypadku pierwszym krokiem redukcji jest wygenerowanie, dla każdej krawędzi <math>(u,v) E<math> gadżetu <math>G_{uv}=(V_{uv}, E_{uv})<math> będącego grafem przedstawionym na rysunku 5.2. \vspace{1cm} \begincenter \includegraphics[width=12cm]{rys_5_2.jpg}\\ \endcenter \vspace{1cm} Jedynie narożne wierzchołki grafu <math>G_{uv}<math> będą połączone z wierzchołkami spoza <math>G_{uv}<math>. Stąd wynika, że jeśli <math>G'<math> ma cykl Hamiltona, to musi on przechodzić przez <math>G_{uv}<math> tylko na jeden z przedstawionych na rysunku 5.3 sposobów. Konstrukcja gadżetu uniemożliwia inne usytuowanie cyklu Hamiltona względem <math>G_{uv}<math>. \vspace{1cm} \begincenter \includegraphics[width=12cm]{rys_5_3.jpg}\\ \endcenter \vspace{1cm} Drugi krok redukcji to wygenerowanie krawędzi w <math>G'<math> łączących gadżety w tak zwane ścieżki. Dla każdego wierzchołka <math>v V<math> najpierw porządkujemy dowolnie wszystkie jego sąsiednie wierzchołki, oznaczmy je przez <math>u_v^1,...,u_v^{d(v)}<math>, gdzie <math>d(v)<math> jest stopniem wierzchołka <math>v<math>. Konstrukcja ścieżki odpowiadającej wierzchołkowi <math>v<math>, łączącej wszystkie gadżety odpowiadające krawędziom incydentnym z <math>v<math>, dokonuje sie przez dołączenie do <math>G'<math> zbioru krawędzi postaci \[E_v=\{([v,u_v^i,6],[v,u_v^{i+1},1]), i=1,\ldots,d(v)-1\}<math></center> Ostatni krok to dodanie wierzchołków-selektorów <math>s_1,\ldots,s_k<math>, i połączenie krawędzią każdego selektora z początkiem i końcem ścieżki odpowiadającej wierzchołkowi <math>v<math>, dla każdego <math>v<math>. _S=(s_i,[v,u_v^1,1]):v V, 1 i k (s_i,[v,u_v^d(v),6]):v V, 1 i k<center><math> Kładziemy zatem \[V'=\bigcup_{(uv)\in E}V_{uv}\cup\{s_j, 1\leq j\leq k\}<math></center> '=_{(uv) E}E_{uv} _{v V}E_v E_S<center><math> \vspace{1cm} \begincenter \includegraphics[width=12cm]{rys_5_4.jpg}\\ \endcenter \vspace{1cm} Na rys. 5.4 pokazano graf o 4 wierzchołkach i rezultat redukcji. Zacieniowane zostały dwa wierzchołki grafu które tworzą pokrycie. Pogrubione krawędzie tworza cykl Hamiltona. Zaczynając od selektora <math>s_1<math> przechodzimy do początku ścieżki odpowiadającej pierwszemu wierzchołkowi z pokrycia, czyli <math>x<math>. Po przejściu gadżetów na tej ścieżce wracamy do <math>s_2<math>, a stąd do początku ścieżki odpowiadajacej drugiemu węzłowi z pokrycia, <math>y<math>. Wykażemy, że <math>G'<math> ma cykl Hamiltona wtedy i tylko wtedy gdy G ma pokrycie o liczności <math>k<math>. Załóżmy, że <math>G'<math> ma cykl Hamiltona i prześledźmy jego bieg zaczynając od <math>s_1<math> (w dowolnym kierunku). Następny wierzchołek na cyklu musi być początkiem (lub końcem - załóżmy to pierwsze) ścieżki gadżetów dla pewnego wierzchołka <math>v_1 V<math>. Dodajemy <math>v_1<math> do generowanego pokrycia. Zgodnie z własnością gadżetu, cykl przebiega całą ścieżkę i na końcu przechodzi do innego selektora, załóżmy że jest to <math>s_2<math>. Z <math>s_2<math> musi przejść na początek lub koniec innej ścieżki, odpowiadającej wierzchołkowi <math>v_2<math>. Dodajemy <math>v_2<math> do pokrycia i kontynuujemy. Z ostatniej, <math>k<math>-tej ścieżki, cykl musi wrócić do <math>s_1<math>. Ponieważ cykl Hamiltona przeszedł przez wszystkie wierzchołki <math>G'<math>, a więc przez wszystkie gadżety <math>G_{uv}<math>, zatem wybrane w ten sposób wierzchołki <math>v_1,...,v_k<math> stanowią pokrycie. Teraz załóżmy, że <math>G<math> ma pokrycie <math>_1,...,v_k<math>. Konstruujemy cykl Hamiltona w <math>G'<math>. Zaczynamy od selektora <math>s_1<math> i przechodzimy na początek ścieżki związanej z <math>v_1<math>, czyli do węzła <math>[v_1,u_{v_1}^1,1]<math>. Przechodzimy przez kolejne gadżety aż do końca ścieżki. Dla danego gadżetu <math>G_{v_1u_{v_1}^i}<math> musimy podjąć decyzję czy przechodzimy przez wszystkie wierzchołki czy tylko przez połowę (jedną "ścianę"). Decyzja zależy od tego czy <math>u_{v_1}^i<math> również należy do pokrycia. Jeśli nie, to przechodzimy cały gadżet, jeśli tak, to drugą "ścianę" pozostawiamy, aby później, gdy trawersowana będzie ścieżka dla <math>u_{v_1}^i<math> również można było przejść przez <math>G_{v_1u_{v_1}^i}<math>. Z ostatniego węzła na ścieżce przechodzimy do selektora <math>s_2<math> i powtarzamy konstrukcję. Z ostatniego węzła na <math>k<math>-tej ścieżce wracamy do <math>s_1<math>, zamykając w ten sposób cykl Hamiltona. Ostatnim krokiem dowodu jest stwierdzenie, że konstrukcję grafu <math>G'<math> można wykonać posługując się pamięcią roboczą rozmiaru logarytmicznego. Wynika to, jak i w poprzednich dowodach, z tego że maszynie wystarcza pamięć na licznik położenia w wejściowym grafie oraz licznik numeru (nazwy) generowanego wierzchołka i krawędzi grafu <math>G'<math>. }} Bardzo podobny w sformułowaniu jest problem ścieżki Hamiltona (HAMILTONIAN PATH). Na weściu jest graf nieskierowany, na wyjściu jest TAK jeśli w grafie istnieje ścieżka przechodząca przez każdy wierzchołek dokładnie raz. Oczywiste jest że istnienie cyklu Hamiltona implikuje istnienie ścieżki Hamiltona, jednak są to różne problemy, i NP-zupełnośc tego drugiwgo wymaga osobnego dowodu. Tym niemniej, na przykładzie tych problemów można pokazać pewne techniki dowodzenia NP-zupełności w takich przypadkach. Jedną z nich jest modyfikacja znanego już dowodu NP-zupełności problemu podobnego, drugą zaś redukcja z problemu podobnego. {{twierdzenie|[Uzupelnij]|| Problem HAMILTONIAN PATH jest NP-zupełny. }} ====section==== Metoda 1: zmodyfikuj konstrukcję grafu <math>G'<math> w dowodzie NP-zupełności problemu HAMILTONIAN CYCLE tak aby stanowił dowód NP-zupełności problemu HAMILTONIAN PATH. \hint{Należy "wymusić" rozpoczęcie i zakończenie ścieżki dodatkowymi selektorami} \solution{Dodajemy selektor <math>s_0<math> i łączymy go krawędzią z <math>s_1<math>. następnie dodajemy selektor <math>s_{k+1}<math> i łączymy go z początkami i końcami wszystkich ścieżek. na koniec dodajemy <math>s_{k+2}<math> i łączymy go z <math>s_{k+1}<math>. Jeśli graf wynikowy posiada ścieżkę Hamiltona, to jej końcami muszą być selektory <math>s_0<math> i <math>s_{k+2}<math>. Pozostała część rozumowania jest analogiczna.} ====section==== Metoda 2: Skonstruuj redukcję z problemu CYKL HAMILTONA. \hint{Dodaj nowe wierzchołki które będą końcami ścieżki Hamiltona i powiąż je odpowiednio z innym wierzchołkami.} \solution{Nie prowadzi do celu narzucający się pomysł aby dowiązać 2 nowe wierzchołki do końców dowolnie ustalonej krawędzi. Skuteczna jest natomiast modyfikacja tej idei: wybrać dowolny wierzchołek <math>v<math>, utworzyć wierzchołek <math>v'<math> o takim samym zbiorze sąsiadów w grafie (inaczej: rozszczepić v na dwa identyczne), a nastepnie dołączyć nowy wierzchołek <math>u_1<math> do <math>v<math> i jeszcze jeden nowy <math>u_2<math> do <math>v'<math>. Łatwo sie przekonać że w nowym grafie istnieje ścieżka Hamiltona (koniecznie o końcach <math>u_1, u_2<math>) wtedy i tylko wtedy gdy w oryginalnym grafie istnieje cykl Hamiltona.} ==Problemy na zbiorach i liczbach== ===Trójdzielne skojarzenie i pokrycie zbiorami=== Uogólnieniem klasycznego problemu skojarzenia w grafie dwudzielnym jest następujący problem: \bigskip \noindent {\bf Problem }TRIPARTITE MATCHING\\ {\it Wejście: }parami rozłączne równoliczne zbiory <math>W,X,Y<math> o mocy <math>p>0<math> oraz relacja <math>R W X Y<math>\\ {\it Wyjście: }TAK, jeśli istnieje skojarzenie w <math>R<math>, czyli podzbiór <math>R' R<math> taki, że dla dowolnych trójek <math>(w,x,y),(w',x',y') R<math> zachodzi <math>w w'<math>, <math>x x'<math> oraz <math>y y'<math>. NIE w przeciwnym przypadku.\\ Problem skojarzenia dwudzielnego jest obliczeniowo łatwy. Uogólnienie do trzech wymiarów utrudnia problem radykalnie. {{twierdzenie|[Uzupelnij]|| Problem TRIPARTITE MATCHING jest NP-zupełny. }} {{dowod|[Uzupelnij]|| Ponownie mamy do czynienia z dość skomplikowaną konstrukcją posługującą się gadżetami, redukującą problem 3SAT do naszego problemu. Na wejściu mamy zbiór klauzul <math>C=_1,...,C_m<math> nad zmiennymi <math>U=_1,...,u_n<math>. Najpierw dla każdej zmiennej <math>u U<math> konstruujemy gadżet <math>T_u<math>, który będzie odpowiadał za wybór wartościowania tej zmiennej. Składa się on z dwóch zbiorów trójek: \[T_u^t=\{(w_{2j}^u,x_j^u,y_j^u), 1\leq j\leq m\}<math></center> _u^f=(w_{2j+1}^u,x_{j+1}^u,y_j^u), 1 j<m(w_1^u,x_1^u,y_m^u)<center><math> Przykładowy gadżet dla zmiennej <math>u<math>, w przypadku gdy liczba klauzul wynosi <math>m=4<math> pokazano na rysunku 5.5. Grubą linią zaznaczono trójki ze zbioru \vspace{1cm} \begincenter \includegraphics[width=12cm]{rys_5_5.jpg}\\ \endcenter \vspace{1cm} Dla każdego gadżetu pierwsze elementy trójek, <math>w_1^u,...,w_m^u<math>, występują jeszcze w innych trójkach, które za chwilę zdefiniujemy. Pozostałe elementy występuja tylko w danym gadżecie. Zatem, jeśli wybrano skojarzenie, to dla ustalonego gadżetu to skojarzenie zawiera albo cały zbiór <math>T_u^f<math> i żadnej trójki z <math>T_u^t<math>, albo na odwrót. W toku dalszego rozumowania, wybór do skojarzenia zbioru <math>T_u^f<math> będzie oznaczał wartościowanie zmiennej <math>u<math> na {\it false} i pozostawi niepokryte elementy <math>w<math> o indeksach parzystych. Wybór przeciwny ustali wartościowanie <math>u<math> na {\it true} i pozostawi niepokryte elementy <math>w<math> o indeksach nieparzystych. Sytuacja taka została przedstawiona na rysunku 5.5, pogrubioną linią zaznaczono wybór trójek <math>T_u^t<math>. Trójki które zdefiniujemy teraz mogą być nazwane "składową testowania". Skojarzą one niepokryte elementy z gadżetów z odpowiednimi wystąpieniami literałów w klauzulach. Dla każdej klauzuli <math>C_j=(p_j q_j r_j)<math> składowa testowania <math>S_j<math> zawiera 3 trójki <math>s_j^1,s_j^2,s_j^3<math> odpowiadajace kolejnym literałom <math>p,q,r<math>, zdefiniowane następująco: Jeśli <math>p=u_i<math> to <math>s_j^1=(w_{2j-1}^u,a_j, b_j)<math>. Jeśli <math>p= u_i<math> to <math>s_j^1=(w_{2j}^u,a_j,b_j)<math>. Analogicznie dla literałów <math>q, r<math>. Elementy <math>a_j, b_j<math> występują tylko w trzech trójkach zbioru <math>S_j<math>, zatem skojarzenie wybiera dokładnie jedną z tych trójek. Aby móc daną trójkę wybrać, element na pierwszej współrzędnej w tej trójce musi być niepokryty trójkami z odpowiedniego gadżetu. Ale to oznacza że wartość danego literału jest {\it true}, czyli klauzula <math>C_j<math> jest spełniona. Innymi słowy, możliwość pokrycia elementów <math>a_j, b_j<math> jest równoważna temu, że istnieje w klauzuli <math>C_j<math> literał o wartości logicznej {\it true}. Skojarzenie wybrane dla gadżetów ma liczność <math>nm<math>, składowa testowania daje kolejnych <math>m<math> trójek w skojarzeniu, zatem ze wszystkich <math>2nm<math> elementów na pierwszej współrzędnej (elementy <math>u<math>) <math>(n-1)m<math> pozostaje nieskojarzonych. Zatem w konstrukcji potrzebna jest jeszcze trzecia "składowa odśmiecania" zdefiniowana nastepująco: \[G=\{(w_i^u,g_k,h_k):u\in U, 1\leq i\leq 2m, 1\leq k\leq (n-1)m\}<math></center> Pozwala ona skojarzyć elementy <math>u<math> pozostałe po wyborze wartościowania i testu spełnialności. Na podstawie opisanej konstrukcji i komentarzy jej towarzyszących możemy juz łatwo stwierdzić, że formuła wejściowa posiada wartościowanie spełniające wtedy i tylko wtedy gdy utworzony w wyniku redukcji zbiór trójek ma skojarzenie. }} Rozważmy jeszcze trzy podobne problemy na zbiorach. Ich NP-zupełność stanie sie oczywista gdy zauważymy że stanowią one kolejne uogólnienia problemu trójdzielnego skojarzenia. '''Problem '''EXACT COVER BY 3-SETS (pokrycie trójelementowymi podzbiorami)<br> ''Wejście: ''Rodzina <math>\cal F<math> trójelementowych podzbiorów zbioru <math>X<math> takiego że <math>|X|=3k<math> dla pewnej calkowitej <math>k<math><br> ''Wyjście: ''TAK jesli istnieje podrodzina <math>\cal F' \subseteq \cal F<math> taka, że każdy element zbioru <math>X<math> należy do dokładnie jednego zbioru rodziny <math>\cal F"<math>, NIE w przeciwnym przypadku<br> ====section==== Wykaż że EXACT COVER BY 3-SETS jest NP-zupełny. <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> Zauważ, że jeśli ograniczymy sie do instancji w których X jest podzielone na trzy rozłączne równoliczne zbiory, a wszystkie podzbiory w rodzinie <math>F<math> zawieraja po jednym elemencie z każdego z tych trzech podzbiorów, to otrzymujemy problem TRIPARTITE MATCHING (formalnie są to izomorficzne struktury). Zatem EXACT COVER BY 3-SETS jest uogólnieniem TRIPARTITE MATCHING, a ponieważ, co oczywiste, jest w NP, więc jest NP-zupełny. </div></div> '''Problem''' SET COVERING (pokrycie zbiorami)<br> ''Wejście: ''Rodzina <math>F=\{S_1,\ldots,S_n\}<math> podzbiorów zbioru <math>|X|<math>, liczba całkowita <math>k\leq n<math><br> ''Wyjście: ''TAK, jeśli istnieje k-elementowa podrodzina rodziny <math>F<math>, która pokrywa cały zbiór <math>|X|<math>, w przeciwnym przypadku NIE.<br> ====section==== Wykaż NP-zupełność problemu SET COVERING. <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> Ponownie przez ograniczenie do podproblemu: jeśli założymy że <math>|X|=3k<math> a wszystkie zbiory rodziny <math>F<math> są 3-elementowe, to otrzymujemy problem EXACT COVER BY 3-SETS. </div></div> ===Suma podzbioru i inne problemy liczbowe=== Teraz zajmiemy się kilkoma problemami związanymi z liczbami. Najwięcej trudu będzie kosztować udowodnienie NP-zupełności pierwszego z nich -- następne pójdą już łatwiej. Ta pierwsza trudność zasadza się na tym, że jak do tej pory dowodziliśmy NP-zupełność tylko dla problemów, w których tak naprawdę nie ma liczb, jako elementów struktury kombinatorycznej. Oczywiście, każde słowo wejściowe może byc traktowane jako liczba, kod maszyny Turinga tez jest liczbą. Tutaj jednak chodzi o naturalne sformułowanie problemu, w odniesieniu do obiektów abstrakcyjnych takich jak liczby, funkcje, relacje, grafy itd. Problematyka trudności obliczeniowej problemów z liczbami jest rozwinięta w następnej lekcji. '''Problem '''SUBSET SUM (suma podzbioru)<br> ''Wejście: ''Skończony zbiór <math>A} elementów, dla każdego elementu aA waga s(a)Z+ oraz liczba BZ+.
Wyjście: TAK jeśli istnieje podzbiór AA taki że aAs(a)=B, NIE w przeciwnym przypadku.

Twierdzenie [Uzupelnij]

Problem SUBSET SUM jest NP-zupełny.

Dowód [Uzupelnij]

Skonstruujemy redukcję z problemu EXACT COVER BY 3 SETS. Na wejściu mamy zatem zbiór X o liczności 3m i rodzinę F={U1,,Un} jego podzbiorów. Naszym zadaniem jest skonstruować zbiór Y elementów z pewnymi wagami oraz liczbę B taką, że istnienie podzbioru w Y o sumie wag elementów równej B "wymusza" istnienie pokrycia zbioru X wybranymi rozłącznymi podzbiorami z rodziny F.

Niech p=log2(n+1). Najpierw ustalamy porządek elementów w zbiorze |X| i zapisujemy każdy zbiór Uj jako wektor 3m-bitowy (czyli jest to struktura danych -- wektor bitowy -- reprezentująca podzbiór danego zbioru). W każdym wektorze są oczywiście 3 bity równe 1 a pozostałe są zerowe. Następnie przed każdym bitem wstawiamy dodatkowo p1 bitów zerowych i traktujemy ten wektor kjako liczbe zapisaną binarnie. Powstaje w ten sposób n liczb 3mp-bitowych -- są to wagi elementów zbioru Y. Liczba B jest również takiej długości, powstaje przez wypisanie 3m jedynek a następnie wstawienie przed każdą jedynką p1 zer.

Jeśli istnieje podrodzina FF stanowiąca rozłączne pokrycie zbioru X, to wektory bitowe poszczególnych trójek z F arytmetycznie sumują sie do B, a na żadnej pozycji nie występuje przeniesienie. Zatem z istnienia pokrycia wynika istnienie podzbioru dającego w sumie wagę B.

Bloki zer dodane przed każdym bitem reprezentacji wektorowej podzbioru gwarantują, że sumując dowolny podzbiór wygenerowanych liczb nie napotkamy na przeniesienie poza taki blok zer. A zatem, jeśli istnieje podzbiór liczb dający w sumie B, to wszystkie te liczby w swoich rozwinięciach binarnych zawierają w sumie tyle jedynek ile jest ich w B, na różnych pozycjach. A więc odpowiadajace tym liczbom podzbiory pokrywają cały zbiór X.

Zatem opisane przekształcenie jest redukcją. Jak w poprzednich dowodach, potrzebna jest pamięć robocza jedynie na stałą liczbę liczników. A więc jest to redukcja logarytmiczna.

W tej części lekcji wykażemy NP-zupełność dwóch podobnych problemów liczbowych.

Problem PARTITION (podział)
Wejście: Skończony zbiór A elementów oraz dodatnia całkowita waga s(a) każdego elementu
Wyjście: TAK jeśli istnieje podzbiór AA taki że aAs(a)=aAAs(a), NIE w przeciwnym przypadku.

section

Wykaż NP-zupełność problemu podziału.

Wskazówka
Rozwiązanie

Problem KNAPSACK (plecak)
Wejście: Skończony zbiór A elementów, rozmiar s(a)Z+ i wartość v(a)Z+ dla każdego elementu, ograniczenie pojemności BZ+ oraz żądana wartość KZ+
Wyjście: TAK jeśli istnieje podzbiór AA taki że aAs(a)B oraz aAv(a)K, NIE w przeciwnym przypadku.

section

Pokaż że KNAPSACK jest NP-zupełny.

Wskazówka
Rozwiązanie

Podsumowanie technik dowodów NP-zupełności

Najprostsze redukcje otrzymujemy metodą zacieśnienia. Przez narzucenie dodatkowych zależności w instancjach problemu, o którym dowodzimy NP-zupełności, otrzymujemy instancje znanego problemu NP-zupełnego. W ten sposób wykazujemy, że nasz problem jest uogólnieniem problemu znanego, a więc jest niełatwiejszy. Przykłady takich redukcji zastosowaliśmy do problemów: EXACT COVER BY 3SETS, SET COVERING, KNAPSACK.

Pozostałe dowody można by zaliczyć do metody gadżetów. Fragmenty instancji problemu wejściowego przekształca się we fragmenty instancji probelmu wynikowego (gadżety), i wiąże się zależnościami (innymi gadżetami), których zachodzenie w problemie wynikowym ma mieć ścisłe odzwierciedlenie w spełnieniu wymagań problemu źródłowego. Czasem gadżet jest trywialny (np. w redukcji SUBSET SUM do PARTITION jest to ta sama waga elementu), kiedy indziej dość naturalny i nietrudny (SAT DO 3SAT), czasem bardzo pomysłowy (VERTEX COVER do HAMILTONIAN CYCLE, 3SAT do TRIPARTITE MATCHING, 3SAT do MAX2SAT).

Ćwiczenia końcowe

ż, że następujący problem izomorfizmu podgrafu jest NP-zupełny:

Problem SUBGRAPH ISOMORPHISM
Wejście: G1=(V1,E1), G2=(V2,E2) - grafy nieskierowane
Wyjście: TAK jeśli G1 ma podgraf izomorficzny z G2, NIE w przeciwnym przypadku.

Wskazówka
Rozwiązanie

tym ćwiczeniu pytamy o trudność obliczeniową problemu pochodzącego z teorii szergowania. Wykaż, że NP-zupełny jest następujący problem:

Problem SEQUENCING WITHIN INTERVALS
Wejście: Zbiór zadań T, dla każdego zadania t trzy liczby całkowite: długość zadania l(t)>0, moment pojawienia się r(t)0,oraz ograniczenie czasowe d(t)>0
Wyjście: TAK, jeśli wszystkie zadania można wykonać na jednym procesorze, bez przerywania, spełniając ograniczenia czasowe, NIE w przeciwnym przypadku. Formalnie, pytamy o funkcję alokacji A przydzielająca każdemu zadaniu t czas rozpoczęcia wykonywania A(t) taki, że [A(t),A(t)+l(t)][r(t),d(t)] oraz [A(t),A(t)+l(t))[A(t),A(t)+l(t))=, dla każdego zadania tt.

Wskazówka
Rozwiązanie

section

Problem cięcia w grafie zdefiniowany jest następująco:

Problem FEEDBACK VERTEX SET
Wejście: Graf skierowany G=(V,E), liczba całkowita k,0<k|V|.
Wyjście: TAK jeśli istnieje w G podzbiór k-wierzchołkowy, taki że graf pozostały po usunięciu tego podzbioru jest acykliczny.
Udowodnij, że FEEDBACK VERTEX SET jest NP-zupełny.

Wskazówka
Rozwiązanie

section

Kolorowanie (wierzchołkowe) grafu jest klasycznym problemem optymalizacyjnym w teorii grafów. Przypomnijmy, że chodzi o przypisanie wierzchołkom grafu nieskierowanego kolorów tak, aby końce każdej krawędzi miały różne kolory, a liczba kolorów była możliwie najmniejsza.

Okazuje sie że nawet jeśli ustalimy żądaną liczbe kolorów na 3, to problem jest NP-zupełny. Dowód tego faktu nie jest natychmiastowy.

Problem 3COLORING
Wejście: Graf nieskierowany G=(V,E).
Wyjście: TAK, jeśli istnieje funkcja c:V{0,1,2} taka, że dla każdej krawędzi (u,v)E, c(u)c(v).
Za pomocą redukcji z problemu 3SAT udowodnij, że problem trójkolorowania jest NP-zupełny.

Wskazówka
Rozwiązanie