Złożoność obliczeniowa/Wykład 13: Pamięć logarytmiczna i hierarchia wielomianowa: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Patola (dyskusja | edycje)
m Zastępowanie tekstu – „ </math>” na „</math>”
 
(Nie pokazano 35 wersji utworzonych przez 8 użytkowników)
Linia 4: Linia 4:
pamięci, a mianowicie ograniczamy jej ilość przez funkcję logarytmiczną. Przypomnijmy:
pamięci, a mianowicie ograniczamy jej ilość przez funkcję logarytmiczną. Przypomnijmy:


* Klasa L = SPACE(log<math>n</math>), to klasa tych języków, które mogą być akceptowane w deterministycznej pamięci logarytmicznej,
* Klasa <math>L = SPACE</math>(log<math>n</math>), to klasa tych języków, które mogą być akceptowane w deterministycznej pamięci logarytmicznej,
* Klasa NL = NSPACE(log<math>n</math>), to klasa tych języków, które mogą być akceptowane w niedeterministycznej pamięci logarytmicznej,
* Klasa <math>NL = NSPACE</math>(log<math>n</math>), to klasa tych języków, które mogą być akceptowane w niedeterministycznej pamięci logarytmicznej,
* Klasa coNL = coNSPACE(log<math>n</math>), to dopełnienie klasy tych języków, które mogą być akceptowane w niedeterministycznej pamięci logarytmicznej,
* Klasa <math>coNL = coNSPACE</math>(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  NL=coNL . Natomiast pytanie czy L=NL pozostaje
Na podstawie następnego rozdziału i twierdzenia Immermana-Szelepcsényi'ego dowiemy się, że  <math>NL = coNL</math>. Natomiast pytanie czy <math>L = NL</math> pozostaje
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 <math>NL</math>. 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,
jak wiemy, wszystkie z powyższych klas są zawarte w klasie <math>P</math> (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:
gdyż sama redukcja miałaby moc obliczeniową pozwalającą rozwiązać wszystkie problemy z tych klas. Poniższy problem okazuje się być <math>NL</math>-zupełny:


{{definicja|||
{{definicja|1.1 [Problem REACHABILITY:]|def 1.1|
Problem REACHABILITY:<br>
Wejście: Graf skierowany <math>G</math> oraz wierzchołki <math>x</math> i <math>y</math>.<br>
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 <math>x</math> do <math>y</math> w <math>G</math>?
Wyjście: Czy istnieje ścieżka od <math>x</math> do <math>y</math> w <math>G</math>?
}}
}}


{{cwiczenie|||
{{cwiczenie|1.2|cw 1.2|
Pokaż, że problem REACHABILITY jest NL-zupełny.
Pokaż, że problem REACHABILITY jest <math>NL</math>-zupełny.
}}
}}


Linia 30: Linia 29:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
Pokażmy najpierw, że problem REACHABILITY należy do NL.
Pokażmy najpierw, że problem REACHABILITY należy do <math>NL</math>.
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>.
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 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 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 <math>v:=u</math> i kontynuujemy obliczenia.
Początkowo 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 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 <math>v:=u</math> i kontynuujemy obliczenia.


Formalnie należy jeszcze użyć trzeciej zmiennej <math>licznik</math>, która zlicza liczbę kroków, tak aby ostatecznie odrzucić parę, gdy <math>licznik</math> przekroczy liczbę wierzchołków grafu. Użyliśmy pamięci rzędu  log <math>n</math> co kończy dowód pierwszego faktu.
Formalnie należy jeszcze użyć trzeciej zmiennej ''licznik'', która zlicza liczbę kroków, tak aby ostatecznie odrzucić parę, gdy ''licznik'' przekroczy liczbę wierzchołków grafu. Użyliśmy pamięci rzędu  log <math>n</math> 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 <math>M</math>.
Teraz musimy pokazać, że każdy inny problem z klasy <math>NL</math> redukuje się do REACHABILITY poprzez redukcję w pamięci logarytmicznej. Weźmy dowolny język <math>L</math> z klasy <math>NL</math> i odpowiadającą mu niedeterministyczną maszynę Turinga <math>M</math>.


Rozmiar grafu konfiguracji maszyny działającej w pamięci  log <math>n</math> to jak wiemy <math>c^{</math> log <math>n}\in O(n)</math>, 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 <math>n</math> . Nie potrzebujemy konstruować całego grafu, a jedynie stwierdzać, czy dwie konfiguracje są sąsiednie, co możemy zrobić w pamięci logarytmicznej.
Rozmiar grafu konfiguracji maszyny działającej w pamięci  log <math>n</math> to jak wiemy <math>c^{logn}\in O(n)</math>, 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 <math>n</math> . Nie potrzebujemy konstruować całego grafu, a jedynie stwierdzać, czy dwie konfiguracje są sąsiednie, co możemy zrobić w pamięci logarytmicznej.
</div></div>
</div></div>


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 <math>L=NL</math>, uzyskał w 2004 Reingold. Pokazał on, że
problem UNDIRECTED REACHABILITY, czyli osiągalność w grafie ''nieskierowanym'' należy do klasy L.
problem UNDIRECTED REACHABILITY, czyli osiągalność w grafie ''nieskierowanym'' należy do klasy <math>L</math>.


==Twierdzenie Immermana-Szelepcsényi'ego==
==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
przez Neila Immermana i Róberta Szelepcsényi'ego w roku 1987, za który otrzymali w 1995 nagrodę Gödel'a.
przez Neila Immermana i Róberta Szelepcsényi'ego w roku 1987, za który otrzymali [[Nagroda_Goedla|nagrodę Goedl'a]] w 1995


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|[twierdzenie Immermana-Szelepcsényi'ego]||
{{twierdzenie|2.1 [twierdzenie Immermana-Szelepcsényi'ego]|tw 2.1|
Jeśli <math>f(n)</math> jest konstruowalna pamięciowo, to NSPACE(f(n))<math>=</math>coNSPACE(f(n)).
Jeśli <math>f(n)</math> jest konstruowalna pamięciowo, to <math>NSPACE(f(n)) = coNSPACE(f(n))</math>.
}}
}}


{{dowod|:||
{{dowod|||
To co zostało pokazane przez autorów, to maszyna niedeterministyczna, która mając dany graf skierowany <math>G</math> i
To co zostało pokazane przez autorów, to maszyna niedeterministyczna, która mając dany graf skierowany <math>G</math> i
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  log <math>n</math>.
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  log <math>n</math>.
Linia 67: Linia 66:
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
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 <math>s(k)=|S(k)|</math> oznaczymy liczność tego zbioru. Naszym obiektem zainteresowania jest zatem obliczenie wartości <math>s(n)</math>,
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ż <math>n</math> -- rozmiar grafu -- ogranicza długość ścieżki.
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 <math>S(k)</math> (i obliczaniu na jego podstawie
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
Linia 103: Linia 102:
     '''if''' <math>u\in S(i-1)</math> '''then'''
     '''if''' <math>u\in S(i-1)</math> '''then'''
       licznik ++
       licznik ++
       '''if''' <math>u=v</math> lub <math>u \rightarrow v \inG</math> '''then'''
       '''if''' <math>u=v</math> lub <math>u \rightarrow v \in G</math> '''then'''
         <math>wynik:=TAK</math>
         <math>wynik:=TAK</math>
       '''end if'''
       '''end if'''
Linia 114: Linia 113:
   '''end if'''
   '''end if'''


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.
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 <math>NL</math>.
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)
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 <math>u</math>. W ten sposób sprawdzimy (niedeterministycznie) wszystkie ścieżki długości co najwyżej <math>i-1</math>.
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>.
Linia 134: Linia 133:
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 <math>n</math> zatem działa on w pamięci logarytmicznej.
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 <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 <math>L</math> należący do NSPACE(<math>f(n)</math>), gdzie
Przejdźmy zatem do wykorzystania maszyny do udowodnienia tezy naszego twierdzenia. Weźmy język <math>L</math> należący do <math>NSPACE(f(n))</math>, gdzie
<math>f(n)\geqslant </math> log <math>n</math>, gdyż <math>f(n)</math> jest konstruowalna pamięciowo. Istnieje zatem maszyna niedeterministyczna <math>M</math> akceptująca
<math>f(n)\geqslant</math> log <math>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ż
<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 <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
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
Linia 147: Linia 146:


W tej sytuacji maszyna <math>M'</math> może zaakceptować słowo <math>x</math>, które
W tej sytuacji maszyna <math>M'</math> może zaakceptować słowo <math>x</math>, które
nie należy do <math>L</math>, a tym samym pokazujemy, że <math>L\in </math> coNSPACE <math>(f(n))</math>.
nie należy do <math>L</math>, a tym samym pokazujemy, że <math>L\in</math> <math>coNSPACE(f(n))</math>.


}}
}}
Linia 153: Linia 152:
==Klasy coNP i DP==
==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ę <math>NP</math> jak i pojęcie dopełnień klas. Przyjrzyjmy się bliżej klasie <math>coNP</math>.
Klasa NP, jest to zbiór tych języków, dla których możemy łatwo weryfikować przynależność słów.
Klasa <math>NP</math>, 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.
Klasa <math>coNP</math> 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
Podobnie jak dla <math>NP</math> i twierdzenia Fagina, można scharakteryzować <math>coNP</math> jako zbiór własności teoriografowych wyrażalnych
w ''uniwersalnej'' logice drugiego rzędu.
w ''uniwersalnej'' logice drugiego rzędu.


Oto przykłady problemów z klasy coNP:
Oto przykłady problemów z klasy <math>coNP</math>:


{{definicja|||
{{definicja|3.1 [Problem TAUTOLOGY:]|def 3.1|
Problem TAUTOLOGY:<br>
Wejście: formuła logiczna <math>\phi</math> jak dla problemu SAT.<br>
Wejście: formuła logiczna <math>\phi</math> jak dla problemu SAT.<br>
Wyjście: czy każde wartościowanie spełnia <math>\phi</math>?
Wyjście: czy każde wartościowanie spełnia <math>\phi</math>?
}}
}}


{{definicja|||
{{definicja|3.2 [Problem HAMILTON PATH COMPLEMENT:]|def 3.2|
Problem HAMILTON PATH COMPLEMENT:<br>
Wejście: graf nieskierowany <math>G</math>.<br>
Wejście: graf nieskierowany <math>G</math>.<br>
Wyjście: czy <math>G</math> nie zawiera ścieżki Hamiltona?
Wyjście: czy <math>G</math> nie zawiera ścieżki Hamiltona?
Linia 177: Linia 174:
bo opiera się na zgadnięciu wartościowania niespełniającego lub ścieżki Hamiltona.
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.
Nietrudno udowodnić (patrz ćwiczenie końcowe), że są to problemy zupełne dla klasy <math>coNP</math>.
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 <math>L</math> jest NP-zupełny, to jego dopełnienie <math>\overline{L}</math> jest coNP-zupełne.
że jeżeli <math>L</math> jest <math>NP</math>-zupełny, to jego dopełnienie <math>\overline{L}</math> jest <math>coNP</math>-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 <math>NP = coNP</math> pozostaje otwarte.
Możemy jedynie stwierdzić, że jeżeli P=NP, to NP=coNP, gdyż P jest zamknięta na dopełnienie.
Możemy jedynie stwierdzić, że jeżeli <math>P = NP</math>, to <math>NP = coNP</math>, gdyż <math>P</math> jest zamknięta na dopełnienie.
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:


{{cwiczenie|||
{{cwiczenie|3.3|cw 3.3|
Jeśli <math>L</math> jest <math>coNP</math>-zupełny i <math>L\in NP</math> to <math>NP=coNP</math>.
Jeśli <math>L</math> jest <math>coNP</math>-zupełny i <math>L\in NP</math> to <math>NP=coNP</math>.
}}
}}
Linia 194: Linia 191:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
Ustalmy <math>L</math> z klasy NP, który jest coNP-zupełny.
Ustalmy <math>L</math> z klasy <math>NP</math>, który jest <math>coNP</math>-zupełny.


Weźmy dowolny <math>L'</math> z klasy coNP. 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ą.
Weźmy dowolny <math>L'</math> z klasy <math>coNP</math>. Ponieważ <math>L</math> jest <math>coNP</math>-zupełny, więc <math>L'</math> redukuje się do <math>L</math>, czyli <math>L'</math> należy do <math>NP</math>, bowiem redukcja jest procedurą deterministyczną.


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ć <math>L'</math> redukcją do <math>\overline{L}</math>. Zatem <math>L'</math> należy do coNP.
Analogicznie, weźmy dowolny <math>L'</math> z <math>NP</math>. Wiemy, że <math>\overline{L}</math> jest <math>NP</math>-zupełny, i należy do <math>coNP</math>. Możemy zatem sprowadzić <math>L'</math> redukcją do <math>\overline{L}</math>. Zatem <math>L'</math> należy do <math>coNP</math>.
</div></div>
</div></div>


Poniższy rysunek przedstawia relacje pomiędzy poznanymi klasami i omawianą za chwilę klasą DP:
[[File:ZO-13-1.mp4|250x250px|thumb|right|Relacje pomiędzy klasami NP, coNP i DP.]]
Animacja [http://osilek.mimuw.edu.pl/images/3/3f/ZO-13-1.swf Relacje pomiędzy klasami NP, coNP i DP] przedstawia relacje pomiędzy poznanymi klasami i omawianą za chwilę klasą <math>DP</math>.


[[ZO-13-1-rys.jpg(Relacje pomiędzy klasami NP, coNP i DP)]]
Oczywiście przyglądając się wszystkim takim rysunkom należy pamiętać, że mogą one w wielu miejscach kolapsować.
 
Oczywiście przyglądając się wszystkim takim rysunkom należy pamiętać, że mogą one w wielu miejscach
kolapsować.


===Klasa DP===
===Klasa DP===
Linia 212: Linia 207:
Zastanówmy się nad następującym problemem:
Zastanówmy się nad następującym problemem:


{{przyklad|||
{{przyklad|3.4 [Problem EXACT TSP]|przy 3.4|
Problem EXACT TSP:<br>
Wejście: graf nieskierowany ważony <math>G</math> i liczba <math>K</math> <br>
Wejście: graf nieskierowany ważony <math>G</math> i liczba <math>K</math> <br>
Wyjście: czy optymalna trasa komiwojażera dla <math>G</math> ma wartość dokładnie <math>K</math>?
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 <math>NP</math>-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
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
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 <math>DP</math>. Nie umiemy bowiem pokazać, że EXACT TSP należy do <math>NP</math>, wszak
jak poświadczyć i szybko zweryfikować, że długość optymalnej trasy wynosi dokładnie <math>K</math>? Widzimy, że odpowiedź na to pytanie wymaga
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 <math>K</math> i co najwyżej <math>K</math>, co sugeruje pewne specyficzne połączenie problemu TSP(D) i jego dopełnienia.
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|[klasa dp]||
{{definicja|3.5 [Klasa DP]|def 3.5|
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>.
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 <math>DP</math>. 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).
<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 <math>DP</math> posiada problemy zupełne. Rozważmy problem następujący:


{{przyklad|||
{{przyklad|3.6 [Problem SAT-UNSAT]|przy 3.6|
Problem SAT-UNSAT:<br>
Wejście: formuły logiczne <math>\phi</math> i <math>\psi</math> jak dla SAT.<br>
Wejście: formuły logiczne <math>\phi</math> i <math>\psi</math> jak dla SAT.<br>
Wyjście: czy formuła <math>\phi</math> jest spełnialna, natomiast <math>\psi</math> niespełnialna?
Wyjście: czy formuła <math>\phi</math> jest spełnialna, natomiast <math>\psi</math> niespełnialna?
}}
}}


{{cwiczenie|||
{{cwiczenie|3.7|cw 3.7|
Udowodnij, że problem SAT-UNSAT jest DP-zupełny.
Udowodnij, że problem SAT-UNSAT jest <math>DP</math>-zupełny.
}}
}}


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">  
Skorzystaj z redukcji języka z NP oraz dopełnienia języka z coNP do SAT.
Skorzystaj z redukcji języka z <math>NP</math> oraz dopełnienia języka z <math>coNP</math> do SAT.
</div></div>
</div></div>


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
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.
Najpierw pokażmy, że SAT-UNSAT należy do klasy <math>DP</math>. Musimy wskazać stosowne języki <math>L_1</math> i <math>L_2</math> odpowiednio z klas <math>NP</math> i <math>coNP</math>.
Wybieramy <math>L_1=\{(\phi,\psi):\phi</math>  jest spełnialna <math>\}</math> oraz  <math>L_1=\{(\phi,\psi):\psi</math>  nie jest spełnialna <math>\}</math>, o których
Wybieramy <math>L_1=\{(\phi,\psi):\phi</math>  jest spełnialna <math>\}</math> oraz  <math>L_1=\{(\phi,\psi):\psi</math>  nie jest spełnialna <math>\}</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 <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 <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>.
Przejdźmy do części związanej z pokazaniem redukcji z dowolnego problemu z klasy DP. Weźmy <math>L\in DP</math>. Wiemy, że <math>L=L_1\cap L_2</math> i na mocy własności klas <math>NP</math> i <math>coNP</math> istnieją redukcje <math>R_1</math> języka <math>L_1</math> do SAT oraz <math>R2</math> 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 <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 <math>x\in L_1 \cap L_2</math> gdy <math>R(x)\in</math> SAT-UNSAT.
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 <math>x\in L_1 \cap L_2</math> gdy <math>R(x)\in</math> SAT-UNSAT.
</div></div>
</div></div>


Również wspomniany na początku problem EXACT TSP jest DP-zupełny.
Również wspomniany na początku problem EXACT TSP jest <math>DP</math>-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.
Można rozważać także wiele innych wersji EXACT znanych problemów <math>NP</math>-zupełnych, które okazują się <math>DP</math>-zupełne.


Klasa DP zawiera także problemy DP-zupełne innego rodzaju:
Klasa <math>DP</math> zawiera także problemy <math>DP</math>-zupełne innego rodzaju:


{{przyklad|||
{{przyklad|3.8 [Problem CRITICAL SAT]|przy 3.8|
Problem CRITICAL SAT:<br>
Wejście: formuła logiczna <math>\phi</math> jak dla SAT.<br>
Wejście: formuła logiczna <math>\phi</math> jak dla SAT.<br>
Wyjście: czy formuła <math>\phi</math> jest nie spełnialna, natomiast usunięcie dowolnej klauzuli sprawia, że jest spełnialna?
Wyjście: czy formuła <math>\phi</math> jest nie spełnialna, natomiast usunięcie dowolnej klauzuli sprawia, że jest spełnialna?
}}
}}


{{przyklad|||
{{przyklad|3.9 [Problem CRITICAL HAMILTON PATH|przy 3.9|
Problem CRITICAL HAMILTON PATH:<br>
Wejście: graf nieskierowany <math>G</math><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?
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?
Linia 294: Linia 285:
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.
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|[<math>\textsc{ATIME}(f(n))</math>]||
{{definicja|4.1 [<math>\text{ATIME}(f(n))</math>]|def 4.1|
Poprzez <math>\textsc{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
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>.
czasowej <math>f(n)</math>.
}}
}}


{{definicja|[<math>\textsc{ASPACE}(f(n))</math>]||
{{definicja|4.2 [<math>\text{ASPACE}(f(n))</math>]|def 4.2|
Poprzez <math>\textsc{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
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>.
pamięciowej <math>f(n)</math>.
}}
}}
Linia 306: Linia 297:
Wprowadzamy też skróty dla najpopularniejszych klas:
Wprowadzamy też skróty dla najpopularniejszych klas:


* Klasa AP = ATIME <math>(n^k) = \bigcup_{j>0} </math> ATIME <math>(n^j)</math>, to klasa tych języków, które mogą być akceptowane w alternującym czasie wielomianowym,
* Klasa <math>AP = ATIME(n^k) = \bigcup_{j>0}ATIME(n^j)</math>, to klasa tych języków, które mogą być akceptowane w alternującym czasie wielomianowym,
* Klasa AL = ASPACE(log<math>n</math>), to klasa tych języków, które mogą być akceptowane w alternującej pamięci logarytmicznej,
* Klasa <math>AL = ASPACE</math>(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:
<math>AP</math> zawiera w sobie <math>NP</math>. Poniższe ćwiczenie pokazuje, że o <math>AP</math> można powiedzieć więcej:


{{cwiczenie|||
{{cwiczenie|4.3|cw 4.3|
Pokaż, że AP zawiera w sobie klasę coNP.
Pokaż, że <math>AP</math> zawiera w sobie klasę <math>coNP</math>.
}}
}}


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">  
Pokaż że problem coNP-zupełny TAUTOLOGY należy do AP.
Pokaż że problem coNP-zupełny TAUTOLOGY należy do <math>AP</math>.
</div></div>
</div></div>


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
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.
Na mocy wskazówki pokażemy, że TAUTOLOGY <math>\in AP</math>, a tym samym ponieważ <math>AP</math> jest zamknięta na redukcje, to cała klasa <math>coNP</math> zawiera się w <math>AP</math>.


Maszyna dla TAUTOLOGY rozpoczyna działanie od stanu uniwersalnego. Następnie na każdej ze ścieżek obliczeń sprawdza inne wartościowanie. 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 <math>\phi</math>, gdy jest ona spełniona dla każdego wartościowania, czyli, gdy jest tautologią logiczną.
Maszyna dla TAUTOLOGY rozpoczyna działanie od stanu uniwersalnego. Następnie na każdej ze ścieżek obliczeń sprawdza inne wartościowanie. 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 <math>\phi</math>, gdy jest ona spełniona dla każdego wartościowania, czyli, gdy jest tautologią logiczną.
</div></div>
</div></div>


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 <math>AP</math>. Znajdują się w niej języki, o których nie wiemy czy należą do <math>NP</math> lub <math>coNP</math>.


{{definicja|||
{{definicja|4.4 [Problem MIN-FORMULA]|def 4.4|
Problem MIN-FORMULA:<br>
Wejście: formuła logiczna <math>\phi</math> jak dla problemu SAT.<br>
Wejście: formuła logiczna <math>\phi</math> jak dla problemu SAT.<br>
Wyjście: czy <math>\phi</math> jest minimalna, tzn. czy żadna krótsza formuła nie jest jej równoważna?
Wyjście: czy <math>\phi</math> jest minimalna, tzn. czy żadna krótsza formuła nie jest jej równoważna?
}}
}}


{{cwiczenie|||
{{cwiczenie|4.5|cw 4.5|
Pokaż, że MIN-FORMULA należy do AP.
Pokaż, że MIN-FORMULA należy do <math>AP</math>.
}}
}}


Linia 350: Linia 340:
Teraz przedstawimy kilka relacji pomiędzy klasami obliczeń alternujących:
Teraz przedstawimy kilka relacji pomiędzy klasami obliczeń alternujących:


{{twierdzenie|||
{{twierdzenie|4.6|tw 4.6|


Następujące relacje są prawdziwe:
Następujące relacje są prawdziwe:


# Jeśli <math>f(n)\geqslant n</math> to  ATIME <math>(f(n)) \subseteq </math> SPACE <math>(f(n))</math>,
# Jeśli <math>f(n)\geqslant n</math> to  <math>ATIME(f(n)) \subseteq SPACE(f(n))</math>,
# Jeśli <math>f(n)\geqslant n</math> to  SPACE <math>(f(n)) \subseteq </math> ATIME <math>(f^2(n))</math>,
# Jeśli <math>f(n)\geqslant n</math> to  <math>SPACE(f(n)) \subseteq ATIME(f^2(n))</math>,
# Jeśli <math>f(n)\geqslant </math> log <math>n</math> to ASPACE <math>(f(n)) \subseteq </math> TIME <math>(c^{f(n)})</math>.
# Jeśli <math>f(n)\geqslant</math> log <math>n</math> to <math>ASPACE(f(n)) \subseteq TIME(c^{f(n)})</math>.
# Jeśli <math>f(n)\geqslant </math> log <math>n</math> to ASPACE <math>(f(n)) \supseteq </math> TIME <math>(c^{f(n)})</math>.
# Jeśli <math>f(n)\geqslant</math> log <math>n</math> to <math>ASPACE(f(n)) \supseteq TIME(c^{f(n)})</math>.


}}
}}


{{dowod|:||
[[File:ZO-13-2.svg|350x350px|thumb|right|Zapis przebiegu obliczeń.]]
 
<!-- [[ZO-13-2-rys.jpg(Zapis przebiegu obliczeń)]] -->
{{dowod|||
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 374: Linia 367:
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 <math>d</math> zależy tylko od zawartości komórek <math>a</math>, <math>b</math> i <math>c</math>:
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> (rysunek [http://osilek.mimuw.edu.pl/images/3/34/ZO-13-2.swf Zapis przebiegu obliczeń]).
 
[[ZO-13-2-rys.jpg(Zapis przebiegu obliczeń)]]


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ę
Linia 403: Linia 394:
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>.
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>.


[[File:ZO-13-3.mp4|250x250px|thumb|right|Klasy relatywne.]]
<!-- [[ZO-13-3-rys.jpg(Klasy relatywne)]] -->
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 <math>NP^{NP}</math>. Wszystkie te klasy
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 (animacja [http://osilek.mimuw.edu.pl/images/c/c6/ZO-13-3.swf Klasy relatywne]).
 
[[ZO-13-3-rys.jpg(Klasy relatywne)]]


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|[Hierarchia wielomianowa]||
{{definicja|5.1 [Hierarchia wielomianowa]|def 5.1|
Hierarchia wielomianowa, to ciąg klas indeksowany poprzez <math>i</math>:<br>
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>\sum_0 P = \prod_0 P = \Delta_0 P = P</math>
* <math>\Delta_{i+1} P = P^{\sum_i P},</math>  dla  <math>i>0</math>,
* <math>\Delta_{i+1} P = P^{\sum_i P}</math>, dla  <math>i>0</math>,
* <math>\sum_{i+1} P = NP^{\sum_i P},</math>  dla  <math>i>0</math>,
* <math>\sum_{i+1} P = NP^{\sum_i P}</math>, dla  <math>i>0</math>,
* <math>\prod_{i+1} P = coNP^{\sum_i P},</math>  dla  <math>i>0</math>.
* <math>\prod_{i+1} P = coNP^{\sum_i P}</math>, dla  <math>i>0</math>.


Dodatkowo poprzez <math>PH</math> oznaczamy sumę wszystkich tych klas, czyli:<br>
Dodatkowo poprzez <math>PH</math> oznaczamy sumę wszystkich tych klas, czyli:<br>
Linia 424: Linia 415:
}}
}}


Ponieważ na poziomie zerowym wszystkie elementy hierarchii to P, więc na poziomie pierwszym,
[[File:ZO-13-4.mp4|250x250px|thumb|right|Hierarchia wielomianowa.]]
<!-- [[ZO-13-4-rys.jpg(Hierarchia wielomianowa)]] -->
Ponieważ na poziomie zerowym wszystkie elementy hierarchii to <math>P</math>, więc na poziomie pierwszym,
ponieważ taka wyrocznia nic nie daje, otrzymujemy <math>\Delta_1 P = P, \sum_1 P = NP, \prod_1 P = coNP</math>.
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<math>\Delta_2 P = P^{NP}, \sum_2 P = NP^{NP}, \prod_2 P = coNP^{NP}</math>.
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 <math>\prod_i P</math> jest dopełnieniem <math>\sum_i P</math> na każdym poziomie wprost z definicji.
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 animacja [http://osilek.mimuw.edu.pl/images/f/f2/ZO-13-4.swf Hierarchia wielomianowa].


[[ZO-13-4-rys.jpg(Hierarchia wielomianowa)]]
Do tej pory często odwoływaliśmy się do odpowiedniości pomiędzy klasą <math>NP</math> 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
zrównoważonymi i rozstrzygalnymi. Przedstawimy teraz zgrabną charakteryzację klas z hierarchii wielomianowej przy pomocy
zrównoważonymi i rozstrzygalnymi. Przedstawimy teraz zgrabną charakteryzację klas z hierarchii wielomianowej przy pomocy
podobnego kryterium:
podobnego kryterium:


{{twierdzenie|||
{{twierdzenie|5.2|tw 5.2|
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
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 <math>R</math> (<math>i+1</math>-argumentowa), taka, że <math>x \in L</math> dokładnie wtedy, gdy
relacja <math>R</math> (<math>i+1</math>-argumentowa), taka, że <math>x \in L</math> dokładnie wtedy, gdy
Linia 446: Linia 437:
one automatycznie w górę:
one automatycznie w górę:


{{cwiczenie|||
{{cwiczenie|5.3|cw 5.3|
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>.
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>.
}}
}}
Linia 460: Linia 451:
</div></div>
</div></div>


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 <math>P = NP</math> (albo tylko <math>NP = coNP</math>), 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ć.
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:
Okazuje się, że na każdym poziomie hierarchii posiada ona problemy zupełne:


{{definicja|||
{{definicja|5.4 [Problem QSAT <math>_i</math>]|def 5.4|
Problem QSAT <math>_i</math>:<br>
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>
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 <math>\Phi</math> jest prawdziwa?
Wyjście: czy <math>\Phi</math> jest prawdziwa?
}}
}}


{{twierdzenie|||
{{twierdzenie|5.5|tw 5.5|
Problem <math>QSAT_i</math> jest <math>\sum_i P</math>-zupełny dla <math>i>0</math>.
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 <math>PH</math>-zupełny (czyli zupełny dla całej hierarchii) jest otwarte i panuje przekonanie, że tak nie jest, gdyż:


{{cwiczenie|||
{{cwiczenie|5.6|cw 5.6|
Pokaż, że jeśli istnieje problem PH-zupełny, to hierarchia zapada się na pewnym poziomie.
Pokaż, że jeśli istnieje problem <math>PH</math>-zupełny, to hierarchia zapada się na pewnym poziomie.
}}
}}


Linia 487: Linia 476:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
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>
Jeśli <math>L</math> jest zupełny dla <math>PH</math>, 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 <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
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>.
<math>\sum_{i+1} P=\sum_i P</math>.
</div></div>
</div></div>


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 <math>PSPACE</math>, 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.
łatwo rozstrzygać w wielomianowej pamięci relacje, charakteryzujące problemy z <math>PH</math>, 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
Jak nietrudno się domyślić pytanie, czy <math>PH = PSPACE</math> 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,
ponieważ <math>PSPACE</math> zawiera problemy zupełne, to <math>PH</math> 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.
że <math>PH</math> zawiera się silnie w <math>PSPACE</math>.


Na koniec ciekawy rezultat autorstwa Seinosuke Tody (laureata
Na koniec ciekawy rezultat autorstwa Seinosuke Tody (laureata [[Nagroda_Goedla|nagrody Goedl'a]] z roku 1998) związany z klasą <math>PH</math>. 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
<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ą
Linia 507: Linia 495:
==Ćwiczenia dodatkowe==
==Ćwiczenia dodatkowe==


{{cwiczenie|||
{{cwiczenie|6.1|cw 6.1|
Pokaż, że problem TAUTOLOGY jest coNP-zupełny.
Pokaż, że problem TAUTOLOGY jest <math>coNP</math>-zupełny.
}}
}}


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">  
Skorzystaj z faktu, że SAT jest NP-zupełny.
Skorzystaj z faktu, że SAT jest <math>NP</math>-zupełny.
</div></div>
</div></div>


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
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
TAUTOLOGY należy do <math>coNP</math>. Weźmy dowolny inny problem <math>L</math> z <math>coNP</math>. Wiemy, że <math>\overline{L}</math> należy do <math>NP</math>, więc
jest redukowalny do SAT - problemu NP-zupełnego, poprzez redukcję, którą oznaczymy jako <math>R</math>. Z definicji redukcji
jest redukowalny do SAT - problemu <math>NP</math>-zupełnego, poprzez redukcję, którą oznaczymy jako <math>R</math>. Z definicji redukcji
otrzymujemy, że <math>x\in \overline{L}</math> wtedy i tylko wtedy, gdy <math>R(x)</math> jest spełnialna. Po zastosowaniu negacji mamy
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 <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
, ż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 <math>L</math> z coNP do sprawdzania czy pewna formuła jest tautologią, co dowodzi
problem przynależności do dowolnego języka <math>L</math> z <math>coNP</math> do sprawdzania czy pewna formuła jest tautologią, co dowodzi
coNP-zupełności problemu TAUTOLOGY.
<math>coNP</math>-zupełności problemu TAUTOLOGY.
</div></div>
</div></div>


{{cwiczenie|||
{{cwiczenie|6.2|cw 6.2|
Udowodnij własności od 1 do 3 z twierdzenia [[##tw:arel|Uzupelnic tw:arel|]].
Udowodnij własności od 1 do 3 z twierdzenia [[#tw_4.6|4.6]].
 
# Jeśli <math>f(n)\geqslant n</math> to  ATIME <math>(f(n)) \subseteq </math> SPACE <math>(f(n))</math>,
# Jeśli <math>f(n)\geqslant n</math> to  SPACE <math>(f(n)) \subseteq </math> ATIME <math>(f^2(n))</math>,
# Jeśli <math>f(n)\geqslant </math> log <math>n</math> to  ASPACE <math>(f(n)) \subseteq </math> TIME <math>(c^{f(n)})</math>.


# Jeśli <math>f(n)\geqslant n</math> to <math>ATIME(f(n)) \subseteq SPACE(f(n))</math>,
# Jeśli <math>f(n)\geqslant n</math> to <math>SPACE(f(n)) \subseteq ATIME(f^2(n))</math>,
# Jeśli <math>f(n)\geqslant</math> log <math>n</math> to <math>ASPACE(f(n))\subseteq TIME(c^{f(n)})</math>.
}}
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> <br>
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> <br>
Ad. 1 i 3: zasymuluj maszynę alternującą przy pomocy zwykłej.<br>
Ad. 1 i 3: zasymuluj maszynę alternującą przy pomocy zwykłej.<br>
Linia 540: Linia 526:
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> <br>
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> <br>
Ad. 1:<br>
Ad. 1:<br>
Weźmy dowolny język <math>L\in</math> ATIME <math>(f(n))</math> akceptowany przez alternującą maszynę Turinga <math>M</math>.
Weźmy dowolny język <math>L\in 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
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
Linia 547: Linia 533:
potrzeba nam jednak <math>f(n)</math>, aby zapamiętać konfigurację, czyli łącznie <math>f^2(n)</math>.
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 <math>M</math> na danym poziomie
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 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 <math>f(n)</math> pamięci, a więc <math>L\in SPACE(f(n))</math>.
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 <math>f(n)</math>, stąd cała symulacja
potrzebuje <math>f(n)</math> pamięci, a więc <math>L\in</math> SPACE <math>(f(n))</math>.


Ad. 2:<br>
Ad. 2:<br>
Linia 557: Linia 540:
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 <math>n</math> ma do dyspozycji alternację i dokonuje tego w dwóch etapach.
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 <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ą.
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  log <math>(c^{f(n)})</math> co jest rzędu <math>f(n)</math> przemnożony
Czas potrzebny do działania to głębokość rekurencji, czyli  log <math>(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ż <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 ''jednej'' ścieżce obliczeń, dzięki realizacji rekurencji przy pomocy alternacji!
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 ''jednej'' ścieżce obliczeń, dzięki realizacji rekurencji przy pomocy alternacji!


Ad. 3:<br>
Ad. 3:<br>
Weźmy dowolny język <math>L\in</math> ASPACE <math>(f(n))</math> akceptowany przez alternującą maszynę Turinga <math>M</math>.
Weźmy dowolny język <math>L\in ASPACE(f(n))</math> akceptowany przez alternującą maszynę Turinga <math>M</math>.
Mamy do dyspozycji czas rzędu wykładniczego względem <math>f(n)</math>, a więc możemy wygenerować cały graf konfiguracji
Mamy do dyspozycji czas rzędu wykładniczego względem <math>f(n)</math>, a więc możemy wygenerować cały graf konfiguracji
obliczeń maszyny <math>M</math> (który jak wiemy ma rozmiar <math>c^{f(n)}</math>, gdy <math>f(n)\geqslant </math> log <math>n</math>).
obliczeń maszyny <math>M</math> (który jak wiemy ma rozmiar <math>c^{f(n)}</math>, gdy <math>f(n)\geqslant</math> log <math>n</math>).
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.
</div></div>
</div></div>


{{cwiczenie|||
{{cwiczenie|6.3|cw 6.3|
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.
}}
}}
Linia 583: Linia 561:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">  
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źć <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.
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.


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 <math>G</math> w którym 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 <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 <math>G'</math> ma koszt dokładnie <math>n</math> -- rozmiar grafu.
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 <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 <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 <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 <math>NP</math>-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).
</div></div>
</div></div>


==Testy końcowe==
==Testy końcowe==

Aktualna wersja na dzień 11:03, 5 wrz 2023

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(logn), to klasa tych języków, które mogą być akceptowane w deterministycznej pamięci logarytmicznej,
  • Klasa NL=NSPACE(logn), to klasa tych języków, które mogą być akceptowane w niedeterministycznej pamięci logarytmicznej,
  • Klasa coNL=coNSPACE(logn), 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 NL=coNL. 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 1.1 [Problem REACHABILITY:]

Wejście: Graf skierowany G oraz wierzchołki x i y.
Wyjście: Czy istnieje ścieżka od x do y w G?

Ćwiczenie 1.2

Pokaż, że problem REACHABILITY jest NL-zupełny.

Wskazówka
Rozwiązanie

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 nagrodę Goedl'a w 1995

Twierdzenie mówi o tym, że klasy niedeterministyczne złożoności pamięciowej są zamknięte na dopełnienie:

Twierdzenie 2.1 [twierdzenie Immermana-Szelepcsényi'ego]

Jeśli f(n) jest konstruowalna pamięciowo, to NSPACE(f(n))=coNSPACE(f(n)).

Dowód

To co zostało pokazane przez autorów, to maszyna niedeterministyczna, która mając dany graf skierowany G i wierzchołek x potrafi obliczyć liczbę wierzchołków osiąganych z x w grafie G przy użyciu pamięci log n. Zrobimy z niej użytek w ostatniej części głównego dowodu, gdy będziemy uruchamiać ją na grafie konfiguracji.

Maszyna jest dosyć trikowa i pokazuje jak wiele daje nam niedeterminizm. Wielokrotnie będziemy wykorzystywać fakt, że wystarczy nam, aby maszyna niedeterministyczna na dowolnej ścieżce dokonała poprawnego obliczenia. Na wszystkich pozostałych ścieżkach będziemy "wykrywać", że coś jest nie tak i kończyć działanie w stanie odrzucającym ("poddawać się").

Oznaczmy, przez S(k) zbiór tych wierzchołków grafu G, które są osiągane z x ścieżką o długości co najwyżej k. Natomiast przez s(k)=|S(k)| oznaczymy liczność tego zbioru. Naszym obiektem zainteresowania jest zatem obliczenie wartości s(n), czyli liczba wszystkich wierzchołków osiągalnych, gdyż n - 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 S(k) (i obliczaniu na jego podstawie S(k+1) co byłoby banalne) nie możemy marzyć - ma on wielkość liniową względem rozmiaru G. To brzmi niesamowicie, ale będziemy obliczać s(k+1) na podstawie s(k)! 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:

 s(0):=1
 for
 i:=1 to n do
   Wyznacz s(i) na podstawie s(i1)
 end for

Teraz procedura obliczająca s(i). Jest ona całkiem prosta, jeśli zastosujemy w niej pewien skrót notacyjny:

 s(i):=0
 for all vV(G) do
   if vS(i) then
     s(i)++
   end if
 end for

Lecz zbioru S(i) nie byliśmy w stanie zapamiętać. Zapowiedzielśmy już, że będziemy sprawdzać, czy wierzchołek do niego należy, na podstawie s(i1). To najbardziej skomplikowana część algorytmu, gdzie wykorzystujemy niedeterminizm.

Przeglądniemy teraz wszystkie wierzchołki u grafu G i sprawdzimy, czy któryś z nich należy do S(i1) w sposób niedeterministyczny. Przypomnijmy, że taka procedura, gdy mówi "TAK", to wierzchołek na pewno należy do S(i1), 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 s(i1). Jeśli tak się stanie, to będziemy mieć gwarancję, że o każdym wierzchołku u 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 u można dojść do v przy pomocy jednej krawędzi w ten sposób obliczymy czy vS(i):

 licznik:=0, wynik:=NIE
   for all uV(G) do
   if uS(i1) then
     licznik ++
     if u=v lub uvG then
       wynik:=TAK
     end if
   end if
 end for
 if licznik<s(i1) then
   return NIE 
 else
   return wynik 
 end if

Teraz przejdźmy do konstrukcji maszyny obliczającej, czy uS(i1) w sposób niedeterministyczny. Algorytm jest całkiem prosty i podobny do tego, w którym pokazywaliśmy, że REACHABILITY jest w NL. Zgadujemy sekwencję k1 wierzchołków. Rozpoczynamy od x. Sprawdzamy, czy każdy kolejny wierzchołek jest sąsiadem poprzedniego (lub równy poprzedniemu) oraz czy w końcu dochodzimy do u. W ten sposób sprawdzimy (niedeterministycznie) wszystkie ścieżki długości co najwyżej i1.

Poniżej zapis algorytmu dla sytuacji ścieżki długości k:

 p1:=x
 for i:=2 to k do
   zgadnij pi
   if pi1pi i nie zachodzi pi1piG then
     return NIE
   end if
 end for
 if pk=u then
   return TAK
 else
   return NIE 
 end if

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 n zatem działa on w pamięci logarytmicznej.

Przejdźmy zatem do wykorzystania maszyny do udowodnienia tezy naszego twierdzenia. Weźmy język L należący do NSPACE(f(n)), gdzie f(n) log n, gdyż f(n) jest konstruowalna pamięciowo. Istnieje zatem maszyna niedeterministyczna M akceptująca L w pamięci niedeterministycznej. Musimy pokazać, że istnieje maszyna niedeterministyczna M akceptująca L również w pamięci f(n). Bierzemy graf konfiguracji M dla słowa wejściowego x. Musimy stwierdzić, czy nie istnieje ścieżka od konfiguracji początkowej do akceptującej. Wtedy bowiem xL czyli M ma zaakceptować x.

Oznaczmy konfigurację akceptującą przez y. Liczymy zatem zbiór S(n) dla grafu konfiguracji przy pomocy algorytmu z pierwszej części dowodu. Jeśli algorytm zakończy się wynikiem pozytywnym, to oznacza to, że s(n) jest policzone poprawnie. Jeśli zatem w trakcie przeglądania nie zakwalifikowaliśmy wierzchołka y do żadnego ze zbiorów S(i) to znaczy, że nie jest on osiągalny.

W tej sytuacji maszyna M może zaakceptować słowo x, które nie należy do L, a tym samym pokazujemy, że L coNSPACE(f(n)).

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 3.1 [Problem TAUTOLOGY:]

Wejście: formuła logiczna ϕ jak dla problemu SAT.
Wyjście: czy każde wartościowanie spełnia ϕ?

Definicja 3.2 [Problem HAMILTON PATH COMPLEMENT:]

Wejście: graf nieskierowany G.
Wyjście: czy G 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 L jest NP-zupełny, to jego dopełnienie L 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 3.3

Jeśli L jest coNP-zupełny i LNP to NP=coNP.

Wskazówka
Rozwiązanie
Relacje pomiędzy klasami NP, coNP i DP.

Animacja Relacje pomiędzy klasami NP, coNP i DP przedstawia relacje pomiędzy poznanymi klasami i omawianą za chwilę klasą DP.

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 3.4 [Problem EXACT TSP]

Wejście: graf nieskierowany ważony G i liczba K
Wyjście: czy optymalna trasa komiwojażera dla G ma wartość dokładnie K?

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 K? Widzimy, że odpowiedź na to pytanie wymaga stwierdzenia, że trasa ma długość co najmniej K i co najwyżej K, co sugeruje pewne specyficzne połączenie problemu TSP(D) i jego dopełnienia.

Definicja 3.5 [Klasa DP]

Klasa DP to zbiór języków L takich, że L=L1L2, gdzie L1NP natomiast L2coNP.

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 K, gdy jest równy co najwyżej K (to przynależność do TSP(D)) oraz co najmniej K (to przynależność słowa do TSP(D) COMPLEMENT).

Klasa DP posiada problemy zupełne. Rozważmy problem następujący:

Przykład 3.6 [Problem SAT-UNSAT]

Wejście: formuły logiczne ϕ i ψ jak dla SAT.
Wyjście: czy formuła ϕ jest spełnialna, natomiast ψ niespełnialna?

Ćwiczenie 3.7

Udowodnij, że problem SAT-UNSAT jest DP-zupełny.

Wskazówka
Rozwiązanie

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 3.8 [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 3.9 [Problem CRITICAL HAMILTON PATH

Wejście: graf nieskierowany G
Wyjście: czy G nie ma ścieżki Hamiltona, natomiast dodanie dowolnej krawędzi do G 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 f(n) jest miarą złożoności czasowej, gdy każda ze ścieżek obliczeń ma długość ograniczoną przez f(n) oraz złożoność pamięciową f(n) gdy na każdej ze ścieżek obliczeń maszyna zużywa co najwyżej f(n) pamięci.

Definicja 4.1 [ATIME(f(n))]

Poprzez ATIME(f(n)) oznaczamy zbiór języków L takich, że są akceptowane przez alternującą maszynę Turinga M o złożoności czasowej f(n).

Definicja 4.2 [ASPACE(f(n))]

Poprzez ASPACE(f(n)) oznaczamy zbiór języków L takich, że są akceptowane przez alternującą maszynę Turinga M o złożoności pamięciowej f(n).

Wprowadzamy też skróty dla najpopularniejszych klas:

  • Klasa AP=ATIME(nk)=j>0ATIME(nj), to klasa tych języków, które mogą być akceptowane w alternującym czasie wielomianowym,
  • Klasa AL=ASPACE(logn), 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 AP zawiera w sobie NP. Poniższe ćwiczenie pokazuje, że o AP można powiedzieć więcej:

Ćwiczenie 4.3

Pokaż, że AP zawiera w sobie klasę coNP.

Wskazówka
Rozwiązanie

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 4.4 [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 4.5

Pokaż, że MIN-FORMULA należy do AP.

Wskazówka
Rozwiązanie

Teraz przedstawimy kilka relacji pomiędzy klasami obliczeń alternujących:

Twierdzenie 4.6

Następujące relacje są prawdziwe:

  1. Jeśli f(n)n to ATIME(f(n))SPACE(f(n)),
  2. Jeśli f(n)n to SPACE(f(n))ATIME(f2(n)),
  3. Jeśli f(n) log n to ASPACE(f(n))TIME(cf(n)).
  4. Jeśli f(n) log n to ASPACE(f(n))TIME(cf(n)).
Zapis przebiegu obliczeń.

Dowód

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 od dostępnej nam pamięci! Nie mamy zatem miejsca na potencjalną ilość pamięci, która może być potrzebna. Okazuje się jednak, że można sobie z tym poradzić:

Weźmy dowolną maszynę deterministyczną M działającą w czasie cf(n). 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ą , głowicą w komórce o numerze 1 i stanie qacc.

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 w tym miejscu pamięci, które ona odczytuje (podobnie notujemy stan). W ten sposób zawartość komórki d zależy tylko od zawartości komórek a, b i c (rysunek Zapis przebiegu obliczeń).

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.

Jeśli chcemy zweryfikować wartość komórki d, to w trybie "OR" zgadujemy zawartość komórek a, b i c. Następnie w trybie "AND" weryfikujemy ich poprawność i zgodność przejścia od a, b, c do d.

Ile pamięci jest nam potrzebne? Musimy pamiętać tylko wskaźniki do miejsc w wielkiej tabeli przedstawionej na rysunku, które sa rozmiaru log (cf(n)), co jest rzędu f(n).

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 L oznaczanej przez ML. Przypomnijmy, że jest to zwykła maszyna M z dodatkową możliwością zadania pytania postaci "czy xL?" które kosztuje jedną jednostkę czasu. Rozszerzenie tego pojęcia na klasy jest naturalne. Poprzez PNP oznaczamy zbiór tych języków, które mogą być rozstrzygane przez maszyny z klasy P z wyrocznią na dowolny język z klasy NP.

Klasy relatywne.

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 NPNP. 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 (animacja Klasy relatywne).

Postępując w ten sposób Meyer i Stockmeyer w latach 70 zdefiniowali całą hierarchię klas:

Definicja 5.1 [Hierarchia wielomianowa]

Hierarchia wielomianowa, to ciąg klas indeksowany poprzez i:

  • 0P=0P=Δ0P=P
  • Δi+1P=PiP, dla i>0,
  • i+1P=NPiP, dla i>0,
  • i+1P=coNPiP, dla i>0.

Dodatkowo poprzez PH oznaczamy sumę wszystkich tych klas, czyli:
PH=i0iP.

Hierarchia wielomianowa.

Ponieważ na poziomie zerowym wszystkie elementy hierarchii to P, więc na poziomie pierwszym, ponieważ taka wyrocznia nic nie daje, otrzymujemy Δ1P=P,1P=NP,1P=coNP. Drugi poziom, to klasy Δ2P=PNP,2P=NPNP,2P=coNPNP. Warto zwrócić uwagę, że iP jest dopełnieniem iP na każdym poziomie wprost z definicji. Zawieranie się poszczególnych elementów na jednym poziomie obrazuje animacja Hierarchia wielomianowa.

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 5.2

Niech L będzie językiem, i>0. Język L należy do iP wtedy i tylko wtedy, gdy istnieje wielomianowo zrównoważona i rozstrzygalna relacja R (i+1-argumentowa), taka, że xL dokładnie wtedy, gdy y1y2y3Qyi takie, że R(x,y1,,yi) jest spełnione (i-ty kwantyfikator jest uniwersalny, gdy i jest parzyste, natomiast egzystencjalny, gdy i 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 5.3

Pokaż, że jeżeli dla pewnego i zachodzi iP=iP to dla każdego j>i zachodzi jP=jP=ΔjP=iP.

Wskazówka
Rozwiązanie

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 5.4 [Problem QSAT i]

Wejście: formuła logiczna ϕ jak dla problemu SAT poprzedzona i naprzemiennymi grupami kwantyfikatorów egzystencjalnych i uniwersalnych: Φ=x1x2x3Qxiϕ.
Wyjście: czy Φ jest prawdziwa?

Twierdzenie 5.5

Problem QSATi jest iP-zupełny dla i>0.

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 5.6

Pokaż, że jeśli istnieje problem PH-zupełny, to hierarchia zapada się na pewnym poziomie.

Wskazówka
Rozwiązanie

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 Goedl'a z roku 1998) związany z klasą PH. Pokazał on, że PHPPP, czyli wyrocznia na klasę PP jest niesamowicie silna i pozwala pochłonąć tak misternie zbudowaną piramidę coraz silniejszych klas.

Ćwiczenia dodatkowe

Ćwiczenie 6.1

Pokaż, że problem TAUTOLOGY jest coNP-zupełny.

Wskazówka
Rozwiązanie

Ćwiczenie 6.2

Udowodnij własności od 1 do 3 z twierdzenia 4.6.

  1. Jeśli f(n)n to ATIME(f(n))SPACE(f(n)),
  2. Jeśli f(n)n to SPACE(f(n))ATIME(f2(n)),
  3. Jeśli f(n) log n to ASPACE(f(n))TIME(cf(n)).
Wskazówka
Rozwiązanie

Ćwiczenie 6.3

Udowodnij, że problemy TSP(D) i EXACT TSP są wielomianowo równoważne.

Wskazówka
Rozwiązanie

Testy końcowe