|
|
Linia 423: |
Linia 423: |
| ==Problemy na zbiorach i liczbach== | | ==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</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.
| |
| }}
| |
|
| |
| {{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== | | ==Podsumowanie technik dowodów NP-zupełności== |
Wstęp
Jak czytelnikowi wiadomo, w aktualnym stanie wiedzy NP-zupełność
jest podstawowym narzędziem do badania probelu algorytmicznego pod
kątem jego trudności obliczeniowej. Na tym wykładzie dla wielu
znanych klasycznych problemów z teorii grafów, kombinatoryki, logiki
i innych podajemy definicje ich decyzyjnych wersji i wykazujemy ich
NP-zupełność. Z problematyką ta spotkaliśmy się już na kursie Algorytmy i struktury danych. Tutaj rozbudowujemy te wiadomości,
czynimy je bardziej formalnymi posługując się modelem maszyny
Turinga i redukcją logarytmiczną. Na przedstawionych przykładach
omawiamy również techniki dowodzenia NP-zupełności. Następny wykład
pokazuje wykorzystanie tych technik do analizy złożoności problemu i
jego zawężeń.
O problemie SAT
Aby wykazać, że dany problem z klasy NP jest NP-zupełny, zgodnie
z własnościami redukcji logarytmicznej (przechodniość) wystarcza
pokazać, dla dowolnego problemu , że redukuje się
do . Innymi słowy, proces dowodzenia że dany problem jest w
NPC składa sie z nastepujących kroków:
- dowieść że należy do NP
- wybrać znany problem NP-zupełny i skonstruować redukcję z do .
Przypomnijemy, że redukcja z problemu A do B dowodzi, że B jest
niełatwiejszy niż A. Zatem dla konstrukcji takiej redukcji łatwiej
jest, gdy (są to rozważania czysto intuicyjne):
- problem A nie jest skomplikowany, tzn. instancje tego problemu
wykazują pewną regularność, łatwą do "opisu" lub "zmierzenia"
- problem B dopuszcza konstrukcje różnorodnych instancji, jest "bogaty
strukturalnie"
Stąd dla wypracowania sobie "warsztatu" dla konstruowania dowodów
NP-zupełności warto rozpocząć od dowiedzenia tej własności dla kilku
nieskomplikowanych (pod wzgledem opisu struktury) problemów. W
rzeczywistości, w literaturze dotyczącej tych zagadnień, można
wyodrębnić niewielką grupę klasycznych w tym sensie problemów, które
najczęściej wystepują jako lewa strona redukcji w dowodach
NP-zupełnosci. Poniżej definiujemy lub przypominamy grupe takich
problemów, dość różnorodnego pochodzenia i zastosowania, i dowodzimy
ich NP-zupełności.
Najpierw 3SAT
Zaczynamy od sytuacji, w której jedynym znanym problemem NP-zupełnym
(a więc możliwą lewą stroną redukcji) jest problem SAT. Jest on dość
niewygodny jako problem źródłowy, redukcja z SAT do innego problemu
na ogół wymaga skomplikowanego opisu. Okazuje się (wykazał to już
Cook w swojej fundamentalnej pracy o NP-zupełności), że podproblem
problemu SAT, w którym wymagamy aby każda klauzula zawierała nie
więcej niz 3 literały jest sam w sobie NP-zupełny, a dowód tego
faktu jest dość łatwy.
Twierdzenie
Problem 3SAT jest NP-zupełny.
Dowód
Problem 3SAT, jako podproblem problemu w klasie NP, sam należy do
NP, zatem pierwsza część dowodu jest za nami.
Konstruujemy redukcję z problemu SAT do 3SAT. Na wejściu mamy
formułe nad zmiennymi
. Każdą z klauzul przekształcamy osobno. Bez
straty ogólności załóżmy, że , gdzie
są parami różne. Jeśli to kładziemy
.
Niech . Dodajemy nowych zmiennych ,
i zastepujemy przez
Nietrudno spostrzec, że jeśli jest spełniona przez pewne
wartościowanie zmiennych , to da się tak dobrać
wartości dla zmiennych , aby spełnione były
wszystkie klauzule w . Na odwrót, jeśli jest spełniona
dla pewnego wartościowania zmiennych
, to łatwo wydedukować, że
dla pewnego . Mianowicie, jeśli ,
to z pierwszej klauzuli w wynika że . Ale wtedy z
drugiej klauzuli mamy lub . W pierwszym przypadku
rozumowanie jest zakończone, w drugim przenosimy rozumowanie na
trzecią klauzulę i tak dalej.
Zatem, po przekształceniu kolejno wszystkich alternatyw powstaje
równoważna formuła o co najwyżej trójskładnikowych alternatywach.
Pozostaje wykazać, że przekształcenie to realizowalne jest w pamięci
logarytmicznej. Zauważmy jednak, że aby wypisać formułę wynikową, MT
potrzebuje pamięć roboczą tylko na licznik bieżącej alternatywy
oraz licznik wygenerowanych do tej pory nowych zmiennych.

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 . Wprowadzamy nową zmienną i kładziemy . Jeśli
istnieje wartościowanie spełniające formułę , to w tym
wartościowaniu formuła powstała z przez zastąpienie
klauzuli formułą jest również spełniona. I na odwrót,
jeśli pewne wartościowanie spełnia formułę , to aby było
prawdziwe lub musi mieć wartość 1, a zatem to samo
wartościowanie (bez zmiennej ) spełnia formułę .
Analogicznie, jesli składa się tylko z jednego literału, to
przekształcamy go w koniunkcję czterech trójskładnikowych klauzul, z
dodanymi dwiema nowymi zmiennymi.
Z tego spostrzeżenia będziemy korzystać w następnych dowodach
NP-zupełności.
Odnotujmy w tym miejscu, że dalsze zawężenie problemu polegające na
dopuszczeniu klauzul o co najwyżej dwóch literałach, 2SAT, jest
problemem obliczeniowo łatwym. Dowód tego faktu odkładamy do
nastepnej lekcji.
MAXSAT
Warto wspomnieć o innych NP-zupełnych wersjach problemu
spełnialnosci. Na przykład, możemy zapytać o istnienie
wartościowania spełniającego co najmniej zadaną liczbe klauzul
(a niekoniecznie wszystkie). Problem ten nosi nazwę MAXSAT, i jest
ogólniejszy niż SAT (a zatem jest również w NPC). Jego trudność
przejawia sie również w tym, że zawężenie do klauzul długości dwa w
przeciwieństwie do SAT, pozostawia ten problem trudnym.
Twierdzenie [MAX2SAT]
Problem MAX2SAT jest NP-zupełny.
Dowód
Konstruujemy redukcję z problemu 3SAT. Na wejściu mamy formułę
. Każdą klauzulę przekształcamy w zbiór 10 klauzul, dla wygody rozważań podzielonych
na trzy grupy, następujacej postaci:
Tych 10 klauzul ma następujace własności:
- Jeśli , to niezależnie od wartości zmiennej co najwyżej 6 klauzul jest spełnionych.
- Jeśli któryś z literałów , lub jest równy 1, to
można dobrać wartość tak, że 7 klauzul jest spełnionych. Można
sie o tym przekonać analizując wszystkie przypadki. Na przykład,
jeśli , , to kładziemy ; jeśli , , to
również kładziemy , jeśli natomiast to 7 klauzul jest
spełnionych gdy .
Pozostaje zdefiniować żądaną liczbę spełnionych klauzul w formule
wynikowej na . Z wymienionych własności wynika, że formuła
wynikowa posiada wartościowanie spełniające dokładnie
alternatyw wtedy i tylko wtedy gdy formuła wejściowa jest
spełnialna.
Maszyna Turinga realizująca redukcję potrzebuje pamieci roboczej
jedynie na liczniki, zatem działa w pamięci logarytmicznej.

NP-zupełne problemy grafowe
Pokrycie wierzchołkowe
Pierwszym z serii problemów grafowych, dla których udowodnimy
NP-zupełność, jest problem pokrycia wierzchołkowego. Dla grafu
nieskierowanego mówimy, że podzbiór jest
pokryciem wierzchołkowym, jeśli każda krawędź w G ma co najmniej
jeden z końców w zbiorze .
Problem NODE COVER
Wejście: Graf nieskierowany , liczba całkowita
Wyjście: TAK jeśli G ma pokrycie wierzchołkowe o liczności k,
NIE w przeciwnym przypadku.
Twierdzenie [Problem NODE COVER]
Problem NODE COVER jest NP-zupełny.
Dowód
Dla podanego podzbioru zbioru wierzchołków bardzo łatwo sprawdzić
czy stanowi on pokrycie, zatem .
Redukujemy problem 3SAT do NODE COVER. Na wejściu mamy formułę
, i zgodnie z uwagą poczyniona przy
dowodzie NP-zupełności 3SAT zakładamy, że każda alternatywa
zawiera dokładnie 3 różne literały. Konstruujemy graf następujący:
każde wystąpienie literału jest wierzchołkiem grafu, wystąpienia
wewnątrz jednej klauzuli tworzą trójkąt. Ponadto, dla każdej pary
literałów przeciwnych wystepujących w różnych klauzulach
odpowiadające im wierzchołki łączymy krawędzią. Na koniec, kładziemy
.
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 . Z ograniczenia na wielkość pokrycia wynika, że z
każdego trójkąta do pokrycia muszą być wybrane dokładnie dwa
wierzchołki. Jeśli formuła jest spełnialna, to w każdym trójkącie
można wyróżnić jeden wierzchołek odpowiadający literałowi
równemu 1. Do pokrycia wybieramy pozostałe dwa wierzchołki.
Pokrywają one wszystkie krawędzie trójkątów oraz wychodzące z tych
wierzchołków krawędzie między trójkątami. Każda pozostała krawędź,
wychodząca z wierzchołka , prowadzi do pewnego wierzchołka
odpowiadającego zaprzeczeniu literału wierzchołka , zatem literał
wierzchołka ma wartość zero i jest wybrane do pokrycia w
trójkącie w którym występuje. Zatem krawędź też jest
pokryta.
W drugą stronę, załóżmy, że dane jest pokrycie. W każdym trójkącie,
dla wierzchołka który nie jest w pokryciu, ustawiamy wartość
odpowiedniej zmiennej tak aby literał w tym wierzchołku był równy 1.
Należy zauważyć że takie wartościowanie jest niesprzeczne. Wynika to
stąd, że przeciwne literały zawsze odpowiadają dwóm wierzchołkom z
różnych trójkątów połączonych krawędzią. Co najmniej jeden z tych
wierzchołków jest w pokryciu, a więc odpowiadający mu literał nie
bierze udziału w obliczaniu wartościowania.
Zauważmy, że tak jak i poprzednio, do realizacji redukcji wystarczy
pamięć robocza rzędu , co kończy dowód.

Cykl i ścieżka Hamiltona
Problem HAMILTONIAN CYCLE
Wejście: Graf nieskierowany
Wyjście: TAK jeśli ma cykl Hamiltona, czyli cykl
przchodzący przez każdy wierzchołek dokładnie raz, NIE w przeciwnym
przypadku.
Twierdzenie [Cykl Hamiltona]
CYKL HAMILTONA jest NP-zupełny.
Dowód
Przynależnośc do klasy NP jest oczywista. Konstruujemy redukcje z
problemu NODE COVER. na wejściu mamy nieskierowany graf
oraz liczbę całkowitą . Oznaczmy graf wynikowy jako
.
Redukcja przeprowadzona jest techniką gadżetu (w literaturze
angielskiej uzywa sie również terminu widget). Gadżet to
fragment struktury wynikowej, o określonych własnościach. W naszym
przypadku pierwszym krokiem redukcji jest wygenerowanie, dla każdej
krawędzi gadżetu będącego
grafem przedstawionym na rysunku 5.2.
rys_5_2.jpg
Jedynie narożne wierzchołki grafu będą połączone z
wierzchołkami spoza . Stąd wynika, że jeśli ma cykl
Hamiltona, to musi on przechodzić przez tylko na jeden z
przedstawionych na rysunku 5.3 sposobów. Konstrukcja gadżetu
uniemożliwia inne usytuowanie cyklu Hamiltona względem .
rys_5_3.jpg
Drugi krok redukcji to wygenerowanie krawędzi w łączących
gadżety w tak zwane ścieżki. Dla każdego wierzchołka
najpierw porządkujemy dowolnie wszystkie jego sąsiednie wierzchołki,
oznaczmy je przez , gdzie jest stopniem wierzchołka . Konstrukcja ścieżki odpowiadającej
wierzchołkowi , łączącej wszystkie gadżety odpowiadające
krawędziom incydentnym z , dokonuje sie przez dołączenie do
zbioru krawędzi postaci
Ostatni krok to dodanie wierzchołków-selektorów , i
połączenie krawędzią każdego selektora z początkiem i końcem ścieżki
odpowiadającej wierzchołkowi , dla każdego .
Kładziemy zatem
rys_5_4.jpg
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
przechodzimy do początku ścieżki odpowiadającej pierwszemu
wierzchołkowi z pokrycia, czyli . Po przejściu gadżetów na tej
ścieżce wracamy do , a stąd do początku ścieżki odpowiadajacej
drugiemu węzłowi z pokrycia, .
Wykażemy, że ma cykl Hamiltona wtedy i tylko wtedy gdy G ma
pokrycie o liczności .
Załóżmy, że ma cykl Hamiltona i prześledźmy jego bieg
zaczynając od (w dowolnym kierunku). Następny wierzchołek na
cyklu musi być początkiem (lub końcem - załóżmy to pierwsze) ścieżki
gadżetów dla pewnego wierzchołka . Dodajemy do generowanego pokrycia. Zgodnie z własnością gadżetu, cykl przebiega
całą ścieżkę i na końcu przechodzi do innego selektora, załóżmy że
jest to . Z musi przejść na początek lub koniec innej
ścieżki, odpowiadającej wierzchołkowi . Dodajemy do
pokrycia i kontynuujemy. Z ostatniej, -tej ścieżki, cykl musi
wrócić do . Ponieważ cykl Hamiltona przeszedł przez wszystkie
wierzchołki , a więc przez wszystkie gadżety , zatem
wybrane w ten sposób wierzchołki stanowią pokrycie.
Teraz załóżmy, że ma pokrycie . Konstruujemy
cykl Hamiltona w . Zaczynamy od selektora i przechodzimy
na początek ścieżki związanej z , czyli do węzła
. Przechodzimy przez kolejne gadżety aż do końca
ścieżki. Dla danego gadżetu musimy podjąć decyzję
czy przechodzimy przez wszystkie wierzchołki czy tylko przez połowę
(jedną "ścianę"). Decyzja zależy od tego czy również
należy do pokrycia. Jeśli nie, to przechodzimy cały gadżet, jeśli
tak, to drugą "ścianę" pozostawiamy, aby później, gdy trawersowana
będzie ścieżka dla również można było przejść przez
. Z ostatniego węzła na ścieżce przechodzimy do
selektora i powtarzamy konstrukcję. Z ostatniego węzła na
-tej ścieżce wracamy do , zamykając w ten sposób cykl
Hamiltona.
Ostatnim krokiem dowodu jest stwierdzenie, że konstrukcję grafu
można wykonać posługując się pamięcią roboczą rozmiaru
logarytmicznego. Wynika to, jak i w poprzednich dowodach, z tego że
maszynie wystarcza pamięć na licznik położenia w wejściowym grafie
oraz licznik numeru (nazwy) generowanego wierzchołka i krawędzi
grafu .

Bardzo podobny w sformułowaniu jest problem ścieżki Hamiltona
(HAMILTONIAN PATH). Na weściu jest graf nieskierowany, na wyjściu
jest TAK jeśli w grafie istnieje ścieżka przechodząca przez każdy
wierzchołek dokładnie raz. Oczywiste jest że istnienie cyklu
Hamiltona implikuje istnienie ścieżki Hamiltona, jednak są to różne
problemy, i NP-zupełnoś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 [HAMILTONIAN PATH]
Problem HAMILTONIAN PATH jest NP-zupełny.
Problemy na zbiorach i liczbach
Podsumowanie technik dowodów NP-zupełności
Najprostsze redukcje otrzymujemy metodą zacieśnienia. Przez
narzucenie dodatkowych zależności w instancjach problemu, o którym
dowodzimy NP-zupełności, otrzymujemy instancje znanego problemu
NP-zupełnego. W ten sposób wykazujemy, że nasz problem jest
uogólnieniem problemu znanego, a więc jest niełatwiejszy. Przykłady
takich redukcji zastosowaliśmy do problemów: EXACT COVER BY 3SETS,
SET COVERING, KNAPSACK.
Pozostałe dowody można by zaliczyć do metody gadżetów. Fragmenty
instancji problemu wejściowego przekształca się we fragmenty
instancji probelmu wynikowego (gadżety), i wiąże się zależnościami
(innymi gadżetami), których zachodzenie w problemie wynikowym ma
mieć ścisłe odzwierciedlenie w spełnieniu wymagań problemu
źródłowego. Czasem gadżet jest trywialny (np. w redukcji SUBSET SUM
do PARTITION jest to ta sama waga elementu), kiedy indziej dość
naturalny i nietrudny (SAT DO 3SAT), czasem bardzo pomysłowy (VERTEX
COVER do HAMILTONIAN CYCLE, 3SAT do TRIPARTITE MATCHING, 3SAT do
MAX2SAT).
Ćwiczenia końcowe
ż, że następujący problem izomorfizmu podgrafu jest NP-zupełny:
Problem SUBGRAPH ISOMORPHISM
Wejście: , - grafy nieskierowane
Wyjście: TAK jeśli ma podgraf izomorficzny z , NIE
w przeciwnym przypadku.
Wskazówka
Istnieje redukcja najprostszego typu z jednego z analizowanych
powyżej problemów.
Rozwiązanie
Jest to proste ugólnienie problemu CLIQUE: szczególnym przypadkiem
podgrafu o który pytamy w problemie SUBGRAPH ISOMORPHISM jest klika
o liczności o która pytamy w problemie CLIQUE.
tym ćwiczeniu pytamy o trudność obliczeniową
problemu pochodzącego z teorii szergowania. Wykaż, że NP-zupełny
jest następujący problem:
Problem SEQUENCING WITHIN INTERVALS
Wejście: Zbiór zadań , dla każdego zadania trzy liczby
całkowite: długość zadania , moment pojawienia się
,oraz ograniczenie czasowe
Wyjście: TAK, jeśli wszystkie zadania można wykonać na jednym
procesorze, bez przerywania, spełniając ograniczenia czasowe, NIE w
przeciwnym przypadku. Formalnie, pytamy o funkcję alokacji
przydzielająca każdemu zadaniu czas rozpoczęcia wykonywania
taki, że oraz
, dla
każdego zadania .
Wskazówka
Spróbuj, układając na prostej (osi liczbowej) odpowiednio
zdefiniowany ciąg odcinków (zadań), wymusić istnienie podzbioru o
zadanej sumie.
Rozwiązanie
Redukcja z problemu SUBSET SUM za pomocą bardzo prostych gadżetów.
Niech oraz będą odpowiednio wagami elementów
oraz żądana sumą podzbioru elementów. Niech .
Konstruujemy zadań, przy czym dla zadanie
ma długość , czas gotowości oraz granicę .
Zadanie jest "wymuszaczem podziału", o parametrach
, , .
Zadania 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, . 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ść , 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 .
section
Problem cięcia w grafie zdefiniowany jest następująco:
Problem FEEDBACK VERTEX SET
Wejście: Graf skierowany , liczba całkowita .
Wyjście: TAK jeśli istnieje w podzbiór -wierzchołkowy,
taki że graf pozostały po usunięciu tego podzbioru jest
acykliczny.
Udowodnij, że FEEDBACK VERTEX SET jest NP-zupełny.
Wskazówka
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?
Rozwiązanie
Na wejściu mamy graf nieskierowany i liczbę .
Zamieniamy ten graf na graf skierowany , z tym samym zbiorem
wierzchołków, zastępując każdą krawędź nieskierowaną przez
dwie krawędzie skierowane: oraz . Liczba jest
taka sama dla obu instancji.
Nietrudno zauważyć, że każde pokrycie wierzchołkowe w jest
zbiorem rozcinającym wszystkie cykle w i na odwrót.
section
Kolorowanie (wierzchołkowe) grafu jest klasycznym problemem
optymalizacyjnym w teorii grafów. Przypomnijmy, że chodzi o
przypisanie wierzchołkom grafu nieskierowanego kolorów tak, aby
końce każdej krawędzi miały różne kolory, a liczba kolorów była
możliwie najmniejsza.
Okazuje sie że nawet jeśli ustalimy żądaną liczbe kolorów na 3, to
problem jest NP-zupełny. Dowód tego faktu nie jest natychmiastowy.
Problem 3COLORING
Wejście: Graf nieskierowany .
Wyjście: TAK, jeśli istnieje funkcja taka, że dla każdej krawędzi , .
Za pomocą redukcji z problemu 3SAT udowodnij, że problem
trójkolorowania jest NP-zupełny.
Wskazówka
Można użyć gadżetu przedstawionego na rysunku 5.6.
{1cm}
[width=12cm]{rys_5_6.jpg}
{1cm}
UWAGA DLA REDAKCJI: RYSUNEK POJAWIA
SIĘ JAKO CZĘŚĆ WSKAZÓWKI
Rozwiązanie
Gadżet ma następujące własności:
- jeśli wierzchołkom 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
- jeśli w danym trójkolorowaniu , to
również .
Redukcję przeprowadzamy następująco:
- generujemy wierzchołki i trójkat oparty na nich
- Dla każdej zmiennej występującej w instancji 3SAT definiujemy
wierzchołki oraz trójkąt oparty na oraz
- dla każdej klauzuli definiujemy kopię gadżetu,
przy czym wierzchołki to już wygenerowane w punkcie 2
wierzchołki literałów o tych samych nazwach, wierzchołek został
wygenerowany w kroku 1, natomiast pozostałe wierzchołki są nowe,
unikalne dla każdej klauzuli
{1cm}
[width=12cm]{rys_5_7.jpg}
{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 ,
- kolorujemy każdy z wierzchołków 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
Jeśli zadane jest trójkolorowanie grafu, to obliczamy wartościowanie
spełniające formułę następująco:
- kolory wierzchołków są różne, więc umawiamy się, że
- dla każdej zmiennej kładziemy wartość tej zmiennej równą
. Ponieważ więc wartość ta wynosi 0 lub 1.
Ponieważ , 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
klauzuli mamy co najmniej jedną jedynkę.