Test Arka: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arek (dyskusja | edycje)
Nie podano opisu zmian
Arek (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
{| border=1
{article}
|+ <span style="font-variant:small-caps">Uzupełnij tytuł</span>
|-
| column 1 entry  ||  column 2 entry ...  ||  column n entry
|-
| column 1 entry  ||  column 2 entry ...  ||  column n entry


|}
{}{0.5cm} {}{0.8cm} {}{ -0.4cm} {}{ -0.4cm} {}{1mm}  


{proof}{ ''Dowód: ''}{ <math>\square</math>}
{hint}{ ''Wskazówka: ''}{}
{solution}{ ''Rozwiązanie: ''}{}


<hr>
Złożoność obliczeniowa


{}
Moduł 5
{}


==Odległość i ciągi w <math>\displaystyle\mathbb{R}^N.</math> Ćwiczenia==
Problemy NP-zupełne


{{cwiczenie||
==Wstęp==
Wykazać, że funkcje <math>d_{\infty}</math> i <math>d_1</math> zdefiniowane
na  <math>\displaystyle\mathbb{R}^N\times\mathbb{R}^N</math>
jako


<center><math>\aligned
Jak czytelnikowi wiadomo, w aktualnym stanie wiedzy NP-zupełność
d_{\infty}(x,y)
jest podstawowym narzędziem do badania probelu algorytmicznego pod
& \ \stackrel{df}{=}\  &
kątem jego trudności obliczeniowej. Na tym wykładzie dla wielu
\max_{i=1,\ldots, N}|x_i-y_i|,
znanych klasycznych problemów z teorii grafów, kombinatoryki, logiki
\qquad\textrm{dla}\quad x,y\in\mathbb{R}^N,\\
i innych podajemy definicje ich decyzyjnych wersji i wykazujemy ich
d_1(x,y)
NP-zupełność. Z problematyką ta spotkaliśmy się już na kursie ''Algorytmy i struktury danych''. Tutaj rozbudowujemy te wiadomości,
& \ \stackrel{df}{=}\  &
czynimy je bardziej formalnymi posługując się modelem maszyny
\sum_{i=1}^{N}|x_i-y_i|
Turinga i redukcją logarytmiczną. Na przedstawionych przykładach
\qquad\textrm{dla}\quad x,y\in\mathbb{R}^N,
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ń.


\endaligned</math></center>
==O problemie SAT==


są metrykami
Aby wykazać, że dany problem <math>Q</math> z klasy NP jest NP-zupełny, zgodnie
(patrz Przykłady [[##p.new.am1.w.03.050|Uzupelnic p.new.am1.w.03.050|]] i [[##p.new.am1.w.03.060|Uzupelnic p.new.am1.w.03.060|]]).<br>
z własnościami redukcji logarytmicznej (przechodniość) wystarcza
pokazać, dla dowolnego problemu <math>Q' \in NPC</math>, że <math>Q'</math> redukuje się
do <math>Q</math>. Innymi słowy, proces dowodzenia że dany problem <math>Q</math> jest w
NPC składa sie z nastepujących kroków:
 
* dowieść że <math>Q</math> należy do NP
 
* 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
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|[Uzupelnij]||
Problem 3SAT jest NP-zupełny.
}}
}}


{black}
{{dowod|[Uzupelnij]||
Problem 3SAT, jako podproblem problemu w klasie NP, sam należy do
NP, zatem pierwsza część dowodu jest za nami.


<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">
Konstruujemy redukcję z problemu SAT do 3SAT. Na wejściu mamy
Wszystkie trzy warunki definicji metryki są łatwe do
formułe <math>\phi = C_1 \wedge \ldots \wedge C_m</math> nad zmiennymi
sprawdzenia.
<math>x_1,\ldots,x_n</math>. Każdą z klauzul <math>C_j</math> przekształcamy osobno. Bez
W nierówności trójkąta należy wykorzystać
straty ogólności załóżmy, że <math>C_j = x_1\vee\ldots\vee x_k</math>, gdzie
nierówność dla wartości bezwzględnej w <math>\displaystyle\mathbb{R}</math>
<math>x_i, i=1,\ldots,k</math> są parami różne. Jeśli <math>k\leq 3</math> to kładziemy
(to znaczy nierówność trójkąta
<math>D_j = C_j</math>.
dla metryki euklidesowej w <math>\displaystyle\mathbb{R}</math>).
{}<math>\Box</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">
Niech <math>k>3</math>. Dodajemy <math>k-3</math> nowych zmiennych <math>y_2, \ldots, y_{k-2}</math>,
Sprawdźmy trzy warunki z definicji metryki dla <math>d_{\infty}</math>:<br>
i zastepujemy <math>C_j</math> przez
Dla <math>x,y\in\mathbb{R}^N</math> mamy
_j <nowiki>=</nowiki> (x_1 x_2 y_2)( y_2 x_3 y_3)
( y_3 x_4 y_4)  ...
( y_{k-2} x_{k-1} x_k)<center><math>


<center><math>\aligned
Nietrudno spostrzec, że jeśli </math>C_j<math> jest spełniona przez pewne
d_{\infty}(x,y)=0
wartościowanie zmiennych </math>x_1,...,x_k<math>, to da się tak dobrać
& \Longleftrightarrow &
wartości dla zmiennych </math>y_2,...,y_{k-2}<math>, aby spełnione były
\max_{i=1,\ldots, N}|x_i-y_i|=0
wszystkie klauzule w </math>D_j<math>. Na odwrót, jeśli </math>D_j<math> jest spełniona
\ \Longleftrightarrow\
dla pewnego wartościowania zmiennych
|x_1-y_1|=\ldots=|x_N-y_N|=0\\
</math>x_1,...,x_k,y_2,...,y_{k-2}<math>, to łatwo wydedukować, że
& \Longleftrightarrow &
</math>x_i<nowiki>=</nowiki>1<math> dla pewnego </math>1 i  k<math>. Mianowicie, jeśli </math>x_1<nowiki>=</nowiki>x_2<nowiki>=</nowiki>0<math>,
\big[x_1=y_1,\ \ldots,\ x_N=y_N\big]
to z pierwszej klauzuli w </math>D_j<math> wynika że </math>y_2<nowiki>=</nowiki>1<math>. Ale wtedy z
\ \Longleftrightarrow\
drugiej klauzuli mamy </math>x_3<nowiki>=</nowiki>1<math> lub </math>y_3<nowiki>=</nowiki>1<math>. W pierwszym przypadku
x=y.
rozumowanie jest zakończone, w drugim przenosimy rozumowanie na
trzecią klauzulę i tak dalej.


\endaligned</math></center>
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
</math>C_j<math> oraz licznik wygenerowanych do tej pory nowych zmiennych.
}}


Wobec tego, że <math>|a-b|=|b-a|</math>,
{{uwaga|[Uzupelnij]||
dla <math>x,y\in\mathbb{R}^N</math>  mamy
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.


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


d_{\infty}(x,y)
{{uwaga|[Uzupelnij]||
\ =\
W literaturze przyjmuje sie również nieco inną definicję problemu
\max_{i=1,\ldots, N}|x_i-y_i|
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
\max_{i=1,\ldots, N}|y_i-x_i|
otrzymujemy przez uzupełnienie dowodu powyższego w następujący
\ =\
sposób:
d_{\infty}(x,y)
</math></center>


zatem spełniony jest warunek symetrii.<br>
Załóżmy że </math>k<nowiki>=</nowiki>2<math>. Wprowadzamy nową zmienną </math>y<math> i kładziemy </math>D_j <nowiki>=</nowiki>
Wobec tego, że <math>|a-b|\le |a-c|+|c-b|</math>,
(x_1  x_2  y)  (x_1  x_2  y)<math>. Jeśli
dla <math>x,y,z\in\mathbb{R}^N</math> mamy
istnieje wartościowanie spełniające formułę </math><math>, to w tym
wartościowaniu formuła </math><math> powstała z </math><math> przez zastąpienie
klauzuli </math>C_j<math> formułą </math>D_j<math> jest również spełniona. I na odwrót,
jeśli pewne wartościowanie spełnia formułę </math><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
wartościowanie (bez zmiennej </math>y<math>) spełnia formułę </math><math>.


<center><math>\aligned
Analogicznie, jesli </math>C_j<math> składa się tylko z jednego literału, to
d_{\infty}(x,z)
przekształcamy go w koniunkcję czterech trójskładnikowych klauzul, z
& = &
dodanymi dwiema nowymi zmiennymi.
\max_{i=1,\ldots, N}|x_i-z_i|
\ =\
\max_{i=1,\ldots, N}|x_i-y_i+y_i-z_i|
\ \le\
\max_{i=1,\ldots, N}\big(|x_i-y_i|+|y_i-z_i|\big)\\
& \le &
\max_{i=1,\ldots, N}|x_i-y_i|
+\max_{i=1,\ldots, N}|y_i-z_i|
\ =\
d_{\infty}(x,y)+d_{\infty}(y,z),


\endaligned</math></center>
Z tego spostrzeżenia będziemy korzystać w następnych dowodach
NP-zupełności.
}}


zatem pokazaliśmy warunek trójkąta.
Odnotujmy w tym miejscu, że dalsze zawężenie problemu polegające na
Zatem że <math>d_{\infty}</math>
dopuszczeniu klauzul o co najwyżej dwóch literałach, 2SAT, jest
jest metryką w <math>\displaystyle\mathbb{R}^N.</math><br>
problemem obliczeniowo łatwym. Dowód tego faktu odkładamy do
<br>
nastepnej lekcji.
Sprawdźmy trzy warunki z definicji metryki dla <math>d_1</math>:<br>
Dla <math>x,y\in\mathbb{R}^N</math> mamy


<center><math>\aligned
===MAXSAT===
d_1(x,y)=0
& \Longleftrightarrow &
\sum_{i=1}^{N}|x_i-y_i|=0
\ \Longleftrightarrow\
|x_1-y_1|=\ldots=|x_N-y_N|=0\\
& \Longleftrightarrow &
\big[x_1=y_1,\ \ldots,\ x_N=y_N\big]
\ \Longleftrightarrow\
x=y.


\endaligned</math></center>
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 </math>k<math> 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.


Dla <math>x,y\in\mathbb{R}^N,</math> mamy
{{twierdzenie|[Uzupelnij]||
Problem MAX2SAT jest NP-zupełny.
}}


<center><math>
{{dowod|[Uzupelnij]||
Konstruujemy redukcję z problemu 3SAT. Na wejściu mamy formułę
</math><nowiki>=</nowiki>C_1  ... C_m<math>. Każdą klauzulę </math>C_j<nowiki>=</nowiki>a b c<math>
przekształcamy w zbiór 10 klauzul, dla wygody rozważań podzielonych
na trzy grupy, następujacej postaci:


d_1(x,y)
# </math>(a)(b)(c)(z)<math>
\ =\
\sum_{i=1}^{N}|x_i-y_i|
\ =\
\sum_{i=1}^{N}|y_i-x_i|
\ =\
d_1(x,y)
</math></center>


zatem spełniony jest warunek symetrii.<br>
# </math>( a b)( b c)( a c)<math>
Dla <math>x,y,z\in\mathbb{R}^N,</math> mamy


<center><math>\aligned
# </math>(a z)(b z)(c z)<math>
d_1(x,z)
& = &
\sum_{i=1}^{N}|x_i-z_i|
\ =\
\sum_{i=1}^{N}|x_i-y_i+y_i-z_i|
\ \le\
\sum_{i=1}^{N}\big(|x_i-y_i|+|y_i-z_i|\big)\\
& \le &
\sum_{i=1}^{N}|x_i-y_i|
+\sum_{i=1}^{N}|y_i-z_i|
\ =\
d_1(x,y)+d_1(y,z),


\endaligned</math></center>
Tych 10 klauzul ma następujace własności:


zatem pokazaliśmy warunek trójkąta.
# Jeśli </math>a<nowiki>=</nowiki>b<nowiki>=</nowiki>c<nowiki>=</nowiki>0<math>, to niezależnie od wartości zmiennej </math>z<math> co
Wykazaliśmy zatem, że <math>d_1</math>
najwyżej 6 klauzul jest spełnionych.
jest metryką w <math>\displaystyle\mathbb{R}^N.</math>
{}<math>\Box</math></div></div>


{{cwiczenie||
# Jeśli któryś z literałów </math>a<math>, </math>b<math> lub </math>c<math> jest równy 1, to
Dla danej metryki <math>d</math> w
można dobrać wartość </math>z<math> tak, że 7 klauzul jest spełnionych. Można
<math>\mathbb{R}^N</math> można zdefiniować odległość punktu <math>x</math>
sie o tym przekonać analizując wszystkie przypadki. Na przykład,
od zbioru <math>A\ne \emptyset</math>
jeśli </math>a<nowiki>=</nowiki>1<math>, </math>b<nowiki>=</nowiki>c<nowiki>=</nowiki>0<math>, to kładziemy </math>z<nowiki>=</nowiki>0<math>; jeśli </math>a<nowiki>=</nowiki>b<nowiki>=</nowiki>1<math>, </math>c<nowiki>=</nowiki>0<math>, to
jako infimum wszystkich odległości między <math>x</math> a punktami
również kładziemy </math>z<nowiki>=</nowiki>0<math>, jeśli natomiast </math>a<nowiki>=</nowiki>b<nowiki>=</nowiki>c<nowiki>=</nowiki>1<math> to 7 klauzul jest
zbioru <math>A</math>, czyli
spełnionych gdy </math>z<nowiki>=</nowiki>1<math>.


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


\mathrm{dist}\, (x,A)
Maszyna Turinga realizująca redukcję potrzebuje pamieci roboczej
\ =\
jedynie na liczniki, zatem działa w pamięci logarytmicznej.
\inf_{z\in A}d(x,z).
}}
</math></center>


[Rysunek AM1.M03.C.R01 (stary numer AM1.3.24)].<br>
==NP-zupełne problemy grafowe==
Dany jest zbiór <math>A=[0,1]\times[0,1]\subseteq\mathbb{R}^2</math>
 
oraz dwa punkty <math>x=(2,3)</math> oraz <math>y=(3,-2).</math>
===Pokrycie wierzchołkowe===
Wyznaczyć <br>
 
'''(a)''' odległość punktów <math>x</math> i <math>y</math>;<br>
Pierwszym z serii problemów grafowych, dla których udowodnimy
'''(b)''' <math>\displaystyle\mathrm{dist}\, (x,A)</math>;
NP-zupełność, jest problem pokrycia wierzchołkowego. Dla grafu
kolejno w metrykach:
nieskierowanego </math>G<nowiki>=</nowiki>(V,E)<math> mówimy, że podzbiór </math>V' V<math> jest
euklidesowej <math>d_2</math>;
pokryciem wierzchołkowym, jeśli każda krawędź w G ma co najmniej
taksówkowej <math>d_1</math>;
jeden z końców w zbiorze </math>V'<math>.
maksimowej <math>d_{\infty}.</math>
 
\bigskip \noindent {\bf Problem} NODE COVER\\
{\it Wejście:} Graf nieskierowany </math>G<nowiki>=</nowiki>(V,E)<math>, liczba całkowita </math>k
|V|<math>\\
{\it Wyjście}: TAK jeśli G ma pokrycie wierzchołkowe o liczności k,
NIE w przeciwnym przypadku.
 
{{twierdzenie|[Uzupelnij]||
Problem NODE COVER jest NP-zupełny.
}}
}}


{black}
{{dowod|[Uzupelnij]||
Dla podanego podzbioru zbioru wierzchołków bardzo łatwo sprawdzić
czy stanowi on pokrycie, zatem </math>{ NODE COVER} NP<math>.


<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">
Redukujemy problem 3SAT do NODE COVER. Na wejściu mamy formułę
Należy wykonać rysunek zbioru <math>A</math> oraz wszystkich zadanych punktów
</math><nowiki>=</nowiki>C_1 ... C_m<math>, i zgodnie z uwagą poczyniona przy
w układzie współrzędnych.
dowodzie NP-zupełności 3SAT zakładamy, że każda alternatywa </math>C_j<math>
Przy liczeniu odległości punktów
zawiera dokładnie 3 różne literały. Konstruujemy graf następujący:
oraz odległości punktu od zbioru należy skorzystać z definicji
każde wystąpienie literału jest wierzchołkiem grafu, wystąpienia
poszczególnych metryk oraz rysunku.
wewnątrz jednej klauzuli tworzą trójkąt. Ponadto, dla każdej pary
{}<math>\Box</math></div></div>
literałów przeciwnych wystepujących w różnych klauzulach
odpowiadające im wierzchołki łączymy krawędzią. Na koniec, kładziemy
</math>k<nowiki>=</nowiki>2m<math>.


<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"> 
\vspace{1cm}
'''(1)''' Dla metryki euklidesowej <math>d_2</math> mamy:<br>
\begincenter
{{red}[[Rysunek AM1.M03.C.R02 (nowy)]]}<br>
\includegraphics[width=12cm]{rys_5_1.jpg}\\
'''(a)'''
Redukcja 3SAT do NODE COVER
\endcenter
\vspace{1cm}


<center><math>
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 </math>k<math>. 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 </math>v<math> 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 </math>v<math>, prowadzi do pewnego wierzchołka </math>w<math>
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
trójkącie w którym występuje. Zatem krawędź </math>(v, w)<math> też jest
pokryta.


d_2(x,y)
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ść
d_2\big((2,3),(3,-2)\big)
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
\sqrt{(2-3)^2+(3+2)^2}
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
\sqrt{26}.
wierzchołków jest w pokryciu, a więc odpowiadający mu literał nie
</math></center>
bierze udziału w obliczaniu wartościowania.


'''(b)'''
Zauważmy, że tak jak i poprzednio, do realizacji redukcji wystarczy
Odległość <math>x</math> od zbioru <math>A</math> jest realizowana w punkcie
pamięć robocza rzędu </math> n<math>, co kończy dowód.
<math>z=(1,1)</math> (patrz rysunek; łatwo pokazać, że odległość od <math>x</math>
}}
do dowolnego innego punktu zbioru <math>A</math> jest większa, niż do <math>z</math>),
zatem


<center><math>
===Klika, zbiór niezależny===


\mathrm{dist}\, (x,A)
Przypomnijmy definicje obu problemów:
\ =\
d_2\big((2,3),(1,1)\big)
\ =\
\sqrt{(2-1)^2+(3-1)^2}
\ =\
\sqrt{5}.
</math></center>


<br>
\bigskip \noindent {\bf Problem} INDEPENDENT SET\\
'''(2)''' Dla metryki taksówkowej <math>d_1</math> mamy:<br>
{\it Wejście:} Graf nieskierowany </math>G<nowiki>=</nowiki>(V,E)<math>, liczba całkowita </math>k
{{red}[[Rysunek AM1.M03.C.R03 (nowy)]]}<br>
|V|<math>\\
'''(a)'''
{\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.


<center><math>
\bigskip \noindent {\bf Problem} CLIQUE\\
{\it Wejście:} Graf nieskierowany </math>G<nowiki>=</nowiki>(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.


d_1(x,y)
====section====
\ =\
d_1\big((2,3),(3,-2)\big)
\ =\
|2-3|+|3+2|
\ =\
6.
</math></center>


'''(b)'''
Wykaż, że problem INDEPENDENT SET jest NP-zupełny.
Odległość <math>x</math> od zbioru <math>A</math> jest realizowana w punkcie
<math>z=(1,1)</math> (patrz rysunek; łatwo pokazać, że odległość od <math>x</math>
do dowolnego innego punktu zbioru <math>A</math> jest większa, niż do <math>z</math>),
zatem


<center><math>
\beginhintJeśli </math>V'<math> jest pokryciem wierzchołkowym, to jaką własność
ma zbiór </math>V-V'<math>?
</div></div>


\mathrm{dist}\, (x,A)
\beginsolutionDopełnienie pokrycia jest oczywiście zbiorem
\ =\
niezależnym. Zatem redukcja z problemu NODE COVER, mając na wejściu
d_1\big((2,3),(1,1)\big)
graf </math>G<nowiki>=</nowiki>(V,E)<math> i liczbę </math>k<math> generuje instancję </math>G'<nowiki>=</nowiki>(V',E'),k'<math>
\ =\
problemu INDEPENDENT SET, kładąc </math>G'<nowiki>=</nowiki>G<math>, </math>k'<nowiki>=</nowiki>|V|-k<math>.
|2-1|+|3-1|
</div></div>
\ =\
3.
</math></center>


<br>
====section====
'''(3)''' Dla metryki maksimowej <math>d_{\infty}</math> mamy:<br>
{{red}[[Rysunek AM1.M03.C.R04 (nowy)]]}.<br>
'''(a)'''


<center><math>
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.


d_{\infty}(x,y)
====section====
\ =\
d_{\infty}\big((2,3),(3,-2)\big)
\ =\
\max\big\{|2-3|,|3+2|\big\}
\ =\
5.
</math></center>


'''(b)'''
Wykaż, że problem CLIQUE jest NP-zupełny.
Odległość <math>x</math> od zbioru <math>A</math> jest realizowana na przykład w punkcie
<math>z=(0,1)</math> (patrz rysunek; łatwo pokazać, że odległość od <math>x</math>
do dowolnego innego punktu zbioru <math>A</math> jest niemniejsza, niż do <math>z</math>),
zatem


<center><math>
\beginhintRozważ dopełnienie grafu.
</div></div>


\mathrm{dist}\, (x,A)
\beginsolutionRedukcja z problemu INDEPENDENT SET. Graf wynikowy
\ =\
jest dopełnieniem grafu źródłowego, a parametr </math>k<math> ma tę sama wartość.
d_2\big((2,3),(0,1)\big)
</div></div>
\ =\
\max\big\{|2-0|,|3-1|\big\}
\ =\
2.
</math></center>


{}<math>\Box</math></div></div>
===Cykl i ścieżka Hamiltona===


{{cwiczenie||
\bigskip \noindent {\bf Problem} HAMILTONIAN CYCLE\\
Udowodnić, że dla każdego ciągu <math>\displaystyle\{x_n\}\subseteq\mathbb{R}^N</math> istnieje co najwyżej
{\it Wejście:} Graf nieskierowany </math>G<nowiki>=</nowiki>(V,E)<math>\\
jedna granica, to znaczy:
{\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.


<center><math>
{{twierdzenie|[Uzupelnij]||
CYKL HAMILTONA jest NP-zupełny.
}}


\bigg[
{{dowod|[Uzupelnij]||
\lim\limits_{n\rightarrow +\infty} x_n = g_1\in \mathbb{R}^N
Przynależnośc do klasy NP jest oczywista. Konstruujemy redukcje z
\quad\textrm{i}\quad
problemu NODE COVER. na wejściu mamy nieskierowany graf </math>G<nowiki>=</nowiki>(V,E)<math>
\lim\limits_{n\rightarrow +\infty} x_n = g_2\in \mathbb{R}^N
oraz liczbę całkowitą </math>k |V|<math>. Oznaczmy graf wynikowy jako
\bigg]
</math>G'<nowiki>=</nowiki>(V',E')<math>.
\ \Longrightarrow\
g_1=g_2.
</math></center>


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}<nowiki>=</nowiki>(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<nowiki>=</nowiki>(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>
'<nowiki>=</nowiki>_{(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.
}}
}}


{black}
====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.


<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"> 
\hint{Należy "wymusić" rozpoczęcie i zakończenie ścieżki dodatkowymi
Przeprowadzić dowód niewprost. Dobrać
selektorami}
<math>\displaystyle\varepsilon=\frac{1}{2}d(g_1,g_2)</math> w definicji granicy ciągu.
{}<math>\Box</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">
\solution{Dodajemy selektor </math>s_0<math> i łączymy go krawędzią z </math>s_1<math>.
Dla dowodu niewprost przypuśćmy, że
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.}


<center><math>
====section====


\lim\limits_{n\rightarrow +\infty} x_n = g_1,
Metoda 2: Skonstruuj redukcję z problemu CYKL HAMILTONA.
\quad
\lim\limits_{n\rightarrow +\infty} x_n = g_2
\quad\textrm{oraz}\quad
g_1\ne g_2.
</math></center>


Niech <math>\displaystyle\varepsilon=\frac{1}{2}d(g_1,g_2).</math>
\hint{Dodaj nowe wierzchołki które będą końcami ścieżki Hamiltona i
Wówczas <math>\displaystyle\varepsilon>0</math> (gdyż założyliśmy, że <math>g_1\ne g_2</math>).
powiąż je odpowiednio z innym wierzchołkami.}
Z definicji granicy ciągu wynika, że


<center><math>\aligned
\solution{Nie prowadzi do celu narzucający się pomysł aby dowiązać 2
\exists N_1\in\mathbb{N}\ \forall n\ge N_1: && d(x_n,g_1)<\frac{1}{2},\\
nowe wierzchołki do końców dowolnie ustalonej krawędzi. Skuteczna
\exists N_2\in\mathbb{N}\ \forall n\ge N_1: && d(x_n,g_2)<\frac{1}{2}.
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.}


\endaligned</math></center>
==Problemy na zbiorach i liczbach==


Niech <math>N=\max \{N_1,N_2\}.</math>
===Trójdzielne skojarzenie i pokrycie zbiorami===
Wówczas dla wyrazu <math>x_N</math> mamy:


<center><math>
Uogólnieniem klasycznego problemu skojarzenia w grafie dwudzielnym
jest następujący problem:


d(g_1,g_2)
\bigskip \noindent {\bf Problem }TRIPARTITE MATCHING\\
\ \le\
{\it Wejście: }parami rozłączne równoliczne zbiory </math>W,X,Y<math> o mocy
d(g_1,x_N)+d(x_N,g_2)
</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
\frac{1}{2}d(g_1,g_2)+\frac{1}{2}d(g_1,g_2)
</math>R'  R<math> taki, że dla dowolnych trójek
\ =\
</math>(w,x,y),(w',x',y') R<math> zachodzi
d(g_1,g_2),
</math>w w'<math>, </math>x x'<math> oraz </math>y y'<math>. NIE w przeciwnym przypadku.\\
</math></center>


sprzeczność. Zatem <math>g_1=g_2.</math><br>
Problem skojarzenia dwudzielnego jest obliczeniowo łatwy.
{{red}[[Rysunek AM1.M03.C.R05 (nowy)]]}<br>
Uogólnienie do trzech wymiarów utrudnia problem radykalnie.
{{red}[[Rysunek AM1.M03.C.R06 (nowy)]]}
{}<math>\Box</math></div></div>


{{cwiczenie||  
{{twierdzenie|[Uzupelnij]||
Udowodnić, że jeśli ciąg
Problem TRIPARTITE MATCHING jest NP-zupełny.
<math>\displaystyle\{x_n\}\subseteq\mathbb{R}^N</math> jest zbieżny, to jest
ograniczony.
}}
}}


{black}
{{dowod|[Uzupelnij]||
Ponownie mamy do czynienia z dość skomplikowaną konstrukcją
posługującą się gadżetami, redukującą problem 3SAT do naszego
problemu.


<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">
Na wejściu mamy zbiór klauzul </math>C<nowiki>=</nowiki>_1,...,C_m<math> nad zmiennymi
Zastosować definicję granicy z ustalonym <math>\displaystyle\varepsilon>0</math>
</math>U<nowiki>=</nowiki>_1,...,u_n<math>. Najpierw dla każdej zmiennej </math>u U<math>
(na przykład <math>\displaystyle\varepsilon=1</math>) i zauważyć, że od pewnego miejsca ciąg jest
konstruujemy gadżet </math>T_u<math>, który będzie odpowiadał za wybór
ograniczony.
wartościowania tej zmiennej. Składa się on z dwóch zbiorów trójek:
{}<math>\Box</math></div></div>
\[T_u^t=\{(w_{2j}^u,x_j^u,y_j^u), 1\leq j\leq m\}</math></center>


<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"> 
_u^f<nowiki>=</nowiki>(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>
Załóżmy, że
<math>\displaystyle\lim\limits_{n\rightarrow +\infty} x_n=g.</math>
Ustalmy <math>\displaystyle\varepsilon=1.</math>
Z definicji granicy ciągu mamy


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


\exists N\in\mathbb{N}\ \forall n\ge N:
\vspace{1cm}
d(x_n,g)<1
\begincenter
</math></center>
\includegraphics[width=12cm]{rys_5_5.jpg}\\


(to znaczy wszystkie wyrazy ciągu począwszy od <math>N</math>-tego
\endcenter
leża w kuli jednostkowej, a więc tworzą zbiór ograniczony).
\vspace{1cm}
Niech teraz


<center><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.
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>.


R
Trójki które zdefiniujemy teraz mogą być nazwane "składową
\ =\
testowania". Skojarzą one niepokryte elementy z gadżetów z
\max\big\{
odpowiednimi wystąpieniami literałów w klauzulach. Dla każdej
d(x_1,g),\ d(x_2,g),\ \ldots,\ d(x_N,g)
klauzuli </math>C_j<nowiki>=</nowiki>(p_j q_j r_j)<math> składowa testowania </math>S_j<math>
\big\}
zawiera 3 trójki </math>s_j^1,s_j^2,s_j^3<math> odpowiadajace kolejnym
+1.
literałom </math>p,q,r<math>, zdefiniowane następująco: Jeśli </math>p<nowiki>=</nowiki>u_i<math> to
</math></center>
</math>s_j^1<nowiki>=</nowiki>(w_{2j-1}^u,a_j, b_j)<math>. Jeśli </math>p<nowiki>=</nowiki> u_i<math> to
</math>s_j^1<nowiki>=</nowiki>(w_{2j}^u,a_j,b_j)<math>. Analogicznie dla literałów </math>q, r<math>.


Wówczas <math>d(x_n,g)<R</math> dla dowolnego <math>n\in\mathbb{N},</math> czyli
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}.


<center><math>
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:


\forall n\in \mathbb{N}: x_n\in K(g,R),
\[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>
</math></center>


{{red}[[Rysunek AM1.M03.C.R07 (nowy)]]}<br>
Pozwala ona skojarzyć elementy <math>u</math> pozostałe po wyborze
a to oznacza, że ciąg <math>\displaystyle\{x_n\}</math> jest ograniczony.
wartościowania i testu spełnialności.
{}<math>\Box</math></div></div>


{{cwiczenie||
Na podstawie opisanej konstrukcji i komentarzy jej towarzyszących
'''(1)'''
możemy juz łatwo stwierdzić, że formuła wejściowa posiada
Podać przykład nieskończonej rodziny zbiorów otwartych w <math>\displaystyle\mathbb{R}</math>
wartościowanie spełniające wtedy i tylko wtedy gdy utworzony w
takich, że ich przecięcie nie jest zbiorem otwartym.<br>
wyniku redukcji zbiór trójek ma skojarzenie.
'''(2)'''
Podać przykład nieskończonej rodziny zbiorów domkniętych w <math>\displaystyle\mathbb{R}</math>
takich, że ich suma nie jest zbiorem domkniętym.
}}
}}


{black}
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.


<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">
'''Problem '''EXACT COVER BY 3-SETS (pokrycie trójelementowymi podzbiorami)<br>
'''(1)'''
''Wejście: ''Rodzina <math>\cal F</math> trójelementowych podzbiorów zbioru
Rozważyć zstępującą
<math>X</math>
rodzinę przedziałów otwartych
takiego że <math>|X|=3k</math> dla pewnej calkowitej <math>k</math><br>
(to znaczy rodzinę zbiorów otwartych, z których każdy następny
''Wyjście: ''TAK jesli istnieje podrodzina <math>\cal F' \subseteq \cal
jest zawarty w poprzednim).<br>
F</math> taka, że każdy element zbioru <math>X</math> należy do dokładnie jednego zbioru rodziny <math>\cal F"</math>,
'''(2)'''
NIE w przeciwnym przypadku<br>
Rozważyć wstępującą rodzinę przedziałów domkniętych
(to znaczy rodzinę zbiorów domkniętych, z których każdy następny
zawiera poprzedni).
{}<math>\Box</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"> 
====section====
'''(1)'''
Rozważmy przedziały otwarte
<math>\displaystyle U_n=\big(-\frac{1}{n},1+\frac{1}{n}\bigg)</math>
dla <math>n\in\mathbb{N}.</math>
Wówczas


<center><math>
Wykaż że EXACT COVER BY 3-SETS jest NP-zupełny.


\bigcap_{n=1}^{\infty}U_n
<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
[0,1],
podzielone na trzy rozłączne równoliczne zbiory, a wszystkie
</math></center>
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>


oraz przedział <math>\displaystyle [0,1]</math> nie jest zbiorem otwartym.<br>
'''Problem''' SET COVERING (pokrycie zbiorami)<br>
<br>
''Wejście: ''Rodzina <math>F=\{S_1,\ldots,S_n\}</math> podzbiorów zbioru
'''(2)'''
<math>|X|</math>,
Rozważmy przedziały domknięte
liczba całkowita <math>k\leq n</math><br>
<math>\displaystyle F_n=\big[\frac{1}{n},2-\frac{1}{n}\bigg].</math>
''Wyjście: ''TAK, jeśli istnieje k-elementowa podrodzina rodziny
Wówczas
<math>F</math>,
która pokrywa cały zbiór <math>|X|</math>, w przeciwnym przypadku NIE.<br>


<center><math>
====section====


\bigcup_{n=1}^{\infty}F_n
Wykaż NP-zupełność problemu SET COVERING.
\ =\
(0,2),
</math></center>


oraz przedział <math>\displaystyle (0,2)</math> nie jest zbiorem domkniętym.
<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">
{}<math>\Box</math></div></div>
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>


{{cwiczenie||
===Suma podzbioru i inne problemy liczbowe===
Zbadać czy ciąg
 
<math>\displaystyle\{x_n\}\subseteq \mathbb{R}^2,</math> gdzie
Teraz zajmiemy się kilkoma problemami związanymi z liczbami.
<math>x_n=\bigg\{\frac{2+n}{n},n\bigg\},</math>
Najwięcej trudu będzie kosztować udowodnienie NP-zupełności
spełnia warunek Cauchy'ego.
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</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>
''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>
 
{{twierdzenie|[Uzupelnij]||
Problem SUBSET SUM jest NP-zupełny.
}}
}}


{black}
{{dowod|[Uzupelnij]||
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ę
<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
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>.
 
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ą
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 kjako liczbe 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.
 
Jeśli istnieje podrodzina <math>F'\subseteq F</math> stanowiąca rozłączne
pokrycie zbioru <math>X</math>, to wektory bitowe poszczególnych trójek z <math>F'</math>
arytmetycznie sumują sie do <math>B</math>, a na żadnej pozycji nie występuje
przeniesienie. Zatem z istnienia pokrycia wynika istnienie podzbioru
dającego w sumie wagę <math>B</math>.
 
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 <math>B</math>, to wszystkie te
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
odpowiadajace tym liczbom podzbiory pokrywają cały zbiór <math>X</math>.
 
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ł)<br>
''Wejście: ''Skończony zbiór <math>A</math> elementów oraz dodatnia całkowita
waga <math>s(a)</math> każdego elementu<br>
''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
przypadku.
 
====section====
 
Wykaż NP-zupełność problemu podziału.
 
<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">
Skorzystaj z SUBSET SUM. Wystarczy dodać dwa elementy o odpowiednio
dobranej dużej wadze.
</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">
Niech <math>S=\sum_{a\in A}s(a)</math>. Dodajemy do zbioru dwa elementy <math>b_1</math> i
<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
podzbiory o jednakowych wagach, to elementy <math>b_1</math> i <math>b_2</math> sa 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>.
 
</div></div>
 
'''Problem '''KNAPSACK (plecak)<br>
''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
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
<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.
 
====section====
 
Pokaż że KNAPSACK 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">
Wykorzystaj SUBSET SUM lub PARTITION.
</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">
Jeśli założymy, że rozmiary elementów są równe ich wartościom, a
pojemnośc plecaka jest równa żądanej wartości, to otrzymamy problem
SUBSET SUM.
</div></div>
 
==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<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
w przeciwnym przypadku.<br>
 
<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">
Istnieje redukcja najprostszego typu z jednego z analizowanych
powyżej problemów.
</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">
Jest to proste ugólnienie problemu CLIQUE: szczególnym przypadkiem
podgrafu o który pytamy w problemie SUBGRAPH ISOMORPHISM jest klika
o liczności <math>k</math> o która pytamy w problemie CLIQUE.
</div></div>
 
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<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
procesorze, bez przerywania, spełniając ograniczenia czasowe, NIE w
przeciwnym przypadku. Formalnie, pytamy o funkcję alokacji <math>A</math>
przydzielająca każdemu zadaniu <math>t</math> czas rozpoczęcia wykonywania
<math>A(t)</math> taki, że <math>[A(t), A(t)+l(t)] \subseteq [r(t),d(t)]</math> oraz
<math>[A(t), A(t)+l(t)) \cap [A(t'), A(t')+l(t')) = \emptyset</math>, dla
każdego zadania <math>t' \neq t</math>.<br>
 
<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">
Spróbuj, układając na prostej (osi liczbowej) odpowiednio
zdefiniowany ciąg odcinków (zadań), wymusić istnienie podzbioru o
zadanej sumie.
</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 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
oraz żądana 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>
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", o parametrach
<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
dowolnym miejscu osi czasu, zauważmy jednak że każde ulokowanie
wszystkich zadań nie zostawia żadnej luki na osi. Dla wymuszacza
jest tylko jedna możliwa wartość alokacji, <math>B</math>. Takie położenie
dzieli cały przedział, w którym moga byc wykonywane zadania, na dwa
podprzedziały, rozdzielone wymuszaczem. Jeden z tych przedziałów ma
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
zbioru elementów w instancji problemu SUBSET SUM, ktych wagi dają w
sumie <math>B</math>.
</div></div>
 
====section====
 
Problem cięcia w grafie zdefiniowany jest następująco:
 
'''Problem''' FEEDBACK VERTEX SET<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,
taki że graf pozostały po usunięciu tego podzbioru jest
acykliczny.<br>
Udowodnij, że FEEDBACK VERTEX 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">
Jak zwykle, najtrudniej dobrać problem źródłowy dla redukcji.
Proponujemy pokrycie wierzchołkowe. Jak powinien wyglądać wynik
redukcji -- graf skierowany -- aby rozcinanie wszsytkich cykli przez
usuwanie wierzchołków znaczyło to samo co definiowanie pokrycia w
grafie źródłowym?
</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">
Na wejściu mamy graf nieskierowany <math>G=(V,E)</math> i liczbę <math>k</math>.
Zamieniamy ten graf na graf skierowany <math>G'</math>, z tym samym zbiorem
wierzchołków, zastępując każdą krawędź nieskierowaną <math>(u,v)</math> przez
dwie krawędzie skierowane: <math>(u,v)</math> oraz <math>(v,u)</math>. Liczba <math>k</math> jest
taka sama dla obu instancji.
 
Nietrudno zauważyć, że każde pokrycie wierzchołkowe w <math>G</math> jest
zbiorem rozcinającym wszystkie cykle w <math>G'</math> i na odwrót.
</div></div>
 
====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<br>
''Wejście: ''Graf nieskierowany <math>G=(V,E)</math>. <br>
''Wyjście: ''TAK, jeśli istnieje funkcja <math>c : V \rightarrow
\{0,1,2\}</math> taka, że dla każdej krawędzi <math>(u,v)\in E</math>, <math>c(u)\neq
c(v)</math>.<br>
Za pomocą redukcji z problemu 3SAT udowodnij, że problem
trójkolorowania 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">
Można użyć gadżetu przedstawionego na rysunku 5.6.
{1cm}
 
[width<nowiki>=</nowiki>12cm]{rys_5_6.jpg}<br>
 
{1cm}
'''UWAGA DLA REDAKCJI: RYSUNEK POJAWIA
SIĘ JAKO CZĘŚĆ WSKAZÓWKI'''
</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">
Gadżet ma następujące własności:
 
* 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>
 
* jeśli w danym trójkolorowaniu <math>c(u)=c(v)=c(z)=0</math>, to
również <math>c(z)=0</math>.
 
Redukcję przeprowadzamy następująco:
 
# generujemy wierzchołki <math>s,t,z</math> i trójkat 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>
 
# 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
 
{1cm}
 
[width<nowiki>=</nowiki>12cm]{rys_5_7.jpg}<br>
 
{1cm}
 
Wykazemy, że formuła źródłowa ma spełniające wartościowanie wtedy i
tylko wtedy gdy wygenerowany graf można pokolorować trzema kolorami.
 
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>
 
* kolorujemy każdy z wierzchołków <math>x_i, \neg x_i</math> jego wartością
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


<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 zadane jest trójkolorowanie grafu, to obliczamy wartościowanie
Zbadać odległość dwóch kolejnych wyrazów ciągu
spełniające formułę następująco:
<math>x_n</math> i <math>x_{n+1}</math> dla dowolnego <math>n\in\mathbb{N}.</math>
{}<math>\Box</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">
* kolory wierzchołków <math>s,t,z</math> są różne, więc umawiamy się, że <math>c(s)=0,
Zauważmy, że
c(t)=2, c(z)=1</math>


<center><math>
* 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.


d_2(x_n,x_{n+1})
Ponieważ <math>c(z)=1</math>, więc dla każdego gadżetu co najmniej jeden z jego
\ =\
trzech wejściowych wierzchołków ma kolor 1, a zatem w każdej
\sqrt{\underbrace{\bigg(\frac{2+n+1}{n+1}-\frac{2+n}{n}\bigg)^2}_{\ge 0}+(\underbrace{n+1-n}_{=1})^2}
klauzuli mamy co najmniej jedną jedynkę.
\ \ge\
1,
</math></center>


a zatem ciąg ten nie spełnia warunku Cauchy'ego,
</div></div>
gdyż dla dowolnie dużego <math>n\in\mathbb{N}</math>
odległości między kolejnymi wyrazami ciągu
są stale większe od <math>1.</math>
{}<math>\Box</math></div></div>

Wersja z 18:03, 31 lip 2006

{article}

{}{0.5cm} {}{0.8cm} {}{ -0.4cm} {}{ -0.4cm} {}{1mm}

{proof}{ Dowód: }{ } {hint}{ Wskazówka: }{} {solution}{ Rozwiązanie: }{}

Złożoność obliczeniowa

Moduł 5

Problemy NP-zupełne

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 [Uzupelnij]

Problem 3SAT jest NP-zupełny.

Dowód [Uzupelnij]

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 _j = (x_1 x_2 y_2)( y_2 x_3 y_3) ( y_3 x_4 y_4) ...

( y_{k-2} x_{k-1} x_k)
Parser nie mógł rozpoznać (błąd składni): {\displaystyle Nietrudno spostrzec, że jeśli } C_jParser nie mógł rozpoznać (błąd składni): {\displaystyle jest spełniona przez pewne wartościowanie zmiennych } x_1,...,x_kParser nie mógł rozpoznać (błąd składni): {\displaystyle , to da się tak dobrać wartości dla zmiennych } y_2,...,y_{k-2}Parser nie mógł rozpoznać (błąd składni): {\displaystyle , aby spełnione były wszystkie klauzule w } D_jParser nie mógł rozpoznać (błąd składni): {\displaystyle . Na odwrót, jeśli } D_jParser nie mógł rozpoznać (błąd składni): {\displaystyle jest spełniona dla pewnego wartościowania zmiennych } x_1,...,x_k,y_2,...,y_{k-2}Parser nie mógł rozpoznać (błąd składni): {\displaystyle , to łatwo wydedukować, że } x_i=1dlapewnego1 i kParser nie mógł rozpoznać (błąd składni): {\displaystyle . Mianowicie, jeśli } x_1=x_2=0,tozpierwszejklauzuliwD_jParser nie mógł rozpoznać (błąd składni): {\displaystyle wynika że } y_2=1.Alewtedyzdrugiejklauzulimamyx_3=1luby_3=1Parser nie mógł rozpoznać (błąd składni): {\displaystyle . 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 } C_jParser nie mógł rozpoznać (błąd składni): {\displaystyle oraz licznik wygenerowanych do tej pory nowych zmiennych. }} {{uwaga|[Uzupelnij]|| 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|[Uzupelnij]|| 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=2Parser nie mógł rozpoznać (błąd składni): {\displaystyle . Wprowadzamy nową zmienną } yParser nie mógł rozpoznać (błąd składni): {\displaystyle i kładziemy } D_j =

(x_1 x_2 y) (x_1 x_2 y)Parser nie mógł rozpoznać (błąd składni): {\displaystyle . Jeśli istnieje wartościowanie spełniające formułę } Parser nie mógł rozpoznać (błąd składni): {\displaystyle , to w tym wartościowaniu formuła } Parser nie mógł rozpoznać (błąd składni): {\displaystyle powstała z } Parser nie mógł rozpoznać (błąd składni): {\displaystyle przez zastąpienie klauzuli } C_jParser nie mógł rozpoznać (błąd składni): {\displaystyle formułą } D_jParser nie mógł rozpoznać (błąd składni): {\displaystyle jest również spełniona. I na odwrót, jeśli pewne wartościowanie spełnia formułę } ,toabyD_jParser nie mógł rozpoznać (błąd składni): {\displaystyle było prawdziwe } x_1lubx_2Parser nie mógł rozpoznać (błąd składni): {\displaystyle musi mieć wartość 1, a zatem to samo wartościowanie (bez zmiennej } yParser nie mógł rozpoznać (błąd składni): {\displaystyle ) spełnia formułę } .Analogicznie,jesliC_jParser nie mógł rozpoznać (błąd składni): {\displaystyle 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 } kParser nie mógł rozpoznać (błąd składni): {\displaystyle 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|[Uzupelnij]|| Problem MAX2SAT jest NP-zupełny. }} {{dowod|[Uzupelnij]|| Konstruujemy redukcję z problemu 3SAT. Na wejściu mamy formułę } =C_1 ... C_mParser nie mógł rozpoznać (błąd składni): {\displaystyle . Każdą klauzulę } C_j=a b cParser nie mógł rozpoznać (błąd składni): {\displaystyle przekształcamy w zbiór 10 klauzul, dla wygody rozważań podzielonych na trzy grupy, następujacej postaci: # } (a)(b)(c)(z)Parser nie mógł rozpoznać (błąd składni): {\displaystyle # } ( a b)( b c)( a c)Parser nie mógł rozpoznać (błąd składni): {\displaystyle # } (a z)(b z)(c z)Parser nie mógł rozpoznać (błąd składni): {\displaystyle Tych 10 klauzul ma następujace własności: # Jeśli } a=b=c=0Parser nie mógł rozpoznać (błąd składni): {\displaystyle , to niezależnie od wartości zmiennej } zParser nie mógł rozpoznać (błąd składni): {\displaystyle co najwyżej 6 klauzul jest spełnionych. # Jeśli któryś z literałów } a,blubcParser nie mógł rozpoznać (błąd składni): {\displaystyle jest równy 1, to można dobrać wartość } zParser nie mógł rozpoznać (błąd składni): {\displaystyle 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=0Parser nie mógł rozpoznać (błąd składni): {\displaystyle , to kładziemy } z=0Parser nie mógł rozpoznać (błąd składni): {\displaystyle ; jeśli } a=b=1,c=0Parser nie mógł rozpoznać (błąd składni): {\displaystyle , to również kładziemy } z=0Parser nie mógł rozpoznać (błąd składni): {\displaystyle , jeśli natomiast } a=b=c=1Parser nie mógł rozpoznać (błąd składni): {\displaystyle to 7 klauzul jest spełnionych gdy } z=1Parser nie mógł rozpoznać (błąd składni): {\displaystyle . Pozostaje zdefiniować żądaną liczbę spełnionych klauzul w formule wynikowej na } 7mParser nie mógł rozpoznać (błąd składni): {\displaystyle . Z wymienionych własności wynika, że formuła wynikowa posiada wartościowanie spełniające dokładnie } 7mParser nie mógł rozpoznać (błąd składni): {\displaystyle 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)Parser nie mógł rozpoznać (błąd składni): {\displaystyle mówimy, że podzbiór } V' VParser nie mógł rozpoznać (błąd składni): {\displaystyle jest pokryciem wierzchołkowym, jeśli każda krawędź w G ma co najmniej jeden z końców w zbiorze } V'Parser nie mógł rozpoznać (nieznana funkcja „\bigskip”): {\displaystyle . \bigskip \noindent {\bf Problem} NODE COVER\\ {\it Wejście:} Graf nieskierowany } G=(V,E)Parser nie mógł rozpoznać (błąd składni): {\displaystyle , liczba całkowita } k

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)
Wejście: Rodzina trójelementowych podzbiorów zbioru X takiego że |X|=3k dla pewnej calkowitej k
Wyjście: TAK jesli istnieje podrodzina taka, że każdy element zbioru X należy do dokładnie jednego zbioru rodziny Parser nie mógł rozpoznać (błąd składni): {\displaystyle \cal F"} , NIE w przeciwnym przypadku

section

Wykaż że EXACT COVER BY 3-SETS jest NP-zupełny.

Rozwiązanie

Problem SET COVERING (pokrycie zbiorami)
Wejście: Rodzina F={S1,,Sn} podzbiorów zbioru |X|, liczba całkowita kn
Wyjście: TAK, jeśli istnieje k-elementowa podrodzina rodziny F, która pokrywa cały zbiór |X|, w przeciwnym przypadku NIE.

section

Wykaż NP-zupełność problemu SET COVERING.

Rozwiązanie

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)
Wejście: Skończony zbiór 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