Złożoność obliczeniowa/Wykład 5: Problemy NP-zupełne: Różnice pomiędzy wersjami
Nie podano opisu zmian |
m Zastępowanie tekstu – „,...,” na „,\ldots,” |
||
(Nie pokazano 41 wersji utworzonych przez 5 użytkowników) | |||
Linia 6: | Linia 6: | ||
znanych klasycznych problemów z teorii grafów, kombinatoryki, logiki | znanych klasycznych problemów z teorii grafów, kombinatoryki, logiki | ||
i innych podajemy definicje ich decyzyjnych wersji i wykazujemy ich | i innych podajemy definicje ich decyzyjnych wersji i wykazujemy ich | ||
NP-zupełność. Z problematyką | NP-zupełność. Z problematyką tą 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 | czynimy je bardziej formalnymi, posługując się modelem maszyny | ||
Turinga i redukcją logarytmiczną. Na przedstawionych przykładach | Turinga i redukcją logarytmiczną. Na przedstawionych przykładach | ||
omawiamy również techniki dowodzenia NP-zupełności. Następny wykład | omawiamy również techniki dowodzenia NP-zupełności. Następny wykład | ||
Linia 24: | Linia 24: | ||
* wybrać znany problem NP-zupełny <math>Q'</math> i skonstruować redukcję z <math>Q'</math> do <math>Q</math>. | * wybrać znany problem NP-zupełny <math>Q'</math> i skonstruować redukcję z <math>Q'</math> do <math>Q</math>. | ||
Przypomnijemy, że redukcja z problemu A do B dowodzi, że B jest | 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): | ||
niełatwiejszy niż A. Zatem dla konstrukcji takiej redukcji łatwiej | * problem A nie jest skomplikowany, tzn. instancje tego problemu wykazują pewną regularność, łatwą do "opisu" lub "zmierzenia" | ||
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 | * problem B dopuszcza konstrukcje różnorodnych instancji, jest "bogaty strukturalnie" | ||
strukturalnie" | |||
Stąd dla wypracowania sobie "warsztatu" dla konstruowania dowodów | Stąd dla wypracowania sobie "warsztatu" dla konstruowania dowodów | ||
Linia 40: | Linia 36: | ||
najczęściej wystepują jako lewa strona redukcji w dowodach | najczęściej wystepują jako lewa strona redukcji w dowodach | ||
NP-zupełnosci. Poniżej definiujemy lub przypominamy grupe takich | NP-zupełnosci. Poniżej definiujemy lub przypominamy grupe takich | ||
problemów, dość różnorodnego pochodzenia i zastosowania | problemów, dość różnorodnego pochodzenia i zastosowania i dowodzimy | ||
ich NP-zupełności. | ich NP-zupełności. | ||
Linia 50: | Linia 46: | ||
na ogół wymaga skomplikowanego opisu. Okazuje się (wykazał to już | na ogół wymaga skomplikowanego opisu. Okazuje się (wykazał to już | ||
Cook w swojej fundamentalnej pracy o NP-zupełności), że podproblem | 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 | problemu SAT, w którym wymagamy, aby każda klauzula zawierała nie | ||
więcej | więcej niż 3 literały, jest sam w sobie NP-zupełny, a dowód tego | ||
faktu jest dość łatwy. | faktu jest dość łatwy. | ||
{{twierdzenie||| | {{twierdzenie|2.1|tw 2.1| | ||
Problem 3SAT jest NP-zupełny. | Problem 3SAT jest NP-zupełny. | ||
}} | }} | ||
Linia 79: | Linia 75: | ||
Nietrudno spostrzec, że jeśli <math>C_j</math> jest spełniona przez pewne | Nietrudno spostrzec, że jeśli <math>C_j</math> jest spełniona przez pewne | ||
wartościowanie zmiennych <math>x_1, | wartościowanie zmiennych <math>x_1,\ldots,x_k</math>, to da się tak dobrać | ||
wartości dla zmiennych <math>y_2, | wartości dla zmiennych <math>y_2,\ldots,y_{k-2}</math>, aby spełnione były | ||
wszystkie klauzule w <math>D_j</math>. Na odwrót, jeśli <math>D_j</math> jest spełniona | wszystkie klauzule w <math>D_j</math>. Na odwrót, jeśli <math>D_j</math> jest spełniona | ||
dla pewnego wartościowania zmiennych | dla pewnego wartościowania zmiennych | ||
<math>x_1, | <math>x_1,\ldots,x_k,y_2,\ldots,y_{k-2}</math>, to łatwo wydedukować, że | ||
<math>x_i = 1</math> dla pewnego <math>1\leq i\leq k</math>. Mianowicie, jeśli <math>x_1=x_2 = 0</math>, | <math>x_i = 1</math> dla pewnego <math>1\leq i\leq k</math>. Mianowicie, jeśli <math>x_1=x_2 = 0</math>, | ||
to z pierwszej klauzuli w <math>D_j</math> wynika że <math>y_2 = 1</math>. Ale wtedy z | to z pierwszej klauzuli w <math>D_j</math> wynika że <math>y_2 = 1</math>. Ale wtedy z | ||
Linia 98: | Linia 94: | ||
}} | }} | ||
{{uwaga|1|| | {{uwaga|2.1|uw 2.1| | ||
Zapewne zauważyłaś(-łeś), że w wielu podręcznikach do algorytmiki | 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 | również mówi się o NP-zupełności. Na ogół korzysta się wtedy z | ||
Linia 110: | Linia 106: | ||
}} | }} | ||
{{uwaga|2|| | {{uwaga|2.2|uw 2.2| | ||
W literaturze przyjmuje sie również nieco inną definicję problemu | 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ą | 3SAT, w której zakłada sie dodatkowo, że w każdej klauzuli występują | ||
Linia 124: | Linia 120: | ||
jeśli pewne wartościowanie spełnia formułę <math>\psi</math>, to aby <math>D_j</math> było | jeśli pewne wartościowanie spełnia formułę <math>\psi</math>, to aby <math>D_j</math> było | ||
prawdziwe <math>x_1</math> lub <math>x_2</math> musi mieć wartość 1, a zatem to samo | prawdziwe <math>x_1</math> lub <math>x_2</math> musi mieć wartość 1, a zatem to samo | ||
wartościowanie (bez zmiennej <math>y</math>) spełnia formułę <math>\phi </math>. | wartościowanie (bez zmiennej <math>y</math>) spełnia formułę <math>\phi</math>. | ||
Analogicznie, jesli <math>C_j</math> składa się tylko z jednego literału, to | Analogicznie, jesli <math>C_j</math> składa się tylko z jednego literału, to | ||
Linia 137: | Linia 133: | ||
dopuszczeniu klauzul o co najwyżej dwóch literałach, 2SAT, jest | dopuszczeniu klauzul o co najwyżej dwóch literałach, 2SAT, jest | ||
problemem obliczeniowo łatwym. Dowód tego faktu odkładamy do | problemem obliczeniowo łatwym. Dowód tego faktu odkładamy do | ||
następnej lekcji. | |||
===MAXSAT=== | ===MAXSAT=== | ||
Linia 149: | Linia 145: | ||
przeciwieństwie do SAT, pozostawia ten problem trudnym. | przeciwieństwie do SAT, pozostawia ten problem trudnym. | ||
{{twierdzenie|[MAX2SAT]|| | {{twierdzenie|2.2 [MAX2SAT]|tw 2.2| | ||
Problem MAX2SAT jest NP-zupełny. | Problem MAX2SAT jest NP-zupełny. | ||
}} | }} | ||
Linia 162: | Linia 158: | ||
# <math>(a\vee \neg z)(b\vee \neg z)(c\vee \neg z)</math> | # <math>(a\vee \neg z)(b\vee \neg z)(c\vee \neg z)</math> | ||
Tych 10 klauzul ma | Tych 10 klauzul ma następujące własności: | ||
# Jeśli <math>a=b=c=0</math>, to niezależnie od wartości zmiennej <math>z</math> co najwyżej 6 klauzul jest spełnionych. | # Jeśli <math>a=b=c=0</math>, to niezależnie od wartości zmiennej <math>z</math> co najwyżej 6 klauzul jest spełnionych. | ||
Linia 192: | Linia 188: | ||
jeden z końców w zbiorze <math>V'</math>. | jeden z końców w zbiorze <math>V'</math>. | ||
{{Problem| NODE COVER|| | {{Problem|[NODE COVER]|| | ||
''Wejście:'' Graf nieskierowany <math>G=(V,E)</math>, liczba całkowita <math>k\leq|V|</math> | ''Wejście:'' Graf nieskierowany <math>G=(V,E)</math>, liczba całkowita <math>k\leq|V|</math> | ||
Linia 198: | Linia 194: | ||
NIE w przeciwnym przypadku. | NIE w przeciwnym przypadku. | ||
}} | }} | ||
{{twierdzenie|[Problem NODE COVER]|| | {{twierdzenie|3.1 [Problem NODE COVER]|tw 3.1| | ||
Problem NODE COVER jest NP-zupełny. | Problem NODE COVER jest NP-zupełny. | ||
}} | }} | ||
[[File:ZO-5-1.svg|350x250px|thumb|right|Redukcja 3SAT do NODE COVER]] | |||
<!-- [[rys_5_1.jpg(Redukcja 3SAT do NODE COVER)]] --> | |||
{{dowod||| | {{dowod||| | ||
Dla podanego podzbioru zbioru wierzchołków bardzo łatwo sprawdzić | Dla podanego podzbioru zbioru wierzchołków bardzo łatwo sprawdzić, | ||
czy stanowi on pokrycie, zatem <math> NODE COVER\in NP</math>. | czy stanowi on pokrycie, zatem <math>NODE COVER\in NP</math>. | ||
Redukujemy problem 3SAT do NODE COVER. Na wejściu mamy formułę | Redukujemy problem 3SAT do NODE COVER. Na wejściu mamy formułę | ||
Linia 214: | Linia 213: | ||
literałów przeciwnych wystepujących w różnych klauzulach | literałów przeciwnych wystepujących w różnych klauzulach | ||
odpowiadające im wierzchołki łączymy krawędzią. Na koniec, kładziemy | odpowiadające im wierzchołki łączymy krawędzią. Na koniec, kładziemy | ||
<math>k=2m</math>. | <math>k=2m</math> (patrz rysunek [http://osilek.mimuw.edu.pl/images/c/c4/ZO-5-1.swf Redukcja 3SAT do NODE COVER]). | ||
Teraz należy wykazać, że formuła wejsciowa jest spełnialna wtedy i | Teraz należy wykazać, że formuła wejsciowa jest spełnialna wtedy i | ||
tylko wtedy gdy wygenerowany graf ma pokrycie wierzchołkowe o | tylko wtedy, gdy wygenerowany graf ma pokrycie wierzchołkowe o | ||
liczności <math>k</math>. Z ograniczenia na wielkość pokrycia wynika, że z | liczności <math>k</math>. Z ograniczenia na wielkość pokrycia wynika, że z | ||
każdego trójkąta do pokrycia muszą być wybrane dokładnie dwa | każdego trójkąta do pokrycia muszą być wybrane dokładnie dwa | ||
Linia 232: | Linia 227: | ||
odpowiadającego zaprzeczeniu literału wierzchołka <math>v</math>, zatem literał | odpowiadającego zaprzeczeniu literału wierzchołka <math>v</math>, zatem literał | ||
wierzchołka <math>w</math> ma wartość zero i <math>w</math> jest wybrane do pokrycia w | wierzchołka <math>w</math> ma wartość zero i <math>w</math> jest wybrane do pokrycia w | ||
trójkącie w którym występuje. Zatem krawędź <math>(v, w)</math> też jest | trójkącie, w którym występuje. Zatem krawędź <math>(v, w)</math> też jest | ||
pokryta. | pokryta. | ||
W drugą stronę, załóżmy, że dane jest pokrycie. W każdym trójkącie, | 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ść | dla wierzchołka, który nie jest w pokryciu, ustawiamy wartość | ||
odpowiedniej zmiennej tak aby literał w tym wierzchołku był równy 1. | 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 | 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 | 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 | różnych trójkątów połączonych krawędzią. Co najmniej jeden z tych | ||
Linia 248: | Linia 243: | ||
}} | }} | ||
===Klika, zbiór niezależny=== | |||
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> | |||
''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.}} | |||
{{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.}} | |||
{{cwiczenie|3.1|cw 3.1| | |||
Wykaż, że problem INDEPENDENT SET 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">Wskazówka </span><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>? | |||
</div></div> | |||
<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"> Dopeł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> | |||
{{cwiczenie|3.2|cw 3.2| | |||
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.}} | |||
{{cwiczenie|3.3|cw 3.3| | |||
Wykaż, że problem CLIQUE 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">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> Rozważ dopełnienie grafu. | |||
</div></div> | |||
<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"> Redukcja 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=== | ===Cykl i ścieżka Hamiltona=== | ||
{{Problem| HAMILTONIAN CYCLE|| | {{Problem|[HAMILTONIAN CYCLE]|| | ||
''Wejście:'' Graf nieskierowany <math>G=(V,E)</math> | ''Wejście:'' Graf nieskierowany <math>G=(V,E)</math> | ||
Linia 260: | Linia 289: | ||
}} | }} | ||
{{twierdzenie|[Cykl Hamiltona]|| | {{twierdzenie|3.2 [Cykl Hamiltona]|tw 3.2| | ||
CYKL HAMILTONA jest NP-zupełny. | CYKL HAMILTONA jest NP-zupełny. | ||
}} | }} | ||
[[File:ZO-5-2.svg|250x250px|thumb|right|Gadżet dla HC.]] | |||
<!-- [[rys_5_2.jpg (gadżet dla HC)]] --> | |||
[[File:ZO-5-3.svg|250x250px|thumb|right|Gadżety i cykl Hamiltona.]] | |||
<!-- [[rys_5_3.jpg (gadżety i cykl Hamiltona)]] --> | |||
[[File:ZO-5-4.gif|350x350px|thumb|right|Ścieżki gadżetów i cykl Hamiltona.]] | |||
<!-- [[rys_5_4.jpg (ścieżki gadżetów i cykl Hamiltona)]] --> | |||
{{dowod||| | {{dowod||| | ||
Przynależnośc do klasy NP jest oczywista. Konstruujemy redukcje z | Przynależnośc do klasy NP jest oczywista. Konstruujemy redukcje z | ||
problemu NODE COVER. | problemu NODE COVER. Na wejściu mamy nieskierowany graf <math>G=(V,E)</math> | ||
oraz liczbę całkowitą <math>k\leq |V|</math>. Oznaczmy graf wynikowy jako | oraz liczbę całkowitą <math>k\leq |V|</math>. Oznaczmy graf wynikowy jako | ||
<math>G'=(V',E')</math>. | <math>G'=(V',E')</math>. | ||
Redukcja przeprowadzona jest techniką gadżetu (w literaturze | Redukcja przeprowadzona jest techniką gadżetu (w literaturze | ||
angielskiej | angielskiej używa sie również terminu ''widget''). Gadżet to | ||
fragment struktury wynikowej | fragment struktury wynikowej o określonych własnościach. W naszym | ||
przypadku pierwszym krokiem redukcji jest wygenerowanie, dla każdej | przypadku pierwszym krokiem redukcji jest wygenerowanie, dla każdej | ||
krawędzi <math>(u,v)\in E</math> gadżetu <math>G_{uv}=(V_{uv}, E_{uv})</math> będącego | krawędzi <math>(u,v)\in E</math>, gadżetu <math>G_{uv}=(V_{uv}, E_{uv})</math> będącego | ||
grafem przedstawionym na rysunku 5 | grafem przedstawionym na rysunku [http://osilek.mimuw.edu.pl/images/f/f1/ZO-5-2.swf Gadżet dla HC]. | ||
Jedynie narożne wierzchołki grafu <math>G_{uv}</math> będą połączone z | 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 | 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 | Hamiltona, to musi on przechodzić przez <math>G_{uv}</math> tylko na jeden z | ||
przedstawionych na rysunku | przedstawionych na rysunku ''Gadżety i cykl Hamiltona'' sposobów. Konstrukcja gadżetu | ||
uniemożliwia inne usytuowanie cyklu Hamiltona względem <math>G_{uv}</math>. | uniemożliwia inne usytuowanie cyklu Hamiltona względem <math>G_{uv}</math> (rysunek [http://osilek.mimuw.edu.pl/images/6/69/ZO-5-3.swf Gadżety i cykl Hamiltona]). | ||
Drugi krok redukcji to wygenerowanie krawędzi w <math>G'</math> łączących | 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 \in V</math> | gadżety w tak zwane ścieżki. Dla każdego wierzchołka <math>v \in V</math> | ||
najpierw porządkujemy dowolnie wszystkie jego sąsiednie wierzchołki, | najpierw porządkujemy dowolnie wszystkie jego sąsiednie wierzchołki, | ||
oznaczmy je przez <math>u_v^1, | oznaczmy je przez <math>u_v^1,\ldots,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 | wierzchołkowi <math>v</math>, łączącej wszystkie gadżety odpowiadające | ||
krawędziom incydentnym z <math>v</math>, dokonuje | krawędziom incydentnym z <math>v</math>, dokonuje się przez dołączenie do <math>G'</math> | ||
zbioru krawędzi postaci | zbioru krawędzi postaci | ||
<center><math>E_v=\{([v,u_v^i,6],[v,u_v^{i+1},1]), i=1,\ldots,d(v)-1\}</math></center> | <center><math>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 | 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 | 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>. | odpowiadającej wierzchołkowi <math>v</math>, dla każdego <math>v</math>. | ||
<center><math>E_S=\{(s_i,[v,u_v^1,1]):v\in V, 1\leq i\leq k \} | <center><math>E_S=\{(s_i,[v,u_v^1,1]):v\in V, 1\leq i\leq k \} | ||
\{(s_i,[v,u_v^d(v),6]):v\in V, 1\leq i\leq k</math></center> | \{(s_i,[v,u_v^d(v),6]):v\in V, 1\leq i\leq k</math></center> | ||
Kładziemy zatem | Kładziemy zatem | ||
<center><math>V'=\bigcup_{(uv)\in E}V_{uv}\cup\{s_j, 1\leq j\leq k\}</math></center> | <center><math>V'=\bigcup_{(uv)\in E}V_{uv}\cup\{s_j, 1\leq j\leq k\}</math></center> | ||
<center><math>E'=\bigcup_{(uv)\in E}E_{uv}\cup \bigcup_{v\in V}E_v \cup E_S | <center><math>E'=\bigcup_{(uv)\in E}E_{uv}\cup \bigcup_{v\in V}E_v \cup E_S | ||
</math></center> | </math></center> | ||
W animacji [http://osilek.mimuw.edu.pl/images/b/b7/ZO-5-4.swf Ścieżki gadżetów i cykl Hamiltona] pokazano graf o 4 wierzchołkach i rezultat redukcji. | |||
Zacieniowane zostały dwa wierzchołki grafu, które tworzą pokrycie. | |||
Pogrubione krawędzie tworzą cykl Hamiltona. Zaczynając od selektora | |||
<math>s_1</math>, przechodzimy do początku ścieżki odpowiadającej pierwszemu | |||
Zacieniowane zostały dwa wierzchołki grafu które tworzą pokrycie. | |||
Pogrubione krawędzie | |||
<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 | 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 | ścieżce wracamy do <math>s_2</math>, a stąd do początku ścieżki odpowiadającej | ||
drugiemu węzłowi z pokrycia, <math>y</math>. | 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 | Wykażemy, że <math>G'</math> ma cykl Hamiltona wtedy i tylko wtedy, gdy <math>G</math> ma | ||
pokrycie o liczności <math>k</math>. | pokrycie o liczności <math>k</math>. | ||
Załóżmy, że <math>G'</math> ma cykl Hamiltona i prześledźmy jego bieg | 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 | 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 | cyklu musi być początkiem (lub końcem - załóżmy to pierwsze) ścieżki | ||
gadżetów dla pewnego wierzchołka <math>v_1\in V</math>. Dodajemy <math>v_1</math> do generowanego pokrycia. Zgodnie z własnością gadżetu, cykl przebiega | gadżetów dla pewnego wierzchołka <math>v_1\in 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 | 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 | 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 | ścieżki, odpowiadającej wierzchołkowi <math>v_2</math>. Dodajemy <math>v_2</math> do | ||
Linia 341: | Linia 363: | ||
wrócić do <math>s_1</math>. Ponieważ cykl Hamiltona przeszedł przez wszystkie | 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 | 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, | wybrane w ten sposób wierzchołki <math>v_1,\ldots,v_k</math> stanowią pokrycie. | ||
Teraz załóżmy, że <math>G</math> ma pokrycie <math>\{v_1, | Teraz załóżmy, że <math>G</math> ma pokrycie <math>\{v_1,\ldots,v_k\}</math>. Konstruujemy | ||
cykl Hamiltona w <math>G'</math>. Zaczynamy od selektora <math>s_1</math> i przechodzimy | 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 | 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 | <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ę | ś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ę | 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ż | (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 | 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 | 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 | będzie ścieżka dla <math>u_{v_1}^i</math> również można było przejść przez | ||
Linia 359: | Linia 381: | ||
Ostatnim krokiem dowodu jest stwierdzenie, że konstrukcję grafu <math>G'</math> | Ostatnim krokiem dowodu jest stwierdzenie, że konstrukcję grafu <math>G'</math> | ||
można wykonać posługując się pamięcią roboczą rozmiaru | można wykonać, posługując się pamięcią roboczą rozmiaru | ||
logarytmicznego. Wynika to, jak i w poprzednich dowodach, z tego że | logarytmicznego. Wynika to, jak i w poprzednich dowodach, z tego że | ||
maszynie wystarcza pamięć na licznik położenia w wejściowym grafie | maszynie wystarcza pamięć na licznik położenia w wejściowym grafie | ||
Linia 369: | Linia 391: | ||
Bardzo podobny w sformułowaniu jest problem ścieżki Hamiltona | Bardzo podobny w sformułowaniu jest problem ścieżki Hamiltona | ||
(HAMILTONIAN PATH). Na weściu jest graf nieskierowany, na wyjściu | (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 | jest TAK, jeśli w grafie istnieje ścieżka przechodząca przez każdy | ||
wierzchołek dokładnie raz. Oczywiste jest że istnienie cyklu | wierzchołek dokładnie raz. Oczywiste jest, że istnienie cyklu | ||
Hamiltona implikuje istnienie ścieżki Hamiltona, jednak są to różne | Hamiltona implikuje istnienie ścieżki Hamiltona, jednak są to różne | ||
problemy, i NP- | problemy, i NP-zupełność tego drugiego wymaga osobnego dowodu. Tym | ||
niemniej, na przykładzie tych problemów można pokazać pewne techniki | niemniej, na przykładzie tych problemów można pokazać pewne techniki | ||
dowodzenia NP-zupełności w takich przypadkach. Jedną z nich jest | dowodzenia NP-zupełności w takich przypadkach. Jedną z nich jest | ||
Linia 378: | Linia 400: | ||
drugą zaś redukcja z problemu podobnego. | drugą zaś redukcja z problemu podobnego. | ||
{{twierdzenie|[HAMILTONIAN PATH]|| | {{twierdzenie|3.3 [HAMILTONIAN PATH]|tw 3.3| | ||
Problem HAMILTONIAN PATH jest NP-zupełny. | Problem HAMILTONIAN PATH jest NP-zupełny. | ||
}} | }} | ||
{{cwiczenie||| | {{cwiczenie|3.4|cw 3.4| | ||
Metoda 1: zmodyfikuj konstrukcję grafu <math>G'</math> w dowodzie NP-zupełności | 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 CYCLE tak, aby stanowił dowód NP-zupełności | ||
problemu HAMILTONIAN PATH. | problemu HAMILTONIAN PATH. | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> Należy "wymusić" rozpoczęcie i zakończenie ścieżki dodatkowymi selektorami. </div></div> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <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"> | ||
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 | |||
końcami wszystkich ścieżek. | |||
go z <math>s_{k+1}</math>. Jeśli graf wynikowy posiada ścieżkę Hamiltona, to | 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ęść | jej końcami muszą być selektory <math>s_0</math> i <math>s_{k+2}</math>. Pozostała część | ||
rozumowania jest analogiczna. | rozumowania jest analogiczna. | ||
</div></div> | </div></div> | ||
{{cwiczenie||| | |||
{{cwiczenie|3.5|cw 3.5| | |||
Metoda 2: Skonstruuj redukcję z problemu CYKL HAMILTONA. | Metoda 2: Skonstruuj redukcję z problemu CYKL HAMILTONA. | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | |||
Dodaj nowe wierzchołki które będą końcami ścieżki Hamiltona i powiąż je odpowiednio z innymi wierzchołkami. </div></div> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <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"> | ||
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 następnie 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 się 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.</div></div> | |||
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 | |||
nowy wierzchołek <math>u_1</math> do <math>v</math> i jeszcze jeden nowy <math>u_2</math> do <math>v'</math>. | |||
Łatwo | |||
(koniecznie o końcach <math>u_1, u_2</math>) wtedy i tylko wtedy gdy w | |||
oryginalnym grafie istnieje cykl Hamiltona.</div></div> | |||
==Problemy na zbiorach i liczbach== | ==Problemy na zbiorach i liczbach== | ||
Linia 436: | Linia 450: | ||
Uogólnienie do trzech wymiarów utrudnia problem radykalnie. | Uogólnienie do trzech wymiarów utrudnia problem radykalnie. | ||
{{twierdzenie|[TRIPARTITE MATCHING]|| | {{twierdzenie|4.1 [TRIPARTITE MATCHING]|tw 4.1| | ||
Problem TRIPARTITE MATCHING jest NP-zupełny. | Problem TRIPARTITE MATCHING jest NP-zupełny. | ||
}} | }} | ||
[[File:ZO-5-5.svg|250x250px|thumb|right|Gadżet redukcji 3SAT do 3DM.]] | |||
<!-- [[rys_5_5.jpg (gadżet redukcji 3SAT do 3DM)]] --> | |||
{{dowod||| | {{dowod||| | ||
Ponownie mamy do czynienia z dość skomplikowaną konstrukcją | Ponownie mamy do czynienia z dość skomplikowaną konstrukcją | ||
Linia 459: | Linia 475: | ||
Przykładowy gadżet dla zmiennej <math>u</math> | Przykładowy gadżet dla zmiennej <math>u</math> w przypadku, gdy liczba klauzul | ||
wynosi <math>m=4</math> pokazano na rysunku 5. | wynosi <math>m=4</math> pokazano na rysunku [http://osilek.mimuw.edu.pl/images/c/c2/ZO-5-5.swf Gadżet redukcji 3SAT do 3DM]. Grubą linią zaznaczono trójki | ||
ze zbioru | ze zbioru. | ||
Dla każdego gadżetu pierwsze elementy trójek, <math>w_1^u,\ldots,w_m^u</math>, | Dla każdego gadżetu pierwsze elementy trójek, <math>w_1^u,\ldots,w_m^u</math>, | ||
występują jeszcze w innych trójkach, które za chwilę zdefiniujemy. | występują jeszcze w innych trójkach, które za chwilę zdefiniujemy. | ||
Pozostałe elementy | Pozostałe elementy występują tylko w danym gadżecie. Zatem, jeśli | ||
wybrano skojarzenie, to dla ustalonego gadżetu to skojarzenie | 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 ''false'' i pozostawi niepokryte elementy <math>w</math> o indeksach parzystych. Wybór przeciwny ustali wartościowanie <math>u</math> na ''true'' i pozostawi niepokryte elementy <math>w</math> o indeksach nieparzystych. Sytuacja taka została przedstawiona na rysunku | 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 ''false'' i pozostawi niepokryte elementy <math>w</math> o indeksach parzystych. Wybór przeciwny ustali wartościowanie <math>u</math> na ''true'' i pozostawi niepokryte elementy <math>w</math> o indeksach nieparzystych. Sytuacja taka została przedstawiona na rysunku ''Gadżet redukcji 3SAT do 3DM'', pogrubioną linią zaznaczono wybór trójek <math>T_u^t</math>. | ||
Trójki które zdefiniujemy teraz mogą być nazwane "składową | Trójki, które zdefiniujemy, teraz mogą być nazwane "składową | ||
testowania". Skojarzą one niepokryte elementy z gadżetów z | testowania". Skojarzą one niepokryte elementy z gadżetów z | ||
odpowiednimi wystąpieniami literałów w klauzulach. Dla każdej | odpowiednimi wystąpieniami literałów w klauzulach. Dla każdej | ||
Linia 477: | Linia 491: | ||
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 | 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 | musi być niepokryty trójkami z odpowiedniego gadżetu. Ale to oznacza, | ||
że wartość danego literału jest ''true'', czyli klauzula <math>C_j</math> | że wartość danego literału jest ''true'', czyli klauzula <math>C_j</math> | ||
jest spełniona. Innymi słowy, możliwość pokrycia elementów <math>a_j, | jest spełniona. Innymi słowy, możliwość pokrycia elementów <math>a_j, | ||
Linia 496: | Linia 510: | ||
Na podstawie opisanej konstrukcji i komentarzy jej towarzyszących | Na podstawie opisanej konstrukcji i komentarzy jej towarzyszących | ||
możemy | możemy już łatwo stwierdzić, że formuła wejściowa posiada | ||
wartościowanie spełniające wtedy i tylko wtedy gdy utworzony w | wartościowanie spełniające wtedy i tylko wtedy, gdy utworzony w | ||
wyniku redukcji zbiór trójek ma skojarzenie. | wyniku redukcji zbiór trójek ma skojarzenie. | ||
}} | }} | ||
Rozważmy jeszcze trzy podobne problemy na zbiorach. Ich NP-zupełność | Rozważmy jeszcze trzy podobne problemy na zbiorach. Ich NP-zupełność | ||
stanie | stanie się oczywista, gdy zauważymy, że stanowią one kolejne | ||
uogólnienia problemu trójdzielnego skojarzenia. | uogólnienia problemu trójdzielnego skojarzenia. | ||
{{Problem|[EXACT COVER BY 3-SETS (pokrycie trójelementowymi podzbiorami)]|| | {{Problem|[EXACT COVER BY 3-SETS (pokrycie trójelementowymi podzbiorami)]|| | ||
''Wejście: ''Rodzina <math>\ | ''Wejście: ''Rodzina <math>\mathcal {F}</math> trójelementowych podzbiorów zbioru | ||
<math>X</math> | <math>X</math>, | ||
takiego że <math>|X|=3k</math> dla pewnej calkowitej <math>k</math><br> | takiego że <math>|X|=3k</math> dla pewnej calkowitej <math>k</math><br> | ||
''Wyjście: ''TAK | ''Wyjście: ''TAK, jeśli istnieje podrodzina <math>\mathcal{ F' }\subseteq \mathcal | ||
F</math> taka, że każdy element zbioru <math>X</math> należy do dokładnie jednego zbioru rodziny <math>\ | {F}</math> taka, że każdy element zbioru <math>X</math> należy do dokładnie jednego zbioru rodziny <math>\mathcal{F''}</math>, | ||
NIE w przeciwnym przypadku<br> | NIE w przeciwnym przypadku.<br> | ||
}} | }} | ||
{{cwiczenie||| | {{cwiczenie|4.1|cw 4.1| | ||
Wykaż że EXACT COVER BY 3-SETS jest NP-zupełny. | 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"> | <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 | Zauważ, że jeśli ograniczymy się do instancji, w których X jest | ||
podzielone na trzy rozłączne równoliczne zbiory, a wszystkie | podzielone na trzy rozłączne równoliczne zbiory, a wszystkie | ||
podzbiory w rodzinie <math>F</math> | podzbiory w rodzinie <math>F</math> zawierają po jednym elemencie z każdego z | ||
tych trzech podzbiorów, to otrzymujemy problem TRIPARTITE MATCHING | tych trzech podzbiorów, to otrzymujemy problem TRIPARTITE MATCHING | ||
(formalnie są to izomorficzne struktury). Zatem EXACT COVER BY | (formalnie są to izomorficzne struktury). Zatem EXACT COVER BY | ||
Linia 535: | Linia 549: | ||
która pokrywa cały zbiór <math>|X|</math>, w przeciwnym przypadku NIE.<br> | która pokrywa cały zbiór <math>|X|</math>, w przeciwnym przypadku NIE.<br> | ||
}} | }} | ||
{{cwiczenie||| | {{cwiczenie|4.2|cw 4.2| | ||
Wykaż NP-zupełność problemu SET COVERING. | Wykaż NP-zupełność problemu SET COVERING. | ||
}} | }} | ||
Linia 549: | Linia 563: | ||
Teraz zajmiemy się kilkoma problemami związanymi z liczbami. | Teraz zajmiemy się kilkoma problemami związanymi z liczbami. | ||
Najwięcej trudu będzie kosztować udowodnienie NP-zupełności | Najwięcej trudu będzie kosztować udowodnienie NP-zupełności | ||
pierwszego z nich | pierwszego z nich - następne pójdą już łatwiej. Ta pierwsza | ||
trudność zasadza się na tym, że jak do tej pory dowodziliśmy | 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 | NP-zupełność tylko dla problemów, w których tak naprawdę nie ma | ||
liczb, jako elementów struktury kombinatorycznej. Oczywiście, każde | liczb, jako elementów struktury kombinatorycznej. Oczywiście, każde | ||
słowo wejściowe może | słowo wejściowe może być traktowane jako liczba, kod maszyny Turinga | ||
też jest liczbą. Tutaj jednak chodzi o naturalne sformułowanie | |||
problemu, w odniesieniu do obiektów abstrakcyjnych takich jak | problemu, w odniesieniu do obiektów abstrakcyjnych takich, jak: | ||
liczby, funkcje, relacje, grafy itd. Problematyka trudności | liczby, funkcje, relacje, grafy itd. Problematyka trudności | ||
obliczeniowej problemów z liczbami jest rozwinięta w następnej | obliczeniowej problemów z liczbami jest rozwinięta w następnej | ||
Linia 563: | Linia 577: | ||
''Wejście: ''Skończony zbiór <math>A</math> elementów, dla każdego elementu | ''Wejście: ''Skończony zbiór <math>A</math> elementów, dla każdego elementu | ||
<math>a\in A</math> waga <math>s(a)\in Z^+</math> oraz liczba <math>B\in Z^+</math>. <br> | <math>a\in A</math> waga <math>s(a)\in Z^+</math> oraz liczba <math>B\in Z^+</math>. <br> | ||
''Wyjście: ''TAK jeśli istnieje podzbiór <math>A'\subseteq A</math> taki że | ''Wyjście: ''TAK, jeśli istnieje podzbiór <math>A'\subseteq A</math> taki że | ||
<math>\sum_{a\in A'}s(a) = B</math>, NIE w przeciwnym przypadku. <br> | <math>\sum_{a\in A'}s(a) = B</math>, NIE w przeciwnym przypadku. <br> | ||
}} | }} | ||
{{twierdzenie|[SUBSET SUM]|| | {{twierdzenie|4.2 [SUBSET SUM]|tw 4.2| | ||
Problem SUBSET SUM jest NP-zupełny. | Problem SUBSET SUM jest NP-zupełny. | ||
}} | }} | ||
Linia 573: | Linia 587: | ||
Skonstruujemy redukcję z problemu EXACT COVER BY 3 SETS. Na wejściu | Skonstruujemy redukcję z problemu EXACT COVER BY 3 SETS. Na wejściu | ||
mamy zatem zbiór <math>X</math> o liczności <math>3m</math> i rodzinę | mamy zatem zbiór <math>X</math> o liczności <math>3m</math> i rodzinę | ||
<math>F=\{U_1,\ldots,U_n\} </math> jego podzbiorów. Naszym zadaniem jest | <math>F=\{U_1,\ldots,U_n\}</math> jego podzbiorów. Naszym zadaniem jest | ||
skonstruować zbiór <math>Y</math> elementów z pewnymi wagami oraz liczbę B | skonstruować zbiór <math>Y</math> elementów z pewnymi wagami oraz liczbę B | ||
taką, że istnienie podzbioru w <math>Y</math> o sumie wag elementów równej <math>B</math> "wymusza" istnienie pokrycia zbioru <math>X</math> wybranymi rozłącznymi podzbiorami z rodziny <math>F</math>. | taką, że istnienie podzbioru w <math>Y</math> o sumie wag elementów równej <math>B</math> "wymusza" istnienie pokrycia zbioru <math>X</math> wybranymi rozłącznymi podzbiorami z rodziny <math>F</math>. | ||
Linia 579: | Linia 593: | ||
Niech <math>p=\lceil\log_2(n+1)\rceil</math>. Najpierw ustalamy porządek | Niech <math>p=\lceil\log_2(n+1)\rceil</math>. Najpierw ustalamy porządek | ||
elementów w zbiorze <math>|X|</math> i zapisujemy każdy zbiór <math>U_j</math> jako wektor <math>3m</math>-bitowy (czyli jest to struktura danych - wektor bitowy - reprezentująca podzbiór danego zbioru). W każdym wektorze są | elementów w zbiorze <math>|X|</math> i zapisujemy każdy zbiór <math>U_j</math> jako wektor <math>3m</math>-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 <math>p-1</math> bitów zerowych i traktujemy ten wektor | oczywiście 3 bity równe 1 a pozostałe są zerowe. Następnie przed każdym bitem wstawiamy dodatkowo <math>p-1</math> bitów zerowych i traktujemy ten wektor jako liczbę zapisaną binarnie. Powstaje w ten sposób <math>n</math> liczb <math>3mp</math>-bitowych - są to wagi elementów zbioru Y. Liczba <math>B</math> jest również takiej długości, powstaje przez wypisanie <math>3m</math> jedynek, a następnie wstawienie przed każdą jedynką <math>p-1</math> zer. | ||
jest również takiej długości, powstaje przez wypisanie <math>3m</math> jedynek | |||
a następnie wstawienie przed każdą jedynką <math>p-1</math> zer. | |||
Jeśli istnieje podrodzina <math>F'\subseteq F</math> stanowiąca rozłączne | Jeśli istnieje podrodzina <math>F'\subseteq F</math> stanowiąca rozłączne | ||
Linia 588: | Linia 600: | ||
Bloki zer dodane przed każdym bitem reprezentacji wektorowej | Bloki zer dodane przed każdym bitem reprezentacji wektorowej | ||
podzbioru gwarantują, że sumując dowolny podzbiór wygenerowanych | podzbioru gwarantują, że sumując dowolny podzbiór wygenerowanych | ||
liczb nie napotkamy na przeniesienie poza taki blok zer. A zatem, | liczb, nie napotkamy na przeniesienie poza taki blok zer. A zatem, | ||
jeśli istnieje podzbiór liczb dający w sumie <math>B</math>, to wszystkie te | jeśli istnieje podzbiór liczb dający w sumie <math>B</math>, to wszystkie te | ||
liczby w swoich rozwinięciach binarnych zawierają w sumie tyle | liczby w swoich rozwinięciach binarnych zawierają w sumie tyle | ||
jedynek ile jest ich w <math>B</math>, na różnych pozycjach. A więc | jedynek, ile jest ich w <math>B</math>, na różnych pozycjach. A więc | ||
odpowiadajace tym liczbom podzbiory pokrywają cały zbiór <math>X</math>. | odpowiadajace tym liczbom podzbiory pokrywają cały zbiór <math>X</math>. | ||
Linia 604: | Linia 616: | ||
{{Problem|[PARTITION (podział)]|| | {{Problem|[PARTITION (podział)]|| | ||
''Wejście: ''Skończony zbiór <math>A</math> elementów oraz dodatnia całkowita | ''Wejście: ''Skończony zbiór <math>A</math> elementów oraz dodatnia całkowita | ||
waga <math>s(a)</math> każdego elementu<br> | waga <math>s(a)</math> każdego elementu.<br> | ||
''Wyjście: ''TAK jeśli istnieje podzbiór <math>A'\subseteq A</math> taki że | ''Wyjście: ''TAK, jeśli istnieje podzbiór <math>A'\subseteq A</math>, taki że | ||
<math>\sum_{a\in A'}s(a) = \sum_{a\in A-A'}s(a)</math>, NIE w przeciwnym | <math>\sum_{a\in A'}s(a) = \sum_{a\in A-A'}s(a)</math>, NIE w przeciwnym | ||
przypadku. | przypadku. | ||
}} | }} | ||
{{cwiczenie||| | {{cwiczenie|4.3|cw 4.3| | ||
Wykaż NP-zupełność problemu podziału. | Wykaż NP-zupełność problemu podziału. | ||
}} | }} | ||
Linia 622: | Linia 634: | ||
<math>b_2</math>, <math>s(b_1)=2S-B, s(b_2)=S+B</math>. Łatwo sprawdzić, że: | <math>b_2</math>, <math>s(b_1)=2S-B, s(b_2)=S+B</math>. Łatwo sprawdzić, że: | ||
* | * jeśli w zbiorze <math>A</math> istnieje podzbiór <math>A'</math> o sumie równej <math>B</math>, to podzbiór ten z dołączonym elementem <math>b_1</math> daje sumę równą <math>2S</math>, tyle co pozostałe elementy uzupełnione o <math>b_2</math>, | ||
* jeśli w zbiorze <math>A\cup \{b_1,b_2\}</math> istnieje podział na 2 | * jeśli w zbiorze <math>A\cup \{b_1,b_2\}</math> istnieje podział na 2 podzbiory o jednakowych wagach, to elementy <math>b_1</math> i <math>b_2</math> są w różnych podzbiorach, bo ich wagi sumują się do <math>3S</math>. W tym podzbiorze, do którego należy <math>b_1</math> suma wag pozostałych elementów wynosi <math>B</math>. | ||
podzbiory o jednakowych wagach, to elementy <math>b_1</math> i <math>b_2</math> | |||
podzbiorze do którego należy <math>b_1</math> suma wag pozostałych elementów | |||
wynosi <math>B</math>. | |||
</div></div> | </div></div> | ||
Linia 634: | Linia 643: | ||
''Wejście: ''Skończony zbiór <math>A</math> elementów, rozmiar <math>s(a)\in Z^+</math> | ''Wejście: ''Skończony zbiór <math>A</math> elementów, rozmiar <math>s(a)\in Z^+</math> | ||
i wartość <math>v(a)\in Z^+</math> dla każdego elementu, ograniczenie | i wartość <math>v(a)\in Z^+</math> dla każdego elementu, ograniczenie | ||
pojemności <math>B\in Z^+</math> oraz żądana wartość <math>K\in Z^+</math><br> | pojemności <math>B\in Z^+</math> oraz żądana wartość <math>K\in Z^+</math>.<br> | ||
''Wyjście: ''TAK jeśli istnieje podzbiór <math>A'\subseteq A</math> taki że | ''Wyjście: ''TAK, jeśli istnieje podzbiór <math>A'\subseteq A</math>, taki że | ||
<math>\sum_{a\in A'}s(a) \leq B</math> oraz <math>\sum_{a\in A}v(a)\geq K</math>, NIE w | <math>\sum_{a\in A'}s(a) \leq B</math> oraz <math>\sum_{a\in A}v(a)\geq K</math>, NIE w | ||
przeciwnym przypadku. | przeciwnym przypadku. | ||
}} | }} | ||
{{cwiczenie||| | {{cwiczenie|4.4|cw 4.4| | ||
Pokaż że KNAPSACK jest NP-zupełny. | Pokaż że KNAPSACK jest NP-zupełny. | ||
}} | }} | ||
Linia 649: | Linia 658: | ||
<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"> | <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"> | ||
Jeśli założymy, że rozmiary elementów są równe ich wartościom, a | Jeśli założymy, że rozmiary elementów są równe ich wartościom, a | ||
pojemność plecaka jest równa żądanej wartości, to otrzymamy problem | |||
SUBSET SUM. | SUBSET SUM. | ||
</div></div> | </div></div> | ||
Linia 659: | Linia 668: | ||
dowodzimy NP-zupełności, otrzymujemy instancje znanego problemu | dowodzimy NP-zupełności, otrzymujemy instancje znanego problemu | ||
NP-zupełnego. W ten sposób wykazujemy, że nasz problem jest | NP-zupełnego. W ten sposób wykazujemy, że nasz problem jest | ||
uogólnieniem problemu znanego, a więc jest | uogólnieniem problemu znanego, a więc nie jest od niego łatwiejszy. Przykłady | ||
takich redukcji zastosowaliśmy do problemów: EXACT COVER BY 3SETS, | takich redukcji zastosowaliśmy do problemów: EXACT COVER BY 3SETS, | ||
SET COVERING, KNAPSACK. | SET COVERING, KNAPSACK. | ||
Linia 665: | Linia 674: | ||
Pozostałe dowody można by zaliczyć do metody gadżetów. Fragmenty | Pozostałe dowody można by zaliczyć do metody gadżetów. Fragmenty | ||
instancji problemu wejściowego przekształca się we fragmenty | instancji problemu wejściowego przekształca się we fragmenty | ||
instancji probelmu wynikowego (gadżety) | instancji probelmu wynikowego (gadżety) i wiąże się zależnościami | ||
(innymi gadżetami), których zachodzenie w problemie wynikowym ma | (innymi gadżetami), których zachodzenie w problemie wynikowym ma | ||
mieć ścisłe odzwierciedlenie w spełnieniu wymagań problemu | mieć ścisłe odzwierciedlenie w spełnieniu wymagań problemu | ||
Linia 676: | Linia 685: | ||
==Ćwiczenia końcowe== | ==Ćwiczenia końcowe== | ||
{{cwiczenie||| | {{cwiczenie|6.1|cw 6.1| | ||
Wykaż, że następujący problem izomorfizmu podgrafu jest NP-zupełny: | Wykaż, że następujący problem izomorfizmu podgrafu jest NP-zupełny: | ||
}} | |||
{{Problem|[SUBGRAPH ISOMORPHISM]|| | |||
''Wejście: ''<math>G_1=(V_1, E_1)</math>, <math>G_2=(V_2, E_2)</math> - grafy nieskierowane<br> | ''Wejście: ''<math>G_1=(V_1, E_1)</math>, <math>G_2=(V_2, E_2)</math> - grafy nieskierowane.<br> | ||
''Wyjście: ''TAK jeśli <math>G_1</math> ma podgraf izomorficzny z <math>G_2</math>, NIE | ''Wyjście: ''TAK, jeśli <math>G_1</math> ma podgraf izomorficzny z <math>G_2</math>, NIE | ||
w przeciwnym przypadku.<br> | w przeciwnym przypadku.<br> | ||
}} | }} | ||
Linia 692: | Linia 701: | ||
<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"> | <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"> | ||
Jest to proste ugólnienie problemu CLIQUE: szczególnym przypadkiem | Jest to proste ugólnienie problemu CLIQUE: szczególnym przypadkiem | ||
podgrafu o który pytamy w problemie SUBGRAPH ISOMORPHISM jest klika | podgrafu, o który pytamy w problemie SUBGRAPH ISOMORPHISM jest klika | ||
o liczności <math>k</math> o | o liczności <math>k</math>, o którą pytamy w problemie CLIQUE. | ||
</div></div> | </div></div> | ||
{{cwiczenie||| | {{cwiczenie|6.2|cw 6.2| | ||
W tym ćwiczeniu pytamy o trudność obliczeniową problemu pochodzącego z teorii szergowania. Wykaż, że NP-zupełny jest następujący problem: | W 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ń <math>T</math>, dla każdego zadania <math>t</math> trzy liczby całkowite: długość zadania <math>l(t)> 0</math>, moment pojawienia się <math>r(t)\geq 0</math>,oraz ograniczenie czasowe <math>d(t)>0</math><br> | ''Wejście: ''Zbiór zadań <math>T</math>, dla każdego zadania <math>t</math> trzy liczby całkowite: długość zadania <math>l(t)> 0</math>, moment pojawienia się <math>r(t)\geq 0</math>,oraz ograniczenie czasowe <math>d(t)>0</math><br> | ||
''Wyjście: ''TAK, jeśli wszystkie zadania można wykonać na jednym | ''Wyjście: ''TAK, jeśli wszystkie zadania można wykonać na jednym | ||
Linia 718: | Linia 727: | ||
Redukcja z problemu SUBSET SUM za pomocą bardzo prostych gadżetów. | Redukcja z problemu SUBSET SUM za pomocą bardzo prostych gadżetów. | ||
Niech <math>s_1, \ldots,s_n</math> oraz <math>B</math> będą odpowiednio wagami elementów | Niech <math>s_1, \ldots,s_n</math> oraz <math>B</math> będą odpowiednio wagami elementów | ||
oraz | oraz żądaną sumą podzbioru elementów. Niech <math>D=\sum_{i=1}^n s_i</math>. | ||
Konstruujemy <math>n+1</math> zadań, przy czym dla <math>i=1,\ldots,n</math> zadanie <math>t_i</math> | Konstruujemy <math>n+1</math> zadań, przy czym dla <math>i=1,\ldots,n</math> zadanie <math>t_i</math> | ||
ma długość <math>l_i=s_i</math>, czas gotowości <math>r_i=0</math> oraz granicę <math>d_i=D+1</math>. | ma długość <math>l_i=s_i</math>, czas gotowości <math>r_i=0</math> oraz granicę <math>d_i=D+1</math>. | ||
Zadanie <math>t_{n+})</math> jest "wymuszaczem podziału" | Zadanie <math>t_{n+})</math> jest "wymuszaczem podziału" o parametrach | ||
<math>l_i=1</math>, <math>r_i=B</math>, <math>d_i=B+1</math>. | <math>l_i=1</math>, <math>r_i=B</math>, <math>d_i=B+1</math>. | ||
Zadania <math>s_1, \ldots,s_n</math> mają pozorną swobodę wykonywania sie w | Zadania <math>s_1, \ldots,s_n</math> mają pozorną swobodę wykonywania sie w | ||
dowolnym miejscu osi czasu, zauważmy jednak że każde ulokowanie | dowolnym miejscu osi czasu, zauważmy jednak, że każde ulokowanie | ||
wszystkich zadań nie zostawia żadnej luki na osi. Dla wymuszacza | wszystkich zadań nie zostawia żadnej luki na osi. Dla wymuszacza | ||
jest tylko jedna możliwa wartość alokacji, <math>B</math>. Takie położenie | jest tylko jedna możliwa wartość alokacji, <math>B</math>. Takie położenie | ||
dzieli cały przedział, w którym | dzieli cały przedział, w którym mogą być wykonywane zadania, na dwa | ||
podprzedziały, rozdzielone wymuszaczem. Jeden z tych przedziałów ma | podprzedziały, rozdzielone wymuszaczem. Jeden z tych przedziałów ma | ||
długość <math>B</math>, zatem ulokowanie zadań na osi, zgodne z warunkami | długość <math>B</math>, zatem ulokowanie zadań na osi, zgodne z warunkami | ||
zadania, jest możliwe wtedy i tylko wtedy gdy istnieje podzbiór | zadania, jest możliwe wtedy i tylko wtedy, gdy istnieje podzbiór | ||
zbioru elementów w instancji problemu SUBSET SUM, | zbioru elementów w instancji problemu SUBSET SUM, których wagi dają w | ||
sumie <math>B</math>. | sumie <math>B</math>. | ||
</div></div> | </div></div> | ||
{{cwiczenie||| | {{cwiczenie|6.3|cw 6.3| | ||
Problem cięcia w grafie zdefiniowany jest następująco: | Problem cięcia w grafie zdefiniowany jest następująco: | ||
}} | |||
{{Problem|[FEEDBACK VERTEX SET]|| | |||
''Wejście: ''Graf skierowany <math>G=(V, E)</math>, liczba całkowita <math>k, 0<k\geq |V|</math>.<br> | ''Wejście: ''Graf skierowany <math>G=(V, E)</math>, liczba całkowita <math>k, 0<k\geq |V|</math>.<br> | ||
''Wyjście: ''TAK jeśli istnieje w <math>G</math> podzbiór <math>k</math>-wierzchołkowy, | ''Wyjście: ''TAK, jeśli istnieje w <math>G</math> podzbiór <math>k</math>-wierzchołkowy, | ||
taki że graf pozostały po usunięciu tego podzbioru jest | taki że graf pozostały po usunięciu tego podzbioru jest | ||
acykliczny.<br> | acykliczny.<br> | ||
Linia 751: | Linia 760: | ||
Proponujemy pokrycie wierzchołkowe. Jak powinien wyglądać wynik | Proponujemy pokrycie wierzchołkowe. Jak powinien wyglądać wynik | ||
redukcji -- graf skierowany -- aby rozcinanie wszsytkich cykli przez | redukcji -- graf skierowany -- aby rozcinanie wszsytkich cykli przez | ||
usuwanie wierzchołków znaczyło to samo co definiowanie pokrycia w | usuwanie wierzchołków znaczyło to samo, co definiowanie pokrycia w | ||
grafie źródłowym? | grafie źródłowym? | ||
</div></div> | </div></div> | ||
Linia 766: | Linia 775: | ||
</div></div> | </div></div> | ||
{{cwiczenie||| | {{cwiczenie|6.4|cw 6.4| | ||
Kolorowanie (wierzchołkowe) grafu jest klasycznym problemem | Kolorowanie (wierzchołkowe) grafu jest klasycznym problemem | ||
optymalizacyjnym w teorii grafów. Przypomnijmy, że chodzi o | optymalizacyjnym w teorii grafów. Przypomnijmy, że chodzi o | ||
Linia 775: | Linia 784: | ||
Okazuje sie że nawet jeśli ustalimy żądaną liczbe kolorów na 3, to | 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 jest NP-zupełny. Dowód tego faktu nie jest natychmiastowy. | ||
}} | |||
{{Problem|[3COLORING]|| | |||
''Wejście: ''Graf nieskierowany <math>G=(V,E)</math>. <br> | ''Wejście: ''Graf nieskierowany <math>G=(V,E)</math>. <br> | ||
''Wyjście: ''TAK, jeśli istnieje funkcja <math>c : V \rightarrow | ''Wyjście: ''TAK, jeśli istnieje funkcja <math>c : V \rightarrow | ||
Linia 785: | Linia 794: | ||
}} | }} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | ||
Można użyć gadżetu przedstawionego na | Można użyć gadżetu przedstawionego na [http://osilek.mimuw.edu.pl/images/0/08/ZO-5-6.swf Rysunku 5.6]. | ||
[[File:ZO-5-6.svg|250x100|thumb|center|Rysunek 5.6.]] | |||
</div></div> | </div></div> | ||
Linia 797: | Linia 804: | ||
Gadżet ma następujące własności: | Gadżet ma następujące własności: | ||
* jeśli wierzchołkom <math>u,v,z</math> przypisano kolory tak, że co najmniej | * jeśli wierzchołkom <math>u,v,z</math> przypisano kolory tak, że co najmniej jeden z nich ma kolor 1, to istnieje uzupełnienie trójkolorowania pozostałych wierzchołków takie, że <math>c(z)=1</math> | ||
jeden z nich ma kolor 1, to istnieje uzupełnienie trójkolorowania pozostałych wierzchołków takie, że <math>c(z)=1</math> | |||
* jeśli w danym trójkolorowaniu <math>c(u)=c(v)=c(z)=0</math>, to również <math>c(z)=0</math>. | * jeśli w danym trójkolorowaniu <math>c(u)=c(v)=c(z)=0</math>, to również <math>c(z)=0</math>. | ||
[[File:ZO-5-7.mp4|350x350px|thumb|right|Animacja 5.7.]] | |||
Redukcję przeprowadzamy następująco: | Redukcję przeprowadzamy następująco: | ||
# generujemy wierzchołki <math>s,t,z</math> i | # generujemy wierzchołki <math>s,t,z</math> i trójkąt oparty na nich, | ||
# | # dla każdej zmiennej <math>x</math> występującej w instancji 3SAT definiujemy wierzchołki <math>x, \neg x</math> oraz trójkąt oparty na <math>x,\neg x</math> oraz <math>t</math>, | ||
wierzchołki <math>x, \neg x</math> oraz trójkąt oparty na <math>x,\neg x</math> oraz <math>t</math> | # dla każdej klauzuli <math>C_j=(u\vee v\vee w)</math> definiujemy kopię gadżetu, przy czym wierzchołki <math>u,v,w</math> to już wygenerowane w punkcie 2 wierzchołki literałów o tych samych nazwach, wierzchołek <math>z</math> został wygenerowany w kroku 1, natomiast pozostałe wierzchołki są nowe, unikalne dla każdej klauzuli. | ||
# dla każdej klauzuli <math>C_j=(u\vee v\vee w)</math> definiujemy kopię gadżetu, przy czym wierzchołki <math>u,v,w</math> to już wygenerowane w punkcie 2 wierzchołki literałów o tych samych nazwach, wierzchołek <math>z</math> został | |||
wygenerowany w kroku 1, natomiast pozostałe wierzchołki są nowe, | |||
unikalne dla każdej klauzuli | |||
Wykażemy, że formuła źródłowa ma spełniające wartościowanie wtedy i | |||
tylko wtedy, gdy wygenerowany graf można pokolorować trzema kolorami. | |||
tylko wtedy gdy wygenerowany graf można pokolorować trzema kolorami. | |||
Jeśli istnieje wartościowanie spełniające formułę, to | Jeśli istnieje wartościowanie spełniające formułę, to | ||
* kładziemy <math>c(s)=0</math>, <math>c(z)=1</math> <math>c(t)=2</math> | * kładziemy <math>c(s)=0</math>, <math>c(z)=1</math> <math>c(t)=2</math>, | ||
* kolorujemy każdy z wierzchołków <math>x_i, \neg x_i</math> jego wartością | * kolorujemy każdy z wierzchołków <math>x_i, \neg x_i</math> jego wartością logiczną, 0 lub 1, | ||
logiczną, 0 lub 1 | * uzupełniamy kolory 0, 1, i 2 w gadżetach - można to zrobić gdyż zadane wartościowanie spełnia formułę, a więc na wejściu do każdego gadżetu jest co najmniej jeden wierzchołek koloru 1. | ||
* uzupełniamy kolory 0, 1, i 2 w gadżetach - można to zrobić gdyż | |||
zadane wartościowanie spełnia formułę, a więc na wejściu do każdego | |||
gadżetu jest co najmniej jeden wierzchołek koloru 1 | |||
Jeśli zadane jest trójkolorowanie grafu, to obliczamy wartościowanie | Jeśli zadane jest trójkolorowanie grafu, to obliczamy wartościowanie | ||
spełniające formułę następująco: | spełniające formułę następująco: | ||
* kolory wierzchołków <math>s,t,z</math> są różne, więc umawiamy się, że <math>c(s)=0, c(t)=2, c(z)=1</math> | * kolory wierzchołków <math>s,t,z</math> są różne, więc umawiamy się, że <math>c(s)=0, c(t)=2, c(z)=1</math>, | ||
* dla każdej zmiennej <math>x_i</math> kładziemy wartość tej zmiennej równą | * dla każdej zmiennej <math>x_i</math> kładziemy wartość tej zmiennej równą <math>c(x_i)</math>. Ponieważ <math>c(t)=2</math> więc wartość ta wynosi 0 lub 1. | ||
<math>c(x_i)</math>. Ponieważ <math>c(t)=2</math> więc wartość ta wynosi 0 lub 1. | |||
Ponieważ <math>c(z)=1</math>, więc dla każdego gadżetu co najmniej jeden z jego | Ponieważ <math>c(z)=1</math>, więc dla każdego gadżetu co najmniej jeden z jego | ||
Linia 837: | Linia 836: | ||
</div></div> | </div></div> | ||
==Testy końcowe== |
Aktualna wersja na dzień 21:58, 15 wrz 2023
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ą tą 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 niż 3 literały, jest sam w sobie NP-zupełny, a dowód tego faktu jest dość łatwy.
Twierdzenie 2.1
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 następnej 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 2.2 [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ępujące 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 3.1 [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 (patrz rysunek 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 . 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.Ćwiczenie 3.1
Ćwiczenie 3.2
Ćwiczenie 3.3
Cykl i ścieżka Hamiltona
Wejście: Graf nieskierowany
Wyjście: TAK jeśli ma cykl Hamiltona, czyli cykl przchodzący przez każdy wierzchołek dokładnie raz, NIE w przeciwnym przypadku.
Twierdzenie 3.2 [Cykl Hamiltona]
CYKL HAMILTONA jest NP-zupełny.



Dowód
Przynależnośc do klasy NP jest oczywista. Konstruujemy redukcje z problemu NODE COVER. Na wejściu mamy nieskierowany graf oraz liczbę całkowitą . Oznaczmy graf wynikowy jako .
Redukcja przeprowadzona jest techniką gadżetu (w literaturze angielskiej używa sie również terminu 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 , gadżetu będącego grafem przedstawionym na rysunku Gadżet dla HC.
Jedynie narożne wierzchołki grafu będą połączone z wierzchołkami spoza . Stąd wynika, że jeśli ma cykl Hamiltona, to musi on przechodzić przez tylko na jeden z przedstawionych na rysunku Gadżety i cykl Hamiltona sposobów. Konstrukcja gadżetu uniemożliwia inne usytuowanie cyklu Hamiltona względem (rysunek Gadżety i cykl Hamiltona).
Drugi krok redukcji to wygenerowanie krawędzi w łączących gadżety w tak zwane ścieżki. Dla każdego wierzchołka najpierw porządkujemy dowolnie wszystkie jego sąsiednie wierzchołki, oznaczmy je przez , gdzie jest stopniem wierzchołka . Konstrukcja ścieżki odpowiadającej wierzchołkowi , łączącej wszystkie gadżety odpowiadające krawędziom incydentnym z , dokonuje się przez dołączenie do zbioru krawędzi postaci
Ostatni krok to dodanie wierzchołków-selektorów , i połączenie krawędzią każdego selektora z początkiem i końcem ścieżki odpowiadającej wierzchołkowi , dla każdego .
Kładziemy zatem
W animacji Ścieżki gadżetów i cykl Hamiltona pokazano graf o 4 wierzchołkach i rezultat redukcji. Zacieniowane zostały dwa wierzchołki grafu, które tworzą pokrycie. Pogrubione krawędzie tworzą cykl Hamiltona. Zaczynając od selektora , przechodzimy do początku ścieżki odpowiadającej pierwszemu wierzchołkowi z pokrycia, czyli . Po przejściu gadżetów na tej ścieżce wracamy do , a stąd do początku ścieżki odpowiadającej drugiemu węzłowi z pokrycia, .
Wykażemy, że ma cykl Hamiltona wtedy i tylko wtedy, gdy ma pokrycie o liczności .
Załóżmy, że ma cykl Hamiltona i prześledźmy jego bieg, zaczynając od (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 . Dodajemy 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 . Z musi przejść na początek lub koniec innej ścieżki, odpowiadającej wierzchołkowi . Dodajemy do pokrycia i kontynuujemy. Z ostatniej, -tej ścieżki, cykl musi wrócić do . Ponieważ cykl Hamiltona przeszedł przez wszystkie wierzchołki , a więc przez wszystkie gadżety , zatem wybrane w ten sposób wierzchołki stanowią pokrycie.
Teraz załóżmy, że ma pokrycie . Konstruujemy cykl Hamiltona w . Zaczynamy od selektora i przechodzimy na początek ścieżki związanej z , czyli do węzła . Przechodzimy przez kolejne gadżety aż do końca ścieżki. Dla danego gadżetu musimy podjąć decyzję, czy przechodzimy przez wszystkie wierzchołki, czy tylko przez połowę (jedną "ścianę"). Decyzja zależy od tego, czy 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 również można było przejść przez . Z ostatniego węzła na ścieżce przechodzimy do selektora i powtarzamy konstrukcję. Z ostatniego węzła na -tej ścieżce wracamy do , zamykając w ten sposób cykl Hamiltona.
Ostatnim krokiem dowodu jest stwierdzenie, że konstrukcję grafu 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 .

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ść tego drugiego 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 3.3 [HAMILTONIAN PATH]
Problem HAMILTONIAN PATH jest NP-zupełny.
Ćwiczenie 3.4
Metoda 1: zmodyfikuj konstrukcję grafu w dowodzie NP-zupełności problemu HAMILTONIAN CYCLE tak, aby stanowił dowód NP-zupełności problemu HAMILTONIAN PATH.
Ćwiczenie 3.5
Metoda 2: Skonstruuj redukcję z problemu 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:
Wejście: parami rozłączne równoliczne zbiory o mocy
oraz relacja
Wyjście: TAK, jeśli istnieje skojarzenie w , czyli podzbiór
taki, że dla dowolnych trójek
zachodzi
, oraz . NIE w przeciwnym przypadku.
Problem skojarzenia dwudzielnego jest obliczeniowo łatwy. Uogólnienie do trzech wymiarów utrudnia problem radykalnie.
Twierdzenie 4.1 [TRIPARTITE MATCHING]
Problem TRIPARTITE MATCHING jest NP-zupełny.

Dowód
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 nad zmiennymi . Najpierw dla każdej zmiennej konstruujemy gadżet , który będzie odpowiadał za wybór wartościowania tej zmiennej. Składa się on z dwóch zbiorów trójek:
Przykładowy gadżet dla zmiennej w przypadku, gdy liczba klauzul
wynosi pokazano na rysunku Gadżet redukcji 3SAT do 3DM. Grubą linią zaznaczono trójki
ze zbioru.
Dla każdego gadżetu pierwsze elementy trójek, , występują jeszcze w innych trójkach, które za chwilę zdefiniujemy. Pozostałe elementy występują tylko w danym gadżecie. Zatem, jeśli wybrano skojarzenie, to dla ustalonego gadżetu to skojarzenie zawiera albo cały zbiór i żadnej trójki z , albo na odwrót. W toku dalszego rozumowania, wybór do skojarzenia zbioru będzie oznaczał wartościowanie zmiennej na false i pozostawi niepokryte elementy o indeksach parzystych. Wybór przeciwny ustali wartościowanie na true i pozostawi niepokryte elementy o indeksach nieparzystych. Sytuacja taka została przedstawiona na rysunku Gadżet redukcji 3SAT do 3DM, pogrubioną linią zaznaczono wybór trójek .
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 składowa testowania zawiera 3 trójki odpowiadajace kolejnym literałom , zdefiniowane następująco: Jeśli to . Jeśli to . Analogicznie dla literałów .
Elementy występują tylko w trzech trójkach zbioru , 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 true, czyli klauzula jest spełniona. Innymi słowy, możliwość pokrycia elementów jest równoważna temu, że istnieje w klauzuli literał o wartości logicznej true.
Skojarzenie wybrane dla gadżetów ma liczność , składowa testowania daje kolejnych trójek w skojarzeniu, zatem ze wszystkich elementów na pierwszej współrzędnej (elementy ) pozostaje nieskojarzonych. Zatem w konstrukcji potrzebna jest jeszcze trzecia "składowa odśmiecania" zdefiniowana nastepująco:
Pozwala ona skojarzyć elementy pozostałe po wyborze
wartościowania i testu spełnialności.
Na podstawie opisanej konstrukcji i komentarzy jej towarzyszących możemy już ł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 się oczywista, gdy zauważymy, że stanowią one kolejne uogólnienia problemu trójdzielnego skojarzenia.
Wejście: Rodzina trójelementowych podzbiorów zbioru
,
takiego że dla pewnej calkowitej
Wyjście: TAK, jeśli istnieje podrodzina taka, że każdy element zbioru należy do dokładnie jednego zbioru rodziny ,
NIE w przeciwnym przypadku.
Ćwiczenie 4.1
Wykaż że EXACT COVER BY 3-SETS jest NP-zupełny.
Wejście: Rodzina podzbiorów zbioru
,
liczba całkowita
Wyjście: TAK, jeśli istnieje k-elementowa podrodzina rodziny
,
która pokrywa cały zbiór , w przeciwnym przypadku NIE.
Ćwiczenie 4.2
Wykaż NP-zupełność problemu SET COVERING.
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 być traktowane jako liczba, kod maszyny Turinga też 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.
Wejście: Skończony zbiór elementów, dla każdego elementu
waga oraz liczba .
Wyjście: TAK, jeśli istnieje podzbiór taki że
, NIE w przeciwnym przypadku.
Twierdzenie 4.2 [SUBSET SUM]
Problem SUBSET SUM jest NP-zupełny.
Dowód
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 jako liczbę 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.
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.
Ćwiczenie 4.3
Wykaż NP-zupełność problemu podziału.
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.
Ćwiczenie 4.4
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 nie jest od niego ł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
Ćwiczenie 6.1
Wykaż, że następujący problem izomorfizmu podgrafu jest NP-zupełny:
Wejście: , - grafy nieskierowane.
Wyjście: TAK, jeśli ma podgraf izomorficzny z , NIE
w przeciwnym przypadku.
Ćwiczenie 6.2
W tym ćwiczeniu pytamy o trudność obliczeniową problemu pochodzącego z teorii szergowania. Wykaż, że NP-zupełny jest następujący problem:
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 .
Ćwiczenie 6.3
Problem cięcia w grafie zdefiniowany jest następująco:
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.
Ćwiczenie 6.4
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.
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.