Złożoność obliczeniowa/Wykałd 5: Problemy NP-zupełne: Różnice pomiędzy wersjami
Linia 255: | Linia 255: | ||
Przypomnijmy definicje obu problemów: | Przypomnijmy definicje obu problemów: | ||
{{Problem|[INDEPENDENT SET]|| | |||
''Wejście:'' Graf nieskierowany <math>G=(V,E)</math>, liczba całkowita <math>k\leq | |||
|V|<math> | |V|</math> | ||
''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. | |||
|V|<math> | }} | ||
{{Problem|[CLIQUE]|| | |||
''Wejście:'' Graf nieskierowany <math>G=(V,E)</math>, liczba całkowita <math>k\leq | |||
|V|</math> | |||
''Wyjście:'' TAK jeśli <math>G</math> ma podgraf pełny (klikę) o <math>k</math> | |||
wierzchołkach, NIE w przeciwnym przypadku. | wierzchołkach, NIE w przeciwnym przypadku. | ||
}} | |||
====section==== | ====section==== | ||
Wersja z 16:37, 31 lip 2006
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 z klasy NP jest NP-zupełny, zgodnie z własnościami redukcji logarytmicznej (przechodniość) wystarcza pokazać, dla dowolnego problemu , że redukuje się do . Innymi słowy, proces dowodzenia że dany problem jest w NPC składa sie z nastepujących kroków:
- dowieść że należy do NP
- wybrać znany problem NP-zupełny i skonstruować redukcję z do .
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 nad zmiennymi . Każdą z klauzul przekształcamy osobno. Bez straty ogólności załóżmy, że , gdzie są parami różne. Jeśli to kładziemy .
Niech . Dodajemy nowych zmiennych , i zastepujemy przez
Nietrudno spostrzec, że jeśli jest spełniona przez pewne
wartościowanie zmiennych , to da się tak dobrać
wartości dla zmiennych , aby spełnione były
wszystkie klauzule w . Na odwrót, jeśli jest spełniona
dla pewnego wartościowania zmiennych
, to łatwo wydedukować, że
dla pewnego . Mianowicie, jeśli ,
to z pierwszej klauzuli w wynika że . Ale wtedy z
drugiej klauzuli mamy lub . 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 oraz licznik wygenerowanych do tej pory nowych zmiennych.

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.
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 . Wprowadzamy nową zmienną i kładziemy . Jeśli istnieje wartościowanie spełniające formułę , to w tym wartościowaniu formuła powstała z przez zastąpienie klauzuli formułą jest również spełniona. I na odwrót, jeśli pewne wartościowanie spełnia formułę , to aby było prawdziwe lub musi mieć wartość 1, a zatem to samo wartościowanie (bez zmiennej ) spełnia formułę .
Analogicznie, jesli 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 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łę . Każdą klauzulę przekształcamy w zbiór 10 klauzul, dla wygody rozważań podzielonych na trzy grupy, następujacej postaci:
Tych 10 klauzul ma następujace własności:
- Jeśli , to niezależnie od wartości zmiennej co najwyżej 6 klauzul jest spełnionych.
- Jeśli któryś z literałów , lub jest równy 1, to
można dobrać wartość tak, że 7 klauzul jest spełnionych. Można sie o tym przekonać analizując wszystkie przypadki. Na przykład, jeśli , , to kładziemy ; jeśli , , to również kładziemy , jeśli natomiast to 7 klauzul jest spełnionych gdy .
Pozostaje zdefiniować żądaną liczbę spełnionych klauzul w formule wynikowej na . Z wymienionych własności wynika, że formuła wynikowa posiada wartościowanie spełniające dokładnie 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 mówimy, że podzbiór jest pokryciem wierzchołkowym, jeśli każda krawędź w G ma co najmniej jeden z końców w zbiorze .
Wejście: Graf nieskierowany , liczba całkowita
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 .
Redukujemy problem 3SAT do NODE COVER. Na wejściu mamy formułę , i zgodnie z uwagą poczyniona przy dowodzie NP-zupełności 3SAT zakładamy, że każda alternatywa 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 .
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 . 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 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 , prowadzi do pewnego wierzchołka
odpowiadającego zaprzeczeniu literału wierzchołka , zatem literał
wierzchołka ma wartość zero i jest wybrane do pokrycia w
trójkącie w którym występuje. Zatem krawędź 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 , co kończy dowód.

Klika, zbiór niezależny
Przypomnijmy definicje obu problemów:
Wejście: Graf nieskierowany , liczba całkowita
Wyjście: TAK jeśli ma zbiór niezależny (indukowany podgraf bez krawędzi) o wierzchołkach, NIE w przeciwnym przypadku.
Wejście: Graf nieskierowany , liczba całkowita
Wyjście: TAK jeśli ma podgraf pełny (klikę) o wierzchołkach, NIE w przeciwnym przypadku.
section
Wykaż, że problem INDEPENDENT SET jest NP-zupełny.
\beginhintJeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle 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
waga oraz liczba .
Wyjście: TAK jeśli istnieje podzbiór taki że
, 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 o liczności i rodzinę jego podzbiorów. Naszym zadaniem jest skonstruować zbiór elementów z pewnymi wagami oraz liczbę B taką, że istnienie podzbioru w o sumie wag elementów równej "wymusza" istnienie pokrycia zbioru wybranymi rozłącznymi podzbiorami z rodziny .
Niech . Najpierw ustalamy porządek elementów w zbiorze i zapisujemy każdy zbiór jako wektor -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 bitów zerowych i traktujemy ten wektor kjako liczbe zapisaną binarnie. Powstaje w ten sposób liczb -bitowych -- są to wagi elementów zbioru Y. Liczba jest również takiej długości, powstaje przez wypisanie jedynek a następnie wstawienie przed każdą jedynką zer.
Jeśli istnieje podrodzina stanowiąca rozłączne pokrycie zbioru , to wektory bitowe poszczególnych trójek z arytmetycznie sumują sie do , a na żadnej pozycji nie występuje przeniesienie. Zatem z istnienia pokrycia wynika istnienie podzbioru dającego w sumie wagę .
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 , to wszystkie te liczby w swoich rozwinięciach binarnych zawierają w sumie tyle jedynek ile jest ich w , na różnych pozycjach. A więc odpowiadajace tym liczbom podzbiory pokrywają cały zbiór .
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 elementów oraz dodatnia całkowita
waga każdego elementu
Wyjście: TAK jeśli istnieje podzbiór taki że
, NIE w przeciwnym
przypadku.
section
Wykaż NP-zupełność problemu podziału.
Problem KNAPSACK (plecak)
Wejście: Skończony zbiór elementów, rozmiar
i wartość dla każdego elementu, ograniczenie
pojemności oraz żądana wartość
Wyjście: TAK jeśli istnieje podzbiór taki że
oraz , NIE w
przeciwnym przypadku.
section
Pokaż że KNAPSACK jest NP-zupełny.
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: , - grafy nieskierowane
Wyjście: TAK jeśli ma podgraf izomorficzny z , NIE
w przeciwnym przypadku.
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ń , dla każdego zadania trzy liczby
całkowite: długość zadania , moment pojawienia się
,oraz ograniczenie czasowe
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
przydzielająca każdemu zadaniu czas rozpoczęcia wykonywania
taki, że oraz
, dla
każdego zadania .
section
Problem cięcia w grafie zdefiniowany jest następująco:
Problem FEEDBACK VERTEX SET
Wejście: Graf skierowany , liczba całkowita .
Wyjście: TAK jeśli istnieje w podzbiór -wierzchołkowy,
taki że graf pozostały po usunięciu tego podzbioru jest
acykliczny.
Udowodnij, że FEEDBACK VERTEX SET jest NP-zupełny.
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 .
Wyjście: TAK, jeśli istnieje funkcja taka, że dla każdej krawędzi , .
Za pomocą redukcji z problemu 3SAT udowodnij, że problem
trójkolorowania jest NP-zupełny.