Złożoność obliczeniowa/Wykałd 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 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.

Zapewne zauważyłaś(-łeś), że w wielu podręcznikach do algorytmiki również mówi się o NP-zupełności. Na ogół korzysta się wtedy z redukcji wielomianowej. Złożoność czasowa jest łatwiejsza do analizy w przypadku modelu obliczeń takiego jak (uproszczony) język programowania wysokiego poziomu. Analiza złożoności pamięciowej (i to tylko z uwzględnieniem pamięci roboczej) może być trudniejsza.
Redukcja logarytmiczna jest bardziej uniwersalna i dlatego stosujemy ją w teorii złożoności.
W literaturze przyjmuje sie również nieco inną definicję problemu 3SAT, w której zakłada sie dodatkowo, że w każdej klauzuli występują dokładnie 3 parami różne literały. Dowód NP-zupełności tej wersji otrzymujemy przez uzupełnienie dowodu powyższego w następujący sposób:
Załóżmy że . Wprowadzamy nową zmienną i kładziemy . Jeśli istnieje wartościowanie spełniające formułę Parser nie mógł rozpoznać (błąd składni): {\displaystyle <math>, 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 <math>C_j} formułą </math>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łę <math>\psi} , to aby było prawdziwe lub musi mieć wartość 1, a zatem to samo wartościowanie (bez zmiennej ) spełnia formułę .
Analogicznie, jesli </math>C_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 } abcParser 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=1b=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=1c=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
takiego że dla pewnej calkowitej
Wyjście: TAK jesli istnieje podrodzina taka, że każdy element zbioru 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.
Problem SET COVERING (pokrycie zbiorami)
Wejście: Rodzina podzbiorów zbioru
,
liczba całkowita
Wyjście: TAK, jeśli istnieje k-elementowa podrodzina rodziny
,
która pokrywa cały zbiór , w przeciwnym przypadku NIE.
section
Wykaż NP-zupełność problemu SET COVERING.
Suma podzbioru i inne problemy liczbowe
Teraz zajmiemy się kilkoma problemami związanymi z liczbami. Najwięcej trudu będzie kosztować udowodnienie NP-zupełności pierwszego z nich -- następne pójdą już łatwiej. Ta pierwsza trudność zasadza się na tym, że jak do tej pory dowodziliśmy NP-zupełność tylko dla problemów, w których tak naprawdę nie ma liczb, jako elementów struktury kombinatorycznej. Oczywiście, każde słowo wejściowe może 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 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.
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.
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.
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 .
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.
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.