Złożoność obliczeniowa/Wykałd 5: Problemy NP-zupełne: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Pitab (dyskusja | edycje)
Pitab (dyskusja | edycje)
Linia 269: Linia 269:
wierzchołkach, NIE w przeciwnym przypadku.
wierzchołkach, NIE w przeciwnym przypadku.
}}
}}
====section====
{{cwiczenie||
 
Wykaż, że problem INDEPENDENT SET jest NP-zupełny.
Wykaż, że problem INDEPENDENT SET jest NP-zupełny.


\beginhintJeśli <math>V'<math> jest pokryciem wierzchołkowym, to jaką własność
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka:''' <div class="mw-collapsible-content" style="display:none"> Jeśli <math>V'</math> jest pokryciem wierzchołkowym, to jaką własność
ma zbiór <math>V-V'<math>?
ma zbiór <math>V-V'</math>?
</div></div>
</div></div>


\beginsolutionDopełnienie pokrycia jest oczywiście zbiorem
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie:''' <div class="mw-collapsible-content" style="display:none"> Dopełnienie pokrycia jest oczywiście zbiorem
niezależnym. Zatem redukcja z problemu NODE COVER, mając na wejściu
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>
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>.
problemu INDEPENDENT SET, kładąc <math>G'=G</math>, <math>k'=|V|-k</math>.
</div></div>
</div></div>
 
}}
====section====
{{cwiczenie||
 
Wykaż, że problem INDEPENDENT SET jest NP-zupełny, wykorzystując
Wykaż, że problem INDEPENDENT SET jest NP-zupełny, wykorzystując
pokazaną wyżej redukcję z 3SAT do NODE COVER, zmieniając tylko
pokazaną wyżej redukcję z 3SAT do NODE COVER, zmieniając tylko
rozumowanie tak, aby odnosiło sie do problemu INDEPENDENT SET.
rozumowanie tak, aby odnosiło sie do problemu INDEPENDENT SET.
 
}}
====section====
{{cwiczenie||
 
Wykaż, że problem CLIQUE jest NP-zupełny.
Wykaż, że problem CLIQUE jest NP-zupełny.


\beginhintRozważ dopełnienie grafu.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka:''' <div class="mw-collapsible-content" style="display:none"> Rozważ dopełnienie grafu.
</div></div>
</div></div>


\beginsolutionRedukcja z problemu INDEPENDENT SET. Graf wynikowy
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie:''' <div class="mw-collapsible-content" style="display:none"> Redukcja z problemu INDEPENDENT SET. Graf wynikowy
jest dopełnieniem grafu źródłowego, a parametr <math>k<math> ma tę sama wartość.
jest dopełnieniem grafu źródłowego, a parametr <math>k<math> ma tę sama wartość.
</div></div>
</div></div>
 
}}
===Cykl i ścieżka Hamiltona===
===Cykl i ścieżka Hamiltona===


Linia 308: Linia 305:
przypadku.
przypadku.


{{twierdzenie|[Uzupelnij]||
{{twierdzenie|[Cykl Hamiltona]||
CYKL HAMILTONA jest NP-zupełny.
CYKL HAMILTONA jest NP-zupełny.
}}
}}

Wersja z 16:44, 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 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:

Problem [INDEPENDENT SET]

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

Wyjście: TAK jeśli G ma zbiór niezależny (indukowany podgraf bez krawędzi) o k wierzchołkach, NIE w przeciwnym przypadku.

Problem [CLIQUE]

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

Wyjście: TAK jeśli G ma podgraf pełny (klikę) o k wierzchołkach, NIE w przeciwnym przypadku.

Ćwiczenie

{{{3}}}

Ćwiczenie

{{{3}}}

{{cwiczenie|| Wykaż, że problem CLIQUE jest NP-zupełny.

Wskazówka:
Rozwiązanie: