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 191: Linia 191:
Pierwszym z serii problemów grafowych, dla których udowodnimy
Pierwszym z serii problemów grafowych, dla których udowodnimy
NP-zupełność, jest problem pokrycia wierzchołkowego. Dla grafu
NP-zupełność, jest problem pokrycia wierzchołkowego. Dla grafu
nieskierowanego </math>G=(V,E)<math> mówimy, że podzbiór </math>V' V<math> jest
nieskierowanego <math>G=(V,E)</math> mówimy, że podzbiór <math>V'\subseteq V</math> jest
pokryciem wierzchołkowym, jeśli każda krawędź w G ma co najmniej
pokryciem wierzchołkowym, jeśli każda krawędź w G ma co najmniej
jeden z końców w zbiorze </math>V'<math>.
jeden z końców w zbiorze <math>V'</math>.


\bigskip \noindent {\bf Problem} NODE COVER\\
{{Problem| NODE COVER||
{\it Wejście:} Graf nieskierowany </math>G=(V,E)<math>, liczba całkowita </math>k
''Wejście:'' Graf nieskierowany <math>G=(V,E)</math>, liczba całkowita <math>k\leq|V|</math>
|V|<math>\\
 
{\it Wyjście}: TAK jeśli G ma pokrycie wierzchołkowe o liczności k,
''Wyjście:'' TAK jeśli G ma pokrycie wierzchołkowe o liczności k,
NIE w przeciwnym przypadku.
NIE w przeciwnym przypadku.
 
}}
{{twierdzenie|[Uzupelnij]||
{{twierdzenie|[Problem NODE COVER]||
Problem NODE COVER jest NP-zupełny.
Problem NODE COVER jest NP-zupełny.
}}
}}


{{dowod|[Uzupelnij]||
{{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} 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łę
</math>=C_1 ... C_m<math>, i zgodnie z uwagą poczyniona przy
<math>\phi=C_1\wedge ... \wedge C_m</math>, i zgodnie z uwagą poczyniona przy
dowodzie NP-zupełności 3SAT zakładamy, że każda alternatywa </math>C_j<math>
dowodzie NP-zupełności 3SAT zakładamy, że każda alternatywa <math>C_j</math>
zawiera dokładnie 3 różne literały. Konstruujemy graf następujący:
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
każde wystąpienie literału jest wierzchołkiem grafu, wystąpienia
Linia 217: Linia 217:
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>.
 
 
<center>[[rys_5_1.jpg(Redukcja 3SAT do NODE COVER)]]</center>


\vspace{1cm}
\begincenter
\includegraphics[width=12cm]{rys_5_1.jpg}\\
Redukcja 3SAT do NODE COVER
\endcenter
\vspace{1cm}


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
wierzchołki. Jeśli formuła jest spełnialna, to w każdym trójkącie
wierzchołki. Jeśli formuła jest spełnialna, to w każdym trójkącie
można wyróżnić jeden wierzchołek </math>v<math> odpowiadający literałowi
można wyróżnić jeden wierzchołek <math>v</math> odpowiadający literałowi
równemu 1. Do pokrycia wybieramy pozostałe dwa wierzchołki.
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
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ź,
wierzchołków krawędzie między trójkątami. Każda pozostała krawędź,
wychodząca z wierzchołka </math>v<math>, prowadzi do pewnego wierzchołka </math>w<math>
wychodząca z wierzchołka <math>v</math>, prowadzi do pewnego wierzchołka <math>w</math>
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.


Linia 251: Linia 248:


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


Linia 259: Linia 256:


\bigskip \noindent {\bf Problem} INDEPENDENT SET\\
\bigskip \noindent {\bf Problem} INDEPENDENT SET\\
{\it Wejście:} Graf nieskierowany </math>G=(V,E)<math>, liczba całkowita </math>k
{\it Wejście:} Graf nieskierowany <math>G=(V,E)<math>, liczba całkowita <math>k
|V|<math>\\
|V|<math>\\
{\it Wyjście}: TAK jeśli </math>G<math> ma zbiór niezależny (indukowany podgraf
{\it Wyjście}: TAK jeśli <math>G<math> ma zbiór niezależny (indukowany podgraf
bez krawędzi) o </math>k<math> wierzchołkach, NIE w przeciwnym przypadku.
bez krawędzi) o <math>k<math> wierzchołkach, NIE w przeciwnym przypadku.


\bigskip \noindent {\bf Problem} CLIQUE\\
\bigskip \noindent {\bf Problem} CLIQUE\\
{\it Wejście:} Graf nieskierowany </math>G=(V,E)<math>, liczba całkowita </math>k
{\it Wejście:} Graf nieskierowany <math>G=(V,E)<math>, liczba całkowita <math>k
|V|<math>\\
|V|<math>\\
{\it Wyjście}: TAK jeśli </math>G<math> ma podgraf pełny (klikę) o </math>k<math>
{\it Wyjście}: TAK jeśli <math>G<math> ma podgraf pełny (klikę) o <math>k<math>
wierzchołkach, NIE w przeciwnym przypadku.
wierzchołkach, NIE w przeciwnym przypadku.


Linia 274: Linia 271:
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ść
\beginhintJeś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
\beginsolutionDopeł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>


Linia 298: Linia 295:


\beginsolutionRedukcja z problemu INDEPENDENT SET. Graf wynikowy
\beginsolutionRedukcja 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>


Linia 304: Linia 301:


\bigskip \noindent {\bf Problem} HAMILTONIAN CYCLE\\
\bigskip \noindent {\bf Problem} HAMILTONIAN CYCLE\\
{\it Wejście:} Graf nieskierowany </math>G=(V,E)<math>\\
{\it Wejście:} Graf nieskierowany <math>G=(V,E)<math>\\
{\it Wyjście}: TAK jeśli </math>G<math> ma cykl Hamiltona, czyli cykl
{\it Wyjście}: TAK jeśli <math>G<math> ma cykl Hamiltona, czyli cykl
przchodzący przez każdy wierzchołek dokładnie raz, NIE w przeciwnym
przchodzący przez każdy wierzchołek dokładnie raz, NIE w przeciwnym
przypadku.
przypadku.
Linia 315: Linia 312:
{{dowod|[Uzupelnij]||
{{dowod|[Uzupelnij]||
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. na wejściu mamy nieskierowany graf </math>G=(V,E)<math>
problemu NODE COVER. na wejściu mamy nieskierowany graf <math>G=(V,E)<math>
oraz liczbę całkowitą </math>k |V|<math>. Oznaczmy graf wynikowy jako
oraz liczbę całkowitą <math>k |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
Linia 323: Linia 320:
fragment struktury wynikowej, o określonych własnościach. W naszym
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) E<math> gadżetu </math>G_{uv}=(V_{uv}, E_{uv})<math> będącego
krawędzi <math>(u,v) E<math> gadżetu <math>G_{uv}=(V_{uv}, E_{uv})<math> będącego
grafem przedstawionym na rysunku 5.2.
grafem przedstawionym na rysunku 5.2.


Linia 333: Linia 330:
\vspace{1cm}
\vspace{1cm}


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 5.3 sposobów. Konstrukcja gadżetu
przedstawionych na rysunku 5.3 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>.


\vspace{1cm}
\vspace{1cm}
Linia 346: Linia 343:
\vspace{1cm}
\vspace{1cm}


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  V<math>
gadżety w tak zwane ścieżki. Dla każdego wierzchołka <math>v  V<math>
najpierw porządkujemy dowolnie wszystkie jego sąsiednie wierzchołki,
najpierw porządkujemy dowolnie wszystkie jego sąsiednie wierzchołki,
oznaczmy je przez </math>u_v^1,...,u_v^{d(v)}<math>, gdzie </math>d(v)<math> jest
oznaczmy je przez <math>u_v^1,...,u_v^{d(v)}<math>, gdzie <math>d(v)<math> jest
stopniem wierzchołka </math>v<math>. Konstrukcja ścieżki odpowiadającej
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 sie przez dołączenie do </math>G'<math>
krawędziom incydentnym z <math>v<math>, dokonuje sie przez dołączenie do <math>G'<math>
zbioru krawędzi postaci
zbioru krawędzi postaci


\[E_v=\{([v,u_v^i,6],[v,u_v^{i+1},1]), i=1,\ldots,d(v)-1\}</math></center>
\[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>.


_S=(s_i,[v,u_v^1,1]):v V, 1 i k  
_S=(s_i,[v,u_v^1,1]):v V, 1 i k  
Linia 365: Linia 362:


Kładziemy zatem
Kładziemy zatem
\[V'=\bigcup_{(uv)\in E}V_{uv}\cup\{s_j, 1\leq j\leq k\}</math></center>
\[V'=\bigcup_{(uv)\in E}V_{uv}\cup\{s_j, 1\leq j\leq k\}<math></center>


'=_{(uv) E}E_{uv} _{v V}E_v  E_S<center><math>
'=_{(uv) E}E_{uv} _{v V}E_v  E_S<center><math>
Linia 379: Linia 376:
Zacieniowane zostały dwa wierzchołki grafu które tworzą pokrycie.
Zacieniowane zostały dwa wierzchołki grafu które tworzą pokrycie.
Pogrubione krawędzie tworza cykl Hamiltona. Zaczynając od selektora
Pogrubione krawędzie tworza cykl Hamiltona. Zaczynając od selektora
</math>s_1<math> przechodzimy do początku ścieżki odpowiadającej pierwszemu
<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 odpowiadajacej
ścieżce wracamy do <math>s_2<math>, a stąd do początku ścieżki odpowiadajacej
drugiemu węzłowi z pokrycia, </math>y<math>.
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 G 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 V<math>. Dodajemy </math>v_1<math> do
gadżetów dla pewnego wierzchołka <math>v_1 V<math>. Dodajemy <math>v_1<math> do
generowanego pokrycia. Zgodnie z własnością gadżetu, cykl przebiega
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
pokrycia i kontynuujemy. Z ostatniej, </math>k<math>-tej ścieżki, cykl musi
pokrycia i kontynuujemy. Z ostatniej, <math>k<math>-tej ścieżki, cykl musi
wrócić do </math>s_1<math>. Ponieważ cykl Hamiltona przeszedł przez wszystkie
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,...,v_k<math> stanowią pokrycie.
wybrane w ten sposób wierzchołki <math>v_1,...,v_k<math> stanowią pokrycie.


Teraz załóżmy, że </math>G<math> ma pokrycie </math>_1,...,v_k<math>. Konstruujemy
Teraz załóżmy, że <math>G<math> ma pokrycie <math>_1,...,v_k<math>. Konstruujemy
cykl Hamiltona w </math>G'<math>. Zaczynamy od selektora </math>s_1<math> i przechodzimy
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, jeśli
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
</math>G_{v_1u_{v_1}^i}<math>. Z ostatniego węzła na ścieżce przechodzimy do
<math>G_{v_1u_{v_1}^i}<math>. Z ostatniego węzła na ścieżce przechodzimy do
selektora </math>s_2<math> i powtarzamy konstrukcję. Z ostatniego węzła na
selektora <math>s_2<math> i powtarzamy konstrukcję. Z ostatniego węzła na
</math>k<math>-tej ścieżce wracamy do </math>s_1<math>, zamykając w ten sposób cykl
<math>k<math>-tej ścieżce wracamy do <math>s_1<math>, zamykając w ten sposób cykl
Hamiltona.
Hamiltona.


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
oraz licznik numeru (nazwy) generowanego wierzchołka i krawędzi
oraz licznik numeru (nazwy) generowanego wierzchołka i krawędzi
grafu </math>G'<math>.
grafu <math>G'<math>.


}}
}}
Linia 441: Linia 438:
====section====
====section====


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.
Linia 448: Linia 445:
selektorami}
selektorami}


\solution{Dodajemy selektor </math>s_0<math> i łączymy go krawędzią z </math>s_1<math>.
\solution{Dodajemy selektor <math>s_0<math> i łączymy go krawędzią z <math>s_1<math>.
następnie dodajemy selektor </math>s_{k+1}<math> i łączymy go z początkami i
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. na koniec dodajemy <math>s_{k+2}<math> i łączymy
go z </math>s_{k+1}<math>. Jeśli graf wynikowy posiada ścieżkę Hamiltona, to
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.}


Linia 464: Linia 461:
\solution{Nie prowadzi do celu narzucający się pomysł aby dowiązać 2
\solution{Nie prowadzi do celu narzucający się pomysł aby dowiązać 2
nowe wierzchołki do końców dowolnie ustalonej krawędzi. Skuteczna
nowe wierzchołki do końców dowolnie ustalonej krawędzi. Skuteczna
jest natomiast modyfikacja tej idei: wybrać dowolny wierzchołek </math>v<math>,
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
utworzyć wierzchołek <math>v'<math> o takim samym zbiorze sąsiadów w grafie
(inaczej: rozszczepić v na dwa identyczne), a nastepnie dołączyć
(inaczej: rozszczepić v na dwa identyczne), a nastepnie dołączyć
nowy wierzchołek </math>u_1<math> do </math>v<math> i jeszcze jeden nowy </math>u_2<math> do </math>v'<math>.
nowy wierzchołek <math>u_1<math> do <math>v<math> i jeszcze jeden nowy <math>u_2<math> do <math>v'<math>.
Łatwo sie przekonać że w nowym grafie istnieje ścieżka Hamiltona
Łatwo sie przekonać że w nowym grafie istnieje ścieżka Hamiltona
(koniecznie o końcach </math>u_1, u_2<math>) wtedy i tylko wtedy gdy w
(koniecznie o końcach <math>u_1, u_2<math>) wtedy i tylko wtedy gdy w
oryginalnym grafie istnieje cykl Hamiltona.}
oryginalnym grafie istnieje cykl Hamiltona.}


Linia 480: Linia 477:


\bigskip \noindent {\bf Problem }TRIPARTITE MATCHING\\
\bigskip \noindent {\bf Problem }TRIPARTITE MATCHING\\
{\it Wejście: }parami rozłączne równoliczne zbiory </math>W,X,Y<math> o mocy
{\it Wejście: }parami rozłączne równoliczne zbiory <math>W,X,Y<math> o mocy
</math>p>0<math> oraz relacja </math>R W X Y<math>\\
<math>p>0<math> oraz relacja <math>R W X Y<math>\\
{\it Wyjście: }TAK, jeśli istnieje skojarzenie w </math>R<math>, czyli podzbiór
{\it Wyjście: }TAK, jeśli istnieje skojarzenie w <math>R<math>, czyli podzbiór
</math>R'  R<math> taki, że dla dowolnych trójek
<math>R'  R<math> taki, że dla dowolnych trójek
</math>(w,x,y),(w',x',y') R<math> zachodzi
<math>(w,x,y),(w',x',y') R<math> zachodzi
</math>w w'<math>, </math>x x'<math> oraz </math>y y'<math>. NIE w przeciwnym przypadku.\\
<math>w w'<math>, <math>x x'<math> oraz <math>y y'<math>. NIE w przeciwnym przypadku.\\


Problem skojarzenia dwudzielnego jest obliczeniowo łatwy.
Problem skojarzenia dwudzielnego jest obliczeniowo łatwy.
Linia 499: Linia 496:
problemu.
problemu.


Na wejściu mamy zbiór klauzul </math>C=_1,...,C_m<math> nad zmiennymi
Na wejściu mamy zbiór klauzul <math>C=_1,...,C_m<math> nad zmiennymi
</math>U=_1,...,u_n<math>. Najpierw dla każdej zmiennej </math>u U<math>
<math>U=_1,...,u_n<math>. Najpierw dla każdej zmiennej <math>u U<math>
konstruujemy gadżet </math>T_u<math>, który będzie odpowiadał za wybór
konstruujemy gadżet <math>T_u<math>, który będzie odpowiadał za wybór
wartościowania tej zmiennej. Składa się on z dwóch zbiorów trójek:
wartościowania tej zmiennej. Składa się on z dwóch zbiorów trójek:
\[T_u^t=\{(w_{2j}^u,x_j^u,y_j^u), 1\leq j\leq m\}</math></center>
\[T_u^t=\{(w_{2j}^u,x_j^u,y_j^u), 1\leq j\leq m\}<math></center>


_u^f=(w_{2j+1}^u,x_{j+1}^u,y_j^u), 1 j<m(w_1^u,x_1^u,y_m^u)<center><math>
_u^f=(w_{2j+1}^u,x_{j+1}^u,y_j^u), 1 j<m(w_1^u,x_1^u,y_m^u)<center><math>


Przykładowy gadżet dla zmiennej </math>u<math>, w przypadku gdy liczba klauzul
Przykładowy gadżet dla zmiennej <math>u<math>, w przypadku gdy liczba klauzul
wynosi </math>m=4<math> pokazano na rysunku 5.5. Grubą linią zaznaczono trójki
wynosi <math>m=4<math> pokazano na rysunku 5.5. Grubą linią zaznaczono trójki
ze zbioru
ze zbioru


Linia 518: Linia 515:
\vspace{1cm}
\vspace{1cm}


Dla każdego gadżetu pierwsze elementy trójek, </math>w_1^u,...,w_m^u<math>,
Dla każdego gadżetu pierwsze elementy trójek, <math>w_1^u,...,w_m^u<math>,
występują jeszcze w innych trójkach, które za chwilę zdefiniujemy.
występują jeszcze w innych trójkach, które za chwilę zdefiniujemy.
Pozostałe elementy występuja tylko w danym gadżecie. Zatem, jeśli
Pozostałe elementy występuja 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
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
odwrót. W toku dalszego rozumowania, wybór do skojarzenia zbioru
</math>T_u^f<math> będzie oznaczał wartościowanie zmiennej </math>u<math> na {\it false} i
<math>T_u^f<math> będzie oznaczał wartościowanie zmiennej <math>u<math> na {\it false} i
pozostawi niepokryte elementy </math>w<math> o indeksach parzystych. Wybór
pozostawi niepokryte elementy <math>w<math> o indeksach parzystych. Wybór
przeciwny ustali wartościowanie </math>u<math> na {\it true} i pozostawi
przeciwny ustali wartościowanie <math>u<math> na {\it true} i pozostawi
niepokryte elementy </math>w<math> o indeksach nieparzystych. Sytuacja taka
niepokryte elementy <math>w<math> o indeksach nieparzystych. Sytuacja taka
została przedstawiona na rysunku 5.5, pogrubioną linią zaznaczono
została przedstawiona na rysunku 5.5, pogrubioną linią zaznaczono
wybór trójek </math>T_u^t<math>.
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
klauzuli </math>C_j=(p_j q_j r_j)<math> składowa testowania </math>S_j<math>
klauzuli <math>C_j=(p_j q_j r_j)<math> składowa testowania <math>S_j<math>
zawiera 3 trójki </math>s_j^1,s_j^2,s_j^3<math> odpowiadajace kolejnym
zawiera 3 trójki <math>s_j^1,s_j^2,s_j^3<math> odpowiadajace kolejnym
literałom </math>p,q,r<math>, zdefiniowane następująco: Jeśli </math>p=u_i<math> to
literałom <math>p,q,r<math>, zdefiniowane następująco: Jeśli <math>p=u_i<math> to
</math>s_j^1=(w_{2j-1}^u,a_j, b_j)<math>. Jeśli </math>p= u_i<math> to
<math>s_j^1=(w_{2j-1}^u,a_j, b_j)<math>. Jeśli <math>p= u_i<math> to
</math>s_j^1=(w_{2j}^u,a_j,b_j)<math>. Analogicznie dla literałów </math>q, r<math>.
<math>s_j^1=(w_{2j}^u,a_j,b_j)<math>. Analogicznie dla literałów <math>q, r<math>.


Elementy </math>a_j, b_j<math> występują tylko w trzech trójkach zbioru </math>S_j<math>,
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
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
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 {\it true}, czyli klauzula </math>C_j<math>
że wartość danego literału jest {\it true}, czyli klauzula <math>C_j<math>
jest spełniona. Innymi słowy, możliwość pokrycia elementów </math>a_j,
jest spełniona. Innymi słowy, możliwość pokrycia elementów <math>a_j,
b_j<math> jest równoważna temu, że istnieje w klauzuli </math>C_j<math> literał o
b_j<math> jest równoważna temu, że istnieje w klauzuli <math>C_j<math> literał o
wartości logicznej {\it true}.
wartości logicznej {\it true}.


Skojarzenie wybrane dla gadżetów ma liczność </math>nm<math>, składowa
Skojarzenie wybrane dla gadżetów ma liczność <math>nm<math>, składowa
testowania daje kolejnych </math>m<math> trójek w skojarzeniu, zatem ze
testowania daje kolejnych <math>m<math> trójek w skojarzeniu, zatem ze
wszystkich </math>2nm<math> elementów na pierwszej współrzędnej (elementy </math>u<math>)
wszystkich <math>2nm<math> elementów na pierwszej współrzędnej (elementy <math>u<math>)
</math>(n-1)m<math> pozostaje nieskojarzonych. Zatem w konstrukcji potrzebna
<math>(n-1)m<math> pozostaje nieskojarzonych. Zatem w konstrukcji potrzebna
jest jeszcze trzecia "składowa odśmiecania" zdefiniowana
jest jeszcze trzecia "składowa odśmiecania" zdefiniowana
nastepująco:
nastepująco:


\[G=\{(w_i^u,g_k,h_k):u\in U, 1\leq i\leq 2m, 1\leq k\leq (n-1)m\}</math></center>
\[G=\{(w_i^u,g_k,h_k):u\in U, 1\leq i\leq 2m, 1\leq k\leq (n-1)m\}<math></center>


Pozwala ona skojarzyć elementy <math>u</math> pozostałe po wyborze
Pozwala ona skojarzyć elementy <math>u<math> pozostałe po wyborze
wartościowania i testu spełnialności.
wartościowania i testu spełnialności.


Linia 572: Linia 569:


'''Problem '''EXACT COVER BY 3-SETS (pokrycie trójelementowymi podzbiorami)<br>
'''Problem '''EXACT COVER BY 3-SETS (pokrycie trójelementowymi podzbiorami)<br>
''Wejście: ''Rodzina <math>\cal F</math> trójelementowych podzbiorów zbioru
''Wejście: ''Rodzina <math>\cal 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 jesli istnieje podrodzina <math>\cal F' \subseteq \cal
''Wyjście: ''TAK jesli istnieje podrodzina <math>\cal F' \subseteq \cal
F</math> taka, że każdy element zbioru <math>X</math> należy do dokładnie jednego zbioru rodziny <math>\cal F"</math>,
F<math> taka, że każdy element zbioru <math>X<math> należy do dokładnie jednego zbioru rodziny <math>\cal F"<math>,
NIE w przeciwnym przypadku<br>
NIE w przeciwnym przypadku<br>


Linia 586: Linia 583:
Zauważ, że jeśli ograniczymy sie do instancji w których X jest
Zauważ, że jeśli ograniczymy sie 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> zawieraja po jednym elemencie z każdego z
podzbiory w rodzinie <math>F<math> zawieraja 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 594: Linia 591:


'''Problem''' SET COVERING (pokrycie zbiorami)<br>
'''Problem''' SET COVERING (pokrycie zbiorami)<br>
''Wejście: ''Rodzina <math>F=\{S_1,\ldots,S_n\}</math> podzbiorów zbioru
''Wejście: ''Rodzina <math>F=\{S_1,\ldots,S_n\}<math> podzbiorów zbioru
<math>|X|</math>,
<math>|X|<math>,
liczba całkowita <math>k\leq n</math><br>
liczba całkowita <math>k\leq n<math><br>
''Wyjście: ''TAK, jeśli istnieje k-elementowa podrodzina rodziny
''Wyjście: ''TAK, jeśli istnieje k-elementowa podrodzina rodziny
<math>F</math>,
<math>F<math>,
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>


====section====
====section====
Linia 607: Linia 604:
<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">  
Ponownie przez ograniczenie do podproblemu: jeśli założymy że
Ponownie przez ograniczenie do podproblemu: jeśli założymy że
<math>|X|=3k</math> a wszystkie zbiory rodziny <math>F</math> są 3-elementowe, to
<math>|X|=3k<math> a wszystkie zbiory rodziny <math>F<math> są 3-elementowe, to
otrzymujemy problem EXACT COVER BY 3-SETS.
otrzymujemy problem EXACT COVER BY 3-SETS.
</div></div>
</div></div>

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

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

Twierdzenie [Uzupelnij]

Problem SUBSET SUM jest NP-zupełny.

Dowód [Uzupelnij]

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

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

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

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

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

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

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

section

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

Wskazówka
Rozwiązanie

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

section

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

Wskazówka
Rozwiązanie

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

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

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

Ćwiczenia końcowe

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

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

Wskazówka
Rozwiązanie

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

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

Wskazówka
Rozwiązanie

section

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

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

Wskazówka
Rozwiązanie

section

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

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

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

Wskazówka
Rozwiązanie