Złożoność obliczeniowa/Klasy L, NL i coNL: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
(Nie pokazano 24 wersji utworzonych przez 3 użytkowników) | |||
Linia 1: | Linia 1: | ||
==Klasy L, NL i coNL== | |||
W tym rozdziale zajmiemy się klasami złożoności, w których dajemy bardzo restrykcyjne wymagania odnośnie zużywanej | |||
pamięci, a mianowicie ograniczamy jej ilość przez funkcję logarytmiczną. Przypomnijmy: | |||
\ | * Klasa L = SPACE(\text{log}<math>n</math>), to klasa tych języków, które mogą być akceptowane w deterministycznej pamięci logarytmicznej, | ||
* Klasa NL = NSPACE(\text{log}<math>n</math>), to klasa tych języków, które mogą być akceptowane w niedeterministycznej pamięci logarytmicznej, | |||
\ | * Klasa \text{co}NL = \text{co}NSPACE(\text{log}<math>n</math>), to dopełnienie klasy tych języków, które mogą być akceptowane w niedeterministycznej pamięci logarytmicznej, | ||
Na podstawie następnego rozdziału i twierdzenia Immermana-Szelepcsényi'ego dowiemy się, że <math>\text{NL=coNL}</math>. Natomiast pytanie czy L=NL pozostaje | |||
Na podstawie następnego rozdziału i twierdzenia Immermana-Szelepcsényi'ego dowiemy się, że | |||
wciąż problemem otwartym. | wciąż problemem otwartym. | ||
Przyjrzymy się teraz problemom zupełnym w klasie NL. Zupełność definiujemy przy pomocy redukcji w pamięci logarytmicznej, gdyż | Przyjrzymy się teraz problemom zupełnym w klasie NL. Zupełność definiujemy przy pomocy redukcji w pamięci logarytmicznej, gdyż | ||
Linia 129: | Linia 17: | ||
gdyż sama redukcja miałaby moc obliczeniową pozwalającą rozwiązać wszystkie problemy z tych klas. Poniższy problem okazuje się być NL-zupełny: | gdyż sama redukcja miałaby moc obliczeniową pozwalającą rozwiązać wszystkie problemy z tych klas. Poniższy problem okazuje się być NL-zupełny: | ||
{{definicja|[Uzupelnij]|| | |||
Problem REACHABILITY: | Problem REACHABILITY:<br> | ||
Wejście: Graf skierowany | Wejście: Graf skierowany <math>G</math> oraz wierzchołki <math>x</math> i <math>y</math>.<br> | ||
Wyjście: Czy istnieje ścieżka od | Wyjście: Czy istnieje ścieżka od <math>x</math> do <math>y</math> w <math>G</math>? | ||
}} | |||
====Ćwiczenie==== | |||
Pokaż, że problem REACHABILITY jest NL-zupełny. | Pokaż, że problem REACHABILITY jest NL-zupełny. | ||
\ | \begin_hint | ||
Zwróć uwagę na fakt, że problem REACHABILITY jest związany z wykonywaniem obliczeń przez maszynę Turinga. | Zwróć uwagę na fakt, że problem REACHABILITY jest związany z wykonywaniem obliczeń przez maszynę Turinga. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
Pokażmy najpierw, że problem REACHABILITY należy do NL. | Pokażmy najpierw, że problem REACHABILITY należy do NL. | ||
Użyjemy dwóch zmiennych | Użyjemy dwóch zmiennych <math>v</math> - wierzchołek bieżący, oraz <math>u</math> wierzchołek kolejny na ścieżce od <math>x</math> do <math>y</math>. | ||
Początkowo | Początkowo | ||
ustawiamy | ustawiamy <math>v:=x</math>. Ponieważ mamy do dyspozycji niedeterminizm to zgadujemy wierzchołek <math>u</math> i sprawdzamy, czy jest sąsiedni do <math>v</math>. | ||
Jeśli nie, to przerywamy obliczenie, wiedząc, że na innej ścieżce obliczeń przetworzymy inne możliwości. | Jeśli nie, to przerywamy obliczenie, wiedząc, że na innej ścieżce obliczeń przetworzymy inne możliwości. | ||
Jeśli jest sąsiedni to sprawdzamy czy | Jeśli jest sąsiedni to sprawdzamy czy <math>u=y</math> co oznacza, że dotarliśmy do celu i akceptujemy parę <math>x</math>, <math>y</math>. W przeciwnym wypadku | ||
ustawiamy | ustawiamy <math>v:=u</math> i kontynuujemy obliczenia. | ||
Formalnie należy jeszcze użyć trzeciej zmiennej | Formalnie należy jeszcze użyć trzeciej zmiennej <math>licznik</math>, która zlicza liczbę kroków, tak aby ostatecznie | ||
odrzucić parę, gdy | odrzucić parę, gdy <math>licznik</math> przekroczy liczbę wierzchołków grafu. Użyliśmy pamięci rzędu <math>\text{log}n</math> co kończy dowód pierwszego faktu. | ||
Teraz musimy pokazać, że każdy inny problem z klasy NL redukuje się do REACHABILITY | Teraz musimy pokazać, że każdy inny problem z klasy NL redukuje się do REACHABILITY | ||
poprzez redukcję w pamięci logarytmicznej. Weźmy dowolny język L z klasy NL i odpowiadającą mu niedeterministyczną maszynę Turinga | poprzez redukcję w pamięci logarytmicznej. Weźmy dowolny język L z klasy NL i odpowiadającą mu niedeterministyczną maszynę Turinga | ||
<math>M</math>. | |||
Rozmiar grafu konfiguracji maszyny działającej w pamięci | Rozmiar grafu konfiguracji maszyny działającej w pamięci <math>\text{log}n</math> to jak wiemy <math>c^{\text{log}n}\in O(n)</math>, | ||
natomiast sprawdzenie czy | natomiast sprawdzenie czy <math>x</math> jest akceptowany przez <math>M</math> możemy sprowadzić do istnienia ścieżki od konfiguracji początkowej | ||
do akceptującej. Jest to zatem instancja problemu REACHABILITY na danych wielkości rzędu | do akceptującej. Jest to zatem instancja problemu REACHABILITY na danych wielkości rzędu <math>n</math> . | ||
Nie potrzebujemy konstruować całego grafu, a jedynie stwierdzać, czy dwie konfiguracje są sąsiednie, co możemy zrobić | Nie potrzebujemy konstruować całego grafu, a jedynie stwierdzać, czy dwie konfiguracje są sąsiednie, co możemy zrobić | ||
w pamięci logarytmicznej. | w pamięci logarytmicznej. | ||
\ | \end_sol | ||
Bardzo ciekawy rezultat, który zbliżył nas do odpowiedzi na pytanie czy L=NL, uzyskał w 2004 Reingold. Pokazał on, że | Bardzo ciekawy rezultat, który zbliżył nas do odpowiedzi na pytanie czy L=NL, uzyskał w 2004 Reingold. Pokazał on, że | ||
problem UNDIRECTED REACHABILITY, czyli osiągalność w grafie | problem UNDIRECTED REACHABILITY, czyli osiągalność w grafie ''nieskierowanym'' należy do klasy L. | ||
==Twierdzenie Immermana-Szelepcsényi'ego== | |||
Ten rozdział poświęcony jest bardzo ciekawemu i całkiem młodemu wynikowi udowodnionemu niezależnie | Ten rozdział poświęcony jest bardzo ciekawemu i całkiem młodemu wynikowi udowodnionemu niezależnie | ||
Linia 179: | Linia 65: | ||
Twierdzenie mówi o tym, że klasy niedeterministyczne złożoności pamięciowej są zamknięte na dopełnienie: | Twierdzenie mówi o tym, że klasy niedeterministyczne złożoności pamięciowej są zamknięte na dopełnienie: | ||
{{twierdzenie|[Immermana-Szelepcsényi'ego]|| | |||
Jeśli <math>{f}(n)</math> jest konstruowalna pamięciowo, to NSPACE(f(n))=coNSPACE(f(n)). | |||
Jeśli | }} | ||
{{dowod|[Uzupelnij]|| | |||
To co zostało pokazane przez autorów, to maszyna niedeterministyczna, która mając dany graf skierowany | To co zostało pokazane przez autorów, to maszyna niedeterministyczna, która mając dany graf skierowany <math>G</math> i | ||
wierzchołek | wierzchołek <math>x</math> potrafi obliczyć liczbę wierzchołków osiąganych z <math>x</math> w grafie <math>G</math> przy użyciu pamięci <math>\text{log}n</math>. | ||
Zrobimy z niej użytek w ostatniej części głównego dowodu, gdy będziemy uruchamiać ją na grafie konfiguracji. | Zrobimy z niej użytek w ostatniej części głównego dowodu, gdy będziemy uruchamiać ją na grafie konfiguracji. | ||
Linia 193: | Linia 78: | ||
będziemy "wykrywać", że coś jest nie tak i kończyć działanie w stanie odrzucającym ("poddawać się"). | będziemy "wykrywać", że coś jest nie tak i kończyć działanie w stanie odrzucającym ("poddawać się"). | ||
Oznaczmy, przez | Oznaczmy, przez <math>S(k)</math> zbiór tych wierzchołków grafu <math>G</math>, które są osiągane z <math>x</math> ścieżką o długości co najwyżej <math>k</math>. Natomiast | ||
przez | przez <math>s(k)=|S(k)|</math> oznaczymy liczność tego zbioru. Naszym obiektem zainteresowania jest zatem obliczenie wartości <math>s(n)</math>, | ||
czyli liczba wszystkich wierzchołków osiągalnych, gdyż | czyli liczba wszystkich wierzchołków osiągalnych, gdyż <math>n</math> -- rozmiar grafu -- ogranicza długość ścieżki. | ||
Pamiętamy jednak, że mamy do dyspozycji tylko logarytmiczną ilość pamięci, więc o zapamiętaniu zbioru | Pamiętamy jednak, że mamy do dyspozycji tylko logarytmiczną ilość pamięci, więc o zapamiętaniu zbioru <math>S(k)</math> (i obliczaniu na jego podstawie | ||
<math>S(k+1)</math> co byłoby banalne) nie możemy marzyć - ma on wielkość | |||
liniową względem rozmiaru | liniową względem rozmiaru <math>G</math>. To brzmi niesamowicie, ale będziemy obliczać <math>s(k+1)</math> na podstawie <math>s(k)</math>! Czyli wystarczy nam liczba | ||
stosownych wierzchołków, która to do zapisu potrzebuje pamięci logarytmicznej. Główna pętla algorytmu przedstawia się następująco: | stosownych wierzchołków, która to do zapisu potrzebuje pamięci logarytmicznej. Główna pętla algorytmu przedstawia się następująco: | ||
\ | \begin_algorithmic | ||
\STATE{ | \STATE{<math>s(0):=1</math>} | ||
\FOR{ | \FOR{<math>i:=1</math> to <math>n</math>} | ||
\STATE{Wyznacz | \STATE{Wyznacz <math>s(i)</math> na podstawie <math>s(i-1)</math>} | ||
\ENDFOR | \ENDFOR | ||
\ | \end_algorithmic | ||
Teraz procedura obliczająca | Teraz procedura obliczająca <math>s(i)</math>. Jest ona całkiem prosta, jeśli zastosujemy w niej pewien skrót notacyjny: | ||
\ | \begin_algorithmic | ||
\STATE{ | \STATE{<math>s(i):=0</math>} | ||
\FORALL{ | \FORALL{<math>v\in V(G)</math>} | ||
\IF{ | \IF{<math>v\in S(i)</math>}\STATE{s(i)++} | ||
\ENDIF | \ENDIF | ||
\ENDFOR | \ENDFOR | ||
\ | \end_algorithmic | ||
Lecz zbioru | Lecz zbioru <math>S(i)</math> nie byliśmy w stanie zapamiętać. Zapowiedzielśmy już, że będziemy sprawdzać, czy wierzchołek do niego należy, | ||
na podstawie | na podstawie <math>s(i-1)</math>. To najbardziej skomplikowana część algorytmu, gdzie wykorzystujemy niedeterminizm. | ||
Przeglądniemy teraz wszystkie wierzchołki | Przeglądniemy teraz wszystkie wierzchołki <math>u</math> grafu <math>G</math> i sprawdzimy, czy któryś z nich należy do <math>S(i-1)</math> w sposób niedeterministyczny. | ||
Przypomnijmy, że taka procedura, gdy mówi \verb"TAK", to wierzchołek na pewno należy do | Przypomnijmy, że taka procedura, gdy mówi \verb"TAK", to wierzchołek na pewno należy do <math>S(i-1)</math>, natomiast gdy mówi "NIE" to mogliśmy trafić na nieodpowiednią | ||
ścieżkę obliczeń. Będziemy jednak zliczać ile wierzchołków zgadliśmy na TAK i sprawdzimy, czy wyjdzie nam | ścieżkę obliczeń. Będziemy jednak zliczać ile wierzchołków zgadliśmy na TAK i sprawdzimy, czy wyjdzie nam <math>s(i-1)</math>. Jeśli tak się stanie, to będziemy mieć gwarancję, że | ||
o każdym wierzchołku | o każdym wierzchołku <math>u</math> zgadliśmy dobrze. Jeśli wyszło nam mniej, to odrzucamy, wiedząc, że na innej ścieżce obliczeń musi nam się udać. | ||
Następnie sprawdzamy, czy z | Następnie sprawdzamy, czy z <math>u</math> można dojść do <math>v</math> przy pomocy jednej krawędzi w ten sposób obliczymy | ||
czy | czy <math>v\in S(i)</math>: | ||
\ | \begin_algorithmic | ||
\STATE{ | \STATE{<math>licznik:=0, wynik:=NIE</math>} | ||
\FORALL{ | \FORALL{<math>u\in V(G)</math>} | ||
\IF{ | \IF{<math>u\in S(i-1)</math>} | ||
\STATE{licznik++} | |||
\IF{<math>u=v</math> lub <math>u\rightarrow v \in G</math>}\STATE{wynik:=TAK}\ENDIF | |||
\ENDIF | \ENDIF | ||
\ENDFOR | \ENDFOR | ||
\IF{ | \IF{<math>licznik<s(i-1)</math>}\RETURN{NIE}\ELSE \RETURN{wynik} \ENDIF | ||
\ | \end_algorithmic | ||
Teraz przejdźmy do konstrukcji maszyny obliczającej, czy | Teraz przejdźmy do konstrukcji maszyny obliczającej, czy <math>u\in S(i-1)</math> w sposób niedeterministyczny. Algorytm jest całkiem prosty i podobny do tego, w którym | ||
pokazywaliśmy, że REACHABILITY jest w NL. | pokazywaliśmy, że REACHABILITY jest w NL. | ||
Zgadujemy sekwencję | Zgadujemy sekwencję <math>k-1</math> wierzchołków. Rozpoczynamy od <math>x</math>. Sprawdzamy, czy każdy kolejny wierzchołek jest sąsiadem poprzedniego (lub równy poprzedniemu) | ||
oraz czy w końcu dochodzimy do | oraz czy w końcu dochodzimy do <math>u</math>. W ten sposób sprawdzimy (niedeterministycznie) wszystkie ścieżki długości co najwyżej <math>i-1</math>. | ||
Poniżej zapis algorytmu dla sytuacji ścieżki długości | Poniżej zapis algorytmu dla sytuacji ścieżki długości <math>k</math>: | ||
\ | \begin_algorithmic | ||
\STATE{ | \STATE{<math>p_1:=x</math>} | ||
\FOR{ | \FOR{<math>i := 2</math> to <math>k</math>} | ||
\STATE{zgadnij | \STATE{zgadnij <math>p_i</math>} | ||
\IF{ | \IF{<math>p_{i-1}\neq p_i</math> i nie zachodzi <math>p_{i-1}\rightarrow p_i \in G</math>}\RETURN{NIE}\ENDIF | ||
\ENDFOR | \ENDFOR | ||
\IF{ | \IF{<math>p_k=u</math>}\RETURN{TAK}\ELSE \RETURN{NIE} \ENDIF | ||
\ | \end_algorithmic | ||
To już koniec algorytmu. Krótka analiza wykazuje, że w trakcie jego działania musimy pamiętać jedynie skończoną liczbę | To już koniec algorytmu. Krótka analiza wykazuje, że w trakcie jego działania musimy pamiętać jedynie skończoną liczbę | ||
wierzchołków i liczb wielkości co najwyżej | wierzchołków i liczb wielkości co najwyżej <math>n</math> zatem działa on w pamięci logarytmicznej. | ||
Przejdźmy zatem do wykorzystania maszyny do udowodnienia tezy naszego twierdzenia. Weźmy język | Przejdźmy zatem do wykorzystania maszyny do udowodnienia tezy naszego twierdzenia. Weźmy język <math>L</math> należący do NSPACE(<math>f(n)</math>), gdzie | ||
<math>f(n)\geqslant \text{log}n</math>, gdyż <math>f(n)</math> jest konstruowalna pamięciowo. Istnieje zatem maszyna niedeterministyczna <math>M</math> akceptująca | |||
<math>L</math> w pamięci niedeterministycznej. Musimy pokazać, że istnieje maszyna niedeterministyczna <math>\overline{M}</math> akceptująca <math>\overline{L}</math> również | |||
w pamięci | w pamięci <math>f(n)</math>. Bierzemy graf konfiguracji <math>M</math> dla słowa wejściowego <math>x</math>. Musimy stwierdzić, czy nie istnieje ścieżka od | ||
konfiguracji początkowej do akceptującej. Wtedy bowiem | konfiguracji początkowej do akceptującej. Wtedy bowiem <math>x\notin L</math> czyli <math>M'</math> ma zaakceptować <math>x</math>. | ||
Oznaczmy konfigurację akceptującą przez | Oznaczmy konfigurację akceptującą przez <math>y</math>. | ||
Liczymy zatem zbiór | Liczymy zatem zbiór <math>S(n)</math> dla grafu konfiguracji przy pomocy algorytmu z pierwszej części dowodu. | ||
Jeśli algorytm zakończy się wynikiem pozytywnym, to oznacza to, że | Jeśli algorytm zakończy się wynikiem pozytywnym, to oznacza to, że <math>s(n)</math> jest policzone | ||
poprawnie. Jeśli zatem w trakcie przeglądania nie zakwalifikowaliśmy wierzchołka | poprawnie. Jeśli zatem w trakcie przeglądania nie zakwalifikowaliśmy wierzchołka <math>y</math> do żadnego ze zbiorów | ||
<math>S(i)</math> to znaczy, że ''nie'' jest on osiągalny. | |||
W tej sytuacji maszyna | W tej sytuacji maszyna <math>M'</math> może zaakceptować słowo <math>x</math>, które | ||
nie należy do | nie należy do <math>L</math>, a tym samym pokazujemy, że <math>L\in \text{coNSPACE}(f(n))</math>. | ||
}} | |||
==Klasy coNP i DP== | |||
Wprowadziliśmy już zarówno klasę NP jak i pojęcie dopełnień klas. Przyjrzyjmy się bliżej klasie coNP. | Wprowadziliśmy już zarówno klasę NP jak i pojęcie dopełnień klas. Przyjrzyjmy się bliżej klasie coNP. | ||
Linia 282: | Linia 167: | ||
Podobnie jak dla NP i twierdzenia Fagina, można scharakteryzować coNP jako zbiór własności teoriografowych wyrażalnych | Podobnie jak dla NP i twierdzenia Fagina, można scharakteryzować coNP jako zbiór własności teoriografowych wyrażalnych | ||
w | w ''uniwersalnej'' logice drugiego rzędu. | ||
Oto przykłady problemów z klasy coNP: | Oto przykłady problemów z klasy coNP: | ||
{{definicja|[Uzupelnij]|| | |||
Problem TAUTOLOGY: | Problem TAUTOLOGY:<br> | ||
Wejście: formuła logiczna | Wejście: formuła logiczna <math>\phi</math> jak dla problemu SAT.<br> | ||
Wyjście: czy każde wartościowanie spełnia | Wyjście: czy każde wartościowanie spełnia <math>\phi</math>? | ||
}} | |||
{{definicja|[Uzupelnij]|| | |||
Problem HAMILTON PATH COMPLEMENT: | Problem HAMILTON PATH COMPLEMENT:<br> | ||
Wejście: graf nieskierowany | Wejście: graf nieskierowany <math>G</math>.<br> | ||
Wyjście: czy | Wyjście: czy <math>G</math> nie zawiera ścieżki Hamiltona? | ||
}} | |||
W powyższych problemach weryfikacja negatywna słowa wejściowego jest łatwa, | W powyższych problemach weryfikacja negatywna słowa wejściowego jest łatwa, | ||
Linia 303: | Linia 188: | ||
Nietrudno udowodnić (patrz ćwiczenie końcowe), że są to problemy zupełne dla klasy coNP. | Nietrudno udowodnić (patrz ćwiczenie końcowe), że są to problemy zupełne dla klasy coNP. | ||
Nie jest to nic zaskakującego, bowiem równie prosto można udowodnić, | Nie jest to nic zaskakującego, bowiem równie prosto można udowodnić, | ||
że jeżeli | że jeżeli <math>L</math> jest NP-zupełny, to jego dopełnienie <math>\overline{L}</math> jest coNP-zupełne. | ||
Jak wiele pytań w teorii złożoności obliczeniowej również i to, czy NP=coNP pozostaje otwarte. | Jak wiele pytań w teorii złożoności obliczeniowej również i to, czy NP=coNP pozostaje otwarte. | ||
Linia 309: | Linia 194: | ||
Jednak już implikacja w drugą stronę nie jest znana. Inna podobna implikacja to: | Jednak już implikacja w drugą stronę nie jest znana. Inna podobna implikacja to: | ||
====Ćwiczenie==== | |||
\ | Jeśli <math>L</math> jest coNP-zupełny i <math>L\in NP</math> to NP=coNP. | ||
\begin_hint | |||
Pokaż inkluzje w obie strony korzystając z symetrii klas. | Pokaż inkluzje w obie strony korzystając z symetrii klas. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
Ustalmy | Ustalmy <math>L</math> z klasy NP, który jest coNP-zupełny. | ||
Weźmy dowolny | Weźmy dowolny <math>L'</math> z klasy coNP. | ||
Ponieważ | Ponieważ <math>L</math> jest coNP-zupełny, więc <math>L'</math> redukuje się do <math>L</math>, czyli | ||
<math>L'</math> należy do NP, bowiem redukcja jest procedurą deterministyczną. | |||
Analogicznie, weźmy dowolny | Analogicznie, weźmy dowolny <math>L'</math> z NP. Wiemy, że <math>\overline{L}</math> jest NP-zupełny, | ||
i należy do coNP. Możemy zatem sprowadzić | i należy do coNP. Możemy zatem sprowadzić <math>L'</math> redukcją do <math>\overline{L}</math>. | ||
Zatem | Zatem <math>L'</math> należy do coNP. | ||
\ | \end_sol | ||
Poniższy rysunek przedstawia relacje pomiędzy poznanymi klasami i omawianą za chwilę klasą DP: | Poniższy rysunek przedstawia relacje pomiędzy poznanymi klasami i omawianą za chwilę klasą DP: | ||
\ | \vspace{1cm} | ||
\begin_center | |||
\includegraphics[width=10cm]{ZO-13-1-rys.jpg}<br> | |||
Relacje pomiędzy klasami NP, coNP i DP | |||
\end_center | |||
\vspace{1cm} | |||
Oczywiście przyglądając się wszystkim takim rysunkom należy pamiętać, że mogą one w wielu miejscach | Oczywiście przyglądając się wszystkim takim rysunkom należy pamiętać, że mogą one w wielu miejscach | ||
kolapsować. | kolapsować. | ||
===Klasa DP=== | |||
Zastanówmy się nad następującym problemem: | Zastanówmy się nad następującym problemem: | ||
{{przyklad|[Uzupelnij]|| | |||
Problem EXACT TSP: | Problem EXACT TSP:<br> | ||
Wejście: graf nieskierowany ważony | Wejście: graf nieskierowany ważony <math>G</math> i liczba <math>K</math> <br> | ||
Wyjście: czy optymalna trasa komiwojażera dla | Wyjście: czy optymalna trasa komiwojażera dla <math>G</math> ma wartość dokładnie <math>K</math>? | ||
}} | |||
Jest to wersja dokładna znanego problemu optymalizacyjnego -- problemu komiwojażera. Wiemy że wersja decyzyjna TSP(D) jest NP-zupełna. | Jest to wersja dokładna znanego problemu optymalizacyjnego -- problemu komiwojażera. Wiemy że wersja decyzyjna TSP(D) jest NP-zupełna. | ||
Linia 351: | Linia 240: | ||
wielomianowym to drugi też. W tym rozdziale | wielomianowym to drugi też. W tym rozdziale | ||
sklasyfikujemy złożoność EXACT TSP dokładniej przy pomocy klasy DP. Nie umiemy bowiem pokazać, że EXACT TSP należy do NP, wszak | sklasyfikujemy złożoność EXACT TSP dokładniej przy pomocy klasy DP. Nie umiemy bowiem pokazać, że EXACT TSP należy do NP, wszak | ||
jak poświadczyć i szybko zweryfikować, że długość optymalnej trasy wynosi dokładnie | jak poświadczyć i szybko zweryfikować, że długość optymalnej trasy wynosi dokładnie <math>K</math>? Widzimy, że odpowiedź na to pytanie wymaga | ||
stwierdzenia, że trasa ma długość co najmniej | stwierdzenia, że trasa ma długość co najmniej <math>K</math> i co najwyżej <math>K</math>, co sugeruje pewne specyficzne połączenie problemu TSP(D) i jego dopełnienia. | ||
{{definicja|[Uzupelnij]|| | |||
Klasa DP to zbiór języków | Klasa DP to zbiór języków <math>L</math> takich, że <math>L=L_1\cap L_2</math>, gdzie <math>L_1\in NP</math> natomiast <math>L_2 \in coNP</math>. | ||
}} | |||
Przy tak postawionej definicji EXACT TSP należy do DP. Jest on bowiem przecięciem języka TSP(D) i TSP(D) COMPLEMENT, tzn. koszt trasy wynosi dokładnie | Przy tak postawionej definicji EXACT TSP należy do DP. Jest on bowiem przecięciem języka TSP(D) i TSP(D) COMPLEMENT, tzn. koszt trasy wynosi dokładnie | ||
<math>K</math>, gdy jest równy co najwyżej <math>K</math> (to przynależność do TSP(D)) oraz co najmniej <math>K</math> (to przynależność słowa do TSP(D) COMPLEMENT). | |||
Klasa DP posiada problemy zupełne. Rozważmy problem następujący: | Klasa DP posiada problemy zupełne. Rozważmy problem następujący: | ||
{{przyklad|[Uzupelnij]|| | |||
Problem SAT-UNSAT: | Problem SAT-UNSAT:<br> | ||
Wejście: formuły logiczne | Wejście: formuły logiczne <math>\phi</math> i <math>\psi</math> jak dla SAT.<br> | ||
Wyjście: czy formuła | Wyjście: czy formuła <math>\phi</math> jest spełnialna, natomiast <math>\psi</math> niespełnialna? | ||
}} | |||
====Ćwiczenie==== | |||
Udowodnij, że problem SAT-UNSAT jest DP-zupełny. | Udowodnij, że problem SAT-UNSAT jest DP-zupełny. | ||
\ | \begin_hint | ||
Skorzystaj z redukcji języka z NP oraz dopełnienia języka z coNP do SAT. | Skorzystaj z redukcji języka z NP oraz dopełnienia języka z coNP do SAT. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
Najpierw pokażmy, że SAT-UNSAT należy do klasy DP. Musimy wskazać stosowne języki | Najpierw pokażmy, że SAT-UNSAT należy do klasy DP. Musimy wskazać stosowne języki <math>L_1</math> i <math>L_2</math> odpowiednio z klas NP i coNP. | ||
Wybieramy | Wybieramy <math>L_1=\{(\phi,\psi):\phi\text{ jest spełnialna}\}</math> oraz <math>L_1=\{(\phi,\psi):\psi\text{ nie jest spełnialna}\}</math>, o których | ||
można to łatwo stwierdzić. | można to łatwo stwierdzić. | ||
Przejdźmy do części związanej z pokazaniem redukcji z dowolnego problemu z klasy DP. Weźmy | Przejdźmy do części związanej z pokazaniem redukcji z dowolnego problemu z klasy DP. Weźmy <math>L\in</math> DP. Wiemy, że | ||
<math>L=L_1\cap L_2</math> i na mocy własności klas NP i coNP istnieją redukcje <math>R_1</math> języka <math>L_1</math> do SAT oraz <math>R2</math> | |||
dopełnienia języka | dopełnienia języka <math>L_2</math> do SAT (jako że <math>L_2</math> jest w coNP). Definiujemy redukcję jako <math>R(x)=(R_1(x),R_2(x))</math>. | ||
Na podstawie konstrukcji wiemy, że | Na podstawie konstrukcji wiemy, że <math>x\in L_1</math>, gdy <math>R_1(x)</math> jest spełniona oraz <math>x\in L_2</math>, gdy <math>R_2(x)</math> jest nie spełniona. | ||
zatem | zatem <math>x\in L_1 \cap L_2</math> gdy <math>R(x)\in</math>SAT-UNSAT. | ||
\ | \end_sol | ||
Również wspomniany na początku problem EXACT TSP jest DP-zupełny. | Również wspomniany na początku problem EXACT TSP jest DP-zupełny. | ||
Linia 395: | Linia 284: | ||
Klasa DP zawiera także problemy DP-zupełne innego rodzaju: | Klasa DP zawiera także problemy DP-zupełne innego rodzaju: | ||
{{przyklad|[Uzupelnij]|| | |||
Problem CRITICAL SAT: | Problem CRITICAL SAT:<br> | ||
Wejście: formuła logiczna | Wejście: formuła logiczna <math>\phi</math> jak dla SAT.<br> | ||
Wyjście: czy formuła | Wyjście: czy formuła <math>\phi</math> jest nie spełnialna, natomiast usunięcie dowolnej klauzuli sprawia, że jest spełnialna? | ||
}} | |||
{{przyklad|[Uzupelnij]|| | |||
Problem CRITICAL HAMILTON PATH:<br> | |||
Wejście: graf nieskierowany <math>G</math><br> | |||
Wyjście: czy <math>G</math> nie ma ścieżki Hamiltona, natomiast dodanie dowolnej krawędzi do <math>G</math> powoduje, że już ją posiada? | |||
}} | |||
==Maszyny alternujące== | |||
W tym rozdziale przedstawimy ciekawe uogólnienie niedeterminizmu, zwane alternacją. | W tym rozdziale przedstawimy ciekawe uogólnienie niedeterminizmu, zwane alternacją. | ||
Linia 420: | Linia 308: | ||
Tak właśnie działają zawsze zwykłe maszyny niedeterministyczne. | Tak właśnie działają zawsze zwykłe maszyny niedeterministyczne. | ||
Stany typu "AND" są rozszerzają tą funkcjonalność. Maszyna dokonuje akceptacji będąc w takim stanie, gdy | Stany typu "AND" są rozszerzają tą funkcjonalność. Maszyna dokonuje akceptacji będąc w takim stanie, gdy ''każda'' ze ścieżek obliczeń | ||
wychodzących z tego stanu jest akceptująca. | wychodzących z tego stanu jest akceptująca. | ||
Miarę złożoności czasowej i pamięciowej maszyn alternujących definiujemy zupełnie tak jak dla maszyn niedeterministycznych, tzn. | Miarę złożoności czasowej i pamięciowej maszyn alternujących definiujemy zupełnie tak jak dla maszyn niedeterministycznych, tzn. | ||
funkcja | funkcja <math>f(n)</math> jest miarą złożoności czasowej, gdy każda ze ścieżek obliczeń ma długość ograniczoną przez <math>f(n)</math> oraz złożoność | ||
pamięciową | pamięciową <math>f(n)</math> gdy na każdej ze ścieżek obliczeń maszyna zużywa co najwyżej <math>f(n)</math> pamięci. | ||
{{definicja|[Uzupelnij]|| | |||
Poprzez <math>\text{ATIME}(f(n))</math> oznaczamy zbiór języków <math>L</math> takich, że są akceptowane przez alternującą maszynę Turinga <math>M</math> o złożoności | |||
czasowej <math>f(n)</math>. | |||
}} | |||
{{definicja|[Uzupelnij]|| | |||
Poprzez <math>\text{ASPACE}(f(n))</math> oznaczamy zbiór języków <math>L</math> takich, że są akceptowane przez alternującą maszynę Turinga <math>M</math> o złożoności | |||
pamięciowej <math>f(n)</math>. | |||
}} | |||
Poprzez | |||
pamięciowej | |||
Wprowadzamy też skróty dla najpopularniejszych klas: | Wprowadzamy też skróty dla najpopularniejszych klas: | ||
* Klasa AP = <math>\text{ATIME}(n^k) = \bigcup_{j>0} \text{ATIME}(n^j)</math>, to klasa tych języków, które mogą być akceptowane w alternującym czasie wielomianowym, | |||
* Klasa AL = ASPACE(\text{log}<math>n</math>), to klasa tych języków, które mogą być akceptowane w alternującej pamięci logarytmicznej, | |||
Nietrudno się domyślić, że alternacja jest silniejsza niż niedeterminizm z definicji działania maszyn. Wiemy zatem, w szczególności, że | Nietrudno się domyślić, że alternacja jest silniejsza niż niedeterminizm z definicji działania maszyn. Wiemy zatem, w szczególności, że | ||
<math>AP</math> zawiera w sobie <math>NP</math>. Poniższe ćwiczenie pokazuje, że o AP można powiedzieć więcej: | |||
====Ćwiczenie==== | |||
Pokaż, że AP zawiera w sobie klasę coNP. | Pokaż, że AP zawiera w sobie klasę coNP. | ||
\ | \begin_hint | ||
Pokaż że problem coNP-zupełny TAUTOLOGY należy do AP. | Pokaż że problem coNP-zupełny TAUTOLOGY należy do AP. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
Na mocy wskazówki pokażemy, że TAUTOLOGY | Na mocy wskazówki pokażemy, że TAUTOLOGY <math>\in</math> AP, a tym samym ponieważ AP jest zamknięta na redukcje, to cała klasa coNP zawiera się w AP. | ||
Maszyna dla TAUTOLOGY rozpoczyna działanie od stanu uniwersalnego. Następnie na każdej ze ścieżek obliczeń sprawdza inne wartościowanie. | Maszyna dla TAUTOLOGY rozpoczyna działanie od stanu uniwersalnego. Następnie na każdej ze ścieżek obliczeń sprawdza inne wartościowanie. | ||
Jeśli | Jeśli <math>\phi</math> jest spełniona na danym wartościowaniu, to obliczenie dochodzi do stanu akceptującego. W ten sposób ze względu | ||
na swój tryb działania, maszyna zaakceptuje | na swój tryb działania, maszyna zaakceptuje <math>\phi</math>, gdy jest ona spełniona dla każdego wartościowania, czyli, gdy jest tautologią logiczną. | ||
\ | \end_sol | ||
To jednak nie wszystko co potrafi klasa AP. Znajdują się w niej języki, o których nie wiemy czy należą do NP lub coNP. | To jednak nie wszystko co potrafi klasa AP. Znajdują się w niej języki, o których nie wiemy czy należą do NP lub coNP. | ||
{{definicja|[Uzupelnij]|| | |||
Problem MIN-FORMULA: | Problem MIN-FORMULA:<br> | ||
Wejście: formuła logiczna | Wejście: formuła logiczna <math>\phi</math> jak dla problemu SAT.<br> | ||
Wyjście: czy | Wyjście: czy <math>\phi</math> jest minimalna, tzn. czy żadna krótsza formuła nie jest jej równoważna? | ||
}} | |||
====Ćwiczenie==== | |||
Pokaż, że MIN-FORMULA należy do AP. | Pokaż, że MIN-FORMULA należy do AP. | ||
\ | \begin_hint | ||
Wykorzystaj dwa tryby alternacji. | Wykorzystaj dwa tryby alternacji. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
W pierwszej części maszyna działa w trybie "AND". Zgadujemy formułę | W pierwszej części maszyna działa w trybie "AND". Zgadujemy formułę <math>\psi</math> krótszą niż <math>\phi</math>, a następnie | ||
przestawiamy się na tryb "OR". Teraz zgadujemy wartościowanie | przestawiamy się na tryb "OR". Teraz zgadujemy wartościowanie <math>s</math>. Jeśli <math>\phi</math> i <math>\psi</math> są rozróżniane przez | ||
<math>s</math>, tzn. jedna z nich jest spełniona, a druga nie, to akceptujemy formułę <math>\phi</math>. | |||
Załóżmy nie wprost, że formuła nie jest minimalna, a mimo to zostaje zaakceptowana. | Załóżmy nie wprost, że formuła nie jest minimalna, a mimo to zostaje zaakceptowana. | ||
Aby tak się stało na każdej ze ścieżek z pierwszego poziomu alternacji uniwersalnej maszyna musi zaakceptować. | Aby tak się stało na każdej ze ścieżek z pierwszego poziomu alternacji uniwersalnej maszyna musi zaakceptować. | ||
Jeśli jednak formuła nie jest minimalna, to istnieje krótsza od niej formuła | Jeśli jednak formuła nie jest minimalna, to istnieje krótsza od niej formuła <math>\psi</math>, które jest jej równoważna. Na ścieżce obliczeń | ||
rozważającej | rozważającej <math>\psi</math> maszyna w drugim poziomie alternacji musi znaleźć wartościowanie, które rozróżnia <math>\phi</math> i <math>\psi</math> co jest | ||
niemożliwe, stąd uzyskujemy sprzeczność. | niemożliwe, stąd uzyskujemy sprzeczność. | ||
\ | \end_sol | ||
Teraz przedstawimy kilka relacji pomiędzy klasami obliczeń alternujących: | Teraz przedstawimy kilka relacji pomiędzy klasami obliczeń alternujących: | ||
{{twierdzenie|[Uzupelnij]|| | |||
Następujące relacje są prawdziwe: | Następujące relacje są prawdziwe: | ||
\ | # Jeśli <math>f(n)\geqslant n</math> to <math>\text{ATIME}(f(n)) \subseteq \text{SPACE}(f(n))</math>, | ||
# Jeśli <math>f(n)\geqslant n</math> to <math>\text{SPACE}(f(n)) \subseteq \text{ATIME}(f^2(n))</math>, | |||
# Jeśli <math>f(n)\geqslant \text{log}n</math> to <math>\text{ASPACE}(f(n)) \subseteq \text{TIME}(c^{f(n)})</math>. | |||
# Jeśli <math>f(n)\geqslant \text{log}n</math> to <math>\text{ASPACE}(f(n)) \supseteq \text{TIME}(c^{f(n)})</math>. | |||
}} | |||
{{dowod|[Uzupelnij]|| | |||
Dowód własności od 1 do 3 jest przedmiotem ćwiczenia końcowego. Własność 4 wymaga trochę więcej pracy. | Dowód własności od 1 do 3 jest przedmiotem ćwiczenia końcowego. Własność 4 wymaga trochę więcej pracy. | ||
Zauważmy, że musimy symulować maszynę działającą w czasie wykładniczym | Zauważmy, że musimy symulować maszynę działającą w czasie wykładniczym | ||
Linia 508: | Linia 397: | ||
Okazuje się jednak, że można sobie z tym poradzić: | Okazuje się jednak, że można sobie z tym poradzić: | ||
Weźmy dowolną maszynę deterministyczną | Weźmy dowolną maszynę deterministyczną <math>M</math> działającą w czasie <math>c^{f(n)}</math>. Będziemy symulować jej obliczenia od końca. | ||
Najpierw ustalamy, bez straty ogólności, że jest tylko jedna końcowa konfiguracja akceptująca, np. z całkowicie pustą taśmą | Najpierw ustalamy, bez straty ogólności, że jest tylko jedna końcowa konfiguracja akceptująca, np. z całkowicie pustą taśmą | ||
, głowicą w komórce o numerze 1 i stanie | , głowicą w komórce o numerze 1 i stanie <math>q_{acc}</math>. | ||
Możemy przedstawić całe obliczenie w formie następującej tabelki przedstawiającej w rzędach kolejne zawartości | Możemy przedstawić całe obliczenie w formie następującej tabelki przedstawiającej w rzędach kolejne zawartości | ||
taśmy, a w kolumnach czas. Dla uproszczenia przyjmijmy, że taśma jest jedna, i że pozycję głowicy notujemy specjalnym zapisem | taśmy, a w kolumnach czas. Dla uproszczenia przyjmijmy, że taśma jest jedna, i że pozycję głowicy notujemy specjalnym zapisem | ||
w tym miejscu pamięci, które ona odczytuje (podobnie notujemy stan). | w tym miejscu pamięci, które ona odczytuje (podobnie notujemy stan). | ||
W ten sposób zawartość komórki | W ten sposób zawartość komórki <math>d</math> zależy tylko od zawartości komórek <math>a</math>, <math>b</math> i <math>c</math>: | ||
\ | \vspace{1cm} | ||
\begin_center | |||
\includegraphics[width=10cm]{ZO-13-2-rys.jpg}<br> | |||
Zapis przebiegu obliczeń | |||
\end_center | |||
\vspace{1cm} | |||
Teraz rozpoczynamy od dolnej części tabeli, której zawartość znamy i chcemy sprawdzić, czy obliczenie rozpoczęło się | Teraz rozpoczynamy od dolnej części tabeli, której zawartość znamy i chcemy sprawdzić, czy obliczenie rozpoczęło się | ||
od pierwszego wiersza, który jest wejściem i którego zawartość też znamy. | od pierwszego wiersza, który jest wejściem i którego zawartość też znamy. | ||
Jeśli chcemy zweryfikować wartość komórki | Jeśli chcemy zweryfikować wartość komórki <math>d</math>, to w trybie "OR" zgadujemy zawartość komórek <math>a</math>, <math>b</math> i <math>c</math>. Następnie w trybie | ||
"AND" weryfikujemy ich poprawność i zgodność przejścia od | "AND" weryfikujemy ich poprawność i zgodność przejścia od <math>a</math>, <math>b</math>, <math>c</math> do <math>d</math>. | ||
Ile pamięci jest nam potrzebne? Musimy pamiętać tylko wskaźniki do miejsc w wielkiej tabeli przedstawionej na rysunku, | Ile pamięci jest nam potrzebne? Musimy pamiętać tylko wskaźniki do miejsc w wielkiej tabeli przedstawionej na rysunku, | ||
które sa rozmiaru | które sa rozmiaru <math>\text{log}(c^{f(n)})</math>, co jest rzędu <math>f(n)</math>. | ||
}} | |||
Dzięki wymienionym relacjom pomiędzy klasami alternującymi możemy udowodnić kilka dokładnych równości pomiędzy klasami, a to rzadka | Dzięki wymienionym relacjom pomiędzy klasami alternującymi możemy udowodnić kilka dokładnych równości pomiędzy klasami, a to rzadka | ||
rzecz w teorii złożoności. Wiemy zatem, że: | rzecz w teorii złożoności. Wiemy zatem, że: | ||
* AL=P, | |||
* APSPACE = EXP, | |||
* AP=PSPACE. | |||
==Hierarchia wielomianowa== | |||
W tej części zdefiniujemy całą hierarchię klas ponad znanymi nam już P i NP, która stanowi pewne uogólnienie problematyki spotkanej w klasie DP. | W tej części zdefiniujemy całą hierarchię klas ponad znanymi nam już P i NP, która stanowi pewne uogólnienie problematyki spotkanej w klasie DP. | ||
W poprzednich rozdziałach zdefiniowaliśmy pojęcie maszyny z wyrocznią na język | W poprzednich rozdziałach zdefiniowaliśmy pojęcie maszyny z wyrocznią na język <math>L</math> oznaczanej przez <math>M^L</math>. Przypomnijmy, że jest to zwykła maszyna <math>M</math> | ||
z dodatkową możliwością zadania pytania postaci "czy | z dodatkową możliwością zadania pytania postaci "czy <math>x\in L</math>?" które kosztuje jedną jednostkę czasu. Rozszerzenie tego pojęcia na klasy jest | ||
naturalne. Poprzez | naturalne. Poprzez <math>P^{NP}</math> oznaczamy zbiór tych języków, które mogą być rozstrzygane przez maszyny z klasy <math>P</math> z wyrocznią na dowolny język z klasy <math>NP</math>. | ||
Ta klasa okazuje się być mocniejsza od DP, bowiem w DP mogliśmy zadań pytanie tylko raz (dotyczące coNP, ale w sensie wyroczni działa to jak pytanie do NP), | Ta klasa okazuje się być mocniejsza od DP, bowiem w DP mogliśmy zadań pytanie tylko raz (dotyczące coNP, ale w sensie wyroczni działa to jak pytanie do NP), | ||
a tutaj dowolną liczbę razy i to na dodatek pytań adaptywnych, tzn. | a tutaj dowolną liczbę razy i to na dodatek pytań adaptywnych, tzn. | ||
takich, które mogą zależeć od wyników odpowiedzi na poprzednie z nich. Kolejną interesującą klasą jest | takich, które mogą zależeć od wyników odpowiedzi na poprzednie z nich. Kolejną interesującą klasą jest <math>NP^{NP}</math>. Wszystkie te klasy | ||
dają nam coraz większe możliwości, lecz oczywiście nie wiadomo, czy są to ściśle większe klasy, choć panuje takie przekonanie: | dają nam coraz większe możliwości, lecz oczywiście nie wiadomo, czy są to ściśle większe klasy, choć panuje takie przekonanie: | ||
\ | \vspace{1cm} | ||
\begin_center | |||
\includegraphics[width=10cm]{ZO-13-3-rys.jpg}<br> | |||
Klasy relatywne | |||
\end_center | |||
\vspace{1cm} | |||
Postępując w ten sposób Meyer i Stockmeyer w latach 70 zdefiniowali całą hierarchię klas: | Postępując w ten sposób Meyer i Stockmeyer w latach 70 zdefiniowali całą hierarchię klas: | ||
{{definicja|[Uzupelnij]|| | |||
Hierarchia wielomianowa, to ciąg klas indeksowany poprzez | Hierarchia wielomianowa, to ciąg klas indeksowany poprzez <math>i</math>:<br> | ||
* <math>\sum_0 P = \prod_0 P = \Delta_0 P = P</math> | |||
* <math>\Delta_{i+1} P = P^{\sum_i P},\text{ dla }i>0</math>, | |||
* <math>\sum_{i+1} P = NP^{\sum_i P},\text{ dla }i>0</math>, | |||
Dodatkowo poprzez | |||
* <math>\prod_{i+1} P = coNP^{\sum_i P},\text{ dla }i>0</math>. | |||
Dodatkowo poprzez <math>PH</math> oznaczamy sumę wszystkich tych klas, czyli:<br> | |||
<math>PH=\bigcup_{i\geqslant 0} \sum_i P</math>. | |||
}} | |||
Ponieważ na poziomie zerowym wszystkie elementy hierarchii to P, więc na poziomie pierwszym, | Ponieważ na poziomie zerowym wszystkie elementy hierarchii to P, więc na poziomie pierwszym, | ||
ponieważ taka wyrocznia nic nie daje, otrzymujemy | ponieważ taka wyrocznia nic nie daje, otrzymujemy <math>\Delta_1 P = P, \sum_1 P = NP, \prod_1 P = coNP</math>. | ||
Drugi poziom, to klasy | Drugi poziom, to klasy<math>\Delta_2 P = P^{NP}, \sum_2 P = NP^{NP}, \prod_2 P = coNP^{NP}</math>. | ||
Warto zwrócić uwagę, że | Warto zwrócić uwagę, że <math>\prod_i P</math> jest dopełnieniem <math>\sum_i P</math> na każdym poziomie wprost z definicji. | ||
Zawieranie się poszczególnych elementów na jednym poziomie obrazuje poniższy rysunek: | Zawieranie się poszczególnych elementów na jednym poziomie obrazuje poniższy rysunek: | ||
\ | \vspace{1cm} | ||
\begin_center | |||
\includegraphics[width=10cm]{ZO-13-4-rys.jpg}<br> | |||
Hierarchia wielomianowa | |||
\end_center | |||
\vspace{1cm} | |||
Do tej pory często odwoływaliśmy się do odpowiedniości pomiędzy klasą NP a szczególnymi relacjami wielomianowo | Do tej pory często odwoływaliśmy się do odpowiedniości pomiędzy klasą NP a szczególnymi relacjami wielomianowo | ||
Linia 582: | Linia 486: | ||
podobnego kryterium: | podobnego kryterium: | ||
{{twierdzenie|[Uzupelnij]|| | |||
Niech | Niech <math>L</math> będzie językiem, <math>i>0</math>. Język <math>L</math> należy do <math>\sum_i P</math> wtedy i tylko wtedy, gdy istnieje wielomianowo zrównoważona i rozstrzygalna | ||
relacja | relacja <math>R</math> (<math>i+1</math>-argumentowa), taka, że <math>x \in L</math> dokładnie wtedy, gdy | ||
<math>\exists{y_1}\forall{y_2}\exists{y_3}\ldots Q{y_i}</math> takie, że <math>R(x,y_1,\ldots,y_i)</math> jest spełnione (<math>i</math>-ty kwantyfikator jest uniwersalny, gdy <math>i</math> jest | |||
parzyste, natomiast egzystencjalny, gdy | parzyste, natomiast egzystencjalny, gdy <math>i</math> jest nieparzyste). | ||
}} | |||
Hierarchia wielomianowa jest strukturą dosyć wrażliwą na kolapsy, tzn. równości klas na pewnym poziomie. Okazuje się, że wtedy przenoszą się | Hierarchia wielomianowa jest strukturą dosyć wrażliwą na kolapsy, tzn. równości klas na pewnym poziomie. Okazuje się, że wtedy przenoszą się | ||
one automatycznie w górę: | one automatycznie w górę: | ||
====Ćwiczenie==== | |||
Pokaż, że jeżeli dla pewnego | |||
Pokaż, że jeżeli dla pewnego <math>i</math> zachodzi <math>\sum_i P = \prod_i P</math> to dla każdego <math>j>i</math> zachodzi <math>\sum_j P = \prod_j P = \Delta_j P = \sum_i P</math>. | |||
\ | \begin_hint | ||
Pokaż, że | Pokaż, że <math>\sum_{i+1} P = \sum P</math>. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
Pokażemy równość podaną we wskazówce z założenia | Pokażemy równość podaną we wskazówce z założenia <math>\sum_i P = \prod_i P</math>. Weźmy dowolny <math>L\in\sum_{i+1} P</math>. Z poprzedniego twierdzenia | ||
charakteryzującego wiemy, że istnieje relacja | charakteryzującego wiemy, że istnieje relacja <math>i+1</math>-argumentowa <math>R_L</math> dla <math>L</math>. Weźmy rzut relacji <math>R_L</math>, w którym pomijamy współrzędną <math>y_1</math>. | ||
Jest to relacja odpowiadająca pewnemu językowi | Jest to relacja odpowiadająca pewnemu językowi <math>L'</math> z <math>\prod_i P</math> (otrzymujemy to dzięki zastosowaniu negacji i dopełnienia języka dla poprzedniego twierdzenia). W definicji tym razem jako pierwszy występuje | ||
kwantyfikator uniwersalny. | kwantyfikator uniwersalny. | ||
Dzięki równości klas istnieje dla języka | Dzięki równości klas istnieje dla języka <math>L'</math> <math>i</math>-argumentowa relacja <math>R_{L'}</math>, definiująca go przy użyciu kwantyfikatora | ||
egzystencjalnego na początku. Dzięki tej zmianie, możemy teraz zmienić | egzystencjalnego na początku. Dzięki tej zmianie, możemy teraz zmienić <math>R_{L'}</math> tak, aby | ||
uwzględnić usuniętą wcześniej współrzędną współrzędną | uwzględnić usuniętą wcześniej współrzędną współrzędną <math>y_1</math>, bez dodawania nowego kwantyfikatora, gdyż teraz jako pierwszy występuje kwantyfikator | ||
egzystencjalny, co sprawia, że | egzystencjalny, co sprawia, że <math>L\in\sum_{i} P</math>. | ||
\ | \end_sol | ||
Zachodzi również podobny fakt. Otóż, jeśli P=NP (albo tylko NP=coNP), to hierarchia kolapsuje już na pierwszym poziomie. | Zachodzi również podobny fakt. Otóż, jeśli P=NP (albo tylko NP=coNP), to hierarchia kolapsuje już na pierwszym poziomie. | ||
Linia 619: | Linia 521: | ||
Okazuje się, że na każdym poziomie hierarchii posiada ona problemy zupełne: | Okazuje się, że na każdym poziomie hierarchii posiada ona problemy zupełne: | ||
{{definicja|[Uzupelnij]|| | |||
Problem | Problem <math>\text{QSAT}_i</math>:<br> | ||
Wejście: formuła logiczna | Wejście: formuła logiczna <math>\phi</math> jak dla problemu SAT poprzedzona <math>i</math> naprzemiennymi grupami kwantyfikatorów egzystencjalnych i uniwersalnych: | ||
<math>\Phi=\exists{x_1}\forall{x_2}\exists{x_3}\ldots Q{x_i}\phi</math>.<br> | |||
Wyjście: czy | Wyjście: czy <math>\Phi</math> jest prawdziwa? | ||
}} | |||
{{twierdzenie|[Uzupelnij]|| | |||
Problem | Problem <math>QSAT_i</math> jest <math>\sum_i P</math>-zupełny dla <math>i>0</math>. | ||
}} | |||
Jednak pytanie czy istnieje problem PH-zupełny (czyli zupełny dla całej hierarchii) jest otwarte i panuje przekonanie, że tak nie jest, gdyż: | Jednak pytanie czy istnieje problem PH-zupełny (czyli zupełny dla całej hierarchii) jest otwarte i panuje przekonanie, że tak nie jest, gdyż: | ||
====Ćwiczenie==== | |||
Pokaż, że jeśli istnieje problem PH-zupełny, to hierarchia zapada się na pewnym poziomie. | Pokaż, że jeśli istnieje problem PH-zupełny, to hierarchia zapada się na pewnym poziomie. | ||
\ | \begin_hint | ||
Zauważ, że problem zupełny musi należeć do konkretnego poziomu. | Zauważ, że problem zupełny musi należeć do konkretnego poziomu. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
Jeśli | Jeśli <math>L</math> jest zupełny dla PH, to <math>L</math> należy do <math>\sum_i P</math> dla pewnego <math>i</math>. Wtedy jednak dowolny język <math>L'</math> z poziomu <math>\sum_{i+1} P</math> | ||
redukuje się do | redukuje się do <math>L</math> w czasie wielomianowym. Ponieważ poziomy hierarchii są zamknięte na redukcje, stąd <math>L'\in \sum_i P</math>, a w konsekwencji | ||
<math>\sum_{i+1} P=\sum_i P</math>. | |||
\ | \end_sol | ||
Jak silna jest cała hierarchia? Można łatwo zauważyć, że zawiera się ona w znanej już nam klasie PSPACE, ze względu na fakt, że można | Jak silna jest cała hierarchia? Można łatwo zauważyć, że zawiera się ona w znanej już nam klasie PSPACE, ze względu na fakt, że można | ||
Linia 655: | Linia 557: | ||
Na koniec ciekawy rezultat autorstwa Seinosuke Tody (laureata | Na koniec ciekawy rezultat autorstwa Seinosuke Tody (laureata | ||
nagrody Gödel'a z roku 1998) związany z klasą PH. Pokazał on, że | nagrody Gödel'a z roku 1998) związany z klasą PH. Pokazał on, że | ||
<math>PH\subseteq P^{PP}</math>, czyli wyrocznia na klasę <math>PP</math> jest | |||
niesamowicie silna i pozwala pochłonąć tak misternie zbudowaną | niesamowicie silna i pozwala pochłonąć tak misternie zbudowaną | ||
piramidę coraz silniejszych klas. | piramidę coraz silniejszych klas. | ||
==Ćwiczenia dodatkowe== | |||
====Ćwiczenie==== | |||
Pokaż, że problem TAUTOLOGY jest coNP-zupełny. | Pokaż, że problem TAUTOLOGY jest coNP-zupełny. | ||
\ | \begin_hint | ||
Skorzystaj z faktu, że SAT jest NP-zupełny. | Skorzystaj z faktu, że SAT jest NP-zupełny. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
TAUTOLOGY należy do coNP. Weźmy dowolny inny problem | TAUTOLOGY należy do coNP. Weźmy dowolny inny problem <math>L</math> z coNP. Wiemy, że <math>\overline{L}</math> należy do NP, więc | ||
jest redukowalny do SAT - problemu NP-zupełnego, poprzez redukcję, którą oznaczymy jako | jest redukowalny do SAT - problemu NP-zupełnego, poprzez redukcję, którą oznaczymy jako <math>R</math>. Z definicji redukcji | ||
otrzymujemy, że | otrzymujemy, że <math>x\in \overline{L}</math> wtedy i tylko wtedy, gdy <math>R(x)</math> jest spełnialna. Po zastosowaniu negacji mamy | ||
, że | , że <math>x\in L</math> wtedy i tylko wtedy, gdy <math>R(x)</math> jest nie spełnialna, tzn. <math>\neg R(x)</math> jest tautologią. Sprowadziliśmy zatem | ||
problem przynależności do dowolnego języka | problem przynależności do dowolnego języka <math>L</math> z coNP do sprawdzania czy pewna formuła jest tautologią, co dowodzi | ||
coNP-zupełności problemu TAUTOLOGY. | coNP-zupełności problemu TAUTOLOGY. | ||
\ | \end_sol | ||
====Ćwiczenie==== | |||
Udowodnij własności od 1 do 3 z twierdzenia [[##tw:arel|Uzupelnic tw:arel|]]. | |||
\ | # Jeśli <math>f(n)\geqslant n</math> to <math>\text{ATIME}(f(n)) \subseteq \text{SPACE}(f(n))</math>, | ||
Ad. 1:\\ | |||
Weźmy dowolny język | # Jeśli <math>f(n)\geqslant n</math> to <math>\text{SPACE}(f(n)) \subseteq \text{ATIME}(f^2(n))</math>, | ||
Dokonamy symulacji przy pomocy deterministycznej maszyny w pamięci | |||
# Jeśli <math>f(n)\geqslant \text{log}n</math> to <math>\text{ASPACE}(f(n)) \subseteq \text{TIME}(c^{f(n)})</math>. | |||
\begin_hint<br> | |||
Ad. 1 i 3: zasymuluj maszynę alternującą przy pomocy zwykłej.<br> | |||
Ad. 2: skorzystaj z idei zaczerpniętej z twierdzenia Savitcha.<br> | |||
\end_hint | |||
\begin_sol<br> | |||
Ad. 1:<br> | |||
Weźmy dowolny język <math>L\in\text{ATIME}(f(n))</math> akceptowany przez alternującą maszynę Turinga <math>M</math>. | |||
Dokonamy symulacji przy pomocy deterministycznej maszyny w pamięci <math>f(n)</math>. Wykonujemy algorytm | |||
rekurencyjnego przeglądania grafu konfiguracji w głąb. W momencie powrotu z rekurencji z ostatniego potomka | rekurencyjnego przeglądania grafu konfiguracji w głąb. W momencie powrotu z rekurencji z ostatniego potomka | ||
danego wierzchołka decydujemy na podstawie typu "OR" lub "AND" i akceptacji potomków o tym czy dana konfiguracja | danego wierzchołka decydujemy na podstawie typu "OR" lub "AND" i akceptacji potomków o tym czy dana konfiguracja | ||
jest akceptująca. Głębokość rekurencji to czas obliczeń maszyny | jest akceptująca. Głębokość rekurencji to czas obliczeń maszyny <math>M</math>, czyli <math>f(n)</math>. Na każdy poziom rekurencji | ||
potrzeba nam jednak | potrzeba nam jednak <math>f(n)</math>, aby zapamiętać konfigurację, czyli łącznie <math>f^2(n)</math>. | ||
Możemy jednak zaoszczędzić na pamięci pamiętając tylko który z niedeterministycznych wyborów dokonała | Możemy jednak zaoszczędzić na pamięci pamiętając tylko który z niedeterministycznych wyborów dokonała <math>M</math> na danym poziomie | ||
rekurencji. Teraz aby obliczyć pełną konfigurację, będziemy musieli rozpocząć za każdym razem obliczenia od początku | rekurencji. Teraz aby obliczyć pełną konfigurację, będziemy musieli rozpocząć za każdym razem obliczenia od początku | ||
dokonując stosownych wyborów. Taka operacja może być jednak wykonana w pamięci | dokonując stosownych wyborów. Taka operacja może być jednak wykonana w pamięci <math>f(n)</math>, stąd cała symulacja | ||
potrzebuje | potrzebuje <math>f(n)</math> pamięci, a więc <math>L\in\text{SPACE}(f(n))</math>. | ||
Ad. 2:<br> | |||
Ad. 2: | Tym razem mamy do dyspozycji maszynę działającą w pamięci <math>f(n)</math> i chcemy ją zasymulować przy pomocy maszyny alternującej | ||
Tym razem mamy do dyspozycji maszynę działającą w pamięci | w czasie <math>f^2(n)</math>. Jak w twierdzeniu Savitcha odwołamy się do grafu konfiguracji maszyny rozmiaru <math>c^{f(n)}</math> i będziemy się starali | ||
w czasie | |||
odpowiedzieć na pytanie, czy istnieje ścieżka od konfiguracji początkowej do końcowej. | odpowiedzieć na pytanie, czy istnieje ścieżka od konfiguracji początkowej do końcowej. | ||
Procedura, która oblicza istnienie ścieżki o długości co najwyżej | Procedura, która oblicza istnienie ścieżki o długości co najwyżej <math>n</math> ma do dyspozycji alternację i dokonuje tego w dwóch etapach. | ||
W pierwszym zgaduje wierzchołek pośredni | W pierwszym zgaduje wierzchołek pośredni | ||
<math>t</math> na ścieżce działając w trybie "OR". Następnie przełącza się w tryb uniwersalny "AND" i sprawdza rekurencyjnie, | |||
czy obydwie części ścieżki, długości <math>n/2</math> poprzez odgadnięty wierzchołek <math>t</math> istnieją. | |||
Czas potrzebny do działania to głębokość rekurencji, czyli | Czas potrzebny do działania to głębokość rekurencji, czyli <math>\text{log}(c^{f(n)})</math> co jest rzędu <math>f(n)</math> przemnożony | ||
przez czas potrzebny do przetworzenia każdego kroku, który wynosi również | przez czas potrzebny do przetworzenia każdego kroku, który wynosi również <math>f(n)</math>, gdyż jest to rozmiar konfiguracji. Łącznie daje to czas<math>f^2(n)</math>. | ||
Zwróćmy uwagę, że liczymy czas na | Zwróćmy uwagę, że liczymy czas na ''jednej'' ścieżce obliczeń, dzięki realizacji rekurencji przy pomocy alternacji! | ||
Ad. 3:<br> | |||
Weźmy dowolny język <math>L\in\text{ASPACE}(f(n))</math> akceptowany przez alternującą maszynę Turinga <math>M</math>. | |||
Ad. 3: | Mamy do dyspozycji czas rzędu wykładniczego względem <math>f(n)</math>, a więc możemy wygenerować cały graf konfiguracji | ||
Weźmy dowolny język | obliczeń maszyny <math>M</math> (który jak wiemy ma rozmiar <math>c^{f(n)}</math>, gdy <math>f(n)\geqslant \text{log}n</math>). | ||
Mamy do dyspozycji czas rzędu wykładniczego względem | |||
Następnie stosownie do typów "AND" i "OR" przeglądamy graf od konfiguracji końcowych i decydujemy | Następnie stosownie do typów "AND" i "OR" przeglądamy graf od konfiguracji końcowych i decydujemy | ||
o akceptacji słowa wejściowego. | o akceptacji słowa wejściowego. | ||
\ | \end_sol | ||
====Ćwiczenie==== | |||
Udowodnij, że problemy TSP(D) i EXACT TSP są wielomianowo równoważne. | Udowodnij, że problemy TSP(D) i EXACT TSP są wielomianowo równoważne. | ||
\ | \begin_hint | ||
Skorzystaj z problemu HAMILTON PATH. | Skorzystaj z problemu HAMILTON PATH. | ||
\ | \end_hint | ||
\ | \begin_sol | ||
Załóżmy, że TSP(D) ma rozwiązanie wielomianowe. Dzięki opisywanej już metodzie wyszukiwania binarnego możemy | Załóżmy, że TSP(D) ma rozwiązanie wielomianowe. Dzięki opisywanej już metodzie wyszukiwania binarnego możemy | ||
odnaleźć | odnaleźć <math>K</math> - optymalny koszt dzięki temu, że potrzebujemy zadać tylko logarytmiczną liczbę pytań względem <math>K</math>, | ||
czyli liniową względem rozmiaru wejścia. | czyli liniową względem rozmiaru wejścia. | ||
Niewiele trudniejsza jest implikacja w drugą stronę. Załóżmy, że EXACT TSP ma rozwiązanie wielomianowe. Metoda wyszukiwania | Niewiele trudniejsza jest implikacja w drugą stronę. Załóżmy, że EXACT TSP ma rozwiązanie wielomianowe. Metoda wyszukiwania | ||
binarnego tym razem zawodzi. Zgodnie ze wskazówką rozwiążemy najpierw HAMILTON PATH. Mając dany graf skierowany | binarnego tym razem zawodzi. Zgodnie ze wskazówką rozwiążemy najpierw HAMILTON PATH. Mając dany graf skierowany <math>G</math> w którym | ||
chcemy znaleźć ścieżkę Hamiltona konstruujemy przykład | chcemy znaleźć ścieżkę Hamiltona konstruujemy przykład <math>G'</math> dla EXACT TSP. Jeśli krawędź istnieje w <math>G</math> to w <math>G'</math> otrzymuje wagę | ||
1, jeśli nie istnieje w | 1, jeśli nie istnieje w <math>G</math> to w <math>G'</math> wstawiamy ją z wagą 2. Łatwo stwierdzić, że graf <math>G</math> ma ścieżkę Hamiltona wtedy i tylko wtedy, | ||
gdy trasa komiwojażera w | gdy trasa komiwojażera w <math>G'</math> ma koszt dokładnie <math>n</math> -- rozmiar grafu. | ||
Ponieważ HAMILTON PATH jest NP-zupełny, więc istnieje redukcja TSP(D) do HAMILTON PATH, a tym samym składając redukcje otrzymamy algorytm | Ponieważ HAMILTON PATH jest NP-zupełny, więc istnieje redukcja TSP(D) do HAMILTON PATH, a tym samym składając redukcje otrzymamy algorytm | ||
wielomianowy dla TSP(D). | wielomianowy dla TSP(D). | ||
\ | \end_sol | ||
==Testy końcowe== |
Aktualna wersja na dzień 21:44, 11 cze 2020
Klasy L, NL i coNL
W tym rozdziale zajmiemy się klasami złożoności, w których dajemy bardzo restrykcyjne wymagania odnośnie zużywanej pamięci, a mianowicie ograniczamy jej ilość przez funkcję logarytmiczną. Przypomnijmy:
- Klasa L = SPACE(\text{log}), to klasa tych języków, które mogą być akceptowane w deterministycznej pamięci logarytmicznej,
- Klasa NL = NSPACE(\text{log}), to klasa tych języków, które mogą być akceptowane w niedeterministycznej pamięci logarytmicznej,
- Klasa \text{co}NL = \text{co}NSPACE(\text{log}), to dopełnienie klasy tych języków, które mogą być akceptowane w niedeterministycznej pamięci logarytmicznej,
Na podstawie następnego rozdziału i twierdzenia Immermana-Szelepcsényi'ego dowiemy się, że . Natomiast pytanie czy L=NL pozostaje wciąż problemem otwartym.
Przyjrzymy się teraz problemom zupełnym w klasie NL. Zupełność definiujemy przy pomocy redukcji w pamięci logarytmicznej, gdyż jak wiemy, wszystkie z powyższych klas są zawarte w klasie P (chociaż nie wiemy, czy ściśle). Dopuszczenie redukcji wielomianowej zniwelowałoby jakiekolwiek różnice pomiędzy językami, gdyż sama redukcja miałaby moc obliczeniową pozwalającą rozwiązać wszystkie problemy z tych klas. Poniższy problem okazuje się być NL-zupełny:
Definicja [Uzupelnij]
Problem REACHABILITY:
Wejście: Graf skierowany oraz wierzchołki i .
Wyjście: Czy istnieje ścieżka od do w ?
Ćwiczenie
Pokaż, że problem REACHABILITY jest NL-zupełny.
\begin_hint Zwróć uwagę na fakt, że problem REACHABILITY jest związany z wykonywaniem obliczeń przez maszynę Turinga. \end_hint
\begin_sol Pokażmy najpierw, że problem REACHABILITY należy do NL. Użyjemy dwóch zmiennych - wierzchołek bieżący, oraz wierzchołek kolejny na ścieżce od do .
Początkowo ustawiamy . Ponieważ mamy do dyspozycji niedeterminizm to zgadujemy wierzchołek i sprawdzamy, czy jest sąsiedni do . Jeśli nie, to przerywamy obliczenie, wiedząc, że na innej ścieżce obliczeń przetworzymy inne możliwości. Jeśli jest sąsiedni to sprawdzamy czy co oznacza, że dotarliśmy do celu i akceptujemy parę , . W przeciwnym wypadku ustawiamy i kontynuujemy obliczenia.
Formalnie należy jeszcze użyć trzeciej zmiennej , która zlicza liczbę kroków, tak aby ostatecznie odrzucić parę, gdy przekroczy liczbę wierzchołków grafu. Użyliśmy pamięci rzędu co kończy dowód pierwszego faktu.
Teraz musimy pokazać, że każdy inny problem z klasy NL redukuje się do REACHABILITY poprzez redukcję w pamięci logarytmicznej. Weźmy dowolny język L z klasy NL i odpowiadającą mu niedeterministyczną maszynę Turinga .
Rozmiar grafu konfiguracji maszyny działającej w pamięci to jak wiemy , natomiast sprawdzenie czy jest akceptowany przez możemy sprowadzić do istnienia ścieżki od konfiguracji początkowej do akceptującej. Jest to zatem instancja problemu REACHABILITY na danych wielkości rzędu . Nie potrzebujemy konstruować całego grafu, a jedynie stwierdzać, czy dwie konfiguracje są sąsiednie, co możemy zrobić w pamięci logarytmicznej. \end_sol
Bardzo ciekawy rezultat, który zbliżył nas do odpowiedzi na pytanie czy L=NL, uzyskał w 2004 Reingold. Pokazał on, że problem UNDIRECTED REACHABILITY, czyli osiągalność w grafie nieskierowanym należy do klasy L.
Twierdzenie Immermana-Szelepcsényi'ego
Ten rozdział poświęcony jest bardzo ciekawemu i całkiem młodemu wynikowi udowodnionemu niezależnie przez Neila Immermana i Róberta Szelepcsényi'ego w roku 1987, za który otrzymali w 1995 nagrodę Gödel'a.
Twierdzenie mówi o tym, że klasy niedeterministyczne złożoności pamięciowej są zamknięte na dopełnienie:
Twierdzenie [Immermana-Szelepcsényi'ego]
Dowód [Uzupelnij]
Klasy coNP i DP
Wprowadziliśmy już zarówno klasę NP jak i pojęcie dopełnień klas. Przyjrzyjmy się bliżej klasie coNP. Klasa NP, jest to zbiór tych języków, dla których możemy łatwo weryfikować przynależność słów. Klasa coNP natomiast, to zbiór tych języków, dla których możemy łatwo weryfikować, że słowo nie należy do języka.
Podobnie jak dla NP i twierdzenia Fagina, można scharakteryzować coNP jako zbiór własności teoriografowych wyrażalnych w uniwersalnej logice drugiego rzędu.
Oto przykłady problemów z klasy coNP:
Definicja [Uzupelnij]
Problem TAUTOLOGY:
Wejście: formuła logiczna jak dla problemu SAT.
Wyjście: czy każde wartościowanie spełnia ?
Definicja [Uzupelnij]
Problem HAMILTON PATH COMPLEMENT:
Wejście: graf nieskierowany .
Wyjście: czy nie zawiera ścieżki Hamiltona?
W powyższych problemach weryfikacja negatywna słowa wejściowego jest łatwa, bo opiera się na zgadnięciu wartościowania niespełniającego lub ścieżki Hamiltona.
Nietrudno udowodnić (patrz ćwiczenie końcowe), że są to problemy zupełne dla klasy coNP. Nie jest to nic zaskakującego, bowiem równie prosto można udowodnić, że jeżeli jest NP-zupełny, to jego dopełnienie jest coNP-zupełne.
Jak wiele pytań w teorii złożoności obliczeniowej również i to, czy NP=coNP pozostaje otwarte. Możemy jedynie stwierdzić, że jeżeli P=NP, to NP=coNP, gdyż P jest zamknięta na dopełnienie. Jednak już implikacja w drugą stronę nie jest znana. Inna podobna implikacja to:
Ćwiczenie
Jeśli jest coNP-zupełny i to NP=coNP.
\begin_hint Pokaż inkluzje w obie strony korzystając z symetrii klas. \end_hint
\begin_sol Ustalmy z klasy NP, który jest coNP-zupełny.
Weźmy dowolny z klasy coNP. Ponieważ jest coNP-zupełny, więc redukuje się do , czyli należy do NP, bowiem redukcja jest procedurą deterministyczną.
Analogicznie, weźmy dowolny z NP. Wiemy, że jest NP-zupełny, i należy do coNP. Możemy zatem sprowadzić redukcją do . Zatem należy do coNP. \end_sol
Poniższy rysunek przedstawia relacje pomiędzy poznanymi klasami i omawianą za chwilę klasą DP:
\vspace{1cm}
\begin_center
\includegraphics[width=10cm]{ZO-13-1-rys.jpg}
Relacje pomiędzy klasami NP, coNP i DP
\end_center
\vspace{1cm}
Oczywiście przyglądając się wszystkim takim rysunkom należy pamiętać, że mogą one w wielu miejscach kolapsować.
Klasa DP
Zastanówmy się nad następującym problemem:
Przykład [Uzupelnij]
Problem EXACT TSP:
Wejście: graf nieskierowany ważony i liczba
Wyjście: czy optymalna trasa komiwojażera dla ma wartość dokładnie ?
Jest to wersja dokładna znanego problemu optymalizacyjnego -- problemu komiwojażera. Wiemy że wersja decyzyjna TSP(D) jest NP-zupełna. Nietrudno pokazać również, że EXACT TSP i TSP(D) są wielomianowo równoważne (ćwiczenie końcowe), tzn., że jeśli jeden z nich ma rozwiązanie w czasie wielomianowym to drugi też. W tym rozdziale sklasyfikujemy złożoność EXACT TSP dokładniej przy pomocy klasy DP. Nie umiemy bowiem pokazać, że EXACT TSP należy do NP, wszak jak poświadczyć i szybko zweryfikować, że długość optymalnej trasy wynosi dokładnie ? Widzimy, że odpowiedź na to pytanie wymaga stwierdzenia, że trasa ma długość co najmniej i co najwyżej , co sugeruje pewne specyficzne połączenie problemu TSP(D) i jego dopełnienia.
Definicja [Uzupelnij]
Klasa DP to zbiór języków takich, że , gdzie natomiast .
Przy tak postawionej definicji EXACT TSP należy do DP. Jest on bowiem przecięciem języka TSP(D) i TSP(D) COMPLEMENT, tzn. koszt trasy wynosi dokładnie , gdy jest równy co najwyżej (to przynależność do TSP(D)) oraz co najmniej (to przynależność słowa do TSP(D) COMPLEMENT).
Klasa DP posiada problemy zupełne. Rozważmy problem następujący:
Przykład [Uzupelnij]
Problem SAT-UNSAT:
Wejście: formuły logiczne i jak dla SAT.
Wyjście: czy formuła jest spełnialna, natomiast niespełnialna?
Ćwiczenie
Udowodnij, że problem SAT-UNSAT jest DP-zupełny.
\begin_hint Skorzystaj z redukcji języka z NP oraz dopełnienia języka z coNP do SAT. \end_hint
\begin_sol Najpierw pokażmy, że SAT-UNSAT należy do klasy DP. Musimy wskazać stosowne języki i odpowiednio z klas NP i coNP. Wybieramy oraz , o których można to łatwo stwierdzić.
Przejdźmy do części związanej z pokazaniem redukcji z dowolnego problemu z klasy DP. Weźmy DP. Wiemy, że i na mocy własności klas NP i coNP istnieją redukcje języka do SAT oraz dopełnienia języka do SAT (jako że jest w coNP). Definiujemy redukcję jako .
Na podstawie konstrukcji wiemy, że , gdy jest spełniona oraz , gdy jest nie spełniona. zatem gdy SAT-UNSAT. \end_sol
Również wspomniany na początku problem EXACT TSP jest DP-zupełny. Można rozważać także wiele innych wersji EXACT znanych problemów NP-zupełnych, które okazują się DP-zupełne.
Klasa DP zawiera także problemy DP-zupełne innego rodzaju:
Przykład [Uzupelnij]
Problem CRITICAL SAT:
Wejście: formuła logiczna jak dla SAT.
Wyjście: czy formuła jest nie spełnialna, natomiast usunięcie dowolnej klauzuli sprawia, że jest spełnialna?
Przykład [Uzupelnij]
Problem CRITICAL HAMILTON PATH:
Wejście: graf nieskierowany
Wyjście: czy nie ma ścieżki Hamiltona, natomiast dodanie dowolnej krawędzi do powoduje, że już ją posiada?
Maszyny alternujące
W tym rozdziale przedstawimy ciekawe uogólnienie niedeterminizmu, zwane alternacją. Przypomnijmy, że maszyna niedeterministyczna akceptuje słowo, gdy na którejkolwiek ze ścieżek obliczeń trafi do stanu akceptującego.
Maszyna alternująca ma więcej możliwości. Każdy z jej stanów jest oznaczony poprzez "AND" lub "OR", które nazywamy odpowiednio stanami uniwersalnymi i egzystencjalnymi.
Gdy maszyna jest w stanie typu "OR", to dokonuje akceptacji gdy dowolna ze ścieżek obliczeń wychodzących z niego akceptuje słowo. Tak właśnie działają zawsze zwykłe maszyny niedeterministyczne.
Stany typu "AND" są rozszerzają tą funkcjonalność. Maszyna dokonuje akceptacji będąc w takim stanie, gdy każda ze ścieżek obliczeń wychodzących z tego stanu jest akceptująca.
Miarę złożoności czasowej i pamięciowej maszyn alternujących definiujemy zupełnie tak jak dla maszyn niedeterministycznych, tzn. funkcja jest miarą złożoności czasowej, gdy każda ze ścieżek obliczeń ma długość ograniczoną przez oraz złożoność pamięciową gdy na każdej ze ścieżek obliczeń maszyna zużywa co najwyżej pamięci.
Definicja [Uzupelnij]
Poprzez oznaczamy zbiór języków takich, że są akceptowane przez alternującą maszynę Turinga o złożoności czasowej .
Definicja [Uzupelnij]
Poprzez oznaczamy zbiór języków takich, że są akceptowane przez alternującą maszynę Turinga o złożoności pamięciowej .
Wprowadzamy też skróty dla najpopularniejszych klas:
- Klasa AP = , to klasa tych języków, które mogą być akceptowane w alternującym czasie wielomianowym,
- Klasa AL = ASPACE(\text{log}), to klasa tych języków, które mogą być akceptowane w alternującej pamięci logarytmicznej,
Nietrudno się domyślić, że alternacja jest silniejsza niż niedeterminizm z definicji działania maszyn. Wiemy zatem, w szczególności, że zawiera w sobie . Poniższe ćwiczenie pokazuje, że o AP można powiedzieć więcej:
Ćwiczenie
Pokaż, że AP zawiera w sobie klasę coNP.
\begin_hint Pokaż że problem coNP-zupełny TAUTOLOGY należy do AP. \end_hint
\begin_sol Na mocy wskazówki pokażemy, że TAUTOLOGY AP, a tym samym ponieważ AP jest zamknięta na redukcje, to cała klasa coNP zawiera się w AP.
Maszyna dla TAUTOLOGY rozpoczyna działanie od stanu uniwersalnego. Następnie na każdej ze ścieżek obliczeń sprawdza inne wartościowanie. Jeśli jest spełniona na danym wartościowaniu, to obliczenie dochodzi do stanu akceptującego. W ten sposób ze względu na swój tryb działania, maszyna zaakceptuje , gdy jest ona spełniona dla każdego wartościowania, czyli, gdy jest tautologią logiczną. \end_sol
To jednak nie wszystko co potrafi klasa AP. Znajdują się w niej języki, o których nie wiemy czy należą do NP lub coNP.
Definicja [Uzupelnij]
Problem MIN-FORMULA:
Wejście: formuła logiczna jak dla problemu SAT.
Wyjście: czy jest minimalna, tzn. czy żadna krótsza formuła nie jest jej równoważna?
Ćwiczenie
Pokaż, że MIN-FORMULA należy do AP.
\begin_hint Wykorzystaj dwa tryby alternacji. \end_hint
\begin_sol W pierwszej części maszyna działa w trybie "AND". Zgadujemy formułę krótszą niż , a następnie przestawiamy się na tryb "OR". Teraz zgadujemy wartościowanie . Jeśli i są rozróżniane przez , tzn. jedna z nich jest spełniona, a druga nie, to akceptujemy formułę .
Załóżmy nie wprost, że formuła nie jest minimalna, a mimo to zostaje zaakceptowana. Aby tak się stało na każdej ze ścieżek z pierwszego poziomu alternacji uniwersalnej maszyna musi zaakceptować. Jeśli jednak formuła nie jest minimalna, to istnieje krótsza od niej formuła , które jest jej równoważna. Na ścieżce obliczeń rozważającej maszyna w drugim poziomie alternacji musi znaleźć wartościowanie, które rozróżnia i co jest niemożliwe, stąd uzyskujemy sprzeczność. \end_sol
Teraz przedstawimy kilka relacji pomiędzy klasami obliczeń alternujących:
Twierdzenie [Uzupelnij]
Następujące relacje są prawdziwe:
- Jeśli to ,
- Jeśli to ,
- Jeśli to .
- Jeśli to .
Dowód [Uzupelnij]
Dzięki wymienionym relacjom pomiędzy klasami alternującymi możemy udowodnić kilka dokładnych równości pomiędzy klasami, a to rzadka rzecz w teorii złożoności. Wiemy zatem, że:
- AL=P,
- APSPACE = EXP,
- AP=PSPACE.
Hierarchia wielomianowa
W tej części zdefiniujemy całą hierarchię klas ponad znanymi nam już P i NP, która stanowi pewne uogólnienie problematyki spotkanej w klasie DP.
W poprzednich rozdziałach zdefiniowaliśmy pojęcie maszyny z wyrocznią na język oznaczanej przez . Przypomnijmy, że jest to zwykła maszyna z dodatkową możliwością zadania pytania postaci "czy ?" które kosztuje jedną jednostkę czasu. Rozszerzenie tego pojęcia na klasy jest naturalne. Poprzez oznaczamy zbiór tych języków, które mogą być rozstrzygane przez maszyny z klasy z wyrocznią na dowolny język z klasy .
Ta klasa okazuje się być mocniejsza od DP, bowiem w DP mogliśmy zadań pytanie tylko raz (dotyczące coNP, ale w sensie wyroczni działa to jak pytanie do NP), a tutaj dowolną liczbę razy i to na dodatek pytań adaptywnych, tzn. takich, które mogą zależeć od wyników odpowiedzi na poprzednie z nich. Kolejną interesującą klasą jest . Wszystkie te klasy dają nam coraz większe możliwości, lecz oczywiście nie wiadomo, czy są to ściśle większe klasy, choć panuje takie przekonanie:
\vspace{1cm}
\begin_center
\includegraphics[width=10cm]{ZO-13-3-rys.jpg}
Klasy relatywne
\end_center
\vspace{1cm}
Postępując w ten sposób Meyer i Stockmeyer w latach 70 zdefiniowali całą hierarchię klas:
Definicja [Uzupelnij]
Hierarchia wielomianowa, to ciąg klas indeksowany poprzez :
- ,
- ,
- .
Dodatkowo poprzez oznaczamy sumę wszystkich tych klas, czyli:
.
Ponieważ na poziomie zerowym wszystkie elementy hierarchii to P, więc na poziomie pierwszym, ponieważ taka wyrocznia nic nie daje, otrzymujemy . Drugi poziom, to klasy. Warto zwrócić uwagę, że jest dopełnieniem na każdym poziomie wprost z definicji. Zawieranie się poszczególnych elementów na jednym poziomie obrazuje poniższy rysunek:
\vspace{1cm}
\begin_center
\includegraphics[width=10cm]{ZO-13-4-rys.jpg}
Hierarchia wielomianowa
\end_center
\vspace{1cm}
Do tej pory często odwoływaliśmy się do odpowiedniości pomiędzy klasą NP a szczególnymi relacjami wielomianowo zrównoważonymi i rozstrzygalnymi. Przedstawimy teraz zgrabną charakteryzację klas z hierarchii wielomianowej przy pomocy podobnego kryterium:
Twierdzenie [Uzupelnij]
Niech będzie językiem, . Język należy do wtedy i tylko wtedy, gdy istnieje wielomianowo zrównoważona i rozstrzygalna relacja (-argumentowa), taka, że dokładnie wtedy, gdy takie, że jest spełnione (-ty kwantyfikator jest uniwersalny, gdy jest parzyste, natomiast egzystencjalny, gdy jest nieparzyste).
Hierarchia wielomianowa jest strukturą dosyć wrażliwą na kolapsy, tzn. równości klas na pewnym poziomie. Okazuje się, że wtedy przenoszą się one automatycznie w górę:
Ćwiczenie
Pokaż, że jeżeli dla pewnego zachodzi to dla każdego zachodzi .
\begin_hint Pokaż, że . \end_hint
\begin_sol Pokażemy równość podaną we wskazówce z założenia . Weźmy dowolny . Z poprzedniego twierdzenia charakteryzującego wiemy, że istnieje relacja -argumentowa dla . Weźmy rzut relacji , w którym pomijamy współrzędną . Jest to relacja odpowiadająca pewnemu językowi z (otrzymujemy to dzięki zastosowaniu negacji i dopełnienia języka dla poprzedniego twierdzenia). W definicji tym razem jako pierwszy występuje kwantyfikator uniwersalny.
Dzięki równości klas istnieje dla języka -argumentowa relacja , definiująca go przy użyciu kwantyfikatora egzystencjalnego na początku. Dzięki tej zmianie, możemy teraz zmienić tak, aby uwzględnić usuniętą wcześniej współrzędną współrzędną , bez dodawania nowego kwantyfikatora, gdyż teraz jako pierwszy występuje kwantyfikator egzystencjalny, co sprawia, że . \end_sol
Zachodzi również podobny fakt. Otóż, jeśli P=NP (albo tylko NP=coNP), to hierarchia kolapsuje już na pierwszym poziomie.
Można by się zastanowić, czy kolejne poziomy hierarchii wielomianowej są interesujące z punku widzenia problemów, które pozwalają one rozwiązać. Okazuje się, że na każdym poziomie hierarchii posiada ona problemy zupełne:
Definicja [Uzupelnij]
Problem :
Wejście: formuła logiczna jak dla problemu SAT poprzedzona naprzemiennymi grupami kwantyfikatorów egzystencjalnych i uniwersalnych:
.
Wyjście: czy jest prawdziwa?
Twierdzenie [Uzupelnij]
Problem jest -zupełny dla .
Jednak pytanie czy istnieje problem PH-zupełny (czyli zupełny dla całej hierarchii) jest otwarte i panuje przekonanie, że tak nie jest, gdyż:
Ćwiczenie
Pokaż, że jeśli istnieje problem PH-zupełny, to hierarchia zapada się na pewnym poziomie.
\begin_hint Zauważ, że problem zupełny musi należeć do konkretnego poziomu. \end_hint
\begin_sol Jeśli jest zupełny dla PH, to należy do dla pewnego . Wtedy jednak dowolny język z poziomu redukuje się do w czasie wielomianowym. Ponieważ poziomy hierarchii są zamknięte na redukcje, stąd , a w konsekwencji . \end_sol
Jak silna jest cała hierarchia? Można łatwo zauważyć, że zawiera się ona w znanej już nam klasie PSPACE, ze względu na fakt, że można łatwo rozstrzygać w wielomianowej pamięci relacje, charakteryzujące problemy z PH, które opisywaliśmy wcześniej.
Jak nietrudno się domyślić pytanie, czy PH=PSPACE jest otwarte. Bardzo interesujące jest jednak, że gdyby równość zachodziła, to ponieważ PSPACE zawiera problemy zupełne, to PH również by je zawierała, stąd zapadła by się na pewnym skończonym poziomie. Stąd przekonanie, że PH zawiera się silnie w PSPACE.
Na koniec ciekawy rezultat autorstwa Seinosuke Tody (laureata nagrody Gödel'a z roku 1998) związany z klasą PH. Pokazał on, że , czyli wyrocznia na klasę jest niesamowicie silna i pozwala pochłonąć tak misternie zbudowaną piramidę coraz silniejszych klas.
Ćwiczenia dodatkowe
Ćwiczenie
Pokaż, że problem TAUTOLOGY jest coNP-zupełny.
\begin_hint Skorzystaj z faktu, że SAT jest NP-zupełny. \end_hint
\begin_sol TAUTOLOGY należy do coNP. Weźmy dowolny inny problem z coNP. Wiemy, że należy do NP, więc jest redukowalny do SAT - problemu NP-zupełnego, poprzez redukcję, którą oznaczymy jako . Z definicji redukcji otrzymujemy, że wtedy i tylko wtedy, gdy jest spełnialna. Po zastosowaniu negacji mamy , że wtedy i tylko wtedy, gdy jest nie spełnialna, tzn. jest tautologią. Sprowadziliśmy zatem problem przynależności do dowolnego języka z coNP do sprawdzania czy pewna formuła jest tautologią, co dowodzi coNP-zupełności problemu TAUTOLOGY. \end_sol
Ćwiczenie
Udowodnij własności od 1 do 3 z twierdzenia Uzupelnic tw:arel|.
- Jeśli to ,
- Jeśli to ,
- Jeśli to .
\begin_hint
Ad. 1 i 3: zasymuluj maszynę alternującą przy pomocy zwykłej.
Ad. 2: skorzystaj z idei zaczerpniętej z twierdzenia Savitcha.
\end_hint
\begin_sol
Ad. 1:
Weźmy dowolny język akceptowany przez alternującą maszynę Turinga .
Dokonamy symulacji przy pomocy deterministycznej maszyny w pamięci . Wykonujemy algorytm
rekurencyjnego przeglądania grafu konfiguracji w głąb. W momencie powrotu z rekurencji z ostatniego potomka
danego wierzchołka decydujemy na podstawie typu "OR" lub "AND" i akceptacji potomków o tym czy dana konfiguracja
jest akceptująca. Głębokość rekurencji to czas obliczeń maszyny , czyli . Na każdy poziom rekurencji
potrzeba nam jednak , aby zapamiętać konfigurację, czyli łącznie .
Możemy jednak zaoszczędzić na pamięci pamiętając tylko który z niedeterministycznych wyborów dokonała na danym poziomie rekurencji. Teraz aby obliczyć pełną konfigurację, będziemy musieli rozpocząć za każdym razem obliczenia od początku dokonując stosownych wyborów. Taka operacja może być jednak wykonana w pamięci , stąd cała symulacja potrzebuje pamięci, a więc .
Ad. 2:
Tym razem mamy do dyspozycji maszynę działającą w pamięci i chcemy ją zasymulować przy pomocy maszyny alternującej
w czasie . Jak w twierdzeniu Savitcha odwołamy się do grafu konfiguracji maszyny rozmiaru i będziemy się starali
odpowiedzieć na pytanie, czy istnieje ścieżka od konfiguracji początkowej do końcowej.
Procedura, która oblicza istnienie ścieżki o długości co najwyżej ma do dyspozycji alternację i dokonuje tego w dwóch etapach. W pierwszym zgaduje wierzchołek pośredni na ścieżce działając w trybie "OR". Następnie przełącza się w tryb uniwersalny "AND" i sprawdza rekurencyjnie, czy obydwie części ścieżki, długości poprzez odgadnięty wierzchołek istnieją.
Czas potrzebny do działania to głębokość rekurencji, czyli co jest rzędu przemnożony przez czas potrzebny do przetworzenia każdego kroku, który wynosi również , gdyż jest to rozmiar konfiguracji. Łącznie daje to czas. Zwróćmy uwagę, że liczymy czas na jednej ścieżce obliczeń, dzięki realizacji rekurencji przy pomocy alternacji!
Ad. 3:
Weźmy dowolny język akceptowany przez alternującą maszynę Turinga .
Mamy do dyspozycji czas rzędu wykładniczego względem , a więc możemy wygenerować cały graf konfiguracji
obliczeń maszyny (który jak wiemy ma rozmiar , gdy ).
Następnie stosownie do typów "AND" i "OR" przeglądamy graf od konfiguracji końcowych i decydujemy
o akceptacji słowa wejściowego.
\end_sol
Ćwiczenie
Udowodnij, że problemy TSP(D) i EXACT TSP są wielomianowo równoważne.
\begin_hint Skorzystaj z problemu HAMILTON PATH. \end_hint
\begin_sol Załóżmy, że TSP(D) ma rozwiązanie wielomianowe. Dzięki opisywanej już metodzie wyszukiwania binarnego możemy odnaleźć - optymalny koszt dzięki temu, że potrzebujemy zadać tylko logarytmiczną liczbę pytań względem , czyli liniową względem rozmiaru wejścia.
Niewiele trudniejsza jest implikacja w drugą stronę. Załóżmy, że EXACT TSP ma rozwiązanie wielomianowe. Metoda wyszukiwania binarnego tym razem zawodzi. Zgodnie ze wskazówką rozwiążemy najpierw HAMILTON PATH. Mając dany graf skierowany w którym chcemy znaleźć ścieżkę Hamiltona konstruujemy przykład dla EXACT TSP. Jeśli krawędź istnieje w to w otrzymuje wagę 1, jeśli nie istnieje w to w wstawiamy ją z wagą 2. Łatwo stwierdzić, że graf ma ścieżkę Hamiltona wtedy i tylko wtedy, gdy trasa komiwojażera w ma koszt dokładnie -- rozmiar grafu.
Ponieważ HAMILTON PATH jest NP-zupełny, więc istnieje redukcja TSP(D) do HAMILTON PATH, a tym samym składając redukcje otrzymamy algorytm wielomianowy dla TSP(D). \end_sol