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

W tej części lekcji wykażemy NP-zupełność dwóch podobnych
problemów liczbowych.
Problem PARTITION (podział)
Wejście: Skończony zbiór elementów oraz dodatnia całkowita
waga każdego elementu
Wyjście: TAK jeśli istnieje podzbiór taki że
, NIE w przeciwnym
przypadku.
section
Wykaż NP-zupełność problemu podziału.
Wskazówka
Skorzystaj z SUBSET SUM. Wystarczy dodać dwa elementy o odpowiednio
dobranej dużej wadze.
Rozwiązanie
Niech . Dodajemy do zbioru dwa elementy i
, . Łatwo sprawdzić, że:
- Jeśli w zbiorze istnieje podzbiór o sumie równej ,
to podzbiór ten z dołączonym elementem daje sumę równą ,
tyle co pozostałe elementy uzupełnione o .
- jeśli w zbiorze istnieje podział na 2
podzbiory o jednakowych wagach, to elementy i sa w
różnych podzbiorach, bo ich wagi sumują się do . W tym
podzbiorze do którego należy suma wag pozostałych elementów
wynosi .
Problem KNAPSACK (plecak)
Wejście: Skończony zbiór elementów, rozmiar
i wartość dla każdego elementu, ograniczenie
pojemności oraz żądana wartość
Wyjście: TAK jeśli istnieje podzbiór taki że
oraz , NIE w
przeciwnym przypadku.
section
Pokaż że KNAPSACK jest NP-zupełny.
Wskazówka
Wykorzystaj SUBSET SUM lub PARTITION.
Rozwiązanie
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.
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ę.