Test Arka

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

{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