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łę , 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 </math>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 |V|Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\ {\it Wyjście}: TAK jeśli G ma pokrycie wierzchołkowe o liczności k, NIE w przeciwnym przypadku. {{twierdzenie|[Uzupelnij]|| Problem NODE COVER jest NP-zupełny. }} {{dowod|[Uzupelnij]|| Dla podanego podzbioru zbioru wierzchołków bardzo łatwo sprawdzić czy stanowi on pokrycie, zatem } { NODE COVER} NPParser nie mógł rozpoznać (błąd składni): {\displaystyle . Redukujemy problem 3SAT do NODE COVER. Na wejściu mamy formułę } =C_1 ... C_mParser nie mógł rozpoznać (błąd składni): {\displaystyle , i zgodnie z uwagą poczyniona przy dowodzie NP-zupełności 3SAT zakładamy, że każda alternatywa } C_jParser nie mógł rozpoznać (błąd składni): {\displaystyle 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 } k=2mParser nie mógł rozpoznać (nieznana funkcja „\vspace”): {\displaystyle . \vspace{1cm} \begincenter \includegraphics[width=12cm]{rys_5_1.jpg}\\ Redukcja 3SAT do NODE COVER \endcenter \vspace{1cm} 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 } kParser nie mógł rozpoznać (błąd składni): {\displaystyle . 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 } vParser nie mógł rozpoznać (błąd składni): {\displaystyle 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 } vParser nie mógł rozpoznać (błąd składni): {\displaystyle , prowadzi do pewnego wierzchołka } wParser nie mógł rozpoznać (błąd składni): {\displaystyle odpowiadającego zaprzeczeniu literału wierzchołka } vParser nie mógł rozpoznać (błąd składni): {\displaystyle , zatem literał wierzchołka } wParser nie mógł rozpoznać (błąd składni): {\displaystyle ma wartość zero i } wParser nie mógł rozpoznać (błąd składni): {\displaystyle jest wybrane do pokrycia w trójkącie w którym występuje. Zatem krawędź } (v, w)Parser nie mógł rozpoznać (błąd składni): {\displaystyle 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 } nParser nie mógł rozpoznać (błąd składni): {\displaystyle , co kończy dowód. }} ===Klika, zbiór niezależny=== Przypomnijmy definicje obu problemów: \bigskip \noindent {\bf Problem} INDEPENDENT SET\\ {\it Wejście:} Graf nieskierowany } G=(V,E)Parser nie mógł rozpoznać (błąd składni): {\displaystyle , liczba całkowita } k |V|Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\ {\it Wyjście}: TAK jeśli } GParser nie mógł rozpoznać (błąd składni): {\displaystyle ma zbiór niezależny (indukowany podgraf bez krawędzi) o } kParser nie mógł rozpoznać (błąd składni): {\displaystyle wierzchołkach, NIE w przeciwnym przypadku. \bigskip \noindent {\bf Problem} CLIQUE\\ {\it Wejście:} Graf nieskierowany } G=(V,E)Parser nie mógł rozpoznać (błąd składni): {\displaystyle , liczba całkowita } k
|V|Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\ {\it Wyjście}: TAK jeśli } GParser nie mógł rozpoznać (błąd składni): {\displaystyle ma podgraf pełny (klikę) o } kParser nie mógł rozpoznać (błąd składni): {\displaystyle wierzchołkach, NIE w przeciwnym przypadku. ====section==== Wykaż, że problem INDEPENDENT SET jest NP-zupełny. \beginhintJeśli } V'Parser nie mógł rozpoznać (błąd składni): {\displaystyle jest pokryciem wierzchołkowym, to jaką własność ma zbiór } V-V'Parser nie mógł rozpoznać (nieznana funkcja „\beginsolutionDope”): {\displaystyle ? </div></div> \beginsolutionDopełnienie pokrycia jest oczywiście zbiorem niezależnym. Zatem redukcja z problemu NODE COVER, mając na wejściu graf } G=(V,E)Parser nie mógł rozpoznać (błąd składni): {\displaystyle i liczbę } kParser nie mógł rozpoznać (błąd składni): {\displaystyle generuje instancję } G'=(V',E'),k'Parser nie mógł rozpoznać (błąd składni): {\displaystyle problemu INDEPENDENT SET, kładąc } G'=G
k'=|V|-kParser nie mógł rozpoznać (błąd składni): {\displaystyle . </div></div> ====section==== Wykaż, że problem INDEPENDENT SET jest NP-zupełny, wykorzystując pokazaną wyżej redukcję z 3SAT do NODE COVER, zmieniając tylko rozumowanie tak, aby odnosiło sie do problemu INDEPENDENT SET. ====section==== Wykaż, że problem CLIQUE jest NP-zupełny. \beginhintRozważ dopełnienie grafu. </div></div> \beginsolutionRedukcja z problemu INDEPENDENT SET. Graf wynikowy jest dopełnieniem grafu źródłowego, a parametr } kParser nie mógł rozpoznać (błąd składni): {\displaystyle ma tę sama wartość. </div></div> ===Cykl i ścieżka Hamiltona=== \bigskip \noindent {\bf Problem} HAMILTONIAN CYCLE\\ {\it Wejście:} Graf nieskierowany } G=(V,E)Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\ {\it Wyjście}: TAK jeśli } GParser nie mógł rozpoznać (błąd składni): {\displaystyle ma cykl Hamiltona, czyli cykl przchodzący przez każdy wierzchołek dokładnie raz, NIE w przeciwnym przypadku. {{twierdzenie|[Uzupelnij]|| 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 } G=(V,E)Parser nie mógł rozpoznać (błąd składni): {\displaystyle oraz liczbę całkowitą } k |V|
G'=(V',E')Parser nie mógł rozpoznać (błąd składni): {\displaystyle . 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 } (u,v) EParser nie mógł rozpoznać (błąd składni): {\displaystyle gadżetu } G_{uv}=(V_{uv}, E_{uv})Parser nie mógł rozpoznać (błąd składni): {\displaystyle 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 } G_{uv}Parser nie mógł rozpoznać (błąd składni): {\displaystyle będą połączone z wierzchołkami spoza } G_{uv}Parser nie mógł rozpoznać (błąd składni): {\displaystyle . Stąd wynika, że jeśli } G'Parser nie mógł rozpoznać (błąd składni): {\displaystyle ma cykl Hamiltona, to musi on przechodzić przez } G_{uv}Parser nie mógł rozpoznać (błąd składni): {\displaystyle tylko na jeden z przedstawionych na rysunku 5.3 sposobów. Konstrukcja gadżetu uniemożliwia inne usytuowanie cyklu Hamiltona względem } G_{uv}Parser nie mógł rozpoznać (nieznana funkcja „\vspace”): {\displaystyle . \vspace{1cm} \begincenter \includegraphics[width=12cm]{rys_5_3.jpg}\\ \endcenter \vspace{1cm} Drugi krok redukcji to wygenerowanie krawędzi w } G'Parser nie mógł rozpoznać (błąd składni): {\displaystyle łączących gadżety w tak zwane ścieżki. Dla każdego wierzchołka } v VParser nie mógł rozpoznać (błąd składni): {\displaystyle najpierw porządkujemy dowolnie wszystkie jego sąsiednie wierzchołki, oznaczmy je przez } u_v^1,...,u_v^{d(v)}
d(v)Parser nie mógł rozpoznać (błąd składni): {\displaystyle jest stopniem wierzchołka } vParser nie mógł rozpoznać (błąd składni): {\displaystyle . Konstrukcja ścieżki odpowiadającej wierzchołkowi } vParser nie mógł rozpoznać (błąd składni): {\displaystyle , łączącej wszystkie gadżety odpowiadające krawędziom incydentnym z } vParser nie mógł rozpoznać (błąd składni): {\displaystyle , dokonuje sie przez dołączenie do } G'Parser nie mógł rozpoznać (błąd składni): {\displaystyle zbioru krawędzi postaci \[E_v=\{([v,u_v^i,6],[v,u_v^{i+1},1]), i=1,\ldots,d(v)-1\}}
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 .
_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
'=_{(uv) E}E_{uv} _{v V}E_v E_S
_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)
Pozwala ona skojarzyć elementy 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)
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.