Problem NP

Problem NP (Szablon:Ang., niedeterministycznie wielomianowy) – problem decyzyjny, dla którego rozwiązanie można zweryfikować w czasie wielomianowym. Równoważna definicja mówi, że problem jest w klasie NP, jeśli może być rozwiązany w wielomianowym czasie na niedeterministycznej maszynie Turinga.
Różnica pomiędzy problemami P i NP polega na tym, że w przypadku P znalezienie rozwiązania ma mieć złożoność wielomianową, podczas gdy dla NP sprawdzenie podanego z zewnątrz rozwiązania ma mieć taką złożoność.
Przykładowy problem:
- Czy jakikolwiek niepusty podzbiór zadanego zbioru (np. ) sumuje się do zera?
Trudno znaleźć rozwiązanie tego zagadnienia w czasie wielomianowym. Nasuwający się algorytm sprawdzenia wszystkich możliwych podzbiorów ma złożoność wykładniczą ze względu na liczebność zbioru. Nie wiadomo zatem, czy problem ten jest klasy P. Na pewno natomiast uzyskawszy z zewnątrz kandydata na rozwiązanie (np. ) możemy w liniowym (a zatem wielomianowym) czasie sprawdzić, czy sumuje się do zera. Jest to zatem problem NP.
W szczególności wszystkie problemy klasy P są NP, ponieważ można je sprawdzić w czasie wielomianowym. Innymi słowy, klasa P zawiera się nieostro w NP Nie wiadomo natomiast, czy istnieje problem NP, który nie jest w klasie P (czyli, czy P różni się od NP lub inaczej albo )[2]. Jest to jeden z problemów milenijnych.
Prognozy na rozwiązanie
Podejmowano kilka prób oszacowania, kiedy ten problem może być rozstrzygnięty:
- W 2000 roku Buss przewidywał, że zostanie potwierdzone w ciągu 20 lat[3].
- W 2001[4] roku 40 spośród 97 ekspertów było przekonanych, że problem ten zostanie rozwiązany do 2039 roku, a 57, że do roku 2070[5].
- Według New Scientist z 2010 roku istnieje 50% szans na rozwiązanie problemu przed 2024 rokiem, gdyż 9 spośród 18 badanych hipotez udowodniono, zanim upłynęły 54 lata od ich postawienia[6].
- Zgodnie z ankietą z 2011 roku wśród 152 ekspertów 53% z nich uważa, iż problem zostanie rozwiązany przed 2100 rokiem, a 41%, że po nim[4].
- W 2012 roku analiza 144 hipotez matematycznych (w tym tych nieudowodnionych) uwzględniająca wzrost liczby matematyków oraz coraz lepszy przepływ wiedzy pomiędzy nimi wykazała, że szansa na rozwiązanie problemu przed 2024 rokiem to 41%[7].
Definicja formalna
Klasa złożoności NP może być zdefiniowana w kategorii klas NTIME(f(n)) w następujący sposób:
Alternatywnie, klasę NP można zdefiniować w kontekście deterministycznych maszyn Turinga. Powiemy, że język Szablon:Mvar należy do NP wtedy i tylko wtedy, gdy istnieją wielomiany Szablon:Mvar i Szablon:Mvar, oraz deterministyczna maszyna Turinga Szablon:Mvar, taka że:
- dla dowolnych Szablon:Mvar i Szablon:Mvar, maszyna Szablon:Mvar, mając podaną na wejściu parę (Szablon:Mvar, Szablon:Mvar), kończy działanie w nie więcej niż Szablon:Mvar(Szablon:Mvar) krokach,
- dla dowolnego Szablon:Mvar należącego do Szablon:Mvar, istnieje słowo Szablon:Mvar długości nie większej niż Szablon:Mvar(Szablon:Mvar), takie że maszyna Szablon:Mvar akceptuje słowo wejściowe (Szablon:Mvar, Szablon:Mvar),
- dla dowolnego Szablon:Mvar nienależącego do Szablon:Mvar oraz dowolnego Szablon:Mvar o długości nie większej niż Szablon:Mvar(Szablon:Mvar), maszyna Szablon:Mvar odrzuca słowo wejściowe (Szablon:Mvar, Szablon:Mvar).
Wprowadzenie
Wiele naturalnych problemów algorytmicznych znajduje się w klasie złożoności NP. W szczególności, decyzyjne wersje wielu interesujących problemów przeszukiwania oraz problemów optymalizacyjnych należą do NP.
Definicja bazująca na weryfikatorach
W celu wyjaśnienia definicji klasy NP bazującej na weryfikatorach przeanalizujemy problem sumy podzbioru:
- Mając dany skończony zbiór składający się wyłącznie z liczb całkowitych (na przykład {−7, −3, −2, 5, 8}), rozstrzygnąć, czy istnieje taki jego niepusty podzbiór, którego elementy sumują się do zera (w naszym przykładzie odpowiedź jest pozytywna, gdyż podzbiorowi {-3, -2, 5} odpowiada suma Szablon:Nowrap).
Moglibyśmy zaproponować algorytm rozwiązujący powyższy problem, a bazujący na sprawdzaniu wszystkich możliwych podzbiorów. Niestety, liczba podzbiorów, a tym samym czas obliczeń, rośnie wykładniczo w stosunku do rozmiaru podanego zbioru. Zauważmy jednak, że mając podany pewien podzbiór, możemy łatwo sprawdzić, czy suma jego elementów wynosi zero. Jeśli tak jest, mówimy, że dany zbiór jest świadkiem faktu, że odpowiedź na zadany problem jest pozytywna. Algorytm sprawdzający, czy elementy zadanego zbioru sumują się do zera, nazywamy natomiast weryfikatorem.
Bardziej ogólnie, mówimy, że problem obliczeniowy należy do NP, jeśli istnieje dla niego weryfikator Szablon:Mvar. Mając dowolny egzemplarz Szablon:Mvar problemu Szablon:Mvar, dla którego odpowiedź jest pozytywna, musi istnieć świadek Szablon:Mvar, taki że Szablon:Mvar akceptuje słowo wejściowe (Szablon:Mvar, Szablon:Mvar) w czasie wielomianowym. Co więcej, jeśli odpowiedź na Szablon:Mvar jest negatywna, weryfikator Szablon:Mvar odrzuci słowo (Szablon:Mvar, Szablon:Mvar) dla wszystkich możliwych Szablon:Mvar. Zauważ, że weryfikator może odrzucić wejście nawet, gdy odpowiedź jest pozytywna, jeśli tylko Szablon:Mvar nie jest poprawnym świadkiem. Dla przykładu, w przypadku problemu sumy podzbioru, jeśli istnieje podzbiór, którego elementy sumują się do zera, ale jako świadek Szablon:Mvar wybrany zostanie inny podzbiór, dla którego nie jest to prawdą, weryfikator odrzuci słowo wejściowe. Jeśli jednak nie istnieje podzbiór o zerowej sumie, weryfikator będzie odrzucał wejście niezależnie od wyboru świadka. Ponadto w przypadku tego problemu, weryfikator działa w czasie wielomianowym (potrzeba jedynie sprawdzić, czy Szablon:Mvar faktycznie jest podzbiorem Szablon:Mvar oraz czy suma jego elementów jest zerowa), a zatem problem sumy podzbioru należy do klasy NP.
Dopełnienie przytoczonego problemu obliczeniowego może zostać sformułowane w następujący sposób:
- Mając dany skończony zbiór liczb całkowitych, rozstrzygnąć, czy dowolny jego niepusty podzbiór ma niezerową sumę.
Definicja bazująca na weryfikatorach nie wymaga istnienia żadnego łatwego do zweryfikowania świadka dla odpowiedzi negatywnej. Klasę problemów obliczeniowych z takimi świadkami nazywamy co-NP. Problemem otwartym jest czy dla dowolnego problemu obliczeniowego w klasie NP istnieją świadkowie odpowiedzi negatywnych, a zatem czy zawierają się one w co-NP.
Definicja bazująca na maszynach Turinga
Następująca definicja jest równoważna definicji bazującej na weryfikatorach:
- Klasa złożoności NP jest zbiorem problemów decyzyjnych rozpoznawanych przez niedeterministyczną maszynę Turinga działającą w czasie wielomianowym (oznacza to, że jeśli słowo należy do języka to istnieje przebieg akceptujący – klasa co-NP jest zdefiniowana analogicznie w kategorii ścieżek odrzucających).
Równoważność powyższej definicji z tą bazującą na weryfikatorach opiera się na fakcie, że niedeterministyczna maszyna Turinga można rozwiązać problem z klasy NP w czasie wielomianowym poprzez niedeterministyczny wybór świadka oraz symulację na nim weryfikatora. Z drugiej strony, jeśli istnieje niedeterministyczna maszyna Szablon:Mvar rozwiązująca pewien problem z NP, możemy łatwo skonstruować weryfikator dla tego problemu. Będzie on w deterministyczny sposób symulował pewien przebieg maszyny Szablon:Mvar, korzystając ze świadka za każdym razem, gdy należy dokonać niedeterministycznego wyboru.
Przykłady
Poniżej znajduje się niekompletna lista problemów znajdujących się w klasie NP.
- Wszystkie problemy z klasy P (Dla dowolnego świadka weryfikator może go zignorować i rozwiązać problem w czasie wielomianowym. Alternatywnie, deterministyczna maszyna Turinga jest jednocześnie przypadkiem szczególnym maszyny niedeterministycznej.)
- Wersja decyzyjna problemu faktoryzacji: mając dane liczby naturalne Szablon:Mvar oraz Szablon:Mvar, rozstrzygnąć, czy istnieje dzielnik Szablon:Mvar liczby Szablon:Mvar, taki że 1 < Szablon:Mvar < Szablon:Mvar.
- Problem izomorfizmu grafów.
- Wszystkie problemy NP-zupełne, między innymi:
- Problem komiwojażera, polegający na znalezieniu cyklu o minimalnej sumie wag, zawierającego wszystkie wierzchołki grafu
- Problem spełnialności: mając daną formułę logiczną, rozstrzygnąć, czy istnieje takie wartościowanie zmiennych zdaniowych, żeby formuła była prawdziwa.
Własności
Klasa NP jest zamknięta na:
Nie jest wiadome, czy NP jest zamknięte na dopełnienie (jest to tak zwany problem NP vs. co-NP).
Dlaczego niektóre problemy NP są trudne
Ponieważ w klasie tej znajduje się wiele istotnych problemów, podjęte zostały intensywne prace nad znalezieniem algorytmów działających w czasie wielomianowym rozwiązujących problemy NP. Niemniej jednak, w klasie NP wciąż pozostało wiele problemów, dla których nie udało się opracować takich algorytmów i wydają się one wymagać superwielomianowego czasu obliczeń. Zagadnienie, czy wszystkie takie problemy da się rozwiązać w czasie wielomianowym jest jednym z najważniejszych pytań informatyki (jest to tak zwany problem P vs NP).
Ważnym dla tego problemu pojęciem jest klasa problemów NP-zupełnych, która jest podzbiorem NP i może być nieformalnie rozumiana jako zbiór „najtrudniejszych” problemów NP. Jeśli istnieje wielomianowy algorytm rozwiązujący pewien problem NP-zupełny, to dowolny problem NP można rozwiązać w czasie wielomianowym. W związku z tym, oraz z powodu wielu przeprowadzonych badań skupiających się na znalezieniu wielomianowych rozwiązań dla problemów NP-zupełnych, które zakończyły się niepowodzeniem, jeśli dla danego problemu zostanie udowodnione, że jest on NP-zupełny, to jest wielce prawdopodobne, że nie istnieje dla niego algorytm wielomianowy.
Tym niemniej, dla niektórych problemów NP istnieją algorytmy wielomianowe, które dają rozwiązanie nieoptymalne, ale często wystarczająco dobre. Ponadto rzeczywiste przypadki niektórych problemów są łatwiejsze do rozwiązania niż ich teoretyczne odpowiedniki.
Równoważność definicji
Obie definicje klasy złożoności obliczeniowej NP – ta przedstawiająca ją jako zbiór języków akceptowanych przez niedeterministyczne maszyny Turinga w czasie wielomianowej, oraz ta mówiąca, że są to problemy o rozwiązaniach weryfikowalnych przez deterministyczną maszynę Turinga – są sobie równoważne.
W celu udowodnienia tego faktu przyjmijmy najpierw, że mamy deterministyczny weryfikator. Niedeterministyczna maszyna Turinga może w prosty sposób zasymulować działanie tego weryfikatora na słowie wejściowym oraz wszystkich możliwych świadkach. Wymaga to tylko wielomianowo wiele kroków, ponieważ wybór kolejnego znaku świadka odbywa się w sposób niedeterministyczny, a długość świadka musi być ograniczona z góry przez wielomian względem długości słowa wejściowego. Jeśli dla danego słowa wejściowego istnieje jakikolwiek poprawny świadek, będzie również istniał akceptujący przebieg niedeterministycznej maszyny. Natomiast jeśli świadek nie istnieje, to znaczy, że wszystkie przebiegi maszyny odrzucą słowo wejściowe. Z poprawności weryfikatora wiemy jednak, że słowo takie nie należy do rozważanego języka.
Z drugiej strony, przypuśćmy, że mamy daną niedeterministyczną maszynę Turinga Szablon:Mvar akceptującą język Szablon:Mvar w czasie wielomianowym. W każdym z wielomianowo wielu kroków drzewo obliczeń maszyny Szablon:Mvar może rozgałęziać się na co najwyżej skończoną liczbę różnych przebiegów. Dla danego słowa wejściowego możemy zatem zakodować przebiegi maszyny przy użyciu słów o długości ograniczonej wielomianem względem długości wejścia. Weryfikator może zatem dla podanej na wejściu pary (Szablon:Mvar, Szablon:Mvar) symulować przebieg Szablon:Mvar maszyny Szablon:Mvar na słowie wejściowym Szablon:Mvar. Jeśli każdy przebieg maszyny odrzucał Szablon:Mvar, nie będzie istniał poprawny świadek. Jeśli natomiast maszyna akceptowała to słowo w pewnym przebiegu, to jego kodowanie będzie poprawnym świadkiem.
Powiązania z innymi klasami złożoności
- Fakt ten wynika wprost z faktu, że deterministyczna maszyna Turinga jest szczególnym przypadkiem maszyny niedeterministycznej
- Aby udowodnić ten fakt, weźmy dowolną niedeterministyczną maszyną Turinga Szablon:Mvar. Skonstruujemy deterministyczną maszynę Szablon:Mvar akceptującą ten sam język i działającą w wielomianowej pamięci. Maszyna Szablon:Mvar będzie w pętli przeglądała wszystkich możliwych świadków i uruchamiała działający w czasie wielomianowym weryfikator. Ponieważ działająca w czasie wielomianowym maszyna może zapisać tylko wielomianowo wiele bitów, będzie ona należała do klasy PSPACE. Również liczba bitów świadka, jaką może odczytać taka maszyna, jest ograniczona przez wielomian, a zatem możemy się ograniczyć tylko do sprawdzania świadków, których długość jest wielomianowa względem długości wejścia.
- Dowód przebiega w ten sam sposób jak w przypadku zależności gdyż przedstawiona maszyna Szablon:Mvar działa w czasie wielomianowym.
Dopełnieniem klasy NP nazywamy klasę co-NP, zawierającą takie problemy, gdzie dla każdego słowa wejściowego o odpowiedzi negatywnej istnieje tego świadek (zwany często kontrprzykładem). Przykładowo, problem testu pierwszości jest co-NP, gdyż dobrym świadkiem odpowiedzi negatywnej może być nietrywialny dzielnik zadanej na wejściu liczby.
NP jest klasą problemów decyzyjnych. Analogiczną klasą dla problemów funkcyjnych jest klasa złożoności FNP.
Inne charakteryzacje
W kategoriach teorii złożoności opisowej (Szablon:Ang.), klasa NP odpowiada zbiorowi języków definiowalnych przez egzystencjalną logikę drugiego rzędu – w skrócie ESO (twierdzenie Fagina).
Klasa NP może być rozumiana jako rodzaj bardzo prostego interaktywnego systemu dowodzenia, w którym dowodzący dostarcza świadka dowodu, a weryfikator jest deterministyczną maszyną Turinga działającą w czasie wielomianowym, która sprawdza poprawność świadka. Takie rozumowanie jest poprawne, ponieważ właściwe słowo-świadek, jeśli takie istnieje, zostanie zaakceptowane przez weryfikator oraz weryfikator nie zaakceptuje wejścia, jeśli poprawny świadek nie istnieje.
Ważnym rezultatem teorii złożoności obliczeniowej jest fakt, że NP może być określone jako klasa tych problemów, które są rozwiązywalne przez system PCP (Szablon:Ang., dowód weryfikowalny probablistycznie), w którym weryfikator używa O(log Szablon:Mvar) losowych bitów oraz korzysta tylko ze stałej liczby bitów słowa-świadka (klasa PCP(log Szablon:Mvar, 1)). Prostszymi słowami, oznacza to, że weryfikator dla problemów NP omawiany we wcześniejszych sekcjach może być zastąpiony przez taki, który wykonuje tylko ustaloną liczbę odczytów pewnych fragmentów świadka, a następnie logarytmicznie wiele razy rzuca monetą i na podstawie tego jest w stanie określić poprawność świadka z dużym prawdopodobieństwem. Rezultat ten pozwolił udowodnić kilka faktów odnośnie do algorytmów aproksymacyjnych.
Przykład
Wersja decyzyjna problemu komiwojażera należy do klasy NP i jest sformułowana następująco:
- Mając macierz odległości pomiędzy Szablon:Mvar miastami, rozstrzygnąć, czy istnieje trasa z pewnego ustalonego miasta początkowego odwiedzająca wszystkie pozostałe miasta i kończąca się w mieście początkowym, której całkowita długość nie przekracza Szablon:Mvar.
Świadkiem może być oczywiście lista kolejnych miast na wynikowej trasie. Weryfikacja może przeprowadzona w czasie wielomianowym przez deterministyczną maszynę Turinga poprzez proste zsumowanie wartości w komórkach macierzy opowiadających odległościom między kolejnymi miastami.
Niedeterministyczna maszyna Turinga może znaleźć odpowiednią trasę w następujący sposób:
- W każdym odwiedzonym mieście w niedeterministyczny sposób odgadujemy następne miasto do odwiedzenia, dopóki wszystkie wierzchołki nie zostaną odwiedzone.
- Gdy wszystkie wierzchołki zostaną odwiedzone, sprawdzane jest, czy długość znalezionej trasy nie przekracza Szablon:Mvar.
O niedeterministycznym wyborze można myśleć jak o sklonowaniu maszyny Turinga wraz z jej stanem, tak aby każda z maszyn sprawdziła inny możliwy przebieg. Jeśli co najmniej jedna z maszyn odnajdzie trasę krótszą niż Szablon:Mvar, maszyna niedeterministyczna akceptuje wejście. Można również wyobrażać to sobie jako pojedynczą maszynę Turinga, która zawsze odgaduje poprawnie, które miasto należy odwiedzić jako następne tak, aby trasa nie przekracza zadanego limitu.
Poprzez wyszukiwanie binarne po przedziale możliwych sumarycznych długości tras (ograniczone przez iloczyn liczby miast Szablon:Mvar oraz maksymalną wartość w macierzy odległości) można sprowadzić optymalizacyjną wersję problemu komiwojażera do wersji decyzyjnej.
Zobacz też
Przypisy
Linki zewnętrzne
- Tomasz Kazana, Czemu nikt nie wierzy, że P=NP?.
- Szablon:MathWorld [dostęp 2023-06-18].
- Szablon:Otwarty dostęp NP Szablon:Lang, Encyclopedia of Mathematics, encyclopediaofmath.org, [dostęp 2023-06-18].
Szablon:Klasy złożoności Szablon:Problemy milenijne
- ↑ R.E. Ladner, On the structure of polynomial time reducibility, J.ACM, 22, 1975, s. 151–171. Corollary 1.1. ACM site.
- ↑ Szablon:Encyklopedia PWN
- ↑ Szablon:Cytuj
- ↑ 4,0 4,1 http://www.cs.umd.edu/~gasarch/papers/poll2012.pdf
- ↑ http://www.cs.umd.edu/~gasarch/papers/poll.pdf
- ↑ 2011 preview: Million-dollar mathematics problem | New Scientist.
- ↑ http://arxiv.org/ftp/arxiv/papers/1202/1202.3936.pdf