Złożoność obliczeniowa/Wykład 6: NP-zupełność jako narzędzie analizy problemu
Wstęp
Zacieśnienie problemu polegające na nałożeniu dodatkowych warunków, które muszą być spełnione przez instancję, może zmniejszyć złożoność problemu. W tym wykładzie poznamy ciekawe przypadki, gdy po zacieśnieniu problem staje się obliczeniowo łatwy, jak i sytuacje przeciwne, gdy nawet mocne ograniczenia nie likwidują NP-zupełności. Poznamy również pojęcie silnej NP-zupełności, pozwalające abstrahować od wpływu wielkości liczb na trudność obliczeniową, a także uniezależniające trudność problemu od sposobu kodowania liczb.
Ciekawe podproblemy
Spełnialność
W poprzednim wykładzie zauważyliśmy, że im prostszy problem źródłowy, tym łatwiej skonstruować redukcję z tego problemu do innego. Wiemy, że jednym z podstawowych problemów służących jako początek redukcji jest 3SAT. Naturalne jest zatem pytanie, czy dalsze zawężenia problemu SAT polegające na skracaniu klauzul zachowują NP-zupełność. Oczywiste jest, że 1SAT to problem trywialny -- na wejściu jest po prostu koniunkcja literałów -- pozostaje zatem 2SAT. Przypomnijmy, że oznacza to, iż każda alternatywa jest co najwyżej dwuskładnikowa, a dodatkowo załóżmy, że jeśli jest tylko jeden składnik, to powielamy go. Zatem każda alternatywa jest długości dwa.
Twierdzenie 2.1
Problem 2SAT jest rozwiązywalny w czasie wielomianowym.
Dowód
Każdą alternatywę można traktować jako implikację . Rozważmy zatem graf skierowany dla wejściowej formuły zbudowany następująco:
- dla każdej zmiennej wstępującej w formule tworzymy dwa wierzchołki: oraz ,
- dla każdej alternatywy tworzymy dwie krawędzie: oraz .
W ten sposób krawędzie grafu opisują implikacje logiczne zawarte w formule : jeśli występuje w formule, i pewne wartościowanie kładzie (czyli ), to w tym wartościowaniu zachodzi . Zatem jeśli początek krawędzi grafu ma wartość 1, to koniec krawędzi również. Zauważmy, że symetria w grafie, polegająca na tym, że istnieją obie krawędzie: oraz , odpowiada po prostu kontrapozycji w każdej implikacji.
Rysunek 6.1 przedstawia dla przykładowej formuły:
Szukając wartościowania spełniającego tę formułę, zacznijmy na przykład od . Od wierzchołka w grafie prowadzi ścieżka do , co oznacza że też musi mieć wartość 1, zatem nie istnieje wartościowanie spełniające formułę , w którym . Ale jeśli położymy , to, ponieważ istnieje również ścieżka z do , otrzymamy . Więc nie da się ustalić wartościowania dla , a zatem i dla całej formuły.
Z powyższego rozumowania łatwo można wyciągnąć następujący wniosek: jeśli w grafie dla pewnej zmiennej Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} wierzchołki Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} oraz Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle \neg} Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} należą do pewnego cyklu, to formuła Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle \phi} nie jest spełnialna. Okazuje się, że prawdziwa jest również implikacja odwrotna. Wykażemy mianowicie, że jeśli dla każdej zmiennej Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} wierzchołki Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} oraz Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle \neg} Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} nie leżą na wspólnym cyklu, to istnieje wartościowanie spełniające Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle \phi} .
Zacznijmy od dowolnego wierzchołka Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle v} takiego, że nie istnieje ścieżka z Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle v} do Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle \neg v} . Z założenia wynika, że dla każdej zmiennej Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} co najmniej jeden z wierzchołków Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} oraz Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle \neg} Parser nie mógł rozpoznać (SVG (MathML może zostać włączone przez wtyczkę w przeglądarce): Nieprawidłowa odpowiedź („Math extension cannot connect to Restbase.”) z serwera „https://wazniak.mimuw.edu.pl/api/rest_v1/”:): {\displaystyle x_i} posiada tę własność. Wszystkim wierzchołkom osiągalnym z przypisujemy wartość 1. Negacjom tych wierzchołków przypisujemy 0, co odpowiada znajdowaniu wierzchołków osiągalnych z , posuwając się wstecz (czyli: jedynkę propagujemy w przód, zaś zero cofając się po krawędziach grafu).
Nie jest możliwa sytuacja, że danemu wierzchołkowi przypisujemy w tej procedurze różne wartości. Oznaczałoby to, że zarówno jak i są osiągalne z , co pociągałoby istnienie ścieżki z do .
Jeśli pozostał jakiś wierzchołek o nieprzypisanej wartości, to powtarzamy procedurę, aż wartościowanie obejmie wszystkie wierzchołki. Upewnijmy się jeszcze, że kolejne powtórzenia procedury sa poprawne i nie zmieniają wartościowań ustalonych w poprzednich iteracjach. Załóżmy, że w kolejnym przeglądzie grafu istnieje krawędź od wierzchołka wartościowanego na 1 w tej iteracji do pewnego wierzchołka wartościowanego we wcześniejszej iteracji na 0 i że jest to pierwsza taka sytuacja. Zauważmy jednak, że wartościowanie propaguje się przeciwnie do kierunku krawędzi , zatem już w poprzedniej iteracji musiało być ustalone , sprzeczność. Analogicznie, nie występują zmiany wartościowania z 1 na 0.
W takim razie obliczone wartościowanie spełnia wszystkie implikacje opisane krawędziami grafu, a zatem spełnia formułę.
Pozostaje zauważyć, że wersję decyzyjną problemu rozwiązuje się, stosując standardowy algorytm znajdowania silnie spójnych składowych grafu skierowanego i sprawdzając, czy w którejś składowej znajduje się zarówno jakaś zmienna jak i jej zaprzeczenie. Formuła jest spełnialna wtedy i tylko wtedy, gdy dla każdego , należy do innej silnie spójnej składowej niż . Algorytm ten ma złożoność liniową. Można pokazać, że znajdowanie wartościowania również jest wykonalne w czasie liniowym.

Długość klauzuli, czyli liczba występujących w niej alternatyw, nie jest jedyną cechą, która może podlegać restrykcji. Inne sensowne zacieśnienie problemu SAT otrzymujemy, ograniczając częstotliwość występowania zmiennych i literałów w formule.
Wejście: Formuła logiczna w koniunkcyjnej postaci
normalnej taka, że w każdej alternatywie są co najwyżej 3 literały,
każda zmienna występuje nie więcej niż 3 razy, a każdy literał nie więcej niż 2 razy.
Wyjście: TAK, jeśli jest spełnialna, NIE, w przeciwnym
przypadku.
Ćwiczenie 2.1
Udowodnij, że 3OCCUR3SAT jest NP-zupełny.
Aby "przedłużyć" redukcję z powyższego ćwiczenia w celu otrzymania formuł z klauzulami o długości dokładnie 3, nie możemy zastosować podstawowej sztuczki polegającej na powieleniu literału w klauzuli ani też dodawania nowych zmiennych, jak to było stosowane w uwadze do wariantów problemu 3SAT w poprzednim module. Nasuwa się pytanie, czy to, że w przeciwdziedzinie redukcji opisanej w rozwiązaniu ćwiczenia istnieją alternatywy o długości 2, jest istotne.
Ćwiczenie 2.2
Czy problem 3OCCUR 3SAT z dodatkowym założeniem, że każda alternatywa zawiera 3 literały nad różnymi zmiennymi, jest NP-zupełny? Oczywiście odpowiedź uzasadnij.
Pierwsza wskazówka podaje tylko odpowiedź: tak/nie.
Druga wskazówka sugeruje sposób uzasadnienia.
Na zakończenie tego rozdziału omówimy jeszcze jedną z wersji
problemu SAT polegających na zacieśnieniu postaci formuły. Mówimy,
że klauzula jest hornowska, jeśli zawiera co najwyżej jeden literał,
niebędący negacją zmiennej (literał pozytywny). Taką klauzulę,
jeśli zawiera literał pozytywny, wygodnie jest traktować jako
implikację, np. jest
równoważna implikacji ,
zaś klauzula jest równoważna .
{{problem|[HORNSAT]||
Wejście: Formuła będąca koniunkcją klauzul hornowskich.
Wyjście: TAK, jeśli ta formuła jest spełnialna, NIE, w przeciwnym przypadku.
Twierdzenie 2.2
Problem HORNSAT jest obliczeniowo łatwy.
Dowód
Konstruujemy algorytm znajdujący wartościowanie spełniające daną formułę, o ile takie istnieje. Wartościowanie to będzie utożsamiane ze zbiorem tych zmiennych, które mają przypisaną wartość 1. Początkowo . Jeśli w formule nie występują klauzule jednoskładnikowe zawierające zmienną pozytywną, to wartościowanie spełnia formułę i algorytm się kończy.
W przeciwnym przypadku, dopóki nie wszystkie implikacje są spełnione wykonuj następującą operację: wybierz dowolną implikację , która jest niespełniona, a więc wartości zmiennych są jedynkami, a wartość jest 0. Dodaj zmienną do zbioru .
Algorytm zatrzymuje się, gdy nie ma niespełnionej implikacji. Wykażemy, że jeśli formuła jest spełnialna, to wartościowanie ją spełnia.
Na początek zauważmy, że każde wartościowanie spełniające formułę musi zawierać cały zbiór na 1. W przeciwnym przypadku, jeśli jest najwcześniej w algorytmie wartościowaną na 1 zmienną, taką że , to jej poprzedniki w rozpatrywanej implikacji należą do , a więc w takiej sytuacji nie spełnia tej implikacji, co stanowi sprzeczność.
Nasz algorytm się zatrzymuje, gdy nie ma już niespełnionych implikacji. Jeśli nadal istnieje niespełniona klauzula, to ma ona postać alternatywy negacji zmiennych, np. , i wszystkie te zmienne mają wartość 1. Ponieważ każde wartościowanie spełniające formułę musi być nadzbiorem wartościowania , więc w takim przypadku nie istnieje wartościowanie spełniające wszystkie klauzule. Zatem nasz algorytm oblicza poprawnie wartościowanie spełniające formułę, o ile takie wartościowanie istnieje.
Pozostaje zauważyć, że opisana procedura jest łatwa do zrealizowania w czasie wielomianowym.

Klasyczne problemy grafowe
Teraz zajmiemy się analizą zacieśnień wybranych problemów grafowych. Na początek odnotujmy kilka bardzo łatwych spostrzeżeń.
Twierdzenie 2.3
Jeśli graf podany na wejściu jest drzewem, to następujące problemy są w P: HAMILTONIAN CYCLE, HAMILTONIAN PATH, CLIQUE, COLORING, NODE COVER, INDEPENDENT SET.
Tylko problem pokrycia wierzchołkowego i równoważny mu problem zbioru niezależnego wymagają naszkicowania algorytmu - pozostałe są trywialne. Przypomnijmy, że dopełnienie pokrycia jest zbiorem niezależnym, wystarczy więc zająć się na przykład tylko tym ostatnim.
Ćwiczenie 2.3
Skonstruuj wielomianowy algorytm znajdowania maksymalnego pod względem liczności zbioru niezależnego w zadanym drzewie .
Przy dowodzeniu NP-zupełności zacieśnienia danego problemu
możemy oczywiście nie korzystać z tego, co dotychczas wiemy o
NP-zupełności problemu. Jednakże warto na ogół zastanowić się, czy
nie przyniesie sukcesu jedna z dwóch poniższych nasuwających się
metod:
- Wykorzystać znaną redukcję z problemu do dowodzącą NP-zupełności problemu . Warianty tej metody mogą być następujące:
- Redukcja ta wykorzystuje tylko instancje należące do . Wówczas dowód już mamy.
- Istnieje NP-zupełny podproblem problemu taki, że wspomniana redukcja zacieśniona do przeprowadza instancje wejściowe w dziedzinę problemu
- Istniejąca redukcja daje się łatwo przekształcić tak, że do jej obrazu należą tylko instancje problemu .
- Skonstruować redukcję z problemu do jego podproblemu .
Znanym nam dobrze przykładem zastosowania metody 2 jest dowód NP-zupełności problemu 3SAT. Inne, trudniejsze przykłady poznamy w dalszej części tego wykładu.
Jeśli chodzi o pierwszą z metod, to wariant pierwszy tej metody -- możliwość przytoczenia bezpośrednio istniejącej redukcji -- ma zastosowanie na przykład w dowodzie NP-zupełności pewnego zacieśnienia problemu komiwojażera. Wymagamy w nim, aby odległości w sieci spełniały warunek trójkąta, przykład ten omawiany jest w następnym wykładzie.
Drugą z wymienionych możliwości poznamy na przykładzie problemu zbioru niezależnego. Prostą do sprawdzenia własnością grafów, która w istotny sposób może ograniczyć trudność problemu, jest maksymalny dopuszczalny stopień wierzchołka. Wykażemy, że problem INDEPENDENT SET jest NP-zupełny, nawet jeśli ograniczamy się do grafów o stopniu wierzchołka nie przekraczającym 4. W tej wersji jest on jednym z ważnych problemów w klasie MAXSNP omawianej w dalszych wykładach.
Twierdzenie 2.4
Problem 4INDEPENDENT SET jest NP-zupełny
Dowód
Przyjrzyjmy się znanej redukcji z problemu 3SAT do INDEPENDENT SET - jest to ta sama redukcja co z 3SAT do NODE COVER, omawiana w poprzednim wykładzie, należy tylko zastąpić wartość generowanego parametru przez , liczbę klauzul. Otrzymujemy następującą równoważność: formuła wejściowa jest spełnialna wtedy i tylko wtedy, gdy graf zdefiniowany w wyniku redukcji posiada zbiór niezależny o wierzchołkach. (porównaj: rysunek 6.2.)
NP-zupełnym podproblemem problemu 3SAT jest 3OCCUR 3SAT. Zauważmy, że jeśli formuła na wejściu spełnia ograniczenie, że żaden literał nie pojawia sie więcej niż 2 razy, to stopień każdego wierzchołka grafu wygenerowanego przez redukcję nie przekracza 4: krawędzie trójkąta wnoszą do stopnia wierzchołka 2, przeciwny do danego literał wnosi co najwyżej 2.
Pozostaje jeszcze niuans związany z tym, że w problemie 3OCCUR 3SAT istotnie ważne są klauzule o długości mniejszej niż 3 (jeśli wejściowa formuła jest postaci 3SAT, to możemy założyć, że w każdej klauzuli występują dokładnie 3 różne zmienne i tego problemu nie ma). Rozwiązanie jest proste: klauzule dwuskładnikowe przekształcamy w odcinki (pojedyncze krawędzie), natomiast jednoskładnikowe w punkty (pojedyncze wierzchołki) i tak samo łączymy z innymi trójkątami, odcinkami i punktami.
Zatem redukcja z problemu 3SAT do INDEPENDENT SET okazała się również redukcją (prawie) z 3OCCUR 3SAT do 4INDEPENDENT SET.

Bardzo ważnym dla zastosowań jest problem kolorowania. Okazuje się on trudny nawet dla bardzo mocnych zawężeń. Jako pierwsze z nich przeanalizujemy ograniczenie na stopień wierzchołków.
Jeśli to ograniczenie wynosi 2, to graf składa się ze ścieżek i cykli i jest łatwo rozstrzygnąć, czy potrzebne są 2 kolory, czy 3. Jeśli maksymalny dopuszczalny stopień wynosi 3, to znane jest twierdzenie mówiące, że taki graf jest trójkolorowalny wtedy i tylko wtedy, gdy nie zawiera kliki rzędu 4 - warunek ten łatwo sprawdzić w czasie proporcjonalnym do . Dopuszczenie wierzchołków stopnia 4 stanowi przeskok do problemu trudnego.
Twierdzenie 2.5
Problem 3COLORING jest NP-zupełny, nawet jeśli zakładamy, że jego dziedzina jest zawężona do grafów o stopniu wierzchołka nieprzekraczającym 4.
Dowód
Stosujemy metodę 2, mianowicie redukujemy problem trójkolorowania dla dowolnych grafów do tego samego problemu dla grafów o stopniu wierzchołka nieprzekraczającym 4.
Podstawą konstrukcji jest gadżet , przedstawiony na sąsiednim rysunku, pozwalający zastępować wierzchołki o stopniu większym niż 4 odpowiednim podgrafem. Postać takiego podgrafu zastępującego wierzchołek o stopniu , jest również przedstawiony na rysunku -- składa się on z kopii gadżetu . Własności grafu są następujące (porównaj rysunek 6.3):
- jest trójkolorowalny i nie jest dwukolorowalny,
- jego rozmiar jest liniowy w stosunku do ,
- wszystkie jego wierzchołki mają stopień nie większy niż 4, a wierzchołków narożnych (nazywanych dalej zewnętrznymi) ma stopień 2,
- każde trójkolorowanie przypisuje wierzchołkom narożnym ten sam kolor.
Redukcja zatem działa według następującego algorytmu.
Niech będzie grafem wejściowym while zawiera wierzchołek : do usuń z dodaj do nową kopię grafu połącz krawędzią każdy wierzchołek zewnętrzny w z innym spośród
dotychczasowych sąsiadów wierzchołka , w dowolnej kolejności end while return
Zastąpienie wierzchołka gadżetem nie wprowadza nowych wierzchołków o stopniu większym niż 4, zatem w grafie wynikowym nie ma takich wierzchołków.
Zastąpienie w trójkolorowalnym grafie wierzchołka o stopniu przez , tak jak opisano powyżej, tworzy graf również trójkolorowalny. Mianowicie, kolorowanie zadane w przenosimy na w ten sposób, że kolory wierzchołków w pozostawiamy, wszystkim wierzchołkom zewnętrznym w dajemy kolor wierzchołka , pozostałe wierzchołki w kolorujemy tak, aby otrzymać poprawne trójkolorowanie. Ta ostatnia czynność jest wykonalna dzięki własnościom gadżetu . Zatem, jeśli graf wejściowy jest trójkolorowalny, to grafy otrzymywane w wyniku kolejnych iteracji algorytmu redukcji też są trójkolorowalne, a więc graf wynikowy również.
Podobnie dowodzimy, że istnienie trójkolorowania grafu implikuje istnienie trójkolorowania grafu .
Dzieki ograniczeniom na rozmiar tworzonego grafu redukcję można wykonać w pamięci logarytmicznej.

W zastosowaniach bardzo ważna jest inna własność grafów: planarność. Teoretycznie, grafy planarne są stosunkowo rzadkie. Praktycznie, mamy z nimi do czynienia bardzo często. Czy obliczeniowa trudność problemu znika, gdy od rozpatrywanych grafów wymagamy dodatkowo tej własności?
Oczywiście, zależeć to będzie od problemu. W przypadku problemu 3COLORING ograniczenie się do grafów planarnych, nawet przy założeniu, że stopień wierzchołka nie przekracza 4, zachowuje NP-zupełność problemu. Dowód nie jest łatwy, ale warto spróbować zrobić go samodzielnie.
Ćwiczenie 2.4
Wykaż, że problem 3COLORING jest NP-zupełny, nawet jeśli dziedzina problemu jest ograniczona do grafów planarnych.
Problemy liczbowe i silna NP-zupełność
Zajmiemy się teraz analizą problemów NP-zupełnych, w których występują liczby. Intuicyjnie, chodzi o takie zagadnienia, w których mamy nie tylko nazwy obiektów (np. wierzchołków grafu), czy też liczby stosunkowo małe (np. wielkość żądanej kliki -- nie ma sensu pytać o klikę rzędu przekraczającego liczbę wierzchołków). Chodzi o sytuacje, w których liczby mogą być dowolnie wielkie w porównaniu do "reszty" instancji, np. w problemie komiwojażera -- długości krawędzi grafu, w problemie sumy podzbioru -- wagi elementów.
Dla tego ostatniego problemu napiszmy dość znany algorytm oparty o technikę programowania dynamicznego.
Ćwiczenie 3.1
Na wejściu dana jest tablica liczb naturalnych oraz liczba naturalna . Napisz algorytm o złożoności czasowej znajdujący podzbiór elementów tablicy, którego suma liczb wynosi .
Tylko pozornie złożoność tego rozwiązania problemu SUBSET SUM jest
wielomianowa. Złożność, jak dobrze wiemy, jest funkcją rozmiaru
danych, czyli długości ich zapisu. Przy czym, zakładamy "rozsądne"
kodowanie instancji, w szczególności wymagamy, aby liczby były
kodowane binarnie. Liczba w problemie SUBSET SUM jest zapisana
na bitach i w stosunku do tej wielkości
funkcja nie jest wielomianowa, lecz wykładnicza. Jeżeli
złożoność algorytmu jest wielomianowa od rozmiaru danych i wielkości
największej liczby w instancji, to mówimy, że jest to algorytm o
złożoności pseudowielomianowej.
Zatem nie ma tutaj ani paradoksu, ani tym bardziej odkrycia, że . Z praktycznego punktu widzenia można jednak dostrzec zalety takiego algorytmu. Jeśli liczby w instancji nie są wielkie, to takie rozwiązanie, mimo że niewielomianowe, może być bardzo efektywne. Naturalne więc staje sie pytanie, czy tego typu sytuacja dotyczy wszystkich problemów NP-zupełnych i jak ją można formalnie opisać.
Zauważmy, że na przykład w redukcji z problemu 3SAT do CLIQUE liczby generowane przez funkcje redukcji mają wielkość wielomianową w stosunku do rozmiaru formuły. Podobnie jak dla dowodu NP-zupełności trójdzielnego skojarzenia czy kolorowania. Również w redukcji z problemu cyklu Hamiltona do komiwojażera wagi krawędzi w generowanym grafie są ograniczone wielomianowo (faktycznie, przez stałą 2).
Przeciwna sytuacja zachodzi w przypadku redukcji z EXACT COVER BY 3SETS do SUBSET SUM. Generowane przez redukcję liczby są zapisywane na wielomianowej liczbie bitów, ich wartości są wykładnicze i to decyduje o trudności problemu SUBSET SUM. Ta cecha przenosi się na problem plecakowy oraz problem podziału. Aczkolwiek też NP-zupełne, te problemy wydają się nieco łatwiejsze niż wcześniej omawiane problemy grafowe.
Formalizacja pojęcia algorytmu psedowielomianowego w modelu obliczeń wymaga dodatkowych pojęć. Bez nich instancje wejściowe są po prostu ciągami bitów, nieposiadającymi struktury! Rozważanie wielkości liczb w instancji możliwe jest tylko poprzez "dekodowanie" słowa wejściowego (ciągu bitów), czyli interpretację w terminach problemu naturalnego. Wprowadźmy zatem potrzebne definicje.
Niech będzie językiem nad pewnym alfabetem . Załóżmy, że NUM jest funkcją obliczalną w czasie wielomianowym, i , dla każdego słowa . Intuicyjnie: funkcja NUM definiuje wartość największej liczby w instancji . Jeśli wielomianem, to oznaczmy .
Definicja 3.1
Przy oznaczeniach jak powyżej, mówimy, że maszyna Turinga działa w czasie pseudowielomianowym, jeśli dla każdego słowa wejściowego liczba wykonywanych kroków nie przekracza NUM , dla pewnego wielomianu .
Język jest silnie NP-zupełny, jeśli istnieje wielomian taki, że jest NP-zupełny.
Język (problem) jest nieliczbowy, jeśli istnieje wielomian taki, że dla każdego słowa wejściowego , NUM .
Powyższe rozważania mają sens (i zastosowanie praktyczne) tylko w przypadku właściwego doboru funkcji NUM mającego odpowiednik w naturalnej definicji problemu. Na ogół przyjmuje się, że jest to największa liczba występująca w naturalnej, "rozsądnej" definicji problemu.
Ćwiczenie 3.2
Podaj sensowną definicję funkcji NUM dla problemu SUBSET SUM, dla której algorytm rozwiązujący poprzednie ćwiczenie jest pseudowielomianowy.
Z rozważanych dotychczas problemów, nieliczbowe są na
przykład:
- SAT i jego warianty, SET COVERING.
- NODE COVER, CLIQUE, HAMILTONIAN CYCLE, COLORING (zauważmy, że parametr instancji podający rozmiar żądanego pokrycia wierzchołkowego możemy ograniczyć od góry przez moc zbioru wierzchołków grafu, podobnie dla wielu innych problemów grafowych).
Z kolei, niewielomianowej (w stosunku do rozmiaru instancji) wielkości liczby moga pojawiać się w problemach, takich jak:
- TRAVELING SALESMAN.
- SEQUENCING WITHIN INTERVALS.
- SUBSET SUM, PARTITION, KNAPSACK.
Łatwo spostrzec, że każdy NP-zupełny problem nieliczbowy jest z definicji silnie NP-zupełny. Zatem pojęcie to jest istotne dla problemów zawierających dowolnie wielkie liczby. Zastosowanie NP-zupełności w analizie złożoności obliczeniowej takich problemów opiera się na następującym praktycznie bardzo ważnym fakcie:
Twierdzenie 3.2
Jeśli P NP , a jest problemem silnie NP-zupełnym, to nie istnieje algorytm pseudowielomianowy dla .
Ćwiczenie 3.3
Udowodnij powyższe twierdzenie.
Podsumowując, udowodnienie, że dany problem jest silnie NP-zupełny,
praktycznie wyklucza jedną z potencjalnych ścieżek szukania
sensownego rozwiązania, mianowicie algorytmy pseudowielomianowe.
Zatem ma duże znaczenie praktyczne. Przyjrzymy się jeszcze kilku
przykładom.
Ćwiczenie 3.4
Wykaż, że problem komiwojażera jest silnie NP-zupełny.
Jednym z częściej stosowanych w dowodach NP-zupełności problemów
jest następujący problem trójpodziału:
Wejście: Liczby oraz zbiór (być może z
powtórzeniami) , liczb całkowitych takich, że , dla każdego , oraz
Wyjście: TAK, jeśli istnieje podział na podzbiorów takich, że suma liczb w każdym podzbiorze równa jest 1, NIE, w przeciwnym
przypadku.
Pomijamy dość skomplikowany i długi dowód faktu, że 3PARTITION jest silnie NP-zupełny. Zanim wykorzystamy ten problem, zauważmy jeszcze jedna ciekawą cechę problemów silnie NP-zupełnych. Mianowicie, jeśli instancje takiego problemu (zdefiniowane w naturalny sposób) zakodujemy, zapisując liczby unarnie, to problem (formalnie: jezyk odpowiadający mu przy takim kodowaniu) pozostaje nadal NP-zupełny!
Aby się o tym przekonać wystarczy rozważyć oba języki dla tego problemu powstałe przy różnych kodowaniach. Redukcja z języka , w którym kodowanie jest binarne (jest silnie NP-zupełny), do języka , polegająca na zmianie zapisu z binarnego na unarny, jest redukcją logarytmiczną (długość zapisu rośnie wielomianowo), zatem jest NP-zupełny.
Wykorzystamy tę własność w dowodzie NP-zupełności jeszcze jednego zacieśnienia znanego nam już problemu NP-zupełnego. Chodzi o SUBGRAPH ISOMORPHISM, w którym dla zadanych grafów pytamy, czy zawiera podgraf izomorficzny z . Interesują nas zacieśnienia polegające na zakazie występowania cykli w jednym lub obu grafach (czyli grafy będące lasami, a w szczególnych przypadkach drzewami).
Jeśli tylko o zakładamy, że jest drzewem, to szczególnym przypadkiem (czyli jeszcze silniejszym zawężeniem) jest wymaganie, by był ścieżką. Problem staje się równoważny HAMILTONIAN PATH, a więc jest NP-zupełny.
Jeśli o założymy, że jest drzewem, to interesujące staje się narzucenie , by był drzewem lub lasem. Problem izomorfizmu poddrzewa jest wielomianowy, algorytm jest nietrywialny -- nieco łatwiejszy jest problem testowania izomorficzności drzew. Co się dzieje, gdy może być lasem?
Twierdzenie 3.3
Problem SUBGRAPH ISOMORPHISM, w którym dodatkowo zakładamy, że jest drzewem, a lasem, jest NP-zupełny.
Dowód
Skonstruujemy redukcję z problemu 3PARTITION. Na wejściu mamy liczby
oraz ciąg liczb całkowitych takich,
że dla każdego oraz
Drzewo zbudowane jest z rozłącznych ścieżek, każda ma długość (czyli ma wierzchołków), a pierwszy wierzchołek każdej ścieżki jest połączony krawędzią z korzeniem .
Las składa się z gwiazdy o ramionach oraz rozłącznych ścieżek, kolejne ścieżki zawierają odpowiednio wierzchołków (porównaj rysunek 6.5.).
Ponieważ stopień korzenia gwiazdy w wynosi co najmniej 3, więc każde włożenie w musi utożsamić korzeń gwiazdy z korzeniem i wykorzystać początkowe węzły ścieżek w . Zatem ścieżki można zanurzyć w ścieżki drzewa wtedy i tylko wtedy, gdy można je pogrupować po 3, tak aby suma liczby wierzchołków w każdej grupie była równa , a to odpowiada żądanemu trójpodziałowi.
I teraz ciekawa rzecz: tak zdefiniowana redukcja nie jest redukcją logarytmiczną! Powód: działa w czasie wykładniczym, bo dla liczby generuje na wyjściu ścieżkę długości , co musi zająć czas wykładniczy od długości zapisu liczby , czyli od . I tu przychodzi nam z pomocą silna NP-zupełność problemu 3PARTITION. Mianowicie zakładamy, że problem ten został zakodowany unarnie. W tej sytuacji rzeczywiście nasz dowód staje się poprawny.
Poznaliśmy zatem ciekawy przypadek: dowodzenie NP-zupełności problemu nieliczbowego przez redukcję z silnie NP-zupełnego problemu liczbowego, jakim jest problem trójpodziału.

Ćwiczenia dodatkowe
Ćwiczenie 4.1
Wykaż, że NP-zupełna jest wersja NAE3SAT problemu 3SAT, w której pytamy o istnienie wartościowania, dla którego w każdej klauzuli występuje zarówno prawda jak i fałsz. Zakładamy, że wejściowe klauzule zawierają zawsze 3 literały.
Zauważ, że nie używamy tutaj pojęcia "podproblem", gdyż dziedzina jest wprawdzie taka sama (ciąg klauzul co najwyżej trójskładnikowych), ale pytanie jest nieco inne.
Ćwiczenie 4.2
Wykaż, że problem pakowania jest silnie NP-zupełny.
Wejście: zbiór przedmiotów o wagach wymiernych oraz liczba naturalna .
Wyjście: TAK, jeśli wszystkie te przedmioty można upakować w pojemnikach, przy czym suma wag w każdym pojemniku nie może przekraczać 1, w przeciwnym przypadku, NIE.