Złożoność obliczeniowa/Wykład 12: Problemy funkcyjne i złożoność zliczania: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Matiunreal (dyskusja | edycje)
m Zastępowanie tekstu – „.</math>” na „</math>”
 
(Nie pokazano 10 wersji utworzonych przez 3 użytkowników)
Linia 136: Linia 136:


Rozważmy poniższy problem funkcyjny obliczania optymalnego stanu sieci:
Rozważmy poniższy problem funkcyjny obliczania optymalnego stanu sieci:
<div class="thumb tright"><div style="width:300px;">
[[File:ZO-12-1.svg|300x300px|thumb|right|Problem HAPPYNET.]]
<flash>file=ZO-12-1.swf|width=300|height=300</flash>
<div.thumbcaption>Rys.12.1. Problem HAPPYNET.</div></div></div>
<!-- [[ZO-12-1-rys.jpg(Problem HAPPYNET)]] -->
<!-- [[ZO-12-1-rys.jpg(Problem HAPPYNET)]] -->


Linia 150: Linia 148:


Mówiąc obrazowo, warunek szczęśliwości oznacza, że wierzchołek chce mieć ten sam stan co wierzchołki połączone z nim wagą dodatnią i przeciwny
Mówiąc obrazowo, warunek szczęśliwości oznacza, że wierzchołek chce mieć ten sam stan co wierzchołki połączone z nim wagą dodatnią i przeciwny
dla wagi ujemnej. Na [[rysunku 12.1]] wierzchołek 1 jest nieszczęśliwy, a 4 jest szczęśliwy.
dla wagi ujemnej. Na rysunku [http://osilek.mimuw.edu.pl/images/9/9e/ZO-12-1.swf Problem HAPPYNET] wierzchołek 1 jest nieszczęśliwy, a 4 jest szczęśliwy.


Łatwo zauważyć, że HAPPYNET należy do klasy FNP, gdyż łatwo sprawdzić, czy wartościowanie daje stan szczęśliwy.
Łatwo zauważyć, że HAPPYNET należy do klasy FNP, gdyż łatwo sprawdzić, czy wartościowanie daje stan szczęśliwy.
Linia 213: Linia 211:


<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">  
<div class="thumb tright"><div style="width:250px;">
[[File:ZO-12-2.mp4|250x250px|thumb|right|Problem ANOTHER HAMILTON CYCLE.]]
<flashwrap>file=ZO-12-2.swf|size=small</flashwrap>
<div.thumbcaption>Rys.12.2. Problem ANOTHER HAMILTON CYCLE.</div></div></div>
Weźmy cykl Hamiltona <math>c</math>. Oznaczmy dwa kolejne wierzchołki jako <math>1</math> i <math>2</math>. Rozważmy teraz ścieżki Hamiltona
Weźmy cykl Hamiltona <math>c</math>. Oznaczmy dwa kolejne wierzchołki jako <math>1</math> i <math>2</math>. Rozważmy teraz ścieżki Hamiltona
nie zawierające krawędzi <math>(1,2)</math> rozpoczynające się w <math>1</math>, które nazwiemy ''kandydatami''.
nie zawierające krawędzi <math>(1,2)</math> rozpoczynające się w <math>1</math>, które nazwiemy ''kandydatami''.
Dwie ścieżki kandydujące, które różnią się <math>|V|-2</math> krawędziami uważamy za sąsiednie. Odpowiada to kolejności od (a) do (f) na [[rysunku 12.2]].
Dwie ścieżki kandydujące, które różnią się <math>|V|-2</math> krawędziami uważamy za sąsiednie. Odpowiada to kolejności od (a) do (f) w animacji [http://osilek.mimuw.edu.pl/images/2/2c/ZO-12-2.swf Problem ANOTHER HAMILTON CYCLE].


Ile sąsiadów może mieć ścieżka kandydująca? Załóżmy, że ścieżka prowadzi od <math>1</math> do <math>x\neq 2</math>. Wtedy możemy otrzymać dwóch sąsiadów, poprzez
Ile sąsiadów może mieć ścieżka kandydująca? Załóżmy, że ścieżka prowadzi od <math>1</math> do <math>x\neq 2</math>. Wtedy możemy otrzymać dwóch sąsiadów, poprzez
przedłużenie ścieżki z <math>x</math> na dwa możliwe sposoby (graf jest kubiczny) stosownie usuwając zbędną krawędź w dokładnie jeden sposób. Kandydat z rysunku
przedłużenie ścieżki z <math>x</math> na dwa możliwe sposoby (graf jest kubiczny) stosownie usuwając zbędną krawędź w dokładnie jeden sposób. Kandydat z animacji w części (b) ma właśnie dwóch sąsiadów otrzymanych w powyższy sposób.
(b) ma właśnie dwóch sąsiadów otrzymanych w powyższy sposób.


Jeśli natomiast ścieżka prowadzi od <math>1</math> do <math>2</math> to ma tylko jednego sąsiada, gdyż krawędzi <math>(1,2)</math> użyć nie wolno.
Jeśli natomiast ścieżka prowadzi od <math>1</math> do <math>2</math> to ma tylko jednego sąsiada, gdyż krawędzi <math>(1,2)</math> użyć nie wolno.
Linia 230: Linia 225:
</div></div>
</div></div>


<div class="thumb tright"><div style="width:250px;">
[[File:ZO-12-3.mp4|250x250px|thumb|right|Klasy problemów funkcyjnych.]]
<flashwrap>file=ZO-12-3.swf|size=small</flashwrap>
<div.thumbcaption>Rys.12.3. Klasy problemów funkcyjnych.</div></div></div>
<!-- [[ZO-12-3-rys.jpg(Klasy problemów funkcyjnych)]] -->
<!-- [[ZO-12-3-rys.jpg(Klasy problemów funkcyjnych)]] -->
Podobnie jak i w poprzednim przypadku, na podstawie dowodu nie umiemy skonstruować algorytmu wielomianowego dla ANOTHER HAMILTON CYCLE dla grafów kubicznych.
Podobnie jak i w poprzednim przypadku, na podstawie dowodu nie umiemy skonstruować algorytmu wielomianowego dla ANOTHER HAMILTON CYCLE dla grafów kubicznych.


[[Rysunek 12.3]] podsumowuje poznane klasy problemów funkcyjnych.
Animacja [http://osilek.mimuw.edu.pl/images/d/d3/ZO-12-3.swf Klasy problemów funkcyjnych] podsumowuje poznane klasy problemów funkcyjnych.


==Złożoność zliczania==
==Złożoność zliczania==
Linia 243: Linia 236:
nad złożonością obliczeniową obliczania ''liczby rozwiązań'' lub innymi słowy ''zliczaniem''. Oto pierwszy przykład:
nad złożonością obliczeniową obliczania ''liczby rozwiązań'' lub innymi słowy ''zliczaniem''. Oto pierwszy przykład:


{{przyklad|2.1 [Problem <math>\#\textsc{SAT}</math>]|przy 2.1|
{{przyklad|2.1 [Problem <math>\#\text{SAT}</math>]|przy 2.1|
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: liczba różnych wartościowań spełniających <math>\phi</math>.
Wyjście: liczba różnych wartościowań spełniających <math>\phi</math>.
}}
}}


Oczywiście rozwiązanie <math>\#\textsc{SAT}</math> daje nam rozwiązanie decyzyjnej wersji SAT. Inne przykłady "zliczających" wersji problemów NP-zupełnych
Oczywiście rozwiązanie <math>\#\text{SAT}</math> daje nam rozwiązanie decyzyjnej wersji SAT. Inne przykłady "zliczających" wersji problemów NP-zupełnych
to <math>\#</math>HAMILTONIAN PATH, w którym pytamy o liczbę różnych cykli Hamiltona w grafie, czy <math>\#</math>CLIQUE, w którym pytamy o liczbę różnych
to <math>\#</math>HAMILTONIAN PATH, w którym pytamy o liczbę różnych cykli Hamiltona w grafie, czy <math>\#</math>CLIQUE, w którym pytamy o liczbę różnych
klik rozmiaru przynajmniej <math>K</math>. We wszystkich tych przypadkach nie mamy nadziei, aby wersje zliczające miały rozwiązania wielomianowe.
klik rozmiaru przynajmniej <math>K</math>. We wszystkich tych przypadkach nie mamy nadziei, aby wersje zliczające miały rozwiązania wielomianowe.
Linia 254: Linia 247:
Istnieją problemy, dla których zliczanie liczby rozwiązań ma algorytm wielomianowy, np. liczba różnych drzew rozpinających w grafie lub liczba ścieżek Eulera.
Istnieją problemy, dla których zliczanie liczby rozwiązań ma algorytm wielomianowy, np. liczba różnych drzew rozpinających w grafie lub liczba ścieżek Eulera.
Pomimo tego, pewne problemy wskazują, że zliczanie liczby rozwiązań jest trudniejsze niż obliczanie samego rozwiązania. Nawet gdyby P=NP to nie wiemy
Pomimo tego, pewne problemy wskazują, że zliczanie liczby rozwiązań jest trudniejsze niż obliczanie samego rozwiązania. Nawet gdyby P=NP to nie wiemy
jak rozwiązać <math>\#\textsc{SAT}</math> w czasie wielomianowym.
jak rozwiązać <math>\#\text{SAT}</math> w czasie wielomianowym.


<div class="thumb tright"><div style="width:250px;">
[[File:ZO-12-4.svg|250x250px|thumb|right|Skojarzenie w grafie dwudzielnym.]]
<flashwrap>file=ZO-12-4.swf|size=small</flashwrap>
<div.thumbcaption>Rys.12.4. Skojarzenie w grafie dwudzielnym.</div></div></div>
<!-- [[ZO-12-4-rys.jpg(Skojarzenie w grafie dwudzielnym)]] -->
<!-- [[ZO-12-4-rys.jpg(Skojarzenie w grafie dwudzielnym)]] -->
Na większą trudność wskazuje również przykład problemu MATCHING dotyczący idealnych skojarzeń w grafach dwudzielnych.
Na większą trudność wskazuje również przykład problemu MATCHING dotyczący idealnych skojarzeń w grafach dwudzielnych.
Linia 264: Linia 255:
jest trudny i ciągle nie znamy rozwiązania wielomianowego dla niego.
jest trudny i ciągle nie znamy rozwiązania wielomianowego dla niego.


Problem znajdowania idealnego skojarzenia w grafie dwudzielnym jest związany z wyznacznikami macierzy ([[rysunek 12.4]]).
Problem znajdowania idealnego skojarzenia w grafie dwudzielnym jest związany z wyznacznikami macierzy (animacja [http://osilek.mimuw.edu.pl/images/d/d1/ZO-12-4.swf Skojarzenie w grafie dwudzielnym]).


Oznaczmy przez <math>G=(A,B,E)</math> graf dwudzielny pokazany na rysunku. <math>A=\{a_1,a_2,a_3,a_4\}</math>, natomiast
Oznaczmy przez <math>G=(A,B,E)</math> graf dwudzielny pokazany w animacji. <math>A=\{a_1,a_2,a_3,a_4\}</math>, natomiast
<math>B=\{b_1,b_2,b_3,b_4\}</math>. Macierz sąsiedztwa grafu <math>M^G</math> również została przedstawiona na rysunku.
<math>B=\{b_1,b_2,b_3,b_4\}</math>. Macierz sąsiedztwa grafu <math>M^G</math> również została przedstawiona w animacji.
<math>M^G[i,j]</math> równe jest 1, gdy krawędź od <math>a_i</math> do <math>b_j</math> istnieje lub 0 w przeciwnym wypadku. Wyznacznik
<math>M^G[i,j]</math> równe jest 1, gdy krawędź od <math>a_i</math> do <math>b_j</math> istnieje lub 0 w przeciwnym wypadku. Wyznacznik
<math>M^G</math> wynosi:
<math>M^G</math> wynosi:




<center>det  <math>M^G = \sum_{\pi}\sigma{(\pi)}\prod_{i=1}^{n}M^G[i,\pi(i)],</math></center>
<center>det  <math>M^G = \sum_{\pi}\sigma{(\pi)}\prod_{i=1}^{n}M^G[i,\pi(i)]</math></center>




Linia 282: Linia 273:




<center>perm  <math>M^G = \sum_{\pi}\prod_{i=1}^{n}M^G[i,\pi(i)].</math></center>
<center>perm  <math>M^G = \sum_{\pi}\prod_{i=1}^{n}M^G[i,\pi(i)]</math></center>




Linia 289: Linia 280:


Istnieje także powiązanie pomiędzy skojarzeniami a pokryciem
Istnieje także powiązanie pomiędzy skojarzeniami a pokryciem
rozłącznymi cyklami grafu <math>G'</math> również przedstawionym na rysunku. W
rozłącznymi cyklami grafu <math>G'</math> również przedstawionym w animacji. W
grafie skierowanym <math>G'</math> o <math>n</math> wierzchołkach krawędź od <math>i</math> do <math>j</math>
grafie skierowanym <math>G'</math> o <math>n</math> wierzchołkach krawędź od <math>i</math> do <math>j</math>
występuje, gdy w grafie <math>G</math> wierzchołek <math>a_i</math> jest połączony z
występuje, gdy w grafie <math>G</math> wierzchołek <math>a_i</math> jest połączony z
Linia 298: Linia 289:
trzy wartości wynoszą 1.
trzy wartości wynoszą 1.


===Klasa <math>\#\textsc{P}</math> i twierdzenie Valianta===
===Klasa <math>\#\text{P}</math> i twierdzenie Valianta===


Badanie problemów polegających na zliczaniu przez Valianta w latach 70 przyniosło skutek w postaci
Badanie problemów polegających na zliczaniu przez Valianta w latach 70 przyniosło skutek w postaci
zdefiniowania klasy <math>\#\textsc{P}</math> (czytamy "hasz P"). Jest on laureatem [http://osilek.mimuw.edu.pl/index.php?title=Nagroda_Knutha nagrody Knutha] z roku 1997. Oznaczmy przez <math>R</math> wielomianowo zrównoważoną i rozstrzygalną relację binarną na słowach.
zdefiniowania klasy <math>\#\text{P}</math> (czytamy "hasz P"). Jest on laureatem [[Nagroda_Knutha|nagrody Knutha]] z roku 1997. Oznaczmy przez <math>R</math> wielomianowo zrównoważoną i rozstrzygalną relację binarną na słowach.
Problem zliczania związany z <math>R</math> polega na obliczeniu dla danego <math>x</math> liczby takich <math>y</math>, że <math>R(x,y)</math> jest spełnione.
Problem zliczania związany z <math>R</math> polega na obliczeniu dla danego <math>x</math> liczby takich <math>y</math>, że <math>R(x,y)</math> jest spełnione.
Obliczony wynik musi być przedstawiony w postaci liczby binarnej. Klasa <math>\#\textsc{P}</math> składa się z wszystkich takich problemów związanych
Obliczony wynik musi być przedstawiony w postaci liczby binarnej. Klasa <math>\#\text{P}</math> składa się z wszystkich takich problemów związanych
z relacjami <math>R</math>.
z relacjami <math>R</math>.


Jeśli <math>R</math> jest relacją sprawdzającą, czy <math>y</math> jest spełniającym wartościowaniem dla <math>x</math> to otrzymujemy <math>\#\textsc{SAT}</math>.
Jeśli <math>R</math> jest relacją sprawdzającą, czy <math>y</math> jest spełniającym wartościowaniem dla <math>x</math> to otrzymujemy <math>\#\text{SAT}</math>.
Gdy natomiast <math>R</math> jest zdefiniowana tak, że <math>R(x,y)</math> zachodzi, gdy <math>y</math> jest idealnym skojarzeniem dla grafu dwudzielnego
Gdy natomiast <math>R</math> jest zdefiniowana tak, że <math>R(x,y)</math> zachodzi, gdy <math>y</math> jest idealnym skojarzeniem dla grafu dwudzielnego
<math>x</math> to otrzymujemy problem PERMANENT. Podobnie dla <math>\#</math>HAMILTONIAN PATH. Wszystko to przykłady problemów <math>\#\textsc{P}</math>-zupełnych.
<math>x</math> to otrzymujemy problem PERMANENT. Podobnie dla <math>\#</math>HAMILTONIAN PATH. Wszystko to przykłady problemów <math>\#\text{P}</math>-zupełnych.


Aby mówić o zupełności musimy wprowadzić stosowną redukcję. Podobnie jak w przypadku problemów funkcyjnych redukcja pomiędzy
Aby mówić o zupełności musimy wprowadzić stosowną redukcję. Podobnie jak w przypadku problemów funkcyjnych redukcja pomiędzy
Linia 322: Linia 313:


{{cwiczenie|2.2|cw 2.2|
{{cwiczenie|2.2|cw 2.2|
Udowodnij, że problem <math>\#\textsc{SAT}</math> jest <math>\#\textsc{P}</math>-zupełny.
Udowodnij, że problem <math>\#\text{SAT}</math> jest <math>\#\text{P}</math>-zupełny.
}}
}}


Linia 330: Linia 321:


<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">  
Musimy pokazać, że każdy problem <math>L</math> z klasy <math>\#\textsc{P}</math> redukuje się do <math>\#\textsc{SAT}</math>. W tym celu przeprowadzamy dowód
Musimy pokazać, że każdy problem <math>L</math> z klasy <math>\#\text{P}</math> redukuje się do <math>\#\text{SAT}</math>. W tym celu przeprowadzamy dowód
analogiczny do twierdzenia Cooka. Dla języka <math>L</math> istnieje stosowna wielomianowo zrównoważona i rozstrzygalna relacja <math>R_L</math>.
analogiczny do twierdzenia Cooka. Dla języka <math>L</math> istnieje stosowna wielomianowo zrównoważona i rozstrzygalna relacja <math>R_L</math>.
Twierdzenie Cooka dostarcza nam funkcję <math>R</math> na słowach, obliczalną w pamięci logarytmicznej, która wprowadza odpowiedniość pomiędzy
Twierdzenie Cooka dostarcza nam funkcję <math>R</math> na słowach, obliczalną w pamięci logarytmicznej, która wprowadza odpowiedniość pomiędzy
Linia 336: Linia 327:
Nasza redukcja jest oszczędna, bowiem każde obliczenie akceptujące <math>x\in L</math> przez <math>M</math> odpowiada <math>y</math> takiemu, że <math>R(x,y)</math> i
Nasza redukcja jest oszczędna, bowiem każde obliczenie akceptujące <math>x\in L</math> przez <math>M</math> odpowiada <math>y</math> takiemu, że <math>R(x,y)</math> i
jednocześnie spełniającemu wartościowaniu formuły <math>R(x)</math>. W ten sposób <math>R</math> jest poszukiwaną przez nas funkcją redukującą
jednocześnie spełniającemu wartościowaniu formuły <math>R(x)</math>. W ten sposób <math>R</math> jest poszukiwaną przez nas funkcją redukującą
wersję zliczającą <math>L</math> do <math>\#\textsc{SAT}</math>.
wersję zliczającą <math>L</math> do <math>\#\text{SAT}</math>.
</div></div>
</div></div>


Jednak problem <math>\#\textsc{P}</math>-zupełny, który jest najbardziej interesujący, to opisany już PERMANENT. Mimo wielomianowości problemu MATCHING
Jednak problem <math>\#\text{P}</math>-zupełny, który jest najbardziej interesujący, to opisany już PERMANENT. Mimo wielomianowości problemu MATCHING
okazuje się on tak trudny jak cała wprowadzona klasa:
okazuje się on tak trudny jak cała wprowadzona klasa:


{{twierdzenie|2.3 [twierdzenie Valianta]|tw 2.3|
{{twierdzenie|2.3 [twierdzenie Valianta]|tw 2.3|
Problem PERMANENT jest <math>\#\textsc{P}</math>-zupełny.
Problem PERMANENT jest <math>\#\text{P}</math>-zupełny.
}}
}}


<div class="thumb tright"><div style="width:250px;">
[[File:ZO-12-5.mp4|250x250px|thumb|right|Dowód twierdzenia Valianta (1).]]
<flashwrap>file=ZO-12-5.swf|size=small</flashwrap>
<div.thumbcaption>Rys.12.5. Dowód twierdzenia Valianta (1).</div></div></div>
<!-- [[ZO-12-5-rys.jpg(Dowód twierdzenia Valianta (1))]] -->
<!-- [[ZO-12-5-rys.jpg(Dowód twierdzenia Valianta (1))]] -->
<div class="thumb tright"><div style="width:250px;">
[[File:ZO-12-6.mp4|250x250px|thumb|right|Dowód twierdzenia Valianta (2).]]
<flashwrap>file=ZO-12-6.swf|size=small</flashwrap>
<div.thumbcaption>Rys.12.6. Dowód twierdzenia Valianta (2).</div></div></div>
<!-- [[ZO-12-6-rys.jpg(Dowód twierdzenia Valianta (2))]] -->
<!-- [[ZO-12-6-rys.jpg(Dowód twierdzenia Valianta (2))]] -->
{{dowod|||
{{dowod|||
Zasadnicza część dowodu to redukcja <math>\#\textsc{SAT}</math> do problemu PERMANENT MOD N.
Zasadnicza część dowodu to redukcja <math>\#\text{SAT}</math> do problemu PERMANENT MOD N.
Jednak gdy potrafimy obliczyć PERMANENT dokładnie, to potrafimy także obliczyć jego
Jednak gdy potrafimy obliczyć PERMANENT dokładnie, to potrafimy także obliczyć jego
resztę modulo <math>N</math>, więc ostatecznie możemy zredukować <math>\#\textsc{SAT}</math> do PERMANENT, co dowodzi
resztę modulo <math>N</math>, więc ostatecznie możemy zredukować <math>\#\text{SAT}</math> do PERMANENT, co dowodzi
<math>\#\textsc{P}</math>-zupełności tego ostatniego.
<math>\#\text{P}</math>-zupełności tego ostatniego.


Naszą redukcję oprzemy na równoważności pomiędzy permanentem macierzy a liczbą pokryć rozłącznymi
Naszą redukcję oprzemy na równoważności pomiędzy permanentem macierzy a liczbą pokryć rozłącznymi
Linia 364: Linia 351:


Redukcję rozpoczniemy od formuły 3SAT i będziemy konstruować nasz graf <math>G</math>. Dla każdej zmiennej z formuły <math>\phi</math> będzie on zawierał ''element wyboru''
Redukcję rozpoczniemy od formuły 3SAT i będziemy konstruować nasz graf <math>G</math>. Dla każdej zmiennej z formuły <math>\phi</math> będzie on zawierał ''element wyboru''
decydujący o wyborze wartościowania dla zmiennej, przedstawiony na [[rysunku 12.5]] w części (a).
decydujący o wyborze wartościowania dla zmiennej, przedstawiony w animacji ''Dowód twierdzenia Valianta (1)'' w części (a).


Graf przedstawiony na rysunku w części (a) posiada dokładnie dwa możliwe pokrycia cyklami.
Graf przedstawiony w animacji w części (a) posiada dokładnie dwa możliwe pokrycia cyklami.
Każde z nich zawiera dokładnie jedną z krawędzi bocznych i krawędź środkową. Naszą interpretacją będzie stosowne
Każde z nich zawiera dokładnie jedną z krawędzi bocznych i krawędź środkową. Naszą interpretacją będzie stosowne
wartościowanie tej zmiennej w formule <math>\phi</math>.
wartościowanie tej zmiennej w formule <math>\phi</math>.


Dla każdej z klauzul formuły <math>\phi</math> do grafu <math>G</math> wstawiamy element przedstawiony na rysunku w części (b). Łatwo zauważyć, że dla tego grafu:
Dla każdej z klauzul formuły <math>\phi</math> do grafu <math>G</math> wstawiamy element przedstawiony w animacji w części (b). Łatwo zauważyć, że dla tego grafu:


* nie istnieje pokrycie cyklami zawierające 3 zewnętrzne krawędzie,
* nie istnieje pokrycie cyklami zawierające 3 zewnętrzne krawędzie,
Linia 385: Linia 372:
wartościowanie formuły 3SAT jest NP-zupełne!
wartościowanie formuły 3SAT jest NP-zupełne!


Element xor został przedstawiony na rysunku w formie macierzy w części (a), w formie grafu w części (b) i w formie skrótowej w części (c). Wierzchołek <math>g</math> w części (b) odpowiada reszcie grafu i będzie służył do dowodu.
Element xor został przedstawiony w animacji w formie macierzy w części (a), w formie grafu w części (b) i w formie skrótowej w części (c). Wierzchołek <math>g</math> w części (b) odpowiada reszcie grafu i będzie służył do dowodu.
Element w kształcie diamentu w części (c) odpowiada grafowi z części (b) bez wierzchołka <math>g</math> ([[rysunek 12.6]]).
Element w kształcie diamentu w części (c) odpowiada grafowi z części (b) bez wierzchołka <math>g</math> (animacja ''Dowód twierdzenia Valianta (2)'').


Na chwilę rozszerzyliśmy problem PERMANENT na macierze o wartościach innych niż 0-1. Jest to problem równoważny obliczaniu uogólnionego
Na chwilę rozszerzyliśmy problem PERMANENT na macierze o wartościach innych niż 0-1. Jest to problem równoważny obliczaniu uogólnionego
Linia 417: Linia 404:
<math>s</math> to liczba różnych wartościowań spełniających formułę <math>\phi</math>.
<math>s</math> to liczba różnych wartościowań spełniających formułę <math>\phi</math>.


Teraz musimy sobie poradzić z wprowadzonymi wagami różnymi od 0 i 1. Na poniższym rysunku w części (a) przedstawiamy element zastępujący wagę 2,
Teraz musimy sobie poradzić z wprowadzonymi wagami różnymi od 0 i 1. Na poniższej animacji (''Dowód twierdzenia Valianta (3)'') w części (a) przedstawiamy element zastępujący wagę 2, a w części (b) wagę 3.
a w części (b) wagę 3:
 
[[ZO-12-7-rys.jpg(Dowód twierdzenia Valianta (3))]]


Jest proste do sprawdzenia, że każde pokrycie, które miało zastąpioną krawędź, będzie teraz wnosić wagę 2 (analogicznie 3) ze względu na dwa (analogicznie trzy)
Jest proste do sprawdzenia, że każde pokrycie, które miało zastąpioną krawędź, będzie teraz wnosić wagę 2 (analogicznie 3) ze względu na dwa (analogicznie trzy)
Linia 431: Linia 415:
}}
}}


Oczywiście każdy problem z klasy <math>\#\textsc{P}</math> może zostać rozwiązany w
[[File:ZO-12-7.mp4|250x250px|thumb|right|Dowód twierdzenia Valianta (3).]]
<!-- [[ZO-12-7-rys.jpg(Dowód twierdzenia Valianta (3))]] -->
 
Oczywiście każdy problem z klasy <math>\#\text{P}</math> może zostać rozwiązany w
pamięci wielomianowej, poprzez prosty algorytm zliczający
pamięci wielomianowej, poprzez prosty algorytm zliczający
(oczywiście wykładniczy). Zliczanie nie jest zatem silniejsze niż
(oczywiście wykładniczy). Zliczanie nie jest zatem silniejsze niż
klasa PSPACE.
klasa PSPACE.


===Klasa <math>\oplus\textsc{P}</math>===
===Klasa <math>\oplus\text{P}</math>===


Ciekawą klasą powiązaną z tematem zliczania jest klasa <math>\oplus\textsc{P}</math> (czytamy "parzystość P"). Odpowiada ona obliczaniu
Ciekawą klasą powiązaną z tematem zliczania jest klasa <math>\oplus\text{P}</math> (czytamy "parzystość P"). Odpowiada ona obliczaniu
ostatniego bitu wyniku dla problemów z klasy <math>\#\textsc{P}</math>. Przeanalizujmy poniższe problemy:
ostatniego bitu wyniku dla problemów z klasy <math>\#\text{P}</math>. Przeanalizujmy poniższe problemy:


{{przyklad|2.4 [Problem <math>\oplus\textsc{SAT}</math>]|przy 2.4|
{{przyklad|2.4 [Problem <math>\oplus\text{SAT}</math>]|przy 2.4|
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 liczba różnych wartościowań spełniających <math>\phi</math> jest nieparzysta?
Wyjście: czy liczba różnych wartościowań spełniających <math>\phi</math> jest nieparzysta?
}}
}}


{{przyklad|2.5 [Problem <math>\oplus\textsc{HAMILTON CYCLE}</math>]|przy 2.5|
{{przyklad|2.5 [Problem <math>\oplus\text{HAMILTON CYCLE}</math>]|przy 2.5|
Wejście: graf nieskierowany <math>G</math><br>
Wejście: graf nieskierowany <math>G</math><br>
Wyjście: czy liczba różnych cykli Hamiltona dla <math>G</math> jest nieparzysta?
Wyjście: czy liczba różnych cykli Hamiltona dla <math>G</math> jest nieparzysta?
}}
}}


Możemy zdefiniować ogólnie klasę <math>\oplus\textsc{P}</math> jako ogół tych języków <math>L</math> dla których
Możemy zdefiniować ogólnie klasę <math>\oplus\text{P}</math> jako ogół tych języków <math>L</math> dla których
istnieje maszyna niedeterministyczna działająca w czasie wielomianowym, dla której
istnieje maszyna niedeterministyczna działająca w czasie wielomianowym, dla której
<math>x \in L</math> wtedy i tylko wtedy, gdy liczba ścieżek akceptujących <math>x</math> przez <math>M</math> jest nieparzysta.
<math>x \in L</math> wtedy i tylko wtedy, gdy liczba ścieżek akceptujących <math>x</math> przez <math>M</math> jest nieparzysta.
W języku relacji, powiemy, że <math>L</math> należy do <math>\oplus\textsc{P}</math>, gdy istnieje wielomianowo zrównoważona i rozstrzygalna relacja
W języku relacji, powiemy, że <math>L</math> należy do <math>\oplus\text{P}</math>, gdy istnieje wielomianowo zrównoważona i rozstrzygalna relacja
<math>R_L</math> taka, że <math>x \in L</math> wtedy i tylko wtedy, gdy ilość <math>y</math> takich, że <math>R_L(x,y)</math> jest nieparzysta.
<math>R_L</math> taka, że <math>x \in L</math> wtedy i tylko wtedy, gdy ilość <math>y</math> takich, że <math>R_L(x,y)</math> jest nieparzysta.


Zarówno <math>\oplus\textsc{SAT}</math> jak i <math>\oplus</math>HAMILTON CYCLE okazują się problemami <math>\oplus\textsc{P}</math>-zupełnymi (zupełność definiujemy
Zarówno <math>\oplus\text{SAT}</math> jak i <math>\oplus</math>HAMILTON CYCLE okazują się problemami <math>\oplus\text{P}</math>-zupełnymi (zupełność definiujemy
przy pomocy redukcji oszczędnych w naturalny sposób).
przy pomocy redukcji oszczędnych w naturalny sposób).
Z łatwością można stwierdzić, że należą do klasy <math>\oplus\textsc{P}</math>, natomiast redukcje oszczędne omawiane przy okazji
Z łatwością można stwierdzić, że należą do klasy <math>\oplus\text{P}</math>, natomiast redukcje oszczędne omawiane przy okazji
wersji zliczających tych problemów są wystarczające.
wersji zliczających tych problemów są wystarczające.


Moc klasy <math>\oplus\textsc{P}</math> wydaje się być słabsza ze względu na fakt, iż <math>\#</math>MATCHING, czyli PERMANENT MOD 2 jest problemem
Moc klasy <math>\oplus\text{P}</math> wydaje się być słabsza ze względu na fakt, iż <math>\#</math>MATCHING, czyli PERMANENT MOD 2 jest problemem
o złożoności wielomianowej. Dzieje się tak dlatego, iż w tym wypadku obliczanie wyznacznika i permanentu daje ten sam wynik.
o złożoności wielomianowej. Dzieje się tak dlatego, iż w tym wypadku obliczanie wyznacznika i permanentu daje ten sam wynik.


Linia 487: Linia 474:


{{cwiczenie|3.2|cw 3.2|
{{cwiczenie|3.2|cw 3.2|
Udowodnij, że klasa <math>\oplus\textsc{P}</math> jest zamknięta na dopełnienie.
Udowodnij, że klasa <math>\oplus\text{P}</math> jest zamknięta na dopełnienie.
}}
}}


<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">  
Przeanalizuj dopełnienie problemu <math>\oplus\textsc{SAT}</math>.
Przeanalizuj dopełnienie problemu <math>\oplus\text{SAT}</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">  
Dopełnienie problemu <math>\oplus\textsc{SAT}</math> to problem polegający na
Dopełnienie problemu <math>\oplus\text{SAT}</math> to problem polegający na
stwierdzeniu, czy liczba spełniających wartościowań jest
stwierdzeniu, czy liczba spełniających wartościowań jest
nieparzysta. Zredukujmy ten problem do <math>\oplus\textsc{SAT}</math> w prosty sposób
nieparzysta. Zredukujmy ten problem do <math>\oplus\text{SAT}</math> w prosty sposób
zmieniając liczbę spełniających wartościowań o 1. Dodajemy nową
zmieniając liczbę spełniających wartościowań o 1. Dodajemy nową
zmienną <math>z</math> oraz klauzule postaci <math>z \vee \neg x_i</math> gdzie <math>x_i</math>
zmienną <math>z</math> oraz klauzule postaci <math>z \vee \neg x_i</math> gdzie <math>x_i</math>
Linia 504: Linia 491:
formułę po modyfikacji, gdy przyjmiemy <math>z=0</math>. Gdy natomiast ustawimy
formułę po modyfikacji, gdy przyjmiemy <math>z=0</math>. Gdy natomiast ustawimy
<math>z=1</math> to otrzymamy nowe wartościowanie, co kończy redukcję
<math>z=1</math> to otrzymamy nowe wartościowanie, co kończy redukcję
dopełnienia <math>\oplus\textsc{SAT}</math> do <math>\oplus\textsc{SAT}</math>. Teraz wystarczy zauważyć, że <math>\oplus\textsc{SAT}</math> jest zupełny dla <math>\oplus\textsc{P}</math>, i dzięki opisanej redukcji również
dopełnienia <math>\oplus\text{SAT}</math> do <math>\oplus\text{SAT}</math>. Teraz wystarczy zauważyć, że <math>\oplus\text{SAT}</math> jest zupełny dla <math>\oplus\text{P}</math>, i dzięki opisanej redukcji również
dla co-<math>\oplus\textsc{P}</math>. Ponieważ obie klasy są zamknięte na redukcje, to
dla co-<math>\oplus\text{P}</math>. Ponieważ obie klasy są zamknięte na redukcje, to
powoduje, że <math>\oplus\textsc{P}</math>=co-<math>\oplus\textsc{P}</math>, czyli, że <math>\oplus\textsc{P}</math> jest zamknięta na
powoduje, że <math>\oplus\text{P}</math>=co-<math>\oplus\text{P}</math>, czyli, że <math>\oplus\text{P}</math> jest zamknięta na
dopełnienie.
dopełnienie.
</div></div>
</div></div>


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

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

Problemy funkcyjne

Do tej pory rozważaliśmy problemy decyzyjne, które polegały na akceptacji słowa przez maszynę, czyli zwróceniu odpowiedzi "TAK/NIE". Czasem potrzebujemy jednak, aby algorytm zwrócił znacznie więcej informacji. Wtedy przydają nam się problemy funkcyjne, w których od maszyny oczekujemy obliczenia zadanej funkcji. Maszyna na taśmie wejściowej ma zapisane argumenty funkcji, a na taśmie wyjściowej wypisuje wartość funkcji. Naturalne przykłady problemów funkcyjnych są powiązane z analizowanymi już problemami decyzyjnymi.

Przykład 1.1 [Problem FSAT]

Wejście: formuła logiczna ϕ jak dla problemu SAT.
Wyjście: wartościowanie spełniające ϕ lub "NIE", gdy nie istnieje.

Choć nie można bezpośrednio porównać złożoności problemów funkcyjnych i decyzyjnych to łatwo zauważyć, że FSAT jest problemem nie łatwiejszym niż SAT. Z odpowiedzi na problem FSAT można trywialnie obliczyć odpowiedź dla SAT. Okazuje się jednak, że także w drugą stronę przenosi się wielomianowość rozwiązania:

Ćwiczenie 1.2

Sprowadź problem FSAT do SAT przy pomocy wielomianowej redukcji Turinga (korzystając z SAT jako wyroczni).

Wskazówka
Rozwiązanie

Podobna własność zachodzi dla problemu TSP, gdzie samoredukowalność nie występuje. Przypominamy problem TSP w wersji funkcyjnej:

Przykład 1.3 [ProblemTSP]

Wejście: graf nieskierowany ważony G.
Wyjście: optymalna trasa komiwojażera dla G lub "NIE", gdy nie istnieje.

Ćwiczenie 1.4

Sprowadź problem TSP do TSP(D) (wersji decyzyjnej) przy pomocy wielomianowej redukcji Turinga.

Wskazówka
Rozwiązanie

Klasy FP i FNP

Można przedstawić zależność pomiędzy problemami decyzyjnymi i funkcyjnymi w sposób formalny. Przypomnijmy, że klasę NP można zdefiniować używając wielomianowo zrównoważonej i rozstrzygalnej relacji. Jeśli L należy do NP to istnieje relacja RL(x,y), taka że xL wtedy i tylko wtedy gdy istnieje y taki, że R(x,y). Poprzez FL oznaczamy problem funkcyjny polegający na obliczeniu na podstawie x wartości y takiej, że RL(x,y) o ile taka wartość istnieje lub zwróceniu odpowiedzi "NIE" w przeciwnym wypadku.

Klasę wszystkich problemów funkcyjnych, które powstają w ten sposób z klasy NP oznaczamy poprzez FNP. Klasę FP definiujemy jako podzbiór tych problemów z FNP dla których istnieje algorytm wielomianowy. Oczywiście FPFNP natomiast pytanie czy FP=FNP jest otwarte. Co ciekawe problem FSAT należy do FNP jednakże o TSP tego nie wiemy. Dzieje się tak dlatego, iż nie znamy algorytmu stwierdzającego, czy podana trasa jest optymalna. FHORNSAT (czyli funkcyjna wersja HORNSAT -- zawężenia SAT) a także obliczanie idealnego skojarzenia w grafie dwudzielnym są przykładami problemów z klasy FP.

Podobnie do klas decyzyjnych i tutaj można zdefiniować pojęcia redukcji i zupełności. Mówimy, że problem funkcyjny A redukuje się do B jeśli istnieją funkcje na słowach R(x) oraz S(y) obliczalne w pamięci logarytmicznej takie, że jeśli x jest instancją dla problemu A to R(x) jest instancją dla problemu B. Oraz jeśli y jest dopuszczalnym rozwiązaniem dla B to S(y) jest dopuszczalnym rozwiązaniem dla A. Redukcje można składać. Klasy FP i FNP są zamknięte na redukcje.

Zupełność jest definiowana w sposób naturalny, tzn. problem funkcyjny L jest zupełny w klasie FC jeśli należy do FC i wszystkie problemy z tej klasy redukują się do niego. Problem FSAT jest natomiast przykładem problemu FNP-zupełnego (patrz ćwiczenie 3.1).

Twierdzenie 1.5

FP=FNP P=NP.

Dowód

Z wcześniejszych analiz wiemy, że FSAT jest wielomianowy wtedy i tylko wtedy gdy SAT jest wielomianowy. Ponieważ są to problemy zupełne dla odpowiednich klas to stąd otrzymujemy tezę.

Klasa TFNP

Wśród problemów z klasy FNP można wyróżnić interesującą klasę problemów całkowitych. Odpowiadają one tym problemom funkcyjnym, dla których rozwiązanie zawsze istnieje. Formalnie problem funkcyjny z klasy FNP nazywamy całkowitym jeśli R (relacja występująca w definicji problemu funkcyjnego) spełnia warunek, iż dla każdego x istnieje przynajmniej jedno y takie, że R(x,y).

Klasę wszystkich problemów całkowitych oznaczamy przez TFNP. Klasa ta zawiera wiele ciekawych problemów, o których nie wiadomo, czy należą do FP, a które mogą sugerować, że są prostsze niż problemy zupełne z FNP. Sztandarowym problemem jest problem rozkładu liczby na czynniki pierwsze, niesłychanie interesujący z punktu widzenia praktycznego i wciąż bez znanego algorytmu wielomianowego:

Przykład 1.6 [Problem FACTORING]

Wejście: liczba naturalna n
Wyjście: rozkład n na czynniki pierwsze.

Każda liczba naturalna posiada swój rozkład na czynniki pierwsze. To sprawia, że FACTORING jest problemem funkcyjnym całkowitym z klasy TFNP. Kluczowy dla tego stwierdzenia jest fakt, że dzięki przynależności problemu sprawdzania czy liczba jest pierwsza do klasy P łatwo jest stwierdzić, czy rozkład jest rzeczywiście rozkładem na czynniki pierwsze. Fakt, że rozwiązanie zawsze istnieje, może ułatwić znalezienie efektywnego algorytmu. Takiego warunku nie spełniają rozważane wcześniej FSAT i TSP.

Rozważmy poniższy problem funkcyjny obliczania optymalnego stanu sieci:

Problem HAPPYNET.

Przykład 1.7 [Problem HAPPYNET]

Wejście: graf nieskierowany ważony G=(V,E) z wagami całkowitymi w
Wyjście: wartościowanie S:V{1,1} takie, że każdy wierzchołek vV jest szczęśliwy, tzn.:

S(v)(v,u)ES(u)w(v,u)0

Mówiąc obrazowo, warunek szczęśliwości oznacza, że wierzchołek chce mieć ten sam stan co wierzchołki połączone z nim wagą dodatnią i przeciwny dla wagi ujemnej. Na rysunku Problem HAPPYNET wierzchołek 1 jest nieszczęśliwy, a 4 jest szczęśliwy.

Łatwo zauważyć, że HAPPYNET należy do klasy FNP, gdyż łatwo sprawdzić, czy wartościowanie daje stan szczęśliwy. Co zaskakujące jednak, jest on problemem funkcyjnym całkowitym, tzn. szukany stan "szczęśliwości" zawsze istnieje:

Ćwiczenie 1.8

Udowodnij, że problem HAPPYNET należy do klasy TFNP.

Wskazówka
Rozwiązanie

Powyższy algorytm jest oczywiście pseudowielomianowy ze względu na powiązanie czasu działania z wartością sumy wag. Obecnie nie jest znany algorytm wielomianowy dla HAPPYNET.

Ciekawym problem funkcyjnym jest także poniższy problem:

Przykład 1.9 [Problem ANOTHER HAMILTON CYCLE]

Wejście: graf nieskierowany G i jego cykl Hamiltona c
Wyjście: cykl Hamiltona dla G różny od c

Stwierdzenie czy istnieje cykl Hamiltona w grafie jest problemem NP-zupełnym. Ale czy wiedza o jednym cyklu pomaga nam w szukaniu kolejnego? Okazuje się, że ANOTHER HAMILTON CYCLE jest problem FNP-zupełnym. Interesujące jest jednak to, że gdy zawężymy klasę dostępnych grafów do grafów kubicznych, to sytuacja ulega specyficznej zmianie. Grafy kubiczne to grafy, w których każdy wierzchołek ma stopień 3. W takiej sytuacji okazuje się, że jeśli graf ma jeden cykl Hamiltona to musi mieć również inny:

Ćwiczenie 1.10

Udowodnij, że problem ANOTHER HAMILTON CYCLE dla grafów kubicznych należy do klasy TFNP.

Wskazówka
Rozwiązanie
Klasy problemów funkcyjnych.

Podobnie jak i w poprzednim przypadku, na podstawie dowodu nie umiemy skonstruować algorytmu wielomianowego dla ANOTHER HAMILTON CYCLE dla grafów kubicznych.

Animacja Klasy problemów funkcyjnych podsumowuje poznane klasy problemów funkcyjnych.

Złożoność zliczania

W drugiej części tego modułu zajmiemy się tematem podobnym do problemów funkcyjnych. Będziemy się zastanawiać nad złożonością obliczeniową obliczania liczby rozwiązań lub innymi słowy zliczaniem. Oto pierwszy przykład:

Przykład 2.1 [Problem #SAT]

Wejście: formuła logiczna ϕ jak dla problemu SAT.
Wyjście: liczba różnych wartościowań spełniających ϕ.

Oczywiście rozwiązanie #SAT daje nam rozwiązanie decyzyjnej wersji SAT. Inne przykłady "zliczających" wersji problemów NP-zupełnych to #HAMILTONIAN PATH, w którym pytamy o liczbę różnych cykli Hamiltona w grafie, czy #CLIQUE, w którym pytamy o liczbę różnych klik rozmiaru przynajmniej K. We wszystkich tych przypadkach nie mamy nadziei, aby wersje zliczające miały rozwiązania wielomianowe.

Istnieją problemy, dla których zliczanie liczby rozwiązań ma algorytm wielomianowy, np. liczba różnych drzew rozpinających w grafie lub liczba ścieżek Eulera. Pomimo tego, pewne problemy wskazują, że zliczanie liczby rozwiązań jest trudniejsze niż obliczanie samego rozwiązania. Nawet gdyby P=NP to nie wiemy jak rozwiązać #SAT w czasie wielomianowym.

Skojarzenie w grafie dwudzielnym.

Na większą trudność wskazuje również przykład problemu MATCHING dotyczący idealnych skojarzeń w grafach dwudzielnych. W tym przypadku obliczenie rozwiązania (czyli wersja funkcyjna) jest wielomianowa, a mimo tego #MATCHING jest trudny i ciągle nie znamy rozwiązania wielomianowego dla niego.

Problem znajdowania idealnego skojarzenia w grafie dwudzielnym jest związany z wyznacznikami macierzy (animacja Skojarzenie w grafie dwudzielnym).

Oznaczmy przez G=(A,B,E) graf dwudzielny pokazany w animacji. A={a1,a2,a3,a4}, natomiast B={b1,b2,b3,b4}. Macierz sąsiedztwa grafu MG również została przedstawiona w animacji. MG[i,j] równe jest 1, gdy krawędź od ai do bj istnieje lub 0 w przeciwnym wypadku. Wyznacznik MG wynosi:


det MG=πσ(π)i=1nMG[i,π(i)]


gdzie sumowanie odbywa się po wszystkich permutacjach a tym samym skojarzeniach idealnych grafu G. Wyznacznik można policzyć szybko dzięki czynnikowi σ(π) stanowiącego znak permutacji. Istnieje bardzo podobne wyrażenie zwane permanentem obliczane dla macierzy, które jest pozbawione tego czynnika:


perm MG=πi=1nMG[i,π(i)]


Permanent macierzy to dokładnie liczba skojarzeń idealnych stosownego grafu dwudzielnego. Na wskutek tej odpowiedniości problem zliczania idealnych skojarzeń w grafie dwudzielnym nosi nazwę PERMANENT.

Istnieje także powiązanie pomiędzy skojarzeniami a pokryciem rozłącznymi cyklami grafu G również przedstawionym w animacji. W grafie skierowanym G o n wierzchołkach krawędź od i do j występuje, gdy w grafie G wierzchołek ai jest połączony z bj. Graf G może mieć pętle. Idealne skojarzenie dla G odpowiada jednoznacznie pokryciu rozłącznymi cyklami grafu G. Dlatego też, wartość permanentu jest jednocześnie liczbą różnych pokryć cyklami dla G. Dla przedstawionego przykładu wszystkie te trzy wartości wynoszą 1.

Klasa #P i twierdzenie Valianta

Badanie problemów polegających na zliczaniu przez Valianta w latach 70 przyniosło skutek w postaci zdefiniowania klasy #P (czytamy "hasz P"). Jest on laureatem nagrody Knutha z roku 1997. Oznaczmy przez R wielomianowo zrównoważoną i rozstrzygalną relację binarną na słowach. Problem zliczania związany z R polega na obliczeniu dla danego x liczby takich y, że R(x,y) jest spełnione. Obliczony wynik musi być przedstawiony w postaci liczby binarnej. Klasa #P składa się z wszystkich takich problemów związanych z relacjami R.

Jeśli R jest relacją sprawdzającą, czy y jest spełniającym wartościowaniem dla x to otrzymujemy #SAT. Gdy natomiast R jest zdefiniowana tak, że R(x,y) zachodzi, gdy y jest idealnym skojarzeniem dla grafu dwudzielnego x to otrzymujemy problem PERMANENT. Podobnie dla #HAMILTONIAN PATH. Wszystko to przykłady problemów #P-zupełnych.

Aby mówić o zupełności musimy wprowadzić stosowną redukcję. Podobnie jak w przypadku problemów funkcyjnych redukcja pomiędzy problemami A i B składa się z dwóch funkcji R i S obliczanych w pamięci logarytmicznej. Jeśli x jest instancją problemu A to R(x) jest instancją problemu B. Jeśli N jest odpowiedzią dla R(x) to S(N) jest odpowiedzią dla x.

Okazuje się, że wygodnie jest posługiwać się mocniejszą redukcją oszczędną (ang. parsimonious wprowadzoną, co ciekawe przez Simona). Charakteryzuje się ona tym, że S jest identycznością, tzn. R przekształca instancje tak, że zachowuje liczbę rozwiązań.

Większość redukcji przeprowadzanych pomiędzy problemami decyzyjnymi z klasy NP jest oszczędna lub może zostać nimi zastąpiona. Poniższe ćwiczenie wprowadza pierwszy problem zupełny dla wprowadzonej klasy:

Ćwiczenie 2.2

Udowodnij, że problem #SAT jest #P-zupełny.

Wskazówka
Rozwiązanie

Jednak problem #P-zupełny, który jest najbardziej interesujący, to opisany już PERMANENT. Mimo wielomianowości problemu MATCHING okazuje się on tak trudny jak cała wprowadzona klasa:

Twierdzenie 2.3 [twierdzenie Valianta]

Problem PERMANENT jest #P-zupełny.

Dowód twierdzenia Valianta (1).
Dowód twierdzenia Valianta (2).

Dowód

Zasadnicza część dowodu to redukcja #SAT do problemu PERMANENT MOD N. Jednak gdy potrafimy obliczyć PERMANENT dokładnie, to potrafimy także obliczyć jego resztę modulo N, więc ostatecznie możemy zredukować #SAT do PERMANENT, co dowodzi #P-zupełności tego ostatniego.

Naszą redukcję oprzemy na równoważności pomiędzy permanentem macierzy a liczbą pokryć rozłącznymi cyklami stowarzyszonego grafu G, omówionej przy okazji definicji permanentu.

Redukcję rozpoczniemy od formuły 3SAT i będziemy konstruować nasz graf G. Dla każdej zmiennej z formuły ϕ będzie on zawierał element wyboru decydujący o wyborze wartościowania dla zmiennej, przedstawiony w animacji Dowód twierdzenia Valianta (1) w części (a).

Graf przedstawiony w animacji w części (a) posiada dokładnie dwa możliwe pokrycia cyklami. Każde z nich zawiera dokładnie jedną z krawędzi bocznych i krawędź środkową. Naszą interpretacją będzie stosowne wartościowanie tej zmiennej w formule ϕ.

Dla każdej z klauzul formuły ϕ do grafu G wstawiamy element przedstawiony w animacji w części (b). Łatwo zauważyć, że dla tego grafu:

  • nie istnieje pokrycie cyklami zawierające 3 zewnętrzne krawędzie,
  • każdy inny podzbiór (w tym pusty) zewnętrznych krawędzi jest osiągany przez dokładnie jedno pokrycie cyklami.

W ten sposób możemy symulować 7 poprawnych (spełniających) wartościowań klauzuli o trzech zmiennych i 1 niepoprawne. Teraz musimy tylko połączyć rozłączne jak na razie elementy skojarzone ze zmiennymi i klauzulami. Stosowny element musi działać jak xor na odpowiedniej krawędzi z podgrafu skojarzonego ze zmienną (w zależności od obecności negacji w klauzuli przy zmiennej) i jednej z trzech krawędzi na obwodzie podgrafu skojarzonego z klauzulą.

To ten element jest najbardziej enigmatyczny w całym dowodzie, gdyż pamiętamy, że obliczanie pojedynczego skojarzenia idealnego (a tym samym rozłącznego pokrycia cyklami) może być rozwiązane w czasie wielomianowym, natomiast wartościowanie formuły 3SAT jest NP-zupełne!

Element xor został przedstawiony w animacji w formie macierzy w części (a), w formie grafu w części (b) i w formie skrótowej w części (c). Wierzchołek g w części (b) odpowiada reszcie grafu i będzie służył do dowodu. Element w kształcie diamentu w części (c) odpowiada grafowi z części (b) bez wierzchołka g (animacja Dowód twierdzenia Valianta (2)).

Na chwilę rozszerzyliśmy problem PERMANENT na macierze o wartościach innych niż 0-1. Jest to problem równoważny obliczaniu uogólnionego pokrycia cyklami, w którym waga pokrycia to iloczyn wag tworzących pokrycie i poszukujemy nie liczby pokryć, a sumy wag wszystkich różnych pokryć rozłącznych.

Oto podsumowanie prostych własności, które będą nam potrzebne w dalszej części dowodu dotyczące wagi pokryć cyklami grafu z części (b). Można je sprawdzić również obliczając permanent stosownej macierzy:

  • suma wag pokryć zawierających krawędzie (d,g) i (g,a) wynosi 4,
  • suma wag pokryć zawierających krawędzie (a,g) i (g,d) wynosi 4,
  • suma wag pokryć zawierających pętlę g wynosi 0,
  • suma wag pokryć zawierających krawędzie (d,g) i (g,d) wynosi 0,
  • suma wag pokryć zawierających krawędzie (g,a) i (a,g) wynosi 0.

Na podstawie tych własności możemy stwierdzić, że element w kształcie diamentu zachowuje się jak xor jeśli chodzi o sumę wag pokryć. Załóżmy, że krawędzie które chcemy połączyć takim elementem to (1,1) oraz (2,2). Otóż jeśli krawędź (1,1) należy do pokrycia, a (2,2) nie, to stosowne pokrycie jest przemnażane przez 4. Podobnie dzieje się dla dualnej sytuacji. Gdy natomiast żadna z krawędzi nie należy do pokrycia lub należą obie lub wystąpi jeszcze inna sytuacja to stosowne pokrycie wnosi wagę 0.

Teraz dokonujemy opisanych połączeń przy pomocy elementu xor. Zauważmy, że każde spełniające wartościowanie formuły ϕ odpowiada takiemu pokryciu cyklami, w którym w każdym elemencie xor jest wnoszona waga 4 do iloczynu, czyli każde spełniające wartościowanie formuły ϕ odpowiada wadze 4m dla pokrycia cyklami, gdzie m to suma liczby wystąpień wszystkich literałów (czyli liczba elementów xor). Jeśli zatem policzymy permanent, czyli wagę wszystkich pokryć cyklami, to otrzymamy wartość 4ms, gdzie s to liczba różnych wartościowań spełniających formułę ϕ.

Teraz musimy sobie poradzić z wprowadzonymi wagami różnymi od 0 i 1. Na poniższej animacji (Dowód twierdzenia Valianta (3)) w części (a) przedstawiamy element zastępujący wagę 2, a w części (b) wagę 3.

Jest proste do sprawdzenia, że każde pokrycie, które miało zastąpioną krawędź, będzie teraz wnosić wagę 2 (analogicznie 3) ze względu na dwa (analogicznie trzy) możliwe pokrycia cyklami przedstawionych fragmentów. W części (c) pokazano jak uzyskać wagę 2n nie używając wykładniczej wielkości grafu.

Pozostaje nam pozbycie się wag 1 i w tym celu odwołujemy się do problemu PERMANENT MOD N wspomnianym na początku dowodu. Gdy bowiem obliczamy PERMANENT MOD N z wagami 1, to odpowiada to obliczeniu PERMANENT z wagą N1. Ustalamy zatem N=2n+1 gdzie n jest odpowiednio dużą liczbą całkowitą, która jest większa od maksymalnej wartości permanentu pozostałej części grafu (np. n=8m). Zastępujemy 1 przez 2n i liczymy wartość PERMANENT a następnie bierzemy wynik modulo N. Jest on równy 4ms stąd obliczamy liczbę wszystkich wartościowań spełniających formułę ϕ.

Dowód twierdzenia Valianta (3).

Oczywiście każdy problem z klasy #P może zostać rozwiązany w pamięci wielomianowej, poprzez prosty algorytm zliczający (oczywiście wykładniczy). Zliczanie nie jest zatem silniejsze niż klasa PSPACE.

Klasa P

Ciekawą klasą powiązaną z tematem zliczania jest klasa P (czytamy "parzystość P"). Odpowiada ona obliczaniu ostatniego bitu wyniku dla problemów z klasy #P. Przeanalizujmy poniższe problemy:

Przykład 2.4 [Problem SAT]

Wejście: formuła logiczna ϕ jak dla problemu SAT.
Wyjście: czy liczba różnych wartościowań spełniających ϕ jest nieparzysta?

Przykład 2.5 [Problem HAMILTON CYCLE]

Wejście: graf nieskierowany G
Wyjście: czy liczba różnych cykli Hamiltona dla G jest nieparzysta?

Możemy zdefiniować ogólnie klasę P jako ogół tych języków L dla których istnieje maszyna niedeterministyczna działająca w czasie wielomianowym, dla której xL wtedy i tylko wtedy, gdy liczba ścieżek akceptujących x przez M jest nieparzysta. W języku relacji, powiemy, że L należy do P, gdy istnieje wielomianowo zrównoważona i rozstrzygalna relacja RL taka, że xL wtedy i tylko wtedy, gdy ilość y takich, że RL(x,y) jest nieparzysta.

Zarówno SAT jak i HAMILTON CYCLE okazują się problemami P-zupełnymi (zupełność definiujemy przy pomocy redukcji oszczędnych w naturalny sposób). Z łatwością można stwierdzić, że należą do klasy P, natomiast redukcje oszczędne omawiane przy okazji wersji zliczających tych problemów są wystarczające.

Moc klasy P wydaje się być słabsza ze względu na fakt, iż #MATCHING, czyli PERMANENT MOD 2 jest problemem o złożoności wielomianowej. Dzieje się tak dlatego, iż w tym wypadku obliczanie wyznacznika i permanentu daje ten sam wynik.

Ćwiczenia dodatkowe

Ćwiczenie 3.1

Udowodnij, że FSAT jest FNP-zupełny.

Wskazówka
Rozwiązanie

Ćwiczenie 3.2

Udowodnij, że klasa P jest zamknięta na dopełnienie.

Wskazówka
Rozwiązanie

Testy końcowe