Złożoność obliczeniowa/Wykład 9: Twierdzenie PCP i nieaproksymowalność: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian
m Zastępowanie tekstu – „<math> ” na „<math>”
 
(Nie pokazano 18 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
==Wprowadzenie==
==Wprowadzenie==


Dotychczasowa analiza <math>\displaystyle \cc{NP}</math>-zupełnych problemów optymalizacyjnych pokazała dużą rozpiętość, jeżeli chodzi o możliwości ich aproksymacji. Z jednej strony poznaliśmy problemy, jak problem plecakowy, które można aproksymować z dowolnie dobrą dokładnością. Z drugiej strony spotkaliśmy problemy, jak problem komiwojażera, gdzie w ogólnym przypadku niemożliwa jest żadna aproksymacja.
Dotychczasowa analiza <math>\mathrm{NP}</math>-zupełnych problemów optymalizacyjnych pokazała dużą rozpiętość, jeżeli chodzi o możliwości ich aproksymacji. Z jednej strony poznaliśmy problemy, jak problem plecakowy, które można aproksymować z dowolnie dobrą dokładnością. Z drugiej strony spotkaliśmy problemy, jak problem komiwojażera, gdzie w ogólnym przypadku niemożliwa jest żadna aproksymacja.


Ciekawą klasą leżącą gdzieś pomiędzy tymi dwoma skrajnościami jest klasa <math>\displaystyle \cc{MAXSNP}</math>, gdzie problemy mają algorytmy ze stałą aproksymacji, ale nie wiemy jeszcze nic o schematach dla problemów z tej klasy. Dla wielu konkretnych problemów takie schematy istnieją, ale szczególnie interesujący byłby schemat, dla któregoś z problemów <math>\displaystyle \cc{MAXSNP}</math>-zupełnych. Odkrycie takiego schematu pociągałoby za sobą istnienie schematów dla wszystkich problemów z klasy <math>\displaystyle \cc{MAXSNP}</math>.
Ciekawą klasą leżącą gdzieś pomiędzy tymi dwoma skrajnościami jest klasa <math>\mathrm{MAXSNP}</math>, gdzie problemy mają algorytmy ze stałą aproksymacji, ale nie wiemy jeszcze nic o schematach dla problemów z tej klasy. Dla wielu konkretnych problemów takie schematy istnieją, ale szczególnie interesujący byłby schemat, dla któregoś z problemów <math>\mathrm{MAXSNP}</math>-zupełnych. Odkrycie takiego schematu pociągałoby za sobą istnienie schematów dla wszystkich problemów z klasy <math>\mathrm{MAXSNP}</math>.


Okazuje się, że pytanie o taki schemat jest równoważne pytaniu <math>\displaystyle \cc{P}  =? \cc{NP}</math>. Jeżeli <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to nie może istnieć schemat aproksymacji dla żadnego problemu <math>\displaystyle \cc{MAXSNP}</math>-zupełnego. Sercem dowodu tego faktu jest twierdzenie <math>\displaystyle \cc{PCP}</math>, które przedstawimy. Twierdzenie to stało się istotnym kamieniem milowym w badaniach nad aproksymacją optymalizacyjnych problemów <math>\displaystyle \cc{NP}</math>-zupełnych. Pozwoliło nie tylko rozwiązać pytania dotyczące klasy <math>\displaystyle \cc{MAXSNP}</math>, ale także wykazać wiele ograniczeń na możliwości aproksymowania rozwiązań różnych konkretnych problemów.
Okazuje się, że pytanie o taki schemat jest równoważne pytaniu <math>\mathrm{P}  =? \mathrm{NP}</math>. Jeżeli <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie może istnieć schemat aproksymacji dla żadnego problemu <math>\mathrm{MAXSNP}</math>-zupełnego. Sercem dowodu tego faktu jest twierdzenie <math>\mathrm{PCP}</math>, które przedstawimy. Twierdzenie to stało się istotnym kamieniem milowym w badaniach nad aproksymacją optymalizacyjnych problemów <math>\mathrm{NP}</math>-zupełnych. Pozwoliło nie tylko rozwiązać pytania dotyczące klasy <math>\mathrm{MAXSNP}</math>, ale także wykazać wiele ograniczeń na możliwości aproksymowania rozwiązań różnych konkretnych problemów.


Po przedstawieniu tego fascynującego twierdzenia pokażemy różne, niestety negatywne wnioski, jakie z niego wynikają dla teorii algorytmów aproksymacyjnych.
Po przedstawieniu tego fascynującego twierdzenia pokażemy różne, niestety negatywne wnioski, jakie z niego wynikają dla teorii algorytmów aproksymacyjnych.
Linia 13: Linia 13:
Żeby móc w ogóle wyrazić twierdzenie potrzebujemy całkiem nowego pojęcia, które teraz wprowadzimy.
Żeby móc w ogóle wyrazić twierdzenie potrzebujemy całkiem nowego pojęcia, które teraz wprowadzimy.


Przypomnijmy definicję klasy <math>\displaystyle \cc{NP}</math> z użyciem świadka. Klasa <math>\displaystyle NP</math> to języki <math>\displaystyle L</math>, które mogą być przedstawione w postaci:
Przypomnijmy definicję klasy <math>\mathrm{NP}</math> z użyciem świadka. Klasa <math>NP</math> to języki <math>L</math>, które mogą być przedstawione w postaci:


<center><math>\displaystyle L = \{ \defset{x} : {\exists_y (\braq{x,y}) \in R} \}</math> , </center>
<center><math>L = \{ {x} : {\exists_y (\mathit{x,y}) \in R} \}</math> , </center>


gdzie relacja <math>\displaystyle R</math> jest wielomianowo zrównoważona.
gdzie relacja <math>R</math> jest wielomianowo zrównoważona.


Ta definicja jest dość sztywna i trudno za jej pomocą uchwycić jakieś własności problemów optymalizacyjnych. Dlatego wprowadza się definicję systemu <math>\displaystyle \cc{PCP}</math>, co od angielskiego ''probabilistically checkable proof'' oznacza dowód weryfikowalny propabilistycznie.
Ta definicja jest dość sztywna i trudno za jej pomocą uchwycić jakieś własności problemów optymalizacyjnych. Dlatego wprowadza się definicję systemu <math>\mathrm{PCP}</math>, co od angielskiego ''probabilistically checkable proof'' oznacza dowód weryfikowalny propabilistycznie.


W definicji tej pozwala się maszynie rozpoznającej język na korzystanie z bitów losowych (dostępnych na osobnej taśmie), ale wymaga się ograniczenia w korzystaniu z dostępnego świadka.
W definicji tej pozwala się maszynie rozpoznającej język na korzystanie z bitów losowych (dostępnych na osobnej taśmie), ale wymaga się ograniczenia w korzystaniu z dostępnego świadka.


{{definicja|2.1||
{{definicja|2.1||
Weryfikatorem nazywamy deterministyczną maszynę Turinga, która oprócz taśmy roboczej ma dostęp do taśmy z ciągiem bitów losowych oraz taśmy, na której jest zapisany świadek. Obliczenie weryfikatora musi zawsze się kończyć i akceptować lub odrzucać słowo wejściowe. Weryfikator jest ograniczony przez funkcje naturalne <math>\displaystyle p</math> i <math>\displaystyle q</math>, jeżeli dla słowa wejściowego <math>\displaystyle x</math> odczytuje co najwyżej <math>\displaystyle \mathcal{O}{ p(|\size{x}|) }</math> bitów losowych i co najwyżej <math>\displaystyle \mathcal{O}{ q(|\size{x}|) }</math> bitów świadka. Będziemy o nim wtedy mówić, że jest <math>\displaystyle (\braq{p,q})</math>-ograniczonym weryfikatorem.
Weryfikatorem nazywamy deterministyczną maszynę Turinga, która oprócz taśmy roboczej ma dostęp do taśmy z ciągiem bitów losowych oraz taśmy, na której jest zapisany świadek. Obliczenie weryfikatora musi zawsze się kończyć i akceptować lub odrzucać słowo wejściowe. Weryfikator jest ograniczony przez funkcje naturalne <math>p</math> i <math>q</math>, jeżeli dla słowa wejściowego <math>x</math> odczytuje co najwyżej <math>\mathcal{O}{ p(|\mathit{x}|) }</math> bitów losowych i co najwyżej <math>\mathcal{O}{ q(|\mathit{x}|) }</math> bitów świadka. Będziemy o nim wtedy mówić, że jest <math>(\mathit{p,q})</math>-ograniczonym weryfikatorem.
}}
}}


Najciekawszymi ograniczeniami są <math>\displaystyle \log n</math> na liczbę bitów losowych i <math>\displaystyle 1</math> na liczbę bitów świadka. Języki rozpoznawane w czasie wielomianowym przez takie weryfikatory tworzą klasę <math>\displaystyle  \cc{PCP}(\log n,1) </math>.
Najciekawszymi ograniczeniami są <math>\log n</math> na liczbę bitów losowych i <math>1</math> na liczbę bitów świadka. Języki rozpoznawane w czasie wielomianowym przez takie weryfikatory tworzą klasę <math>\mathrm{PCP}(\log n,1)</math>.


<div class="thumb tright"><div style="width:350px;">
[[File:ZO-9-1.svg|350x250px|thumb|right|Rys.9.1. Weryfikator.]]
<flash>file=ZO-9-1.swf|width=350|height=250</flash>
<div.thumbcaption>Rys.9.1. Weryfikator.</div>
</div></div>
<!-- ZO-9.1 - weryfikator -->
<!-- ZO-9.1 - weryfikator -->


{{definicja|2.2||
{{definicja|2.2||
Język <math>\displaystyle L</math> należy do <math>\displaystyle  \cc{PCP}(\log n, 1) </math>, jeżeli istnieje weryfikator <math>\displaystyle V</math> oraz stałe <math>\displaystyle c</math> i <math>\displaystyle d</math> takie, że dla wejścia <math>\displaystyle x</math> <math>\displaystyle V</math> działa w czasie wielomianowym od <math>\displaystyle |\size{x}|</math> bez względu na odczytane bity losowe i świadka. Podczas działania odczytuje co najwyżej <math>\displaystyle c\log|\size{x}|</math> bitów losowych i co najwyżej <math>\displaystyle d</math> bitów świadka.
Język <math>L</math> należy do <math>\mathrm{PCP}(\log n, 1)</math>, jeżeli istnieje weryfikator <math>V</math> oraz stałe <math>c</math> i <math>d</math> takie, że dla wejścia <math>x</math> <math>V</math> działa w czasie wielomianowym od <math>|\mathit{x}|</math> bez względu na odczytane bity losowe i świadka. Podczas działania odczytuje co najwyżej <math>c\log|\mathit{x}|</math> bitów losowych i co najwyżej <math>d</math> bitów świadka.
* Jeżeli słowo <math>\displaystyle x \in L</math>, to istnieje taki świadek <math>\displaystyle y</math>, że <math>\displaystyle V</math> akceptuje z prawdopodobieństwem <math>\displaystyle 1</math>.
* Jeżeli słowo <math>x \in L</math>, to istnieje taki świadek <math>y</math>, że <math>V</math> akceptuje z prawdopodobieństwem <math>1</math>.
* Jeżeli słowo <math>\displaystyle x \notin L</math>, to dla każdego świadka <math>\displaystyle y</math> <math>\displaystyle V</math> odrzuca z prawdopodobieństwem większym od <math>\displaystyle \frac{1}{2}</math>.}}
* Jeżeli słowo <math>x \notin L</math>, to dla każdego świadka <math>y</math> <math>V</math> odrzuca z prawdopodobieństwem większym od <math>\frac{1}{2}</math>.}}


Klasy <math>\displaystyle  \cc{PCP}(p,q) </math> definiuje się analogicznie. Charakteryzację klasy <math>\displaystyle \cc{NP}</math>, którą przypomnieliśmy na samym początku, możemy teraz wyrazić używając nowej terminologii równaniem:
Klasy <math>\mathrm{PCP}(p,q)</math> definiuje się analogicznie. Charakteryzację klasy <math>\mathrm{NP}</math>, którą przypomnieliśmy na samym początku, możemy teraz wyrazić używając nowej terminologii równaniem:


<center><math>\displaystyle \cc{NP} =  \cc{PCP}(0, \textnormal{poly}(n) )\textnormal{.}
<center><math>\mathrm{NP} =  \mathrm{PCP}(0, \text{poly}(n) )\text{.}
</math></center>
</math></center>


Możemy teraz sformułować długo zapowiadane twierdzenie <math>\displaystyle \cc{PCP}</math>:
Możemy teraz sformułować długo zapowiadane twierdzenie <math>\mathrm{PCP}</math>:


{{twierdzenie|2.3||
{{twierdzenie|2.3||


<center><math>\displaystyle \cc{NP} =  \cc{PCP}(\log n, 1)  
<center><math>\mathrm{NP} =  \mathrm{PCP}(\log n, 1)  
</math></center>
</math></center>


Linia 55: Linia 52:


{{dowod|||
{{dowod|||
Dowód jednej części tego twierdzenia jest prosty. Żeby pokazać zawieranie <math>\displaystyle  \cc{PCP}(\log n,1)  \subseteq NP</math>, wystarczy przeanalizować następującą niedeterministyczną maszynę Turinga:
Dowód jednej części tego twierdzenia jest prosty. Żeby pokazać zawieranie <math>\mathrm{PCP}(\log n,1)  \subseteq NP</math>, wystarczy przeanalizować następującą niedeterministyczną maszynę Turinga:


Niedeterministyczny symulator weryfikatora.
[Niedeterministyczny symulator weryfikatora]
# Wybierz niedeterministycznie świadka <math>\displaystyle y</math> o rozmiarze wielomianowym.
1. Wybierz niedeterministycznie świadka <math>y</math> o rozmiarze wielomianowym.
# Dla każdego ciągu bitów <math>\displaystyle b</math> długości <math>\displaystyle c \log n</math> zasymuluj działanie weryfikatora na słowie wejściowym przy świadku <math>\displaystyle y</math> i ciągu bitów losowych <math>\displaystyle b</math>.
2. Dla każdego ciągu bitów <math>b</math> długości <math>c \log n</math> zasymuluj działanie weryfikatora na słowie wejściowym przy świadku <math>y</math> i ciągu bitów losowych <math>b</math>.
# Zaakceptuj słowo, jeżeli wszystkie symulacje weryfikatora zakończyły się akceptująco.
3. Zaakceptuj słowo, jeżeli wszystkie symulacje weryfikatora zakończyły się akceptująco.


Dowód drugiego zawierania używa bardzo zaawansowanych technik i niestety zdecydowanie wykracza poza zakres tego kursu.
Dowód drugiego zawierania używa bardzo zaawansowanych technik i niestety zdecydowanie wykracza poza zakres tego kursu.
Linia 68: Linia 65:
Pseudoweryfikator dla SAT.
Pseudoweryfikator dla SAT.


Pokaż <math>\displaystyle (\braq{\log n, 1})</math>-ograniczony weryfikator dla języka <math>\displaystyle 3</math>SAT, który akceptuje niespełnialne formuły z prawdopodobieństwem nie większym niż <math>\displaystyle 1 - \frac{1}{m}</math>, gdzie <math>\displaystyle m</math> jest liczbą klauzul.
Pokaż <math>(\mathit{\log n, 1})</math>-ograniczony weryfikator dla języka <math>3</math>SAT, który akceptuje niespełnialne formuły z prawdopodobieństwem nie większym niż <math>1 - \frac{1}{m}</math>, gdzie <math>m</math> jest liczbą klauzul.
 
}}
<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">   
Użyj bitów losowych do sprawdzenia losowej klauzuli.
Użyj bitów losowych do sprawdzenia losowej klauzuli.
Linia 75: Linia 72:


<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">   
Użyjemy <math>\displaystyle \log m</math> bitów losowych do wyznaczenia klauzuli, której wartościowanie sprawdzimy. Bity świadka potraktujemy jako wartościowanie, które powinno spełniać wszystkie klauzule. Po wyznaczeniu numeru klauzuli potrzebujemy dostępu do co najwyżej <math>\displaystyle 3</math> bitów świadka, aby poznać wartościowanie pojedynczej klauzuli <math>\displaystyle 3</math>SAT. Weryfikator akceptuje formułę, jeżeli klauzula jest spełniona.
Użyjemy <math>\log m</math> bitów losowych do wyznaczenia klauzuli, której wartościowanie sprawdzimy. Bity świadka potraktujemy jako wartościowanie, które powinno spełniać wszystkie klauzule. Po wyznaczeniu numeru klauzuli potrzebujemy dostępu do co najwyżej <math>3</math> bitów świadka, aby poznać wartościowanie pojedynczej klauzuli <math>3</math>SAT. Weryfikator akceptuje formułę, jeżeli klauzula jest spełniona.


Jeżeli świadek opisuje wartościowanie spełniające wszystkie klauzule, to skonstruowany weryfikator przy takim świadku zawsze zaakceptuje formułę spełnialną. Dla formuły niespełnialnej każdy świadek pozostawia którąś z klauzul niespełnioną, więc prawdopodobieństwo akceptacji jest nie większe niż <math>\displaystyle 1 - \frac{1}{m}</math>.
Jeżeli świadek opisuje wartościowanie spełniające wszystkie klauzule, to skonstruowany weryfikator przy takim świadku zawsze zaakceptuje formułę spełnialną. Dla formuły niespełnialnej każdy świadek pozostawia którąś z klauzul niespełnioną, więc prawdopodobieństwo akceptacji jest nie większe niż <math>1 - \frac{1}{m}</math>.


Skonstruowanemu weryfikatorowi oczywiście daleko do weryfikatora klasy <math>\displaystyle  \cc{PCP}(\log n,1) </math>, którego istnienie dla problemu <math>\displaystyle 3</math>SAT gwarantuje twierdzenie <math>\displaystyle \cc{PCP}</math>. Obniżenie progu błędnej akceptacji z <math>\displaystyle 1 - \frac{1}{m}</math> do <math>\displaystyle \frac{1}{2}</math> jest naprawdę nie lada wyczynem.
Skonstruowanemu weryfikatorowi oczywiście daleko do weryfikatora klasy <math>\mathrm{PCP}(\log n,1)</math>, którego istnienie dla problemu <math>3</math>SAT gwarantuje twierdzenie <math>\mathrm{PCP}</math>. Obniżenie progu błędnej akceptacji z <math>1 - \frac{1}{m}</math> do <math>\frac{1}{2}</math> jest naprawdę nie lada wyczynem.
</div></div>
</div></div>


}}
 


{{cwiczenie|2.6||
{{cwiczenie|2.6||
Charakteryzacje <math>\displaystyle \cc{P}</math> i <math>\displaystyle \cc{NP}</math> poprzez <math>\displaystyle \cc{PCP}</math>.
Charakteryzacje <math>\mathrm{P}</math> i <math>\mathrm{NP}</math> poprzez <math>\mathrm{PCP}</math>.


Uzasadnij poniższe równości:
Uzasadnij poniższe równości:
* <math>\displaystyle \cc{P} =  \cc{PCP}(0,0)  =  \cc{PCP}(\log n, 0)  =  \cc{PCP}(0,\log n)</math>,
* <math>\mathrm{P} =  \mathrm{PCP}(0,0)  =  \mathrm{PCP}(\log n, 0)  =  \mathrm{PCP}(0,\log n)</math>,
* <math>\displaystyle \cc{NP} =  \cc{PCP}(\log n, 1)  =  \cc{PCP}(\log n, \textnormal{poly}(n) ) </math>.
* <math>\mathrm{NP} =  \mathrm{PCP}(\log n, 1)  =  \mathrm{PCP}(\log n, \text{poly}(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">   
<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">   
Użyj przeglądania wyczerpującego, aby uzasadnić równości z punktu pierwszego. Przyjrzyj się raz jeszcze dowodowi, że <math>\displaystyle  \cc{PCP}(\log n, 1)  \subseteq NP</math>.
Użyj przeglądania wyczerpującego, aby uzasadnić równości z punktu pierwszego. Przyjrzyj się raz jeszcze dowodowi, że <math>\mathrm{PCP}(\log n, 1)  \subseteq NP</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">   
Równość <math>\displaystyle P =  \cc{PCP}(0,0) </math> jest oczywista, gdyż weryfikator bez dostępu do bitów losowych i świadka zachowuje się jak zwykła maszyna deterministyczna. Zawierania <math>\displaystyle  \cc{PCP}(\log n,0)  \supseteq  \cc{PCP}(0,0)  \subseteq  \cc{PCP}(0,\log n) </math> też nie wymagają komentarza. Działanie weryfikatora z <math>\displaystyle \mathcal{O}{\log n}</math> bitami losowymi można zasymulować na deterministycznej maszynie, przeglądając wszystkie ciągi odpowiedniej długości. Czas będzie wykładniczy od <math>\displaystyle \mathcal{O}{\log n}</math>, czyli wielomianowy od rozmiaru wejścia. Akceptacji należy dokonać, jeżeli wszystkie ciągi losowe prowadzą do akceptacji.
Równość <math>P =  \mathrm{PCP}(0,0)</math> jest oczywista, gdyż weryfikator bez dostępu do bitów losowych i świadka zachowuje się jak zwykła maszyna deterministyczna. Zawierania <math>\mathrm{PCP}(\log n,0)  \supseteq  \mathrm{PCP}(0,0)  \subseteq  \mathrm{PCP}(0,\log n)</math> też nie wymagają komentarza. Działanie weryfikatora z <math>\mathcal{O}{\log n}</math> bitami losowymi można zasymulować na deterministycznej maszynie, przeglądając wszystkie ciągi odpowiedniej długości. Czas będzie wykładniczy od <math>\mathcal{O}{\log n}</math>, czyli wielomianowy od rozmiaru wejścia. Akceptacji należy dokonać, jeżeli wszystkie ciągi losowe prowadzą do akceptacji.


Zasymulowania weryfikatora z dostępem do <math>\displaystyle \mathcal{O}{\log n}</math> bitów świadka też można dokonać w czasie wykładniczym od <math>\displaystyle \mathcal{O}{\log n}</math> na maszynie deterministycznej. Chociaż świadek może mieć długość wielomianową, to nie trzeba ustalać wartości wszystkich jego bitów jednocześnie. Ponieważ odczyty są deterministyczne (mogą co prawda zależeć od poprzednich odczytów, ale nie ma to większego znaczenia), to dla symulacji nie jest istotne, jakie były wartości nieodczytanych bitów. Słowo należy zaakceptować, jeżeli którykolwiek ze sprawdzonych świadków zapewnia akceptację.
Zasymulowania weryfikatora z dostępem do <math>\mathcal{O}{\log n}</math> bitów świadka też można dokonać w czasie wykładniczym od <math>\mathcal{O}{\log n}</math> na maszynie deterministycznej. Chociaż świadek może mieć długość wielomianową, to nie trzeba ustalać wartości wszystkich jego bitów jednocześnie. Ponieważ odczyty są deterministyczne (mogą co prawda zależeć od poprzednich odczytów, ale nie ma to większego znaczenia), to dla symulacji nie jest istotne, jakie były wartości nieodczytanych bitów. Słowo należy zaakceptować, jeżeli którykolwiek ze sprawdzonych świadków zapewnia akceptację.


Równość <math>\displaystyle \cc{NP} =  \cc{PCP}(\log n,1) </math> jest treścią twierdzenia <math>\displaystyle \cc{PCP}</math>. Natomiast jeżeli przyjrzymy się bliżej przedstawionemu dowodowi, że <math>\displaystyle  \cc{PCP}(\log n, 1)  \subseteq \cc{NP}</math>, to zobaczymy, że to samo rozumowanie jest słuszne dla weryfikatora <math>\displaystyle (\braq{\log n, \textnormal{poly}(n) })</math>-ograniczonego.
Równość <math>\mathrm{NP} =  \mathrm{PCP}(\log n,1)</math> jest treścią twierdzenia <math>\mathrm{PCP}</math>. Natomiast jeżeli przyjrzymy się bliżej przedstawionemu dowodowi, że <math>\mathrm{PCP}(\log n, 1)  \subseteq \mathrm{NP}</math>, to zobaczymy, że to samo rozumowanie jest słuszne dla weryfikatora <math>(\mathit{\log n, \text{poly}(n) })</math>-ograniczonego.
</div></div>
</div></div>


}}
==Twierdzenie <math>\mathrm{PCP}</math> a problem MAX<math>3</math>SAT==
 
==Twierdzenie <math>\displaystyle \cc{PCP}</math> a problem MAX<math>\displaystyle 3</math>SAT==


Wprowadzona terminologia <math>\displaystyle \cc{PCP}</math> miała pozwolić na analizę złożoności problemów optymalizacyjnych. Przedstawimy teraz twierdzenie równoważne twierdzeniu <math>\displaystyle \cc{PCP}</math>, które pokazuje, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to nie ma wielomianowego schematu aproksymacji dla problemu MAX<math>\displaystyle 3</math>SAT. Wspomniane twierdzenie brzmi:
Wprowadzona terminologia <math>\mathrm{PCP}</math> miała pozwolić na analizę złożoności problemów optymalizacyjnych. Przedstawimy teraz twierdzenie równoważne twierdzeniu <math>\mathrm{PCP}</math>, które pokazuje, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie ma wielomianowego schematu aproksymacji dla problemu MAX<math>3</math>SAT. Wspomniane twierdzenie brzmi:


{{twierdzenie|3.1||
{{twierdzenie|3.1||
Istnieje stała <math>\displaystyle 0 < \epsilon < 1</math> taka, że dla każdej instancji <math>\displaystyle \phi</math> problemu SAT można skonstruować instancję <math>\displaystyle \psi</math> problemu MAX<math>\displaystyle 3</math>SAT o <math>\displaystyle m</math> klauzulach i następujących własnościach:
Istnieje stała <math>0 < \epsilon < 1</math> taka, że dla każdej instancji <math>\phi</math> problemu SAT można skonstruować instancję <math>\psi</math> problemu MAX<math>3</math>SAT o <math>m</math> klauzulach i następujących własnościach:
* <math>\displaystyle \textnormal{opt} (\psi)  = m</math>, gdy <math>\displaystyle \phi \in </math> SAT,
* <math>\text{opt} (\psi)  = m</math>, gdy <math>\phi \in </math> SAT,
* <math>\displaystyle \textnormal{opt} (\psi)  < \epsilon m</math>, gdy <math>\displaystyle \phi \notin </math> SAT.
* <math>\text{opt} (\psi)  < \epsilon m</math>, gdy <math>\phi \notin </math> SAT.


}}
}}


{{dowod|||
{{dowod|||
Dowód będzie się opierał o twierdzenie <math>\displaystyle \cc{PCP}</math>.
Dowód będzie się opierał o twierdzenie <math>\mathrm{PCP}</math>.


Ponieważ <math>\displaystyle \cc{NP} =  \cc{PCP}(\log n,1) </math>, to niech <math>\displaystyle V</math> będzie weryfikatorem wykorzystującym <math>\displaystyle c\log n</math> bitów losowych i <math>\displaystyle d</math> bitów świadka dla formuły <math>\displaystyle \phi</math> problemu <math>\displaystyle SAT</math> zapisanej na <math>\displaystyle n</math> bitach.
Ponieważ <math>\mathrm{NP} =  \mathrm{PCP}(\log n,1)</math>, to niech <math>V</math> będzie weryfikatorem wykorzystującym <math>c\log n</math> bitów losowych i <math>d</math> bitów świadka dla formuły <math>\phi</math> problemu <math>SAT</math> zapisanej na <math>n</math> bitach.
Dla każdego słowa <math>\displaystyle r</math> długości <math>\displaystyle c\log n</math> jako ciągu bitów losowych, <math>\displaystyle V</math> czyta co najwyżej <math>\displaystyle d</math> bitów świadka. W związku z tym liczbę różnych bitów świadka, które są czytane przy jakimkolwiek ciągu losowym, można ograniczyć przez <math>\displaystyle dn^c</math>. Dla każdego z tych bitów wprowadzamy osobną zmienną. Zbiór tak powstałych zmiennych nazywamy <math>\displaystyle B</math>, a na problem weryfikacji będziemy patrzeć jak na znalezienie wartościowania dla tych zmiennych.
Dla każdego słowa <math>r</math> długości <math>c\log n</math> jako ciągu bitów losowych, <math>V</math> czyta co najwyżej <math>d</math> bitów świadka. W związku z tym liczbę różnych bitów świadka, które są czytane przy jakimkolwiek ciągu losowym, można ograniczyć przez <math>dn^c</math>. Dla każdego z tych bitów wprowadzamy osobną zmienną. Zbiór tak powstałych zmiennych nazywamy <math>B</math>, a na problem weryfikacji będziemy patrzeć jak na znalezienie wartościowania dla tych zmiennych.


Skonstruujemy teraz taką instancję problemu MAX<math>\displaystyle d</math>FSAT, że jeśli <math>\displaystyle \phi</math> jest spełnialna, to istnieje wartościowanie, przy którym wszystkie funkcje dają wynik pozytywny, a jeżeli <math>\displaystyle \phi</math> nie jest spełnialna, to co najwyżej połowa funkcji może jednocześnie dać wynik pozytywny.
Skonstruujemy teraz taką instancję problemu MAX<math>d</math>FSAT, że jeśli <math>\phi</math> jest spełnialna, to istnieje wartościowanie, przy którym wszystkie funkcje dają wynik pozytywny, a jeżeli <math>\phi</math> nie jest spełnialna, to co najwyżej połowa funkcji może jednocześnie dać wynik pozytywny.


Jako zbiór zmiennych wybieramy <math>\displaystyle B</math>. Dla każdego słowa <math>\displaystyle r</math> tworzymy funkcję logiczną <math>\displaystyle f_r</math>, która odpowiada obliczeniu <math>\displaystyle V</math> na <math>\displaystyle \phi</math> przy ciągu losowym <math>\displaystyle r</math>. Przy ustalonym <math>\displaystyle r</math> znamy algorytm <math>\displaystyle V</math>, zawartość taśmy wejściowej i taśmy z ciągiem losowym. Odwołania do świadka tłumaczymy na odwołania do zmiennych z <math>\displaystyle B</math>. Każda z funkcji <math>\displaystyle f_r</math> odwołuje się do co najwyżej <math>\displaystyle d</math> zmiennych. Funkcję <math>\displaystyle f_r</math> możemy zatem skonstruować w czasie wielomianowym, ponieważ mamy gwarancję, że <math>\displaystyle V</math> działa w czasie wielomianowym.
Jako zbiór zmiennych wybieramy <math>B</math>. Dla każdego słowa <math>r</math> tworzymy funkcję logiczną <math>f_r</math>, która odpowiada obliczeniu <math>V</math> na <math>\phi</math> przy ciągu losowym <math>r</math>. Przy ustalonym <math>r</math> znamy algorytm <math>V</math>, zawartość taśmy wejściowej i taśmy z ciągiem losowym. Odwołania do świadka tłumaczymy na odwołania do zmiennych z <math>B</math>. Każda z funkcji <math>f_r</math> odwołuje się do co najwyżej <math>d</math> zmiennych. Funkcję <math>f_r</math> możemy zatem skonstruować w czasie wielomianowym, ponieważ mamy gwarancję, że <math>V</math> działa w czasie wielomianowym.


Możemy zatem skonstruować taką instancję w czasie wielomianowym. Pozostaje zatem pokazać własności rozwiązania optymalnego dla tej instancji. Jeżeli <math>\displaystyle \phi</math> jest spełnialna, to istnieje świadek taki, że weryfikator <math>\displaystyle V</math> akceptuje słowo dla każdego ciągu losowego <math>\displaystyle r</math>. Zatem przy wartościowaniu zmiennych odpowiadającemu temu świadkowi wszystkie funkcje <math>\displaystyle f_r</math> dają wynik pozytywny. Jeżeli natomiast <math>\displaystyle \phi</math> nie jest spełnialna, to dla każdego świadka (a więc przy każdym naborze zmiennych <math>\displaystyle B</math>), dla co najmniej połowy możliwych ciągów <math>\displaystyle r</math> wartość <math>\displaystyle f_r</math> jest negatywna.
Możemy zatem skonstruować taką instancję w czasie wielomianowym. Pozostaje zatem pokazać własności rozwiązania optymalnego dla tej instancji. Jeżeli <math>\phi</math> jest spełnialna, to istnieje świadek taki, że weryfikator <math>V</math> akceptuje słowo dla każdego ciągu losowego <math>r</math>. Zatem przy wartościowaniu zmiennych odpowiadającemu temu świadkowi wszystkie funkcje <math>f_r</math> dają wynik pozytywny. Jeżeli natomiast <math>\phi</math> nie jest spełnialna, to dla każdego świadka (a więc przy każdym naborze zmiennych <math>B</math>), dla co najmniej połowy możliwych ciągów <math>r</math> wartość <math>f_r</math> jest negatywna.


Możemy teraz wykorzystać L-redukcję problemu MAX<math>\displaystyle d</math>FSAT do MAX<math>\displaystyle 3</math>SAT. Jeżeli wszystkie funkcje są jednocześnie spełnialne (a więc kiedy istnieje świadek gwarantujący akceptację <math>\displaystyle V</math>), to redukcja tworzy formułę MAX<math>\displaystyle 3</math>SAT, w której wszystkie klauzule są jednocześnie spełnialne.
Możemy teraz wykorzystać L-redukcję problemu MAX<math>d</math>FSAT do MAX<math>3</math>SAT. Jeżeli wszystkie funkcje są jednocześnie spełnialne (a więc kiedy istnieje świadek gwarantujący akceptację <math>V</math>), to redukcja tworzy formułę MAX<math>3</math>SAT, w której wszystkie klauzule są jednocześnie spełnialne.


Jeżeli natomiast przynajmniej połowa funkcji jest niespełniona, to również stała frakcja klauzul w fromule MAX<math>\displaystyle 3</math>SAT musi pozostać niespełniona. Wystarczy przypomnieć, że liczba klauzul odpowiadających bramkom wyjściowym była liniowa względem ilości wszystkich innych bramek.
Jeżeli natomiast przynajmniej połowa funkcji jest niespełniona, to również stała frakcja klauzul w fromule MAX<math>3</math>SAT musi pozostać niespełniona. Wystarczy przypomnieć, że liczba klauzul odpowiadających bramkom wyjściowym była liniowa względem ilości wszystkich innych bramek.
}}
}}


{{wniosek|3.2||
{{wniosek|3.2||
O ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to istnieje stała <math>\displaystyle 0 < \epsilon < 1</math> taka, że nie jest możliwa <math>\displaystyle \epsilon</math>-aproksymacja problemu MAX<math>\displaystyle 3</math>SAT. Nie istnieje zatem też PTAS dla tego problemu.
O ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to istnieje stała <math>0 < \epsilon < 1</math> taka, że nie jest możliwa <math>\epsilon</math>-aproksymacja problemu MAX<math>3</math>SAT. Nie istnieje zatem też PTAS dla tego problemu.
}}
}}


Wniosek ten ma kluczowe znaczenie dla klasy <math>\displaystyle \cc{MAXSNP}</math> i pokazuje, że rzeczywiście twierdzenie <math>\displaystyle \cc{PCP}</math> jest ważnym narzędziem w badaniu aproksymacji.
Wniosek ten ma kluczowe znaczenie dla klasy <math>\mathrm{MAXSNP}</math> i pokazuje, że rzeczywiście twierdzenie <math>\mathrm{PCP}</math> jest ważnym narzędziem w badaniu aproksymacji.


Teraz pokażemy, że przy wykorzystaniu właśnie udowodnionego twierdzenia można dość łatwo udowodnić twierdzenie <math>\displaystyle \cc{PCP}</math>. W ten sposób jeszcze mocniej potwierdzimy związki twiedzenia <math>\displaystyle \cc{PCP}</math> z teorią algorytmów aproksymacyjnych.
Teraz pokażemy, że przy wykorzystaniu właśnie udowodnionego twierdzenia można dość łatwo udowodnić twierdzenie <math>\mathrm{PCP}</math>. W ten sposób jeszcze mocniej potwierdzimy związki twiedzenia <math>\mathrm{PCP}</math> z teorią algorytmów aproksymacyjnych.


{{dowod|||
{{dowod|||
Chcemy pokazać, że o ile istnieje stała <math>\displaystyle \epsilon</math> taka, jak w poprzednim twierdzeniu, to można skonstruować odpowiedni weryfikator dla każdego języka z <math>\displaystyle \cc{NP}</math>.
Chcemy pokazać, że o ile istnieje stała <math>\epsilon</math> taka, jak w poprzednim twierdzeniu, to można skonstruować odpowiedni weryfikator dla każdego języka z <math>\mathrm{NP}</math>.


Skonstruujemy <math>\displaystyle (\braq{\log n, 1})</math>-ograniczony weryfikator dla języka SAT. Dowód, że pociąga to za sobą istnienie takich weryfikatorów dla innych języków w <math>\displaystyle \cc{NP}</math>, pozostawiamy jako ćwiczenie.
Skonstruujemy <math>(\mathit{\log n, 1})</math>-ograniczony weryfikator dla języka SAT. Dowód, że pociąga to za sobą istnienie takich weryfikatorów dla innych języków w <math>\mathrm{NP}</math>, pozostawiamy jako ćwiczenie.


Weryfikator będzie działał w następujący sposób:
Weryfikator będzie działał w następujący sposób:


  [Weryfikator dla SAT]
  [Weryfikator dla SAT]
  1. Wczytaj formułę logiczną <math>\displaystyle \phi</math>.
  1. Wczytaj formułę logiczną <math>\phi</math>.
  2. Skonstruuj instancję <math>\displaystyle \psi</math> problemu MAX<math>\displaystyle 3</math>SAT, taką jak w poprzednim twierdzeniu.
  2. Skonstruuj instancję <math>\psi</math> problemu MAX<math>3</math>SAT, taką jak w poprzednim twierdzeniu.
  3. Potraktuj świadka jako wartościowanie zmiennych występujących w <math>\displaystyle \psi</math>.
  3. Potraktuj świadka jako wartościowanie zmiennych występujących w <math>\psi</math>.
  4. Użyj bitów losowych do wyznaczenia <math>\displaystyle k</math> klauzul, których wartość zostanie sprawdzona.
  4. Użyj bitów losowych do wyznaczenia <math>k</math> klauzul, których wartość zostanie sprawdzona.
  5. Zaakceptuj <math>\displaystyle \phi</math>, jeżeli wszystkie sprawdzenia wypadły pozytywnie.<br>  W przeciwnym przypadku odrzuć formułę <math>\displaystyle \phi</math>.
  5. Zaakceptuj <math>\phi</math>, jeżeli wszystkie sprawdzenia wypadły pozytywnie.<br>  W przeciwnym przypadku odrzuć formułę <math>\phi</math>.


Stałą <math>\displaystyle k</math> dobieramy tak, żeby <math>\displaystyle \epsilon^k < \frac{1}{2}</math>. Zauważmy, że nowy weryfikator korzysta z <math>\displaystyle k \log m</math> bitów losowych do wyznaczenia numerów sprawdzanych klauzul i <math>\displaystyle 3k</math> bitów świadka. Jeżeli <math>\displaystyle \phi</math> jest spełnialna, to wszystkie klauzule <math>\displaystyle \psi</math> mogą być jednocześnie spełnione i wartościowanie realizujące optimum jest świadkiem gwarantującym zaakceptowanie <math>\displaystyle \phi</math>. Z kolei jeżeli <math>\displaystyle \phi</math> nie jest spełnialna, to losowo wybrana klauzula jest wartościowana pozytywnie z prawdopodobieństwem mniejszym od <math>\displaystyle \epsilon</math>. W związku z tym dokonanie <math>\displaystyle k</math> sprawdzeń gwarantuje, że formuła <math>\displaystyle \phi</math> zostanie zaakceptowana z prawdopodobieństwem mniejszym od <math>\displaystyle \frac{1}{2}</math>.
Stałą <math>k</math> dobieramy tak, żeby <math>\epsilon^k < \frac{1}{2}</math>. Zauważmy, że nowy weryfikator korzysta z <math>k \log m</math> bitów losowych do wyznaczenia numerów sprawdzanych klauzul i <math>3k</math> bitów świadka. Jeżeli <math>\phi</math> jest spełnialna, to wszystkie klauzule <math>\psi</math> mogą być jednocześnie spełnione i wartościowanie realizujące optimum jest świadkiem gwarantującym zaakceptowanie <math>\phi</math>. Z kolei jeżeli <math>\phi</math> nie jest spełnialna, to losowo wybrana klauzula jest wartościowana pozytywnie z prawdopodobieństwem mniejszym od <math>\epsilon</math>. W związku z tym dokonanie <math>k</math> sprawdzeń gwarantuje, że formuła <math>\phi</math> zostanie zaakceptowana z prawdopodobieństwem mniejszym od <math>\frac{1}{2}</math>.


Dowiedliśmy zatem, że skonstruowany weryfikator rozpoznaje język SAT.
Dowiedliśmy zatem, że skonstruowany weryfikator rozpoznaje język SAT.
Linia 163: Linia 158:
Weryfikatory dla innych języków.
Weryfikatory dla innych języków.


Pokaż, że jeżeli istnieje <math>\displaystyle (\braq{\log n, 1})</math>-ograniczony weryfikator dla języka SAT, to można skonstruować
Pokaż, że jeżeli istnieje <math>(\mathit{\log n, 1})</math>-ograniczony weryfikator dla języka SAT, to można skonstruować
<math>\displaystyle (\braq{\log n, 1})</math>-ograniczony weryfikator dla dowolnego języka z klasy <math>\displaystyle \cc{NP}</math>.
<math>(\mathit{\log n, 1})</math>-ograniczony weryfikator dla dowolnego języka z klasy <math>\mathrm{NP}</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">   
Skorzystaj z tego, że SAT jest <math>\displaystyle \cc{NP}</math>-zupełny.
Skorzystaj z tego, że SAT jest <math>\mathrm{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">   
Niech <math>\displaystyle V</math> będzie weryfikatorem dla SAT, a <math>\displaystyle L</math> językiem z klasy <math>\displaystyle \cc{NP}</math>. Możemy skonstruować weryfikator dla języka <math>\displaystyle L</math> w bardzo prosty sposób:
Niech <math>V</math> będzie weryfikatorem dla SAT, a <math>L</math> językiem z klasy <math>\mathrm{NP}</math>. Możemy skonstruować weryfikator dla języka <math>L</math> w bardzo prosty sposób:


  [Weryfikator dla <math>\displaystyle L</math>]
  [Weryfikator dla <math>L</math>]
  1. Wczytaj słowo <math>\displaystyle x</math>.
  1. Wczytaj słowo <math>x</math>.
  2. Użyj redukcji logarytmicznej problemu <math>\displaystyle L</math> do SAT. Otrzymasz formułę <math>\displaystyle \phi</math>.
  2. Użyj redukcji logarytmicznej problemu <math>L</math> do SAT. Otrzymasz formułę <math>\phi</math>.
  3. Użyj weryfikatora <math>\displaystyle V</math> na formule <math>\displaystyle \phi</math>.
  3. Użyj weryfikatora <math>V</math> na formule <math>\phi</math>.
  4. Zaakceptuj słowo <math>\displaystyle x</math>, jeżeli <math>\displaystyle V</math> zaakceptował <math>\displaystyle \phi</math>.
  4. Zaakceptuj słowo <math>x</math>, jeżeli <math>V</math> zaakceptował <math>\phi</math>.


Skonstruowany weryfikator działa w czasie wielomianowym, używając dokładnie tylu samu bitów losowych i bitów świadka co <math>\displaystyle V</math>. Są to wielkości <math>\displaystyle (\braq{\log n, 1})</math>-ograniczone od rozmiaru <math>\displaystyle \phi</math>. Ten z kolei jest wielomianowy od <math>\displaystyle |\size{x}|</math>, więc są one też <math>\displaystyle (\braq{\log n, 1})</math>-ograniczone względem <math>\displaystyle |\size{x}|</math>.
Skonstruowany weryfikator działa w czasie wielomianowym, używając dokładnie tylu samu bitów losowych i bitów świadka co <math>V</math>. Są to wielkości <math>(\mathit{\log n, 1})</math>-ograniczone od rozmiaru <math>\phi</math>. Ten z kolei jest wielomianowy od <math>|\mathit{x}|</math>, więc są one też <math>(\mathit{\log n, 1})</math>-ograniczone względem <math>|\mathit{x}|</math>.


Jeżeli <math>\displaystyle x \in L</math>, to <math>\displaystyle \phi \in </math> SAT  i istnieje świadek gwarantujący akceptację. Jeżeli natomiast <math>\displaystyle c \notin L</math>, to <math>\displaystyle \phi \notin </math> SAT  i dla żadnego świadka prawdopodobieństwo akceptacji nie przekracza <math>\displaystyle \frac{1}{2}</math>.
Jeżeli <math>x \in L</math>, to <math>\phi \in </math> SAT  i istnieje świadek gwarantujący akceptację. Jeżeli natomiast <math>c \notin L</math>, to <math>\phi \notin </math> SAT  i dla żadnego świadka prawdopodobieństwo akceptacji nie przekracza <math>\frac{1}{2}</math>.
</div></div>
</div></div>


}}
 


{{cwiczenie|3.6||
{{cwiczenie|3.6||
PTAS dla problemów <math>\displaystyle \cc{MAXSNP}</math>-trudnych.
PTAS dla problemów <math>\mathrm{MAXSNP}</math>-trudnych.
 
Pokaż, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to dla żadnego z problemów <math>\displaystyle \cc{MAXSNP}</math>-trudnych (w sensie L-redukcji) nie istnieje algorytm PTAS.


Pokaż, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to dla żadnego z problemów <math>\mathrm{MAXSNP}</math>-trudnych (w sensie L-redukcji) nie istnieje algorytm PTAS.
}}
<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">   
Wiesz już, że korzystając z twierdzenia <math>\displaystyle \cc{PCP}</math>, można dowieść, że dla problemu MAX<math>\displaystyle 3</math>SAT nie istnieje PTAS.
Wiesz już, że korzystając z twierdzenia <math>\mathrm{PCP}</math>, można dowieść, że dla problemu MAX<math>3</math>SAT nie istnieje PTAS.
</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">   
Udowodniliśmy, że dla problemu MAX<math>\displaystyle 3</math>SAT nie może istnieć algorytm PTAS, o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>. Gdyby dla jakiegoś problemu <math>\displaystyle \cc{MAXSNP}</math>-trudnego <math>\displaystyle A</math> istniał PTAS, to korzystając z tego, że wielomianowe schematy aproksymacji przenoszą się przez L-redukcje i tego, że MAX<math>\displaystyle 3</math>SAT L-redukuje się do <math>\displaystyle A</math>, otrzymalibyśmy taki schemat dla problemu MAX<math>\displaystyle 3</math>SAT.
Udowodniliśmy, że dla problemu MAX<math>3</math>SAT nie może istnieć algorytm PTAS, o ile <math>\mathrm{P} \neq \mathrm{NP}</math>. Gdyby dla jakiegoś problemu <math>\mathrm{MAXSNP}</math>-trudnego <math>A</math> istniał PTAS, to korzystając z tego, że wielomianowe schematy aproksymacji przenoszą się przez L-redukcje i tego, że MAX<math>3</math>SAT L-redukuje się do <math>A</math>, otrzymalibyśmy taki schemat dla problemu MAX<math>3</math>SAT.
</div></div>
</div></div>


}}
==Inne problemy <math>\mathrm{MAXSNP}</math>-zupełne==
 
==Inne problemy <math>\displaystyle \cc{MAXSNP}</math>-zupełne==


Pokazaliśmy, że dla żadnego z problemów <math>\displaystyle \cc{MAXSNP}</math>-trudnych nie może istnieć wielomianowy schemat aproksymacji. Nie znamy jednak jeszcze zbyt wielu takich problemów. Pokażemy teraz o kilku problemach, że są <math>\displaystyle \cc{MAXSNP}</math>-zupełne. Pozwoli nam to nie tylko stwierdzić, że nie ma dla nich algorytmów PTAS, ale także da nam narzędzia do stwierdzenia o wielu innych problemach, że są <math>\displaystyle \cc{MAXSNP}</math>-trudne.
Pokazaliśmy, że dla żadnego z problemów <math>\mathrm{MAXSNP}</math>-trudnych nie może istnieć wielomianowy schemat aproksymacji. Nie znamy jednak jeszcze zbyt wielu takich problemów. Pokażemy teraz o kilku problemach, że są <math>\mathrm{MAXSNP}</math>-zupełne. Pozwoli nam to nie tylko stwierdzić, że nie ma dla nich algorytmów PTAS, ale także da nam narzędzia do stwierdzenia o wielu innych problemach, że są <math>\mathrm{MAXSNP}</math>-trudne.


===<math>\displaystyle k</math>OCCUR MAX<math>\displaystyle l</math>SAT===
===<math>k</math>OCCUR MAX<math>l</math>SAT===


Pewną bazową rodziną problemów będą problemy <math>\displaystyle k</math>OCCUR MAX<math>\displaystyle l</math>SAT. Są to wersje problemu MAX<math>\displaystyle l</math>SAT, w których liczba wszystkich wystąpień każdej pojedynczej zmiennej jest ograniczona przez <math>\displaystyle k</math>.
Pewną bazową rodziną problemów będą problemy <math>k</math>OCCUR MAX<math>l</math>SAT. Są to wersje problemu MAX<math>l</math>SAT, w których liczba wszystkich wystąpień każdej pojedynczej zmiennej jest ograniczona przez <math>k</math>.


Bardzo łatwo można dowieść, że problem <math>\displaystyle 3</math>OCCUR <math>\displaystyle 3</math>SAT jest <math>\displaystyle \cc{NP}</math>-zupełny. Zredukujemy problem <math>\displaystyle 3</math>SAT. Jeżeli w formule <math>\displaystyle \phi</math> jakaś zmienna <math>\displaystyle x</math> występuje wielokrotnie w formule, powiedzmy <math>\displaystyle k</math> razy, to możemy stworzyć <math>\displaystyle k</math> nowych zmiennych: <math>\displaystyle x_1,x_2,\ldots,x_k</math>. Każde wystąpienie zmiennej <math>\displaystyle x</math> zamienić na wystąpienie innej zmiennej <math>\displaystyle x_i</math>, a następnie dodać gadżet, który zapewni, że każda ze zmiennych <math>\displaystyle x_i</math> musi być wartościowana tak samo. Takim gadżetem może być ciąg klauzul:
Bardzo łatwo można dowieść, że problem <math>3</math>OCCUR <math>3</math>SAT jest <math>\mathrm{NP}</math>-zupełny. Zredukujemy problem <math>3</math>SAT. Jeżeli w formule <math>\phi</math> jakaś zmienna <math>x</math> występuje wielokrotnie w formule, powiedzmy <math>k</math> razy, to możemy stworzyć <math>k</math> nowych zmiennych: <math>x_1,x_2,\ldots,x_k</math>. Każde wystąpienie zmiennej <math>x</math> zamienić na wystąpienie innej zmiennej <math>x_i</math>, a następnie dodać gadżet, który zapewni, że każda ze zmiennych <math>x_i</math> musi być wartościowana tak samo. Takim gadżetem może być ciąg klauzul:


<center><math>\displaystyle (\braq{x_1 \vee \neg x_2}) \wedge (\braq{x_2 \vee \neg x_3}) \wedge \ldots \wedge (\braq{x_{k-1} \vee \neg x_k}) \wedge (\braq{x_k \vee \neg x_1})\textnormal{.}
<center><math>(\mathit{x_1 \vee \neg x_2}) \wedge (\mathit{x_2 \vee \neg x_3}) \wedge \ldots \wedge (\mathit{x_{k-1} \vee \neg x_k}) \wedge (\mathit{x_k \vee \neg x_1})\text{.}
</math></center>
</math></center>


Okazuje się jednak, że użycie tego konkretnego gadżetu nie zapewnia L-redukcji. Wartościowanie nowych zmiennych w optymalnym rozwiązaniu problemu maksymalizacji spełnialności wcale nie musi być zgodne na zmiennych <math>\displaystyle x_1,x_2,\ldots,x_k</math>.
Okazuje się jednak, że użycie tego konkretnego gadżetu nie zapewnia L-redukcji. Wartościowanie nowych zmiennych w optymalnym rozwiązaniu problemu maksymalizacji spełnialności wcale nie musi być zgodne na zmiennych <math>x_1,x_2,\ldots,x_k</math>.


Żeby skonstruować lepszy gadżet, użyjemy specjalnych grafów-ekspanderów.
Żeby skonstruować lepszy gadżet, użyjemy specjalnych grafów-ekspanderów.


{{definicja|4.1||
{{definicja|4.1||
Graf <math>\displaystyle G=(\braq{V,E})</math> nazywamy {ekspanderem}, jeśli wszystkie jego wierzchołki mają ten sam stopień i dla dowolnego niepustego podzbioru <math>\displaystyle S \subsetneq V</math> zachodzi:
Graf <math>G=(\mathit{V,E})</math> nazywamy {ekspanderem}, jeśli wszystkie jego wierzchołki mają ten sam stopień i dla dowolnego niepustego podzbioru <math>S \subsetneq V</math> zachodzi:


<center><math>\displaystyle |\size{ E(S,V\setminus S) }| >  \min(|\size{S}|,|\size{V\setminus S}|) </math> , </center>
<center><math>|\mathit{ E(S,V\setminus S) }| >  \min(|\mathit{S}|,|\mathit{V\setminus S}|) </math> , </center>


gdzie <math>\displaystyle  E(A,B) </math> jest zbiorem krawędzi o jednym końcu w <math>\displaystyle A</math>, a drugim w <math>\displaystyle B</math>.
gdzie <math>E(A,B)</math> jest zbiorem krawędzi o jednym końcu w <math>A</math>, a drugim w <math>B</math>.
}}
}}


Ekspandery mają bardzo interesujące zastosowania w kilku dziedzinach współczesnej matematyki i informatyki. My wykorzystamy ich własności do skonstruowania odpowiedniego gadżetu zapewniającego zgodne wartościowanie zmiennych <math>\displaystyle x_1,x_2,\ldots,x_k</math>.
Ekspandery mają bardzo interesujące zastosowania w kilku dziedzinach współczesnej matematyki i informatyki. My wykorzystamy ich własności do skonstruowania odpowiedniego gadżetu zapewniającego zgodne wartościowanie zmiennych <math>x_1,x_2,\ldots,x_k</math>.


Przypuśćmy, że znamy algorytm, który dla zadanej liczby <math>\displaystyle n</math> wygeneruje ekspander o <math>\displaystyle n</math> wierzchołkach, z których każdy ma stopień <math>\displaystyle d</math>, gdzie <math>\displaystyle d</math> jest pewną stałą. Używając tego algorytmu, pokażemy L-redukcję problemu MAX<math>\displaystyle 3</math>SAT do <math>\displaystyle (\braq{2d+1})</math>OCCUR MAX<math>\displaystyle 3</math>SAT.
Przypuśćmy, że znamy algorytm, który dla zadanej liczby <math>n</math> wygeneruje ekspander o <math>n</math> wierzchołkach, z których każdy ma stopień <math>d</math>, gdzie <math>d</math> jest pewną stałą. Używając tego algorytmu, pokażemy L-redukcję problemu MAX<math>3</math>SAT do <math>(\mathit{2d+1})</math>OCCUR MAX<math>3</math>SAT.


{{twierdzenie|4.2||
{{twierdzenie|4.2||
<math>\displaystyle (\braq{2d+1})</math>OCCUR MAX<math>\displaystyle 3</math>SAT jest <math>\displaystyle \cc{MAXSNP}</math>-zupełny.
<math>(\mathit{2d+1})</math>OCCUR MAX<math>3</math>SAT jest <math>\mathrm{MAXSNP}</math>-zupełny.
}}
}}


{{dowod|||
{{dowod|||
Redukcja przebiega tak jak poprzednio. Dla zmiennej <math>\displaystyle x</math> występującej <math>\displaystyle k</math> razy w formule <math>\displaystyle \phi</math> tworzymy <math>\displaystyle k</math> zmiennych <math>\displaystyle x_1,x_2,\ldots,x_k</math> dla nowej formuły <math>\displaystyle \psi</math>. Następnie przepisujemy wszystkie klauzule z <math>\displaystyle \phi</math> do <math>\displaystyle \psi</math>, zamieniając każde wystąpienie <math>\displaystyle x</math> na inną ze zmiennych <math>\displaystyle x_i</math>.
Redukcja przebiega tak jak poprzednio. Dla zmiennej <math>x</math> występującej <math>k</math> razy w formule <math>\phi</math> tworzymy <math>k</math> zmiennych <math>x_1,x_2,\ldots,x_k</math> dla nowej formuły <math>\psi</math>. Następnie przepisujemy wszystkie klauzule z <math>\phi</math> do <math>\psi</math>, zamieniając każde wystąpienie <math>x</math> na inną ze zmiennych <math>x_i</math>.


Potem konstruujemy <math>\displaystyle k</math>-elementowy ekspander <math>\displaystyle F_x</math> o stopniu wierzchołków <math>\displaystyle d</math>. Etykietujemy wierzchołki grafu <math>\displaystyle F_x</math> zmiennymi <math>\displaystyle V_x=\set{x_1,x_2,\ldots,x_k}</math>. Dla każdej krawędzi <math>\displaystyle x_ix_j</math> w grafie <math>\displaystyle F_x</math> dodajemy do formuły <math>\displaystyle \psi</math> klauzule <math>\displaystyle (\braq{x_i \vee \neg x_j})</math> i <math>\displaystyle (\braq{\neg x_i \vee x_j})</math>.
Potem konstruujemy <math>k</math>-elementowy ekspander <math>F_x</math> o stopniu wierzchołków <math>d</math>. Etykietujemy wierzchołki grafu <math>F_x</math> zmiennymi <math>V_x={x_1,x_2,\ldots,x_k}</math>. Dla każdej krawędzi <math>x_ix_j</math> w grafie <math>F_x</math> dodajemy do formuły <math>\psi</math> klauzule <math>(\mathit{x_i \vee \neg x_j})</math> i <math>(\mathit{\neg x_i \vee x_j})</math>.


Do formuły <math>\displaystyle \psi</math> dodaliśmy <math>\displaystyle \frac{kd}{2}</math> nowych klauzul. Zauważmy, że jeżeli wartościowanie zmiennych <math>\displaystyle x_1,x_2,\ldots,x_k</math> jest zgodne, to wszystkie dodane klauzule są spełnione. Jeżeli natomiast zbiór <math>\displaystyle S \subseteq V_x</math> jest wartościowany odwrotnie niż <math>\displaystyle V_x \setminus S</math>, to własności ekspanedera gwarantują, że co najmniej <math>\displaystyle  \min(|\size{S}|,|\size{V_x\setminus S}|) +1</math> klauzul jest niespełnionych.
Do formuły <math>\psi</math> dodaliśmy <math>\frac{kd}{2}</math> nowych klauzul. Zauważmy, że jeżeli wartościowanie zmiennych <math>x_1,x_2,\ldots,x_k</math> jest zgodne, to wszystkie dodane klauzule są spełnione. Jeżeli natomiast zbiór <math>S \subseteq V_x</math> jest wartościowany odwrotnie niż <math>V_x \setminus S</math>, to własności ekspanedera gwarantują, że co najmniej <math>\min(|\mathit{S}|,|\mathit{V_x\setminus S}|) +1</math> klauzul jest niespełnionych.


Zauważmy, że skonstruowana formuła <math>\displaystyle \psi</math> jest formułą problemu <math>\displaystyle (\braq{2d+1})</math>OCCUR MAX<math>\displaystyle 3</math>SAT. Każda ze zmiennych występuje dokładnie w <math>\displaystyle 2d</math> klauzulach odpowiadających krawędziom ekspandera i w jednej klazuli pochodzącej z formuły <math>\displaystyle \phi</math>.
Zauważmy, że skonstruowana formuła <math>\psi</math> jest formułą problemu <math>(\mathit{2d+1})</math>OCCUR MAX<math>3</math>SAT. Każda ze zmiennych występuje dokładnie w <math>2d</math> klauzulach odpowiadających krawędziom ekspandera i w jednej klazuli pochodzącej z formuły <math>\phi</math>.


Pokażemy teraz, że każde rozwiązanie optymalne dla formuły <math>\displaystyle \psi</math> musi być zgodne na zmiennych <math>\displaystyle x_1,x_2,\ldots,x_k</math>. Weźmy zatem jakieś rozwiązanie optymalne, które przyporządkowuje różne wartości zmiennym <math>\displaystyle x_1,x_2,\ldots,x_k</math>. Niech <math>\displaystyle S</math> będzie mniejszym z podzbiorów, który jest wartościowany zgodnie. Zastanówmy się co by się stało, gdybyśmy odwrócili wartościowanie zmiennych z <math>\displaystyle S</math>? Zmienne te występują w <math>\displaystyle |\size{S}|</math> klauzulach z formuły <math>\displaystyle \phi</math>, które po tej zamianie mogłyby przestać być spełnione. Stracilibyśmy zatem najwyżej <math>\displaystyle |\size{S}|</math> spełnionych klauzul. Z drugiej jednak strony zyskalibyśmy <math>\displaystyle |\size{S}|+1</math> spełnionych klauzul opisujących krawędzie ekspandera. Zatem nowe rozwiązanie spełniałoby co najmniej jedną kaluzulę więcej niż poprzednie, przecząc optymalności.
Pokażemy teraz, że każde rozwiązanie optymalne dla formuły <math>\psi</math> musi być zgodne na zmiennych <math>x_1,x_2,\ldots,x_k</math>. Weźmy zatem jakieś rozwiązanie optymalne, które przyporządkowuje różne wartości zmiennym <math>x_1,x_2,\ldots,x_k</math>. Niech <math>S</math> będzie mniejszym z podzbiorów, który jest wartościowany zgodnie. Zastanówmy się co by się stało, gdybyśmy odwrócili wartościowanie zmiennych z <math>S</math>? Zmienne te występują w <math>|\mathit{S}|</math> klauzulach z formuły <math>\phi</math>, które po tej zamianie mogłyby przestać być spełnione. Stracilibyśmy zatem najwyżej <math>|\mathit{S}|</math> spełnionych klauzul. Z drugiej jednak strony zyskalibyśmy <math>|\mathit{S}|+1</math> spełnionych klauzul opisujących krawędzie ekspandera. Zatem nowe rozwiązanie spełniałoby co najmniej jedną kaluzulę więcej niż poprzednie, przecząc optymalności.


Jeżeli w formule <math>\displaystyle \phi</math> było <math>\displaystyle m</math> klauzul, to było co najwyżej <math>\displaystyle 3m</math> wystąpień zmiennych, a w formule <math>\displaystyle \psi</math> w związku z tym jest co najwyżej <math>\displaystyle (\braq{2d+1})3m</math> klauzul. Przypomnijmy, że optimum dla problemu MAX<math>\displaystyle 3</math>SAT wynosi co najmniej <math>\displaystyle \frac{m}{2}</math> i możemy w związku z tym ustalić współczynnik <math>\displaystyle \alpha</math> dla L-redukcji na <math>\displaystyle (2d+1)6</math>.
Jeżeli w formule <math>\phi</math> było <math>m</math> klauzul, to było co najwyżej <math>3m</math> wystąpień zmiennych, a w formule <math>\psi</math> w związku z tym jest co najwyżej <math>(\mathit{2d+1})3m</math> klauzul. Przypomnijmy, że optimum dla problemu MAX<math>3</math>SAT wynosi co najmniej <math>\frac{m}{2}</math> i możemy w związku z tym ustalić współczynnik <math>\alpha</math> dla L-redukcji na <math>(2d+1)6</math>.


Postaramy się teraz ustalić współczynnik <math>\displaystyle \beta</math>, aby zakończyć dowód. Możemy założyć, że w rozwiązaniu dla formuły <math>\displaystyle \psi</math> każda grupa zmiennych <math>\displaystyle x_1,x_2,\ldots,x_k</math> jest zgodnie wartościowana. Gdyby było przeciwnie, to na podstawie przeprowadzonego rozumowania można by takie rozwiązanie łatwo poprawić. Ta "poprawka" może być realizowana przez funkcję przeprowadzającą rozwiązania. Łatwo zauważyć, że w tej sytuacji ilość niespełnionych klauzul w formule <math>\displaystyle \psi</math> jest dokładnie równa liczbie niespełnionych klauzul przy wartościowaniu wyznaczonym dla formuły <math>\displaystyle \phi</math>. Współczynnik <math>\displaystyle \beta</math> wynosi zatem <math>\displaystyle 1</math>.
Postaramy się teraz ustalić współczynnik <math>\beta</math>, aby zakończyć dowód. Możemy założyć, że w rozwiązaniu dla formuły <math>\psi</math> każda grupa zmiennych <math>x_1,x_2,\ldots,x_k</math> jest zgodnie wartościowana. Gdyby było przeciwnie, to na podstawie przeprowadzonego rozumowania można by takie rozwiązanie łatwo poprawić. Ta "poprawka" może być realizowana przez funkcję przeprowadzającą rozwiązania. Łatwo zauważyć, że w tej sytuacji ilość niespełnionych klauzul w formule <math>\psi</math> jest dokładnie równa liczbie niespełnionych klauzul przy wartościowaniu wyznaczonym dla formuły <math>\phi</math>. Współczynnik <math>\beta</math> wynosi zatem <math>1</math>.


Pokazaliśmy L-redukcję <math>\displaystyle \cc{MAXSNP}</math>-zupełnego problemu MAX<math>\displaystyle 3</math>SAT do <math>\displaystyle (\braq{2d+1})</math>OCCUR MAX<math>\displaystyle 3</math>SAT, co pozwala nam stwierdzić, że ten drugi problem również jest <math>\displaystyle \cc{MAXSNP}</math>-zupełny.
Pokazaliśmy L-redukcję <math>\mathrm{MAXSNP}</math>-zupełnego problemu MAX<math>3</math>SAT do <math>(\mathit{2d+1})</math>OCCUR MAX<math>3</math>SAT, co pozwala nam stwierdzić, że ten drugi problem również jest <math>\mathrm{MAXSNP}</math>-zupełny.
}}
}}


Linia 256: Linia 249:
Do działania zdefiniowanej L-redukcji jest potrzebny algorytm generowania dowolnie dużych ekspanderów o ustalonym stopniu wierzchołków. Są znane algorytmy, które realizują to zadanie, ale ich opis wykracza poza zakres tego kursu.
Do działania zdefiniowanej L-redukcji jest potrzebny algorytm generowania dowolnie dużych ekspanderów o ustalonym stopniu wierzchołków. Są znane algorytmy, które realizują to zadanie, ale ich opis wykracza poza zakres tego kursu.


Podobnymi metodami, korzystając z grafów o właściwościach bardzo podobnych do ekspanderów, można pokazać, że już problem <math>\displaystyle 3</math>OCCUR MAX<math>\displaystyle 3</math>SAT jest <math>\displaystyle \cc{MAXSNP}</math>-zupełny. Skorzystamy z tego faktu, nie przedstawiając szczegółowego dowodu.
Podobnymi metodami, korzystając z grafów o właściwościach bardzo podobnych do ekspanderów, można pokazać, że już problem <math>3</math>OCCUR MAX<math>3</math>SAT jest <math>\mathrm{MAXSNP}</math>-zupełny. Skorzystamy z tego faktu, nie przedstawiając szczegółowego dowodu.


Wykorzystamy teraz problem <math>\displaystyle 3</math>OCCUR MAX<math>\displaystyle 3</math>SAT do pokazania <math>\displaystyle \cc{MAXSNP}</math>-zupełności kilku problemów.
Wykorzystamy teraz problem <math>3</math>OCCUR MAX<math>3</math>SAT do pokazania <math>\mathrm{MAXSNP}</math>-zupełności kilku problemów.


{{lemat|4.3||
{{lemat|4.3||
Problemy <math>\displaystyle 4</math>-NODE COVER i <math>\displaystyle 4</math>-INDEPENDENT SET są <math>\displaystyle \cc{MAXSNP}</math>-zupełne.
Problemy <math>4</math>-NODE COVER i <math>4</math>-INDEPENDENT SET są <math>\mathrm{MAXSNP}</math>-zupełne.
}}
}}


{{dowod|||
{{dowod|||
Przypomnijmy, że już pokazaliśmy, że problemy <math>\displaystyle k</math>-NODE COVER i <math>\displaystyle k</math>-INDEPENDENT SET należą do klasy <math>\displaystyle \cc{MAXSNP}</math>. Teraz wystarczy przypomnieć sobie zwykłą redukcję problemu <math>\displaystyle 3</math>SAT do NODE COVER, która tworzy trójkąt dla każdej klauzuli i łączy krawędziami przeciwne literały. Ta redukcja w przypadku formuły <math>\displaystyle 3</math>OCCUR MAX<math>\displaystyle 3</math>SAT stworzy graf, w którym stopień wierzchołka będzie ograniczony przez <math>\displaystyle 4</math>.
Przypomnijmy, że już pokazaliśmy, że problemy <math>k</math>-NODE COVER i <math>k</math>-INDEPENDENT SET należą do klasy <math>\mathrm{MAXSNP}</math>. Teraz wystarczy przypomnieć sobie zwykłą redukcję problemu <math>3</math>SAT do NODE COVER, która tworzy trójkąt dla każdej klauzuli i łączy krawędziami przeciwne literały. Ta redukcja w przypadku formuły <math>3</math>OCCUR MAX<math>3</math>SAT stworzy graf, w którym stopień wierzchołka będzie ograniczony przez <math>4</math>.


Łatwo uzasadnić, że ta redukcja jest L-redukcją, gdyż przynajmniej połowa z <math>\displaystyle m</math> klauzul jest spełnialna, a rozmiar minimalnego pokrycia wierzchołkowego jest ograniczony przez liczbę wierzchołków równą <math>\displaystyle 3m</math>. Współczynnik <math>\displaystyle \beta</math> jak zwykle wynosi <math>\displaystyle 1</math>.
Łatwo uzasadnić, że ta redukcja jest L-redukcją, gdyż przynajmniej połowa z <math>m</math> klauzul jest spełnialna, a rozmiar minimalnego pokrycia wierzchołkowego jest ograniczony przez liczbę wierzchołków równą <math>3m</math>. Współczynnik <math>\beta</math> jak zwykle wynosi <math>1</math>.


Uzasadniliśmy, że problem <math>\displaystyle 4</math>-NODE COVER jest <math>\displaystyle \cc{MAXSNP}</math>-zupełny. Znamy już L-redukcję <math>\displaystyle k</math>-NODE COVER do <math>\displaystyle k</math>-INDEPENDENT SET. Pozwala nam to stwierdzić <math>\displaystyle \cc{MAXSNP}</math>-zupełność problemu <math>\displaystyle 4</math>-INDEPENDENT SET.
Uzasadniliśmy, że problem <math>4</math>-NODE COVER jest <math>\mathrm{MAXSNP}</math>-zupełny. Znamy już L-redukcję <math>k</math>-NODE COVER do <math>k</math>-INDEPENDENT SET. Pozwala nam to stwierdzić <math>\mathrm{MAXSNP}</math>-zupełność problemu <math>4</math>-INDEPENDENT SET.
}}
}}


{{wniosek|4.4||
{{wniosek|4.4||
Problemy NODE COVER i INDEPENDENT SET są <math>\displaystyle \cc{MAXSNP}</math>-trudne.
Problemy NODE COVER i INDEPENDENT SET są <math>\mathrm{MAXSNP}</math>-trudne.
}}
}}


{{lemat|4.5||
{{lemat|4.5||
Problemy <math>\displaystyle 5</math>OCCUR MAX<math>\displaystyle 2</math>SAT i MAX NAE<math>\displaystyle 3</math>SAT są <math>\displaystyle \cc{MAXSNP}</math>-zupełne.
Problemy <math>5</math>OCCUR MAX<math>2</math>SAT i MAX NAE<math>3</math>SAT są <math>\mathrm{MAXSNP}</math>-zupełne.
}}
}}


{{dowod|||
{{dowod|||
Żeby pokazać <math>\displaystyle \cc{MAXSNP}</math>-zupełność problemu <math>\displaystyle 5</math>OCCUR MAX<math>\displaystyle 2</math>SAT, skonstruujemy L-redukcję problemu <math>\displaystyle 4</math>-INDEPENDENT SET. Mając dany graf <math>\displaystyle G=(\braq{V,E})</math>, konstruujemy formułę, tworząc następujące klauzule:
Żeby pokazać <math>\mathrm{MAXSNP}</math>-zupełność problemu <math>5</math>OCCUR MAX<math>2</math>SAT, skonstruujemy L-redukcję problemu <math>4</math>-INDEPENDENT SET. Mając dany graf <math>G=(\mathit{V,E})</math>, konstruujemy formułę, tworząc następujące klauzule:
* <math>\displaystyle (\braq{x})</math> dla każdego wierzchołka <math>\displaystyle x \in V</math>.
* <math>(\mathit{x})</math> dla każdego wierzchołka <math>x \in V</math>.
* <math>\displaystyle (\braq{\neg x \vee \neg y})</math> dla każdej krawędzi <math>\displaystyle xy \in E</math>.
* <math>(\mathit{\neg x \vee \neg y})</math> dla każdej krawędzi <math>xy \in E</math>.


Skonstruowana formuła ma <math>\displaystyle |\size{V}| + |\size{E}|</math> klauzul. Możemy tę liczbę ograniczyć przez <math>\displaystyle 3|\size{V}|</math>. Z kolei, przypominając analizę L-redukcji <math>\displaystyle k</math>-INDEPENDENT SET do <math>\displaystyle k</math>-NODE COVER, możemy stwierdzić, że rozmiar maksymalnego zbioru niezależnego wynosi co najmniej <math>\displaystyle \frac{|\size{V}|}{5}</math>. Zatem współczynnik <math>\displaystyle \alpha</math> L-redukcji ustalamy na <math>\displaystyle 15</math>.
Skonstruowana formuła ma <math>|\mathit{V}| + |\mathit{E}|</math> klauzul. Możemy tę liczbę ograniczyć przez <math>3|\mathit{V}|</math>. Z kolei, przypominając analizę L-redukcji <math>k</math>-INDEPENDENT SET do <math>k</math>-NODE COVER, możemy stwierdzić, że rozmiar maksymalnego zbioru niezależnego wynosi co najmniej <math>\frac{|\mathit{V}|}{5}</math>. Zatem współczynnik <math>\alpha</math> L-redukcji ustalamy na <math>15</math>.


Możemy założyć, że znalezione rozwiązanie wartościuje pozytywnie wszystkie klauzule odpowiadające krawędziom. Jeżeli tak nie jest, to można je zmodyfikować, falsyfikując którąkolwiek zmienną w nim występującą i nie pogorszy to wyniku. Stracimy co najwyżej jedną spełnioną klauzulę, ale na pewno zyskamy co najmniej jedną.
Możemy założyć, że znalezione rozwiązanie wartościuje pozytywnie wszystkie klauzule odpowiadające krawędziom. Jeżeli tak nie jest, to można je zmodyfikować, falsyfikując którąkolwiek zmienną w nim występującą i nie pogorszy to wyniku. Stracimy co najwyżej jedną spełnioną klauzulę, ale na pewno zyskamy co najmniej jedną.


W związku z tym każde rozwiązanie <math>\displaystyle 5</math>OCCUR MAX<math>\displaystyle 2</math>SAT wyznacza zbiór niezależny wierzchołków, które są wartościowane pozytywnie. Odległość od rozwiązania optymalnego jest w obu przypadkach taka sama i w związku z tym możemy ustalić współczynnik <math>\displaystyle \beta = 1</math>.
W związku z tym każde rozwiązanie <math>5</math>OCCUR MAX<math>2</math>SAT wyznacza zbiór niezależny wierzchołków, które są wartościowane pozytywnie. Odległość od rozwiązania optymalnego jest w obu przypadkach taka sama i w związku z tym możemy ustalić współczynnik <math>\beta = 1</math>.


L-redukcja problemu MAX<math>\displaystyle 2</math>SAT do MAX NAE<math>\displaystyle 3</math>SAT przebiega w bardzo łatwy sposób. Do każdej klauzuli dopisujemy wystąpienie nowej zmiennej <math>\displaystyle x</math>. Wystarczy zauważyć, że jeżeli jakieś wartościowanie zmiennych NAE-spełnia daną formułę, to wartościowanie do niego odwrotne również. Możemy zatem założyć, że zmienna <math>\displaystyle x</math> zawsze jest wartościowana negatywnie. Maksymalna liczba klauzul spełnialnych jednocześnie, jak i spełnionych przy konkretnym wartościowaniu jest zatem taka sama w obu problemach i możemy ustalić współczynniki <math>\displaystyle \alpha=1</math> i <math>\displaystyle \beta=1</math>.
L-redukcja problemu MAX<math>2</math>SAT do MAX NAE<math>3</math>SAT przebiega w bardzo łatwy sposób. Do każdej klauzuli dopisujemy wystąpienie nowej zmiennej <math>x</math>. Wystarczy zauważyć, że jeżeli jakieś wartościowanie zmiennych NAE-spełnia daną formułę, to wartościowanie do niego odwrotne również. Możemy zatem założyć, że zmienna <math>x</math> zawsze jest wartościowana negatywnie. Maksymalna liczba klauzul spełnialnych jednocześnie, jak i spełnionych przy konkretnym wartościowaniu jest zatem taka sama w obu problemach i możemy ustalić współczynniki <math>\alpha=1</math> i <math>\beta=1</math>.
}}
}}


{{cwiczenie|4.6||
{{cwiczenie|4.6||
MAX CUT jest <math>\displaystyle \cc{MAXSNP}</math>-zupełny.
MAX CUT jest <math>\mathrm{MAXSNP}</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">   
Przypomnij sobie redukcję problemu NAE<math>\displaystyle 3</math>SAT do MAX CUT.
Przypomnij sobie redukcję problemu NAE<math>3</math>SAT do MAX CUT.
</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">   
Przedstawiona wsześniej redukcja problemu NAE<math>\displaystyle 3</math>SAT do MAX CUT jest L-redukcją. Przypomnijmy, że polegała ona na zmodyfikowaniu formuły <math>\displaystyle \phi</math> tak, żeby żadna klauzula nie zawierała jednocześnie literału i jego zaprzeczenia oraz aby żadne dwie klauzule nie miały dwóch wspólnych literałów. Następnie należało stworzyć wierzchołek dla każdego literału i połączyć krawędziami literały przeciwne, a każdą klauzulę przedstawić jako trójkąt.
Przedstawiona wsześniej redukcja problemu NAE<math>3</math>SAT do MAX CUT jest L-redukcją. Przypomnijmy, że polegała ona na zmodyfikowaniu formuły <math>\phi</math> tak, żeby żadna klauzula nie zawierała jednocześnie literału i jego zaprzeczenia oraz aby żadne dwie klauzule nie miały dwóch wspólnych literałów. Następnie należało stworzyć wierzchołek dla każdego literału i połączyć krawędziami literały przeciwne, a każdą klauzulę przedstawić jako trójkąt.


Optimum dla formuły <math>\displaystyle \phi</math> zawierającej <math>\displaystyle m</math> klauzul wynosi co najmniej <math>\displaystyle \frac{3}{4}m</math>. Żeby to uzasadnić, wystarczy zauważyć, że NAE<math>\displaystyle 3</math>-spełnialność jest przykładem funkcji logicznej <math>\displaystyle 3</math>-argumentowej, w której tylko <math>\displaystyle 2</math> z <math>\displaystyle 8</math> wartościowań zmiennych dają wynik negatywny. Możemy zatem użyć rozumowania przestawionego przy algorytmie aproksymacyjnym dla problemu MAX<math>\displaystyle k</math>FSAT, żeby uzasadnić, iż optimum wynosi co najmniej <math>\displaystyle \frac{3}{4}m</math>.
Optimum dla formuły <math>\phi</math> zawierającej <math>m</math> klauzul wynosi co najmniej <math>\frac{3}{4}m</math>. Żeby to uzasadnić, wystarczy zauważyć, że NAE<math>3</math>-spełnialność jest przykładem funkcji logicznej <math>3</math>-argumentowej, w której tylko <math>2</math> z <math>8</math> wartościowań zmiennych dają wynik negatywny. Możemy zatem użyć rozumowania przestawionego przy algorytmie aproksymacyjnym dla problemu MAX<math>k</math>FSAT, żeby uzasadnić, iż optimum wynosi co najmniej <math>\frac{3}{4}m</math>.


Liczba wszystkich krawędzi w skonstruowanym grafie wynosi co najwyżej <math>\displaystyle 18m</math>. Modyfikacje formuły mogą zwiększyć liczbę klauzul do <math>\displaystyle 3m</math>. W <math>\displaystyle 3m</math> klauzulach występuje co najwyżej <math>\displaystyle 9m</math> zmiennych tworzących po jednej krawędzi. Jednocześnie <math>\displaystyle 3m</math> klauzul daje <math>\displaystyle 9m</math> następnych krawędzi. W związku z tym współczynnik <math>\displaystyle \alpha</math> L-redukcji ustalamy na <math>\displaystyle 24</math>.
Liczba wszystkich krawędzi w skonstruowanym grafie wynosi co najwyżej <math>18m</math>. Modyfikacje formuły mogą zwiększyć liczbę klauzul do <math>3m</math>. W <math>3m</math> klauzulach występuje co najwyżej <math>9m</math> zmiennych tworzących po jednej krawędzi. Jednocześnie <math>3m</math> klauzul daje <math>9m</math> następnych krawędzi. W związku z tym współczynnik <math>\alpha</math> L-redukcji ustalamy na <math>24</math>.


Różnica pomiędzy <math>\displaystyle n+2m</math> a liczbą krawędzi w znalezionym przekroju odpowiada dokładnie liczbie niespełnionych klauzul w formule <math>\displaystyle \phi</math>. W związku z tym współczynnik <math>\displaystyle \beta</math> wynosi jak zwykle <math>\displaystyle 1</math>.
Różnica pomiędzy <math>n+2m</math> a liczbą krawędzi w znalezionym przekroju odpowiada dokładnie liczbie niespełnionych klauzul w formule <math>\phi</math>. W związku z tym współczynnik <math>\beta</math> wynosi jak zwykle <math>1</math>.
</div></div>
</div></div>


}}


{{cwiczenie|4.7||
{{cwiczenie|4.7||
<math>\displaystyle (\braq{2d+1})</math>OCCUR MAX NAE<math>\displaystyle 3</math>SAT jest <math>\displaystyle \cc{MAXSNP}</math>-zupełny.
<math>(\mathit{2d+1})</math>OCCUR MAX NAE<math>3</math>SAT jest <math>\mathrm{MAXSNP}</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">   
Przeprowadź L-redukcję problemu MAX NAE<math>\displaystyle 3</math>SAT w podobny sposób, jak zredukowaliśmy MAX<math>\displaystyle 3</math>SAT do <math>\displaystyle (\braq{2d+1})</math>OCCUR MAX<math>\displaystyle 3</math>SAT.
Przeprowadź L-redukcję problemu MAX NAE<math>3</math>SAT w podobny sposób, jak zredukowaliśmy MAX<math>3</math>SAT do <math>(\mathit{2d+1})</math>OCCUR MAX<math>3</math>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">   
Przedstawimy konstrukcję podobną do dowodu, że <math>\displaystyle (\braq{2d+1})</math>OCCUR MAX<math>\displaystyle 3</math>SAT jest <math>\displaystyle \cc{MAXSNP}</math>-zupełny. Do redukcji użyjemy oczywiście tym razem problemu MAX NAE<math>\displaystyle 3</math>SAT. Wielokrotne wystąpienia tej samej zmiennej tak samo zamienimy na nowe zmienne, natomiast konstrukcja gadżetu wymuszającego zgodne wartościowanie na tych zmiennych przebiega w następujący sposób. Dla zmiennych <math>\displaystyle x_1,x_2,\ldots,x_k</math> tworzymy <math>\displaystyle k</math>-elementowy ekspander <math>\displaystyle F_x</math> o stopniu <math>\displaystyle d</math> etykietowany tymi zmiennymi. Dla każdej krawędzi <math>\displaystyle x_ix_j</math> w <math>\displaystyle F_x</math> tworzymy nową zmienną <math>\displaystyle y_{x,i,j}</math>, a do formuły dodajemy klauzule:
Przedstawimy konstrukcję podobną do dowodu, że <math>(\mathit{2d+1})</math>OCCUR MAX<math>3</math>SAT jest <math>\mathrm{MAXSNP}</math>-zupełny. Do redukcji użyjemy oczywiście tym razem problemu MAX NAE<math>3</math>SAT. Wielokrotne wystąpienia tej samej zmiennej tak samo zamienimy na nowe zmienne, natomiast konstrukcja gadżetu wymuszającego zgodne wartościowanie na tych zmiennych przebiega w następujący sposób. Dla zmiennych <math>x_1,x_2,\ldots,x_k</math> tworzymy <math>k</math>-elementowy ekspander <math>F_x</math> o stopniu <math>d</math> etykietowany tymi zmiennymi. Dla każdej krawędzi <math>x_ix_j</math> w <math>F_x</math> tworzymy nową zmienną <math>y_{x,i,j}</math>, a do formuły dodajemy klauzule:


<center><math>\displaystyle (\braq{x_i \vee \neg x_j \vee y_{x,i,j}}) \wedge (\braq{\neg x_i \vee x_j \vee y_{x,i,j}})\textnormal{.}
<center><math>(\mathit{x_i \vee \neg x_j \vee y_{x,i,j}}) \wedge (\mathit{\neg x_i \vee x_j \vee y_{x,i,j}})\text{.}
</math></center>
</math></center>


Każda zmienna w skonstruowanej formule występuje co najwyżej <math>\displaystyle 2d+1</math> razy. Własności ekspandera, tak jak poprzednio, zapewniają, że możemy rozważać tylko rozwiązania wartościujące zmienne <math>\displaystyle x_1,x_2,\ldots,x_k</math> zgodnie.
Każda zmienna w skonstruowanej formule występuje co najwyżej <math>2d+1</math> razy. Własności ekspandera, tak jak poprzednio, zapewniają, że możemy rozważać tylko rozwiązania wartościujące zmienne <math>x_1,x_2,\ldots,x_k</math> zgodnie.


Powtarzając zatem to samo rozumowanie, udowodnimy <math>\displaystyle \cc{MAXSNP}</math>-zupełność problemu <math>\displaystyle (\braq{2d+1})</math>OCCUR NAE<math>\displaystyle 3</math>SAT.
Powtarzając zatem to samo rozumowanie, udowodnimy <math>\mathrm{MAXSNP}</math>-zupełność problemu <math>(\mathit{2d+1})</math>OCCUR NAE<math>3</math>SAT.
</div></div>
</div></div>
}}


==Problem INDEPENDENT SET==
==Problem INDEPENDENT SET==


Wiemy już, że problem INDEPENDENT SET jest <math>\displaystyle \cc{MAXSNP}</math>-trudny, gdyż jego zawężenia są zupełne dla tej klasy. Oznacza to, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to nie ma algorytmu PTAS dla INDEPENDENT SET. Udowodnimy teraz, że nie jest możliwa również aproksymacja ze stałą. Pokażemy, że jeżeli istniałby jakikolwiek algorytm ze stałą aproksymacji, to można by to wykorzystać do stworzenia algorytmu PTAS.
Wiemy już, że problem INDEPENDENT SET jest <math>\mathrm{MAXSNP}</math>-trudny, gdyż jego zawężenia są zupełne dla tej klasy. Oznacza to, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie ma algorytmu PTAS dla INDEPENDENT SET. Udowodnimy teraz, że nie jest możliwa również aproksymacja ze stałą. Pokażemy, że jeżeli istniałby jakikolwiek algorytm ze stałą aproksymacji, to można by to wykorzystać do stworzenia algorytmu PTAS.


Co ciekawe, fakt ten był znany na długo przed pojawieniem się twierdzenia <math>\displaystyle \cc{PCP}</math>. Wiedziano, że problem INDEPENDENT SET albo można aproksymować dowolnie dobrze, albo w ogóle. Dopiero twierdzenie <math>\displaystyle \cc{PCP}</math> rozwiało wątpliowści, która z tych możliwości jest prawdziwa.
Co ciekawe, fakt ten był znany na długo przed pojawieniem się twierdzenia <math>\mathrm{PCP}</math>. Wiedziano, że problem INDEPENDENT SET albo można aproksymować dowolnie dobrze, albo w ogóle. Dopiero twierdzenie <math>\mathrm{PCP}</math> rozwiało wątpliowści, która z tych możliwości jest prawdziwa.


Żeby udowodnić zapowiedziane twierdzenie, będziemy chcieli przyjrzeć się następującej konstrukcji:
Żeby udowodnić zapowiedziane twierdzenie, będziemy chcieli przyjrzeć się następującej konstrukcji:


{{definicja|5.1||
{{definicja|5.1||
Dla dwóch grafów <math>\displaystyle G=(\braq{V_G,E_G})</math> i <math>\displaystyle H=(\braq{V_H,E_H})</math> {grafem iloczynowym} <math>\displaystyle G \times H</math> oznaczamy graf o wierzchołkach <math>\displaystyle V_G \times V_H</math> i krawędziach:
Dla dwóch grafów <math>G=(\mathit{V_G,E_G})</math> i <math>H=(\mathit{V_H,E_H})</math> {grafem iloczynowym} <math>G \times H</math> oznaczamy graf o wierzchołkach <math>V_G \times V_H</math> i krawędziach:
* <math>\displaystyle (\braq{a,x})(\braq{b,y})</math> dla <math>\displaystyle ab \in E_G</math> i dowolnych <math>\displaystyle x</math> i <math>\displaystyle y</math>.
* <math>(\mathit{a,x})(\mathit{b,y})</math> dla <math>ab \in E_G</math> i dowolnych <math>x</math> i <math>y</math>.
* <math>\displaystyle (\braq{a,x})(\braq{a,y})</math> dla <math>\displaystyle xy \in E_H</math>.
* <math>(\mathit{a,x})(\mathit{a,y})</math> dla <math>xy \in E_H</math>.


}}
}}


<div class="thumb tright"><div style="width:300px;">
[[File:ZO-9-3.svg|300x300px|thumb|right|Rys.9.2. Graf iloczynowy]]
<flash>file=ZO-9-3.swf|width=300|height=300</flash>
<div.thumbcaption>Rys.9.2. Graf iloczynowy</div>
</div></div>
<!-- ZO-9.3 - graf iloczynowy -->
<!-- ZO-9.3 - graf iloczynowy -->
{{przyklad|5.2||
{{przyklad|5.2||
Konstrukcja odpowiada "włożeniu" grafu <math>\displaystyle H</math> w każdy wierzchołek grafu <math>\displaystyle G</math>. Nam będzie potrzebna tylko konstrukcja <math>\displaystyle G^2 = G \times G</math>.
Konstrukcja odpowiada "włożeniu" grafu <math>H</math> w każdy wierzchołek grafu <math>G</math>. Nam będzie potrzebna tylko konstrukcja <math>G^2 = G \times G</math>.
}}
}}


{{lemat|5.3||
{{lemat|5.3||
W grafie <math>\displaystyle G=(\braq{V,E})</math> istnieje zbiór niezależny rozmiaru <math>\displaystyle k</math> wtedy i tylko wtedy, gdy w <math>\displaystyle G^2</math> istnieje zbiór niezależny rozmiaru <math>\displaystyle k^2</math>.
W grafie <math>G=(\mathit{V,E})</math> istnieje zbiór niezależny rozmiaru <math>k</math> wtedy i tylko wtedy, gdy w <math>G^2</math> istnieje zbiór niezależny rozmiaru <math>k^2</math>.
}}
}}


{{dowod|||
{{dowod|||
Jeżeli <math>\displaystyle I \subseteq V</math> jest zbiorem niezależnym rozmiaru <math>\displaystyle k</math> w <math>\displaystyle G</math>, to zbiór <math>\displaystyle I^2 = \defset \{ {(\braq{x,y})} : {x \in I \wedge y \in I} \}</math> jest zbiorem niezależnym rozmiaru <math>\displaystyle k^2</math> w grafie <math>\displaystyle G^2</math>.
Jeżeli <math>I \subseteq V</math> jest zbiorem niezależnym rozmiaru <math>k</math> w <math>G</math>, to zbiór <math>I^2 = \{ {(\mathit{x,y})} : {x \in I \wedge y \in I} \}</math> jest zbiorem niezależnym rozmiaru <math>k^2</math> w grafie <math>G^2</math>.


Jeżeli natomiast <math>\displaystyle I \subseteq V^2</math> jest zbiorem niezależnym rozmiaru <math>\displaystyle k^2</math> w <math>\displaystyle G^2</math>, to każdy ze zbiorów:
Jeżeli natomiast <math>I \subseteq V^2</math> jest zbiorem niezależnym rozmiaru <math>k^2</math> w <math>G^2</math>, to każdy ze zbiorów:
* <math>\displaystyle I_1 = \defset \{ {x} : {\exists_y (\braq{x,y}) \in I } \}</math>,
* <math>I_1 = \{ {x} : {\exists_y (\mathit{x,y}) \in I } \}</math>,
* <math>\displaystyle I_2^x = \defset \{ {y} : {(\braq{x,y}) \in I} \}</math> dla każdego <math>\displaystyle x \in I_1</math>,
* <math>I_2^x = \{ {y} : {(\mathit{x,y}) \in I} \}</math> dla każdego <math>x \in I_1</math>,


musi być zbiorem niezależnym w <math>\displaystyle G</math>. Jeżeli rozmiar każdego z tych zbiorów byłby mniejszy od <math>\displaystyle k</math>, to rozmiar <math>\displaystyle I</math> byłby mniejszy od <math>\displaystyle k^2</math>. Zatem któryś z tych zbiorów musi mieć rozmiar większy lub równy <math>\displaystyle k</math>.
musi być zbiorem niezależnym w <math>G</math>. Jeżeli rozmiar każdego z tych zbiorów byłby mniejszy od <math>k</math>, to rozmiar <math>I</math> byłby mniejszy od <math>k^2</math>. Zatem któryś z tych zbiorów musi mieć rozmiar większy lub równy <math>k</math>.
}}
}}


{{twierdzenie|5.4||
{{twierdzenie|5.4||
Jeżeli istnieje algorytm <math>\displaystyle a</math>-aproksymacyjny dla problemu INDEPENDENT SET, to istnieje algorytm PTAS dla tego problemu.
Jeżeli istnieje algorytm <math>a</math>-aproksymacyjny dla problemu INDEPENDENT SET, to istnieje algorytm PTAS dla tego problemu.
}}
}}


{{dowod|||
{{dowod|||
Załóżmy, że <math>\displaystyle \mathcal{A}</math> jest <math>\displaystyle a</math>-aproksymacyjnym algorytmem dla problemu INDEPENDENT SET. Niech <math>\displaystyle k</math> będzie rozmiarem maksymalnego zbioru niezależnego w grafie <math>\displaystyle G</math>. Jeżeli wykonamy algorytm <math>\displaystyle \mathcal{A}</math> na grafie <math>\displaystyle G^2</math>, to otrzymamy zbiór niezależny rozmiaru <math>\displaystyle ak^2</math>. Poprzedni lemat zapewnia, że w czasie wielomianowym możemy z tego rozwiązania uzyskać pewien zbiór niezależny rozmiaru <math>\displaystyle \sqrt{ak^2}</math>. Tym samym stworzyliśmy nowy algorytm, który jest <math>\displaystyle \sqrt{a}</math>-aproksymacyjny.
Załóżmy, że <math>\mathcal{A}</math> jest <math>a</math>-aproksymacyjnym algorytmem dla problemu INDEPENDENT SET. Niech <math>k</math> będzie rozmiarem maksymalnego zbioru niezależnego w grafie <math>G</math>. Jeżeli wykonamy algorytm <math>\mathcal{A}</math> na grafie <math>G^2</math>, to otrzymamy zbiór niezależny rozmiaru <math>ak^2</math>. Poprzedni lemat zapewnia, że w czasie wielomianowym możemy z tego rozwiązania uzyskać pewien zbiór niezależny rozmiaru <math>\sqrt{ak^2}</math>. Tym samym stworzyliśmy nowy algorytm, który jest <math>\sqrt{a}</math>-aproksymacyjny.


Skorzystamy teraz z tego, że dla <math>\displaystyle 0 < a \leq 1</math> ciąg <math>\displaystyle \sqrt[2^n]{a}</math> ma granicę w nieskończoności równą <math>\displaystyle 1</math>. Schemat PTAS powstaje w związku z tym przez zastosowanie algorytmu <math>\displaystyle \mathcal{A}</math> dla grafu <math>\displaystyle G^{2^n}</math>, dla odpowiednio dużego <math>\displaystyle n</math>. Jeżeli chcemy osiągnąć <math>\displaystyle (\braq{1-\epsilon})</math>-aproksymację, to otrzymamy następujące oszacowanie na <math>\displaystyle n</math>:
Skorzystamy teraz z tego, że dla <math>0 < a \leq 1</math> ciąg <math>\sqrt[2^n]{a}</math> ma granicę w nieskończoności równą <math>1</math>. Schemat PTAS powstaje w związku z tym przez zastosowanie algorytmu <math>\mathcal{A}</math> dla grafu <math>G^{2^n}</math>, dla odpowiednio dużego <math>n</math>. Jeżeli chcemy osiągnąć <math>(\mathit{1-\epsilon})</math>-aproksymację, to otrzymamy następujące oszacowanie na <math>n</math>:


<center><math>\displaystyle \aligned 1-\epsilon &\leq  \sqrt[2^n]{a} \\
<center><math>\begin{align} 1-\epsilon &\leq  \sqrt[2^n]{a} \\
(\braq{1-epsilon})^{2^n} &\leq  a \\
(\mathit{1-epsilon})^{2^n} &\leq  a \\
2^n &\geq  \log_{1-\epsilon}a \\
2^n &\geq  \log_{1-\epsilon}a \\
n &\geq  \log_2(\log_{1-\epsilon}a)\textnormal{.}
n &\geq  \log_2(\log_{1-\epsilon}a)\text{.}
\endaligned</math></center>
\end{align}</math></center>


}}
}}
Linia 391: Linia 378:
Algorytm zachłanny dla problemu INDEPENDENT SET.
Algorytm zachłanny dla problemu INDEPENDENT SET.


Pokazaliśmy, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to nie ma algorytmu <math>\displaystyle a</math>-aproksymacyjnego dla INDEPENDENT SET. Pokaż, że algorytm zachłanny nie jest algorytmem <math>\displaystyle a</math>-aproksymacyjnym.
Pokazaliśmy, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie ma algorytmu <math>a</math>-aproksymacyjnego dla INDEPENDENT SET. Pokaż, że algorytm zachłanny nie jest algorytmem <math>a</math>-aproksymacyjnym.


  Algorytm zachłanny.
  Algorytm zachłanny.
  Dopóki w grafie są wierzchołki:
  Dopóki w grafie są wierzchołki:
  1. Wybierz wierzchołek <math>\displaystyle v</math> o najmniejszym stopniu.
  1. Wybierz wierzchołek <math>v</math> o najmniejszym stopniu.
  2. Dodaj <math>\displaystyle v</math> do zbioru niezależnego i usuń go z grafu wraz ze wszystkimi sąsiadami.
  2. Dodaj <math>v</math> do zbioru niezależnego i usuń go z grafu wraz ze wszystkimi sąsiadami.
 
}}
<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">   
Użyj dodatkowych wierzchołków podnoszących stopień w rozwiązaniu optymalnym, żeby zmylić algorytm zachłanny.
Użyj dodatkowych wierzchołków podnoszących stopień w rozwiązaniu optymalnym, żeby zmylić algorytm zachłanny.
Linia 403: Linia 390:


<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">   
Przeanalizujmy graf <math>\displaystyle G_k</math>, dla <math>\displaystyle k \in \naturals</math>, w którym wierzchołki możemy podzielić na trzy grupy:
Przeanalizujmy graf <math>G_k</math>, dla <math>k \in \mathbb{N}</math>, w którym wierzchołki możemy podzielić na trzy grupy:
* <math>\displaystyle A</math> - grupa <math>\displaystyle k</math> wierzchołków. Każdy z nich jest połączony z <math>\displaystyle k</math> wierzchołkami z grupy <math>\displaystyle B</math>.
* <math>A</math> - grupa <math>k</math> wierzchołków. Każdy z nich jest połączony z <math>k</math> wierzchołkami z grupy <math>B</math>.
* <math>\displaystyle B</math> - grupa <math>\displaystyle k^2</math> wierzchołków. Każdy jest połączony z jednym wierzchołkiem z grupy <math>\displaystyle A</math> i z <math>\displaystyle k</math> wierzcholkami z grupy <math>\displaystyle C</math>.
* <math>B</math> - grupa <math>k^2</math> wierzchołków. Każdy jest połączony z jednym wierzchołkiem z grupy <math>A</math> i z <math>k</math> wierzcholkami z grupy <math>C</math>.
* <math>\displaystyle C</math> - grupa <math>\displaystyle k</math> wierzchołków połączonych ze wszystkimi wierzchołkami w <math>\displaystyle B</math>.
* <math>C</math> - grupa <math>k</math> wierzchołków połączonych ze wszystkimi wierzchołkami w <math>B</math>.


Algorytm zachłanny będzie wybierał wierzchołki z <math>\displaystyle A</math>, gdyż mają one najniższy stopień. Jednocześnie będzie systematycznie usuwał całą grupę <math>\displaystyle B</math>. Na koniec doda wszystkie wierzchołki z grupy <math>\displaystyle C</math>. Skonstruuje w ten sposób zbiór niezależny o rozmiarze <math>\displaystyle 2k</math>.
Algorytm zachłanny będzie wybierał wierzchołki z <math>A</math>, gdyż mają one najniższy stopień. Jednocześnie będzie systematycznie usuwał całą grupę <math>B</math>. Na koniec doda wszystkie wierzchołki z grupy <math>C</math>. Skonstruuje w ten sposób zbiór niezależny o rozmiarze <math>2k</math>.


Tymczasem rozwiązanie optymalne ma <math>\displaystyle k^2</math> wierzchołków. Wystarczy wybrać całą grupę <math>\displaystyle B</math>.
Tymczasem rozwiązanie optymalne ma <math>k^2</math> wierzchołków. Wystarczy wybrać całą grupę <math>B</math>.


Oznacza to, że na grafie <math>\displaystyle G_k</math> rozwiązanie algorytmu zachłannego jest <math>\displaystyle \frac{k}{2}</math> razy gorsze od optymalnego. Dobierając odpowiednią wartość <math>\displaystyle k > 2a</math>, możemy udowodnić, że algorytm zachłanny nie jest <math>\displaystyle a</math>-aproksymacyjny.
Oznacza to, że na grafie <math>G_k</math> rozwiązanie algorytmu zachłannego jest <math>\frac{k}{2}</math> razy gorsze od optymalnego. Dobierając odpowiednią wartość <math>k > 2a</math>, możemy udowodnić, że algorytm zachłanny nie jest <math>a</math>-aproksymacyjny.
</div></div>
</div></div>
}}


==Pewniejsze weryfikatory==
==Pewniejsze weryfikatory==
Linia 421: Linia 406:
Przedstawimy teraz pewne uogólnienie definicji języków rozpoznawanych przez weryfikatory. To wzbogacenie pozwoli nam w następnej części pokazać bardzo ciekawe ograniczenie możliwości aproksymacji.
Przedstawimy teraz pewne uogólnienie definicji języków rozpoznawanych przez weryfikatory. To wzbogacenie pozwoli nam w następnej części pokazać bardzo ciekawe ograniczenie możliwości aproksymacji.


W definicji języka rozpoznawanego przez ograniczony weryfikator wymagaliśmy, aby prawdopodobieństwo zaakceptowania słowa z języka przy odpowiednim świadku wynosiło <math>\displaystyle 1</math>, a prawdopodobieństwo zaakceptowania słowa spoza języka przy żadnym świadku nie przekraczało <math>\displaystyle \frac{1}{2}</math>. Spróbujemy się teraz przyjrzeć sytuacji, w której stałe <math>\displaystyle 1</math> i <math>\displaystyle \frac{1}{2}</math> mogą się zmieniać.
W definicji języka rozpoznawanego przez ograniczony weryfikator wymagaliśmy, aby prawdopodobieństwo zaakceptowania słowa z języka przy odpowiednim świadku wynosiło <math>1</math>, a prawdopodobieństwo zaakceptowania słowa spoza języka przy żadnym świadku nie przekraczało <math>\frac{1}{2}</math>. Spróbujemy się teraz przyjrzeć sytuacji, w której stałe <math>1</math> i <math>\frac{1}{2}</math> mogą się zmieniać.


{{definicja|6.1||
{{definicja|6.1||
Język <math>\displaystyle L</math> należy do klasy <math>\displaystyle  \cc{PCP}_{c,s}(p,q) </math>, jeżeli istnieje weryfikator <math>\displaystyle V</math>, który dla wejścia <math>\displaystyle x</math> długości <math>\displaystyle n</math> bitów działa w czasie wielomianowym od <math>\displaystyle n</math>, korzysta z <math>\displaystyle \mathcal{O}{ p(n) }</math> bitów losowych i <math>\displaystyle \mathcal{O}{ q(n) }</math> bitów świadka oraz:
Język <math>L</math> należy do klasy <math>\mathrm{PCP}_{c,s}(p,q)</math>, jeżeli istnieje weryfikator <math>V</math>, który dla wejścia <math>x</math> długości <math>n</math> bitów działa w czasie wielomianowym od <math>n</math>, korzysta z <math>\mathcal{O}{ p(n) }</math> bitów losowych i <math>\mathcal{O}{ q(n) }</math> bitów świadka oraz:
* Dla <math>\displaystyle x \in L</math> istnieje świadek <math>\displaystyle y</math> taki, że <math>\displaystyle V</math> akceptuje z prawdopodobieństwem większym lub równym <math>\displaystyle c</math>.
* Dla <math>x \in L</math> istnieje świadek <math>y</math> taki, że <math>V</math> akceptuje z prawdopodobieństwem większym lub równym <math>c</math>.
* Dla <math>\displaystyle x \notin L</math>, dla każdego świadka <math>\displaystyle y</math>, <math>\displaystyle V</math> akceptuje z prawdopodobieństwem mniejszym od <math>\displaystyle s</math>.
* Dla <math>x \notin L</math>, dla każdego świadka <math>y</math>, <math>V</math> akceptuje z prawdopodobieństwem mniejszym od <math>s</math>.


}}
}}


Zauważmy, że wcześniejsza definicja <math>\displaystyle  \cc{PCP}(p,q) </math> odpowiada teraz <math>\displaystyle  \cc{PCP}_{1,\frac{1}{2}}(p,q) </math>. Dość łatwo można uzyskać równość <math>\displaystyle  \cc{PCP}_{1,\frac{1}{2}}(\log n,1)  =  \cc{PCP}_{1,a}(\log n, 1) </math> dla każdej stałej <math>\displaystyle 0 < a < 1</math>. Działanie weryfikatora klasy <math>\displaystyle  \cc{PCP}_{1,a}(\log n, 1) </math> można powtórzyć <math>\displaystyle k</math> razy, otrzymując weryfikator klasy <math>\displaystyle  \cc{PCP}_{1,a^k}(k\log n, k) </math>. Dlatego naprawdę ciekawe rezultaty otrzymamy dopiero, kiedy dopuścimy, aby <math>\displaystyle c</math> i <math>\displaystyle s</math> mogły zależeć od <math>\displaystyle n</math>.
Zauważmy, że wcześniejsza definicja <math>\mathrm{PCP}(p,q)</math> odpowiada teraz <math>\mathrm{PCP}_{1,\frac{1}{2}}(p,q)</math>. Dość łatwo można uzyskać równość <math>\mathrm{PCP}_{1,\frac{1}{2}}(\log n,1)  =  \mathrm{PCP}_{1,a}(\log n, 1)</math> dla każdej stałej <math>0 < a < 1</math>. Działanie weryfikatora klasy <math>\mathrm{PCP}_{1,a}(\log n, 1)</math> można powtórzyć <math>k</math> razy, otrzymując weryfikator klasy <math>\mathrm{PCP}_{1,a^k}(k\log n, k)</math>. Dlatego naprawdę ciekawe rezultaty otrzymamy dopiero, kiedy dopuścimy, aby <math>c</math> i <math>s</math> mogły zależeć od <math>n</math>.


Szczególnie interesującym wydaje się ograniczenie błędnej akceptacji w sposób odwrotnie proporcjonalny do rozmiaru wejścia. Równość <math>\displaystyle  \cc{PCP}_{1,\frac{1}{2}}(\log n,1)  =  \cc{PCP}_{1,\frac{1}{n}}(\log^2n,\log n) </math> otrzymujemy tą samą metodą. Możemy przecież powtórzyć działanie weryfikatora <math>\displaystyle \log n</math> razy, wykorzystując <math>\displaystyle \log n</math> razy więcej bitów losowych i bitów świadka.
Szczególnie interesującym wydaje się ograniczenie błędnej akceptacji w sposób odwrotnie proporcjonalny do rozmiaru wejścia. Równość <math>\mathrm{PCP}_{1,\frac{1}{2}}(\log n,1)  =  \mathrm{PCP}_{1,\frac{1}{n}}(\log^2n,\log n)</math> otrzymujemy tą samą metodą. Możemy przecież powtórzyć działanie weryfikatora <math>\log n</math> razy, wykorzystując <math>\log n</math> razy więcej bitów losowych i bitów świadka.


Okazuje się jednak, że można użyć znacznie mniej bitów losowych. Mówi o tym następujące twierdzenie:
Okazuje się jednak, że można użyć znacznie mniej bitów losowych. Mówi o tym następujące twierdzenie:


{{twierdzenie|6.2||
{{twierdzenie|6.2||
<math>\displaystyle \cc{NP} =  \cc{PCP}_{1,\frac{1}{n}}(\log n, \log n) </math>.
<math>\mathrm{NP} =  \mathrm{PCP}_{1,\frac{1}{n}}(\log n, \log n)</math>.
}}
}}


{{dowod|||
{{dowod|||


Przypomnijmy, że pokazaliśmy, że <math>\displaystyle \cc{NP} =  \cc{PCP}(\log n, \textnormal{poly}(n) ) </math> i w związku z tym zawieranie <math>\displaystyle  \cc{PCP}_{1,\frac{1}{n}}(\log n, \log n)  \subseteq \cc{NP}</math> nie wymaga dalszego komentarza.
Przypomnijmy, że pokazaliśmy, że <math>\mathrm{NP} =  \mathrm{PCP}(\log n, \text{poly}(n) )</math> i w związku z tym zawieranie <math>\mathrm{PCP}_{1,\frac{1}{n}}(\log n, \log n)  \subseteq \mathrm{NP}</math> nie wymaga dalszego komentarza.


Aby pokazać, że <math>\displaystyle \cc{NP} =  \cc{PCP}_{1,\frac{1}{2}}(\log n, 1)  \subseteq  \cc{PCP}_{1,\frac{1}{n}}(\log n, \log n) </math>, odwołamy się jeszcze raz do ekspanderów. Okazuje się, że nadają się one świetnie do zmniejszenia liczby bitów losowych wymaganych przy obliczeniu. Konkretnie skorzystamy z następującej własności, którą pozostawimy bez dowodu:
Aby pokazać, że <math>\mathrm{NP} =  \mathrm{PCP}_{1,\frac{1}{2}}(\log n, 1)  \subseteq  \mathrm{PCP}_{1,\frac{1}{n}}(\log n, \log n)</math>, odwołamy się jeszcze raz do ekspanderów. Okazuje się, że nadają się one świetnie do zmniejszenia liczby bitów losowych wymaganych przy obliczeniu. Konkretnie skorzystamy z następującej własności, którą pozostawimy bez dowodu:
}}
}}


{{twierdzenie|6.3||
{{twierdzenie|6.3||
Jeżeli graf <math>\displaystyle F=(\braq{V,E})</math> jest ekspanderem o <math>\displaystyle n^c</math> wierzchołkach i <math>\displaystyle S \subseteq V</math> jest podzbiorem wierzchołków takim, że <math>\displaystyle |\size{S}| < \frac{|\size{V}|}{2}</math>, to istnieje stała <math>\displaystyle k</math> taka, że prawdopodobieństwo następującego zdarzenia:
Jeżeli graf <math>F=(\mathit{V,E})</math> jest ekspanderem o <math>n^c</math> wierzchołkach i <math>S \subseteq V</math> jest podzbiorem wierzchołków takim, że <math>|\mathit{S}| < \frac{|\mathit{V}|}{2}</math>, to istnieje stała <math>k</math> taka, że prawdopodobieństwo następującego zdarzenia:


<center> "Wszystkie wierzchołki losowej ścieżki długości  <math>\displaystyle  k\log n </math>  należą do  <math>\displaystyle  S </math> ", </center>
<center> "Wszystkie wierzchołki losowej ścieżki długości  <math>k\log n</math>  należą do  <math>S</math> ", </center>


jest mniejsze od <math>\displaystyle \frac{1}{n}</math>.
jest mniejsze od <math>\frac{1}{n}</math>.
}}
}}


Zauważmy, że aby opisać ścieżkę losową długości <math>\displaystyle k\log n</math> w ekspanderze potrzeba <math>\displaystyle \mathcal{O}{\log n}</math> bitów -- <math>\displaystyle c\log n</math> bitów opisuje wierzchołek początkowy, a ponieważ wierzchołki ekspandera mają stały stopień, to do opisania każdej kolejnej krawędzi jest potrzebna stała ilość bitów.
Zauważmy, że aby opisać ścieżkę losową długości <math>k\log n</math> w ekspanderze potrzeba <math>\mathcal{O}{\log n}</math> bitów -- <math>c\log n</math> bitów opisuje wierzchołek początkowy, a ponieważ wierzchołki ekspandera mają stały stopień, to do opisania każdej kolejnej krawędzi jest potrzebna stała ilość bitów.


To spostrzeżenie jest kluczowe dla dowodu. Pozwala ono opisać ścieżkę, która ma dobre właściwości "przeglądania" grafu przy pomocy <math>\displaystyle \mathcal{O}{\log n}</math> bitów.
To spostrzeżenie jest kluczowe dla dowodu. Pozwala ono opisać ścieżkę, która ma dobre właściwości "przeglądania" grafu przy pomocy <math>\mathcal{O}{\log n}</math> bitów.


Niech <math>\displaystyle V</math> będzie <math>\displaystyle (\braq{\log n,1})</math>-ograniczonym weryfikatorem dla języka <math>\displaystyle L</math>. <math>\displaystyle V</math> używa podczas obliczenia co najwyżej <math>\displaystyle c\log n</math> bitów losowych i <math>\displaystyle d</math> bitów świadka.
Niech <math>V</math> będzie <math>(\mathit{\log n,1})</math>-ograniczonym weryfikatorem dla języka <math>L</math>. <math>V</math> używa podczas obliczenia co najwyżej <math>c\log n</math> bitów losowych i <math>d</math> bitów świadka.


Skonstruujemy weryfikator <math>\displaystyle W</math> klasy <math>\displaystyle  \cc{PCP}_{1,\frac{1}{n}}(\log n, \log n) </math> dla języka <math>\displaystyle L</math>.
Skonstruujemy weryfikator <math>W</math> klasy <math>\mathrm{PCP}_{1,\frac{1}{n}}(\log n, \log n)</math> dla języka <math>L</math>.


{{algorytm|6.4 [Weryfikator klasy <math>\displaystyle  \cc{PCP}_{1,\frac{1}{n}}(\log n, \log n) </math>]|al 5.4|
{{algorytm|6.4 [Weryfikator klasy <math>\mathrm{PCP}_{1,\frac{1}{n}}(\log n, \log n)</math>]|al 5.4|
1. Skonstruuj ekspander <math>\displaystyle F</math> o <math>\displaystyle n^c</math> wierzchołkach.<br>  Każdy wierzchołek jest etykietowany ciągiem <math>\displaystyle c\log n</math> bitów.
1. Skonstruuj ekspander <math>F</math> o <math>n^c</math> wierzchołkach.<br>  Każdy wierzchołek jest etykietowany ciągiem <math>c\log n</math> bitów.


2. Używając <math>\displaystyle k\log n</math> bitów losowych, wygeneruj ścieżkę losową <math>\displaystyle P</math> w grafie <math>\displaystyle F</math>.
2. Używając <math>k\log n</math> bitów losowych, wygeneruj ścieżkę losową <math>P</math> w grafie <math>F</math>.


3. Przechodząc ścieżkę <math>\displaystyle P</math>, dokonaj symulacji weryfikatora <math>\displaystyle V</math><br>  na ciągu losowym reprezentowanym przez każdy z wierzchołków.
3. Przechodząc ścieżkę <math>P</math>, dokonaj symulacji weryfikatora <math>V</math><br>  na ciągu losowym reprezentowanym przez każdy z wierzchołków.


4. Zaakceptuj słowo, jeżeli każda z symulacji weryfikatora <math>\displaystyle V</math> zakończyła się akceptacją.}}
4. Zaakceptuj słowo, jeżeli każda z symulacji weryfikatora <math>V</math> zakończyła się akceptacją.}}


Podany algorytm weryfikatora działa w czasie wielomianowym od <math>\displaystyle n</math>, używa <math>\displaystyle \mathcal{O}{\log n}</math> bitów losowych do ustalenia ścieżki <math>\displaystyle P</math>, a podczas wszystkich symulacji weryfikatora <math>\displaystyle V</math> używane jest w sumie <math>\displaystyle \mathcal{O}{\log n}</math> bitów świadka.
Podany algorytm weryfikatora działa w czasie wielomianowym od <math>n</math>, używa <math>\mathcal{O}{\log n}</math> bitów losowych do ustalenia ścieżki <math>P</math>, a podczas wszystkich symulacji weryfikatora <math>V</math> używane jest w sumie <math>\mathcal{O}{\log n}</math> bitów świadka.


Jeżeli słowo <math>\displaystyle x \in L</math>, to istnieje świadek <math>\displaystyle y</math>, przy którym prawdopodobieństwo akceptacji weryfikatora <math>\displaystyle V</math> wynosi <math>\displaystyle 1</math>. Dla tego samego świadka weryfikator <math>\displaystyle W</math> także dokona akceptacji z prawdopodobieństwem <math>\displaystyle 1</math>.
Jeżeli słowo <math>x \in L</math>, to istnieje świadek <math>y</math>, przy którym prawdopodobieństwo akceptacji weryfikatora <math>V</math> wynosi <math>1</math>. Dla tego samego świadka weryfikator <math>W</math> także dokona akceptacji z prawdopodobieństwem <math>1</math>.


Jeżeli natomiast <math>\displaystyle x \notin L</math>, to dla każdego świadka <math>\displaystyle y</math> prawdopodobieństwo akceptacji przez weryfikator <math>\displaystyle V</math> jest mniejsze od <math>\displaystyle \frac{1}{2}</math>. Oznaczmy przez <math>\displaystyle S</math> wierzchołki <math>\displaystyle F</math>, które reprezentują te ciągi bitów losowych, przy których następuje akceptacja. Własności ścieżek losowych w ekspanderach zapewniają, że prawdopodobieństwo, że ścieżka <math>\displaystyle P</math> w całości znajduje się w <math>\displaystyle S</math> jest mniejsze od <math>\displaystyle \frac{1}{n}</math>. Jeżeli ścieżka <math>\displaystyle P</math> wyjdzie poza zbiór <math>\displaystyle S</math>, to weryfikator <math>\displaystyle W</math> odrzuci słowo. W związku z tym prawdopodobieństwo błędnej akceptacji jest mniejsze od <math>\displaystyle \frac{1}{n}</math>.
Jeżeli natomiast <math>x \notin L</math>, to dla każdego świadka <math>y</math> prawdopodobieństwo akceptacji przez weryfikator <math>V</math> jest mniejsze od <math>\frac{1}{2}</math>. Oznaczmy przez <math>S</math> wierzchołki <math>F</math>, które reprezentują te ciągi bitów losowych, przy których następuje akceptacja. Własności ścieżek losowych w ekspanderach zapewniają, że prawdopodobieństwo, że ścieżka <math>P</math> w całości znajduje się w <math>S</math> jest mniejsze od <math>\frac{1}{n}</math>. Jeżeli ścieżka <math>P</math> wyjdzie poza zbiór <math>S</math>, to weryfikator <math>W</math> odrzuci słowo. W związku z tym prawdopodobieństwo błędnej akceptacji jest mniejsze od <math>\frac{1}{n}</math>.


{{cwiczenie|6.5||
{{cwiczenie|6.5||
Niepewny weryfikator.
Niepewny weryfikator.


Nie analizowaliśmy jeszcze weryfikatorów, dla których prawdopodobieństwo akceptacji słowa należącego do języka jest mniejsze od <math>\displaystyle 1</math>. Pokaż, że dla dowolnego <math>\displaystyle 0 < \epsilon < \frac{1}{2}</math> zachodzi:
Nie analizowaliśmy jeszcze weryfikatorów, dla których prawdopodobieństwo akceptacji słowa należącego do języka jest mniejsze od <math>1</math>. Pokaż, że dla dowolnego <math>0 < \epsilon < \frac{1}{2}</math> zachodzi:


<center><math>\displaystyle \cc{NP} =  \cc{PCP}_{1-\epsilon,\frac{1}{2}}(\log n,1)\textnormal{.}  
<center><math>\mathrm{NP} =  \mathrm{PCP}_{1-\epsilon,\frac{1}{2}}(\log n,1)\text{.}  
</math></center>
</math></center>
 
}}
<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">   
Użyj charakteryzacji <math>\displaystyle \cc{NP}</math> z twierdzenia <math>\displaystyle \cc{PCP}</math>.
Użyj charakteryzacji <math>\mathrm{NP}</math> z twierdzenia <math>\mathrm{PCP}</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">   
Zawieranie <math>\displaystyle \cc{NP} \subseteq  \cc{PCP}_{1-\epsilon,\frac{1}{2}}(\log n, 1) </math> jest dość oczywiste. Dla każdego języka <math>\displaystyle L</math> z <math>\displaystyle \cc{NP}</math> istniej weryfikator klasy <math>\displaystyle  \cc{PCP}_{1,\frac{1}{2}}(\log n, 1) </math>. Ten sam weryfikator zapewnia przynależność języka <math>\displaystyle L</math> do <math>\displaystyle  \cc{PCP}_{1-\epsilon,\frac{1}{2}}(\log n, 1) </math>.
Zawieranie <math>\mathrm{NP} \subseteq  \mathrm{PCP}_{1-\epsilon,\frac{1}{2}}(\log n, 1)</math> jest dość oczywiste. Dla każdego języka <math>L</math> z <math>\mathrm{NP}</math> istniej weryfikator klasy <math>\mathrm{PCP}_{1,\frac{1}{2}}(\log n, 1)</math>. Ten sam weryfikator zapewnia przynależność języka <math>L</math> do <math>\mathrm{PCP}_{1-\epsilon,\frac{1}{2}}(\log n, 1)</math>.


Żeby uzasadnić drugie zawieranie, wystarczy przypomnieć dowód, że <math>\displaystyle  \cc{PCP}_{1,\frac{1}{2}}(\log n, \textnormal{poly}(n) )  \subseteq \cc{NP}</math>. Postępując tak samo jak tam, możemy niedeterministycznie wygenerować świadka, a potem przejrzeć obliczenia przy wszystkich ciągach losowych. Różnica polega na tym, że akceptacji dokonujemy, jeżeli co najmniej <math>\displaystyle (\braq{1-\epsilon})k</math> ze wszystkich <math>\displaystyle k</math> testów wypadnie pozytywnie.
Żeby uzasadnić drugie zawieranie, wystarczy przypomnieć dowód, że <math>\mathrm{PCP}_{1,\frac{1}{2}}(\log n, \text{poly}(n) )  \subseteq \mathrm{NP}</math>. Postępując tak samo jak tam, możemy niedeterministycznie wygenerować świadka, a potem przejrzeć obliczenia przy wszystkich ciągach losowych. Różnica polega na tym, że akceptacji dokonujemy, jeżeli co najmniej <math>(\mathit{1-\epsilon})k</math> ze wszystkich <math>k</math> testów wypadnie pozytywnie.


To samo rozumowanie pozwala stwierdzić, że dla dowolnych <math>\displaystyle 0 \leq s < c \leq 1</math> zachodzi:
To samo rozumowanie pozwala stwierdzić, że dla dowolnych <math>0 \leq s < c \leq 1</math> zachodzi:


<center><math>\displaystyle \cc{NP} =  \cc{PCP}_{c,s}(\log n, 1)\textnormal{.}
<center><math>\mathrm{NP} =  \mathrm{PCP}_{c,s}(\log n, 1)\text{.}
</math></center>
</math></center>


</div></div>
</div></div>
}}


==Problem CLIQUE==
==Problem CLIQUE==
Linia 508: Linia 491:
Jest to kontynuacja naszych rozważań dotyczących aproksymacji problemu INDEPENDENT SET. Każdy wynik dotyczący aproksymacji problemu CLIQUE jest jednocześnie wynikiem dla INDEPENDENT SET. Wystarczy przecież zamienić graf na jego dopełnienie, żeby jeden problem zamienił się w drugi. Tylko ze względu na wygodniejsze oznaczenia zdecydowaliśmy się "przenieść" do grafu dopełnieniowego i rozważać problem CLIQUE zamiast INDEPENDENT SET.
Jest to kontynuacja naszych rozważań dotyczących aproksymacji problemu INDEPENDENT SET. Każdy wynik dotyczący aproksymacji problemu CLIQUE jest jednocześnie wynikiem dla INDEPENDENT SET. Wystarczy przecież zamienić graf na jego dopełnienie, żeby jeden problem zamienił się w drugi. Tylko ze względu na wygodniejsze oznaczenia zdecydowaliśmy się "przenieść" do grafu dopełnieniowego i rozważać problem CLIQUE zamiast INDEPENDENT SET.


Wykorzystamy teraz nowo wprowadzone definicje do pokazania bardzo ciekawego rezultatu. Udowodnimy mianowicie, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to dla problemu CLIQUE nie istnieje algorytm <math>\displaystyle \alpha</math>-aproksymacyjny, gdzie <math>\displaystyle \alpha(n) = \frac{1}{n^\epsilon}</math> dla pewnego <math>\displaystyle 0 < \epsilon < 1</math>.
Wykorzystamy teraz nowo wprowadzone definicje do pokazania bardzo ciekawego rezultatu. Udowodnimy mianowicie, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to dla problemu CLIQUE nie istnieje algorytm <math>\alpha</math>-aproksymacyjny, gdzie <math>\alpha(n) = \frac{1}{n^\epsilon}</math> dla pewnego <math>0 < \epsilon < 1</math>.


Jest to stwierdzenie mocniejsze niż wyniki pokazane wcześniej, gdyż podaje pewne asymptotyczne ograniczenie możliwości tworzenia algorytmów <math>\displaystyle \alpha</math>-aproksymacyjnych.
Jest to stwierdzenie mocniejsze niż wyniki pokazane wcześniej, gdyż podaje pewne asymptotyczne ograniczenie możliwości tworzenia algorytmów <math>\alpha</math>-aproksymacyjnych.


Dowód będzie w swojej konstrukcji przypominał dowód nieaproksymowalności MAX<math>\displaystyle 3</math>SAT w oparciu o twierdzenie <math>\displaystyle \cc{PCP}</math>. Z tą różnicą, że tym razem wykorzystamy weryfikator klasy <math>\displaystyle  \cc{PCP}_{1,\frac{1}{n}}(\log n, \log n) </math>. Gdybyśmy wykorzystali charakteryzację <math>\displaystyle \cc{NP} =  \cc{PCP}_{1,\frac{1}{2}}(\log n, 1) </math>, uzyskalibyśmy podobny rezultat mówiący o tym, że nie istnieje algorytm <math>\displaystyle \epsilon</math>-aproksymacyjny dla problemu CLIQUE.
Dowód będzie w swojej konstrukcji przypominał dowód nieaproksymowalności MAX<math>3</math>SAT w oparciu o twierdzenie <math>\mathrm{PCP}</math>. Z tą różnicą, że tym razem wykorzystamy weryfikator klasy <math>\mathrm{PCP}_{1,\frac{1}{n}}(\log n, \log n)</math>. Gdybyśmy wykorzystali charakteryzację <math>\mathrm{NP} =  \mathrm{PCP}_{1,\frac{1}{2}}(\log n, 1)</math>, uzyskalibyśmy podobny rezultat mówiący o tym, że nie istnieje algorytm <math>\epsilon</math>-aproksymacyjny dla problemu CLIQUE.


{{twierdzenie|7.1||
{{twierdzenie|7.1||
Istnieją stałe <math>\displaystyle c</math> i <math>\displaystyle d</math> takie, że dla każdej instancji <math>\displaystyle \phi</math> problem SAT można skonstruować graf <math>\displaystyle G</math> o <math>\displaystyle n^{c+d}</math> wierzchołkach taki, że dla problemu CLIQUE:
Istnieją stałe <math>c</math> i <math>d</math> takie, że dla każdej instancji <math>\phi</math> problem SAT można skonstruować graf <math>G</math> o <math>n^{c+d}</math> wierzchołkach taki, że dla problemu CLIQUE:
* <math>\displaystyle \textnormal{opt} (G)  \geq n^c</math>, gdy <math>\displaystyle \phi \in </math> SAT,
* <math>\text{opt} (G)  \geq n^c</math>, gdy <math>\phi \in </math> SAT,
* <math>\displaystyle \textnormal{opt} (G)  < n^{c-1}</math>, gdy <math>\displaystyle \phi \notin </math> SAT.
* <math>\text{opt} (G)  < n^{c-1}</math>, gdy <math>\phi \notin </math> SAT.


}}
}}


{{dowod|||
{{dowod|||
Niech <math>\displaystyle V</math> będzie weryfikatorem klasy <math>\displaystyle  \cc{PCP}_{1,\frac{1}{n}}(\log n, \log n) </math> dla języka SAT. <math>\displaystyle V</math> podczas działania używa co najwyżej <math>\displaystyle c\log n</math> bitów losowych i <math>\displaystyle d\log n</math> bitów świadka.
Niech <math>V</math> będzie weryfikatorem klasy <math>\mathrm{PCP}_{1,\frac{1}{n}}(\log n, \log n)</math> dla języka SAT. <math>V</math> podczas działania używa co najwyżej <math>c\log n</math> bitów losowych i <math>d\log n</math> bitów świadka.


Konstruujemy graf <math>\displaystyle G=(\braq{V,E})</math>, gdzie wierzchołki <math>\displaystyle V</math> odpowiadają parom ciągów bitowych długości <math>\displaystyle c\log n</math> i <math>\displaystyle d\log n</math>. Takich par jest oczywiście <math>\displaystyle n^{c+d}</math>. Wierzchołek reprezentujący ciągi <math>\displaystyle r</math> i <math>\displaystyle b</math> oznaczamy przez <math>\displaystyle v_{r,b}</math> i intuicyjnie będzie on odpowiadał sytuacji, kiedy ciągiem losowym był <math>\displaystyle r</math>, a odczytane bity świadka tworzą ciąg <math>\displaystyle b</math>.
Konstruujemy graf <math>G=(\mathit{V,E})</math>, gdzie wierzchołki <math>V</math> odpowiadają parom ciągów bitowych długości <math>c\log n</math> i <math>d\log n</math>. Takich par jest oczywiście <math>n^{c+d}</math>. Wierzchołek reprezentujący ciągi <math>r</math> i <math>b</math> oznaczamy przez <math>v_{r,b}</math> i intuicyjnie będzie on odpowiadał sytuacji, kiedy ciągiem losowym był <math>r</math>, a odczytane bity świadka tworzą ciąg <math>b</math>.


Wierzchołek <math>\displaystyle v_{r,b}</math> jest akceptujący, gdy weryfikator <math>\displaystyle V</math> akceptuje formułę <math>\displaystyle \phi</math> przy ciągu bitów losowych równym <math>\displaystyle r</math> i odczytach świadka równych <math>\displaystyle b</math>.
Wierzchołek <math>v_{r,b}</math> jest akceptujący, gdy weryfikator <math>V</math> akceptuje formułę <math>\phi</math> przy ciągu bitów losowych równym <math>r</math> i odczytach świadka równych <math>b</math>.


Dwa wierzchołki <math>\displaystyle v_{r_1,b_1}</math> i <math>\displaystyle v_{r_2,b_2}</math> łączymy krawędzią, gdy oba są akceptujące i bity odczytane z tych samych pozycji świadka są takie same w <math>\displaystyle b_1</math> i <math>\displaystyle b_2</math>. Zauważmy, że jeżeli <math>\displaystyle r_1 = r_2</math> i <math>\displaystyle b_1 \neq b_2</math>, to nie może być krawędzi łączącej <math>\displaystyle v_{r_1,b_1}</math> z <math>\displaystyle v_{r_2,b_2}</math>, gdyż pierwszy bit rozróżniający <math>\displaystyle b_1</math> i <math>\displaystyle b_2</math> jest odczytywany przez <math>\displaystyle V</math> z tej samej pozycji.
Dwa wierzchołki <math>v_{r_1,b_1}</math> i <math>v_{r_2,b_2}</math> łączymy krawędzią, gdy oba są akceptujące i bity odczytane z tych samych pozycji świadka są takie same w <math>b_1</math> i <math>b_2</math>. Zauważmy, że jeżeli <math>r_1 = r_2</math> i <math>b_1 \neq b_2</math>, to nie może być krawędzi łączącej <math>v_{r_1,b_1}</math> z <math>v_{r_2,b_2}</math>, gdyż pierwszy bit rozróżniający <math>b_1</math> i <math>b_2</math> jest odczytywany przez <math>V</math> z tej samej pozycji.


Jeżeli formuła <math>\displaystyle \phi</math> jest spełnialna, to istnieje taki świadek <math>\displaystyle y</math>, przy którym każdy ciąg losowy długości <math>\displaystyle c\log n</math> zapewnia akceptację. Zatem wierzchołki odpowiadające wszystkim możliwym <math>\displaystyle r</math> i odczytom <math>\displaystyle b</math>, takim jak przy świadku <math>\displaystyle y</math>, tworzą klikę. Rozmiar tej kliki to <math>\displaystyle n^c</math>.
Jeżeli formuła <math>\phi</math> jest spełnialna, to istnieje taki świadek <math>y</math>, przy którym każdy ciąg losowy długości <math>c\log n</math> zapewnia akceptację. Zatem wierzchołki odpowiadające wszystkim możliwym <math>r</math> i odczytom <math>b</math>, takim jak przy świadku <math>y</math>, tworzą klikę. Rozmiar tej kliki to <math>n^c</math>.


Jeżeli natomiast formuła <math>\displaystyle \phi</math> nie jest spełnialna, a <math>\displaystyle C</math> jest kliką w grafie <math>\displaystyle G</math>, to musi zachodzić <math>\displaystyle |\size{C}| < n^{c-1}</math>. Gdyby było przeciwnie, to zauważmy, że klika <math>\displaystyle C</math> generuje pewnego świadka <math>\displaystyle y</math>, który odpowiada odczytom w wierzchołkach kliki (być może bity na nie wszystkich pozycjach są określone, ale nie jest to istotne). Zauważmy dalej, że jeżeli <math>\displaystyle |\size{C}| \geq n^{c-1}</math>, to wierzchołki <math>\displaystyle C</math> odpowiadają <math>\displaystyle n^{c-1}</math> różnym ciągom losowym <math>\displaystyle r</math> i przy każdym z nich weryfikator <math>\displaystyle V</math> akceptuje formułę <math>\displaystyle \phi</math>.
Jeżeli natomiast formuła <math>\phi</math> nie jest spełnialna, a <math>C</math> jest kliką w grafie <math>G</math>, to musi zachodzić <math>|\mathit{C}| < n^{c-1}</math>. Gdyby było przeciwnie, to zauważmy, że klika <math>C</math> generuje pewnego świadka <math>y</math>, który odpowiada odczytom w wierzchołkach kliki (być może bity na nie wszystkich pozycjach są określone, ale nie jest to istotne). Zauważmy dalej, że jeżeli <math>|\mathit{C}| \geq n^{c-1}</math>, to wierzchołki <math>C</math> odpowiadają <math>n^{c-1}</math> różnym ciągom losowym <math>r</math> i przy każdym z nich weryfikator <math>V</math> akceptuje formułę <math>\phi</math>.


Zatem przy świadku <math>\displaystyle y</math> prawdopodobieństwo zaakceptowania formuły <math>\displaystyle \phi</math> jest większe lub równe <math>\displaystyle \frac{n^{c-1}}{n^c} = \frac{1}{n}</math>. Jest to niemożliwe ze względu na to, że formuła <math>\displaystyle \phi</math> nie jest spełnialna, a <math>\displaystyle V</math> ma prawdopodbieństwo błędnej akceptacji mniejsze od <math>\displaystyle \frac{1}{n}</math>.
Zatem przy świadku <math>y</math> prawdopodobieństwo zaakceptowania formuły <math>\phi</math> jest większe lub równe <math>\frac{n^{c-1}}{n^c} = \frac{1}{n}</math>. Jest to niemożliwe ze względu na to, że formuła <math>\phi</math> nie jest spełnialna, a <math>V</math> ma prawdopodbieństwo błędnej akceptacji mniejsze od <math>\frac{1}{n}</math>.


Zatem rozmiar największej kliki w grafie <math>\displaystyle G</math> skonstruowanym dla niespełnialnej formuły <math>\displaystyle \phi</math> musi być mniejszy od <math>\displaystyle n^{c-1}</math>.
Zatem rozmiar największej kliki w grafie <math>G</math> skonstruowanym dla niespełnialnej formuły <math>\phi</math> musi być mniejszy od <math>n^{c-1}</math>.
}}
}}


{{wniosek|7.2||
{{wniosek|7.2||
Istnieje stała <math>\displaystyle 0 < \epsilon < 1</math> taka, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to nie istnieje algorytm <math>\displaystyle \frac{1}{n^\epsilon}</math>-aproksymacyjny dla problemu CLIQUE.
Istnieje stała <math>0 < \epsilon < 1</math> taka, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie istnieje algorytm <math>\frac{1}{n^\epsilon}</math>-aproksymacyjny dla problemu CLIQUE.
}}
}}


{{dowod|||
{{dowod|||
Ustalmy <math>\displaystyle \epsilon = \frac{1}{c}</math> dla stałej <math>\displaystyle c</math> z poprzedniego twierdzenia. Niech <math>\displaystyle \mathcal{A}</math> będzie algorytmem <math>\displaystyle \frac{1}{n^\epsilon}</math>-aproksymacyjnym dla problemu CLIQUE.
Ustalmy <math>\epsilon = \frac{1}{c}</math> dla stałej <math>c</math> z poprzedniego twierdzenia. Niech <math>\mathcal{A}</math> będzie algorytmem <math>\frac{1}{n^\epsilon}</math>-aproksymacyjnym dla problemu CLIQUE.


Dla dowolnej formuły <math>\displaystyle \phi</math> możemy skonstruować graf <math>\displaystyle G</math> taki jak w poprzednim twierdzeniu.
Dla dowolnej formuły <math>\phi</math> możemy skonstruować graf <math>G</math> taki jak w poprzednim twierdzeniu.


Jeżeli <math>\displaystyle \phi</math> jest spełnialna, to <math>\displaystyle \textnormal{opt} (G) \geq n^c</math> i algorytm <math>\displaystyle \mathcal{A}</math> znajdzie rozwiązanie o rozmiarze większym lub równym:
Jeżeli <math>\phi</math> jest spełnialna, to <math>\text{opt} (G) \geq n^c</math> i algorytm <math>\mathcal{A}</math> znajdzie rozwiązanie o rozmiarze większym lub równym:


<center><math>\displaystyle (\braq{\frac{1}{n^\frac{1}{c}}}) n^c = \frac{n^c}{n^\frac{1}{c}} = n^{c-\frac{1}{c}} \geq n^{c-1}\textnormal{.}
<center><math>(\mathit{\frac{1}{n^\frac{1}{c}}}) n^c = \frac{n^c}{n^\frac{1}{c}} = n^{c-\frac{1}{c}} \geq n^{c-1}\text{.}
</math></center>
</math></center>


Jeżeli natomiast <math>\displaystyle \phi</math> nie jest spełnialna to rozmiar każdego rozwiązania jest mniejszy od <math>\displaystyle n^{c-1}</math>.
Jeżeli natomiast <math>\phi</math> nie jest spełnialna to rozmiar każdego rozwiązania jest mniejszy od <math>n^{c-1}</math>.


Możemy zatem przy pomocy algorytmu <math>\displaystyle \mathcal{A}</math> rozstrzygnąć <math>\displaystyle \cc{NP}</math>-zupełny problem SAT, co jest sprzeczne z założeniem <math>\displaystyle \cc{P} \neq \cc{NP}</math>.
Możemy zatem przy pomocy algorytmu <math>\mathcal{A}</math> rozstrzygnąć <math>\mathrm{NP}</math>-zupełny problem SAT, co jest sprzeczne z założeniem <math>\mathrm{P} \neq \mathrm{NP}</math>.
}}
}}


{{wniosek|7.3||
{{wniosek|7.3||
Istnieje stała <math>\displaystyle 0 < \epsilon < 1</math> taka, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to nie istnieje algorytm <math>\displaystyle \frac{1}{n^\epsilon}</math>-aproksymacyjny dla problemu INDEPENDENT SET.
Istnieje stała <math>0 < \epsilon < 1</math> taka, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie istnieje algorytm <math>\frac{1}{n^\epsilon}</math>-aproksymacyjny dla problemu INDEPENDENT SET.
}}
}}


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

Aktualna wersja na dzień 22:18, 11 wrz 2023

Wprowadzenie

Dotychczasowa analiza NP-zupełnych problemów optymalizacyjnych pokazała dużą rozpiętość, jeżeli chodzi o możliwości ich aproksymacji. Z jednej strony poznaliśmy problemy, jak problem plecakowy, które można aproksymować z dowolnie dobrą dokładnością. Z drugiej strony spotkaliśmy problemy, jak problem komiwojażera, gdzie w ogólnym przypadku niemożliwa jest żadna aproksymacja.

Ciekawą klasą leżącą gdzieś pomiędzy tymi dwoma skrajnościami jest klasa MAXSNP, gdzie problemy mają algorytmy ze stałą aproksymacji, ale nie wiemy jeszcze nic o schematach dla problemów z tej klasy. Dla wielu konkretnych problemów takie schematy istnieją, ale szczególnie interesujący byłby schemat, dla któregoś z problemów MAXSNP-zupełnych. Odkrycie takiego schematu pociągałoby za sobą istnienie schematów dla wszystkich problemów z klasy MAXSNP.

Okazuje się, że pytanie o taki schemat jest równoważne pytaniu P=?NP. Jeżeli PNP, to nie może istnieć schemat aproksymacji dla żadnego problemu MAXSNP-zupełnego. Sercem dowodu tego faktu jest twierdzenie PCP, które przedstawimy. Twierdzenie to stało się istotnym kamieniem milowym w badaniach nad aproksymacją optymalizacyjnych problemów NP-zupełnych. Pozwoliło nie tylko rozwiązać pytania dotyczące klasy MAXSNP, ale także wykazać wiele ograniczeń na możliwości aproksymowania rozwiązań różnych konkretnych problemów.

Po przedstawieniu tego fascynującego twierdzenia pokażemy różne, niestety negatywne wnioski, jakie z niego wynikają dla teorii algorytmów aproksymacyjnych.

Weryfikatory

Żeby móc w ogóle wyrazić twierdzenie potrzebujemy całkiem nowego pojęcia, które teraz wprowadzimy.

Przypomnijmy definicję klasy NP z użyciem świadka. Klasa NP to języki L, które mogą być przedstawione w postaci:

L={x:y(x,y)R} ,

gdzie relacja R jest wielomianowo zrównoważona.

Ta definicja jest dość sztywna i trudno za jej pomocą uchwycić jakieś własności problemów optymalizacyjnych. Dlatego wprowadza się definicję systemu PCP, co od angielskiego probabilistically checkable proof oznacza dowód weryfikowalny propabilistycznie.

W definicji tej pozwala się maszynie rozpoznającej język na korzystanie z bitów losowych (dostępnych na osobnej taśmie), ale wymaga się ograniczenia w korzystaniu z dostępnego świadka.

Definicja 2.1

Weryfikatorem nazywamy deterministyczną maszynę Turinga, która oprócz taśmy roboczej ma dostęp do taśmy z ciągiem bitów losowych oraz taśmy, na której jest zapisany świadek. Obliczenie weryfikatora musi zawsze się kończyć i akceptować lub odrzucać słowo wejściowe. Weryfikator jest ograniczony przez funkcje naturalne p i q, jeżeli dla słowa wejściowego x odczytuje co najwyżej 𝒪p(|x|) bitów losowych i co najwyżej 𝒪q(|x|) bitów świadka. Będziemy o nim wtedy mówić, że jest (p,q)-ograniczonym weryfikatorem.

Najciekawszymi ograniczeniami są logn na liczbę bitów losowych i 1 na liczbę bitów świadka. Języki rozpoznawane w czasie wielomianowym przez takie weryfikatory tworzą klasę PCP(logn,1).

Rys.9.1. Weryfikator.

Definicja 2.2

Język L należy do PCP(logn,1), jeżeli istnieje weryfikator V oraz stałe c i d takie, że dla wejścia x V działa w czasie wielomianowym od |x| bez względu na odczytane bity losowe i świadka. Podczas działania odczytuje co najwyżej clog|x| bitów losowych i co najwyżej d bitów świadka.

  • Jeżeli słowo xL, to istnieje taki świadek y, że V akceptuje z prawdopodobieństwem 1.
  • Jeżeli słowo xL, to dla każdego świadka y V odrzuca z prawdopodobieństwem większym od 12.

Klasy PCP(p,q) definiuje się analogicznie. Charakteryzację klasy NP, którą przypomnieliśmy na samym początku, możemy teraz wyrazić używając nowej terminologii równaniem:

NP=PCP(0,poly(n)).

Możemy teraz sformułować długo zapowiadane twierdzenie PCP:

Twierdzenie 2.3

NP=PCP(logn,1)

Dowód

Dowód jednej części tego twierdzenia jest prosty. Żeby pokazać zawieranie PCP(logn,1)NP, wystarczy przeanalizować następującą niedeterministyczną maszynę Turinga:

[Niedeterministyczny symulator weryfikatora]
1. Wybierz niedeterministycznie świadka y o rozmiarze wielomianowym.
2. Dla każdego ciągu bitów b długości clogn zasymuluj działanie weryfikatora na słowie wejściowym przy świadku y i ciągu bitów losowych b.
3. Zaakceptuj słowo, jeżeli wszystkie symulacje weryfikatora zakończyły się akceptująco.

Dowód drugiego zawierania używa bardzo zaawansowanych technik i niestety zdecydowanie wykracza poza zakres tego kursu.

Ćwiczenie 2.5

Pseudoweryfikator dla SAT.

Pokaż (logn,1)-ograniczony weryfikator dla języka 3SAT, który akceptuje niespełnialne formuły z prawdopodobieństwem nie większym niż 11m, gdzie m jest liczbą klauzul.

Wskazówka
Rozwiązanie


Ćwiczenie 2.6

Charakteryzacje P i NP poprzez PCP.

Uzasadnij poniższe równości:

  • P=PCP(0,0)=PCP(logn,0)=PCP(0,logn),
  • NP=PCP(logn,1)=PCP(logn,poly(n)).
Wskazówka
Rozwiązanie

Twierdzenie PCP a problem MAX3SAT

Wprowadzona terminologia PCP miała pozwolić na analizę złożoności problemów optymalizacyjnych. Przedstawimy teraz twierdzenie równoważne twierdzeniu PCP, które pokazuje, że o ile PNP, to nie ma wielomianowego schematu aproksymacji dla problemu MAX3SAT. Wspomniane twierdzenie brzmi:

Twierdzenie 3.1

Istnieje stała 0<ϵ<1 taka, że dla każdej instancji ϕ problemu SAT można skonstruować instancję ψ problemu MAX3SAT o m klauzulach i następujących własnościach:

  • opt(ψ)=m, gdy ϕ SAT,
  • opt(ψ)<ϵm, gdy ϕ SAT.

Dowód

Dowód będzie się opierał o twierdzenie PCP.

Ponieważ NP=PCP(logn,1), to niech V będzie weryfikatorem wykorzystującym clogn bitów losowych i d bitów świadka dla formuły ϕ problemu SAT zapisanej na n bitach. Dla każdego słowa r długości clogn jako ciągu bitów losowych, V czyta co najwyżej d bitów świadka. W związku z tym liczbę różnych bitów świadka, które są czytane przy jakimkolwiek ciągu losowym, można ograniczyć przez dnc. Dla każdego z tych bitów wprowadzamy osobną zmienną. Zbiór tak powstałych zmiennych nazywamy B, a na problem weryfikacji będziemy patrzeć jak na znalezienie wartościowania dla tych zmiennych.

Skonstruujemy teraz taką instancję problemu MAXdFSAT, że jeśli ϕ jest spełnialna, to istnieje wartościowanie, przy którym wszystkie funkcje dają wynik pozytywny, a jeżeli ϕ nie jest spełnialna, to co najwyżej połowa funkcji może jednocześnie dać wynik pozytywny.

Jako zbiór zmiennych wybieramy B. Dla każdego słowa r tworzymy funkcję logiczną fr, która odpowiada obliczeniu V na ϕ przy ciągu losowym r. Przy ustalonym r znamy algorytm V, zawartość taśmy wejściowej i taśmy z ciągiem losowym. Odwołania do świadka tłumaczymy na odwołania do zmiennych z B. Każda z funkcji fr odwołuje się do co najwyżej d zmiennych. Funkcję fr możemy zatem skonstruować w czasie wielomianowym, ponieważ mamy gwarancję, że V działa w czasie wielomianowym.

Możemy zatem skonstruować taką instancję w czasie wielomianowym. Pozostaje zatem pokazać własności rozwiązania optymalnego dla tej instancji. Jeżeli ϕ jest spełnialna, to istnieje świadek taki, że weryfikator V akceptuje słowo dla każdego ciągu losowego r. Zatem przy wartościowaniu zmiennych odpowiadającemu temu świadkowi wszystkie funkcje fr dają wynik pozytywny. Jeżeli natomiast ϕ nie jest spełnialna, to dla każdego świadka (a więc przy każdym naborze zmiennych B), dla co najmniej połowy możliwych ciągów r wartość fr jest negatywna.

Możemy teraz wykorzystać L-redukcję problemu MAXdFSAT do MAX3SAT. Jeżeli wszystkie funkcje są jednocześnie spełnialne (a więc kiedy istnieje świadek gwarantujący akceptację V), to redukcja tworzy formułę MAX3SAT, w której wszystkie klauzule są jednocześnie spełnialne.

Jeżeli natomiast przynajmniej połowa funkcji jest niespełniona, to również stała frakcja klauzul w fromule MAX3SAT musi pozostać niespełniona. Wystarczy przypomnieć, że liczba klauzul odpowiadających bramkom wyjściowym była liniowa względem ilości wszystkich innych bramek.

Wniosek 3.2

O ile PNP, to istnieje stała 0<ϵ<1 taka, że nie jest możliwa ϵ-aproksymacja problemu MAX3SAT. Nie istnieje zatem też PTAS dla tego problemu.

Wniosek ten ma kluczowe znaczenie dla klasy MAXSNP i pokazuje, że rzeczywiście twierdzenie PCP jest ważnym narzędziem w badaniu aproksymacji.

Teraz pokażemy, że przy wykorzystaniu właśnie udowodnionego twierdzenia można dość łatwo udowodnić twierdzenie PCP. W ten sposób jeszcze mocniej potwierdzimy związki twiedzenia PCP z teorią algorytmów aproksymacyjnych.

Dowód

Chcemy pokazać, że o ile istnieje stała ϵ taka, jak w poprzednim twierdzeniu, to można skonstruować odpowiedni weryfikator dla każdego języka z NP.

Skonstruujemy (logn,1)-ograniczony weryfikator dla języka SAT. Dowód, że pociąga to za sobą istnienie takich weryfikatorów dla innych języków w NP, pozostawiamy jako ćwiczenie.

Weryfikator będzie działał w następujący sposób:

[Weryfikator dla SAT]
1. Wczytaj formułę logiczną ϕ.
2. Skonstruuj instancję ψ problemu MAX3SAT, taką jak w poprzednim twierdzeniu.
3. Potraktuj świadka jako wartościowanie zmiennych występujących w ψ.
4. Użyj bitów losowych do wyznaczenia k klauzul, których wartość zostanie sprawdzona.
5. Zaakceptuj ϕ, jeżeli wszystkie sprawdzenia wypadły pozytywnie.
W przeciwnym przypadku odrzuć formułę ϕ.

Stałą k dobieramy tak, żeby ϵk<12. Zauważmy, że nowy weryfikator korzysta z klogm bitów losowych do wyznaczenia numerów sprawdzanych klauzul i 3k bitów świadka. Jeżeli ϕ jest spełnialna, to wszystkie klauzule ψ mogą być jednocześnie spełnione i wartościowanie realizujące optimum jest świadkiem gwarantującym zaakceptowanie ϕ. Z kolei jeżeli ϕ nie jest spełnialna, to losowo wybrana klauzula jest wartościowana pozytywnie z prawdopodobieństwem mniejszym od ϵ. W związku z tym dokonanie k sprawdzeń gwarantuje, że formuła ϕ zostanie zaakceptowana z prawdopodobieństwem mniejszym od 12.

Dowiedliśmy zatem, że skonstruowany weryfikator rozpoznaje język SAT.

Ćwiczenie 3.4

Weryfikatory dla innych języków.

Pokaż, że jeżeli istnieje (logn,1)-ograniczony weryfikator dla języka SAT, to można skonstruować (logn,1)-ograniczony weryfikator dla dowolnego języka z klasy NP.

Wskazówka
Rozwiązanie


Ćwiczenie 3.6

PTAS dla problemów MAXSNP-trudnych.

Pokaż, że o ile PNP, to dla żadnego z problemów MAXSNP-trudnych (w sensie L-redukcji) nie istnieje algorytm PTAS.

Wskazówka
Rozwiązanie

Inne problemy MAXSNP-zupełne

Pokazaliśmy, że dla żadnego z problemów MAXSNP-trudnych nie może istnieć wielomianowy schemat aproksymacji. Nie znamy jednak jeszcze zbyt wielu takich problemów. Pokażemy teraz o kilku problemach, że są MAXSNP-zupełne. Pozwoli nam to nie tylko stwierdzić, że nie ma dla nich algorytmów PTAS, ale także da nam narzędzia do stwierdzenia o wielu innych problemach, że są MAXSNP-trudne.

kOCCUR MAXlSAT

Pewną bazową rodziną problemów będą problemy kOCCUR MAXlSAT. Są to wersje problemu MAXlSAT, w których liczba wszystkich wystąpień każdej pojedynczej zmiennej jest ograniczona przez k.

Bardzo łatwo można dowieść, że problem 3OCCUR 3SAT jest NP-zupełny. Zredukujemy problem 3SAT. Jeżeli w formule ϕ jakaś zmienna x występuje wielokrotnie w formule, powiedzmy k razy, to możemy stworzyć k nowych zmiennych: x1,x2,,xk. Każde wystąpienie zmiennej x zamienić na wystąpienie innej zmiennej xi, a następnie dodać gadżet, który zapewni, że każda ze zmiennych xi musi być wartościowana tak samo. Takim gadżetem może być ciąg klauzul:

(x1¬x2)(x2¬x3)(xk1¬xk)(xk¬x1).

Okazuje się jednak, że użycie tego konkretnego gadżetu nie zapewnia L-redukcji. Wartościowanie nowych zmiennych w optymalnym rozwiązaniu problemu maksymalizacji spełnialności wcale nie musi być zgodne na zmiennych x1,x2,,xk.

Żeby skonstruować lepszy gadżet, użyjemy specjalnych grafów-ekspanderów.

Definicja 4.1

Graf G=(V,E) nazywamy {ekspanderem}, jeśli wszystkie jego wierzchołki mają ten sam stopień i dla dowolnego niepustego podzbioru SV zachodzi:

|E(S,VS)|>min(|S|,|VS|) ,

gdzie E(A,B) jest zbiorem krawędzi o jednym końcu w A, a drugim w B.

Ekspandery mają bardzo interesujące zastosowania w kilku dziedzinach współczesnej matematyki i informatyki. My wykorzystamy ich własności do skonstruowania odpowiedniego gadżetu zapewniającego zgodne wartościowanie zmiennych x1,x2,,xk.

Przypuśćmy, że znamy algorytm, który dla zadanej liczby n wygeneruje ekspander o n wierzchołkach, z których każdy ma stopień d, gdzie d jest pewną stałą. Używając tego algorytmu, pokażemy L-redukcję problemu MAX3SAT do (2d+1)OCCUR MAX3SAT.

Twierdzenie 4.2

(2d+1)OCCUR MAX3SAT jest MAXSNP-zupełny.

Dowód

Redukcja przebiega tak jak poprzednio. Dla zmiennej x występującej k razy w formule ϕ tworzymy k zmiennych x1,x2,,xk dla nowej formuły ψ. Następnie przepisujemy wszystkie klauzule z ϕ do ψ, zamieniając każde wystąpienie x na inną ze zmiennych xi.

Potem konstruujemy k-elementowy ekspander Fx o stopniu wierzchołków d. Etykietujemy wierzchołki grafu Fx zmiennymi Vx=x1,x2,,xk. Dla każdej krawędzi xixj w grafie Fx dodajemy do formuły ψ klauzule (xi¬xj) i (¬xixj).

Do formuły ψ dodaliśmy kd2 nowych klauzul. Zauważmy, że jeżeli wartościowanie zmiennych x1,x2,,xk jest zgodne, to wszystkie dodane klauzule są spełnione. Jeżeli natomiast zbiór SVx jest wartościowany odwrotnie niż VxS, to własności ekspanedera gwarantują, że co najmniej min(|S|,|VxS|)+1 klauzul jest niespełnionych.

Zauważmy, że skonstruowana formuła ψ jest formułą problemu (2d+1)OCCUR MAX3SAT. Każda ze zmiennych występuje dokładnie w 2d klauzulach odpowiadających krawędziom ekspandera i w jednej klazuli pochodzącej z formuły ϕ.

Pokażemy teraz, że każde rozwiązanie optymalne dla formuły ψ musi być zgodne na zmiennych x1,x2,,xk. Weźmy zatem jakieś rozwiązanie optymalne, które przyporządkowuje różne wartości zmiennym x1,x2,,xk. Niech S będzie mniejszym z podzbiorów, który jest wartościowany zgodnie. Zastanówmy się co by się stało, gdybyśmy odwrócili wartościowanie zmiennych z S? Zmienne te występują w |S| klauzulach z formuły ϕ, które po tej zamianie mogłyby przestać być spełnione. Stracilibyśmy zatem najwyżej |S| spełnionych klauzul. Z drugiej jednak strony zyskalibyśmy |S|+1 spełnionych klauzul opisujących krawędzie ekspandera. Zatem nowe rozwiązanie spełniałoby co najmniej jedną kaluzulę więcej niż poprzednie, przecząc optymalności.

Jeżeli w formule ϕ było m klauzul, to było co najwyżej 3m wystąpień zmiennych, a w formule ψ w związku z tym jest co najwyżej (2d+1)3m klauzul. Przypomnijmy, że optimum dla problemu MAX3SAT wynosi co najmniej m2 i możemy w związku z tym ustalić współczynnik α dla L-redukcji na (2d+1)6.

Postaramy się teraz ustalić współczynnik β, aby zakończyć dowód. Możemy założyć, że w rozwiązaniu dla formuły ψ każda grupa zmiennych x1,x2,,xk jest zgodnie wartościowana. Gdyby było przeciwnie, to na podstawie przeprowadzonego rozumowania można by takie rozwiązanie łatwo poprawić. Ta "poprawka" może być realizowana przez funkcję przeprowadzającą rozwiązania. Łatwo zauważyć, że w tej sytuacji ilość niespełnionych klauzul w formule ψ jest dokładnie równa liczbie niespełnionych klauzul przy wartościowaniu wyznaczonym dla formuły ϕ. Współczynnik β wynosi zatem 1.

Pokazaliśmy L-redukcję MAXSNP-zupełnego problemu MAX3SAT do (2d+1)OCCUR MAX3SAT, co pozwala nam stwierdzić, że ten drugi problem również jest MAXSNP-zupełny.

Siła właśnie udowodnionego twierdzenia zależy od tego, jakie ekspandery potrafimy generować. Można bardzo łatwo udowodnić metodami propabilistycznymi, że prawie każdy graf, w którym wszystkie wierzchołki mają ten sam stopień, jest ekspanderem. Dowód taki jednak nie daje żadnej efektywnej metody konstruowania ekspanderów.

Do działania zdefiniowanej L-redukcji jest potrzebny algorytm generowania dowolnie dużych ekspanderów o ustalonym stopniu wierzchołków. Są znane algorytmy, które realizują to zadanie, ale ich opis wykracza poza zakres tego kursu.

Podobnymi metodami, korzystając z grafów o właściwościach bardzo podobnych do ekspanderów, można pokazać, że już problem 3OCCUR MAX3SAT jest MAXSNP-zupełny. Skorzystamy z tego faktu, nie przedstawiając szczegółowego dowodu.

Wykorzystamy teraz problem 3OCCUR MAX3SAT do pokazania MAXSNP-zupełności kilku problemów.

Lemat 4.3

Problemy 4-NODE COVER i 4-INDEPENDENT SET są MAXSNP-zupełne.

Dowód

Przypomnijmy, że już pokazaliśmy, że problemy k-NODE COVER i k-INDEPENDENT SET należą do klasy MAXSNP. Teraz wystarczy przypomnieć sobie zwykłą redukcję problemu 3SAT do NODE COVER, która tworzy trójkąt dla każdej klauzuli i łączy krawędziami przeciwne literały. Ta redukcja w przypadku formuły 3OCCUR MAX3SAT stworzy graf, w którym stopień wierzchołka będzie ograniczony przez 4.

Łatwo uzasadnić, że ta redukcja jest L-redukcją, gdyż przynajmniej połowa z m klauzul jest spełnialna, a rozmiar minimalnego pokrycia wierzchołkowego jest ograniczony przez liczbę wierzchołków równą 3m. Współczynnik β jak zwykle wynosi 1.

Uzasadniliśmy, że problem 4-NODE COVER jest MAXSNP-zupełny. Znamy już L-redukcję k-NODE COVER do k-INDEPENDENT SET. Pozwala nam to stwierdzić MAXSNP-zupełność problemu 4-INDEPENDENT SET.

Wniosek 4.4

Problemy NODE COVER i INDEPENDENT SET są MAXSNP-trudne.

Lemat 4.5

Problemy 5OCCUR MAX2SAT i MAX NAE3SAT są MAXSNP-zupełne.

Dowód

Żeby pokazać MAXSNP-zupełność problemu 5OCCUR MAX2SAT, skonstruujemy L-redukcję problemu 4-INDEPENDENT SET. Mając dany graf G=(V,E), konstruujemy formułę, tworząc następujące klauzule:

  • (x) dla każdego wierzchołka xV.
  • (¬x¬y) dla każdej krawędzi xyE.

Skonstruowana formuła ma |V|+|E| klauzul. Możemy tę liczbę ograniczyć przez 3|V|. Z kolei, przypominając analizę L-redukcji k-INDEPENDENT SET do k-NODE COVER, możemy stwierdzić, że rozmiar maksymalnego zbioru niezależnego wynosi co najmniej |V|5. Zatem współczynnik α L-redukcji ustalamy na 15.

Możemy założyć, że znalezione rozwiązanie wartościuje pozytywnie wszystkie klauzule odpowiadające krawędziom. Jeżeli tak nie jest, to można je zmodyfikować, falsyfikując którąkolwiek zmienną w nim występującą i nie pogorszy to wyniku. Stracimy co najwyżej jedną spełnioną klauzulę, ale na pewno zyskamy co najmniej jedną.

W związku z tym każde rozwiązanie 5OCCUR MAX2SAT wyznacza zbiór niezależny wierzchołków, które są wartościowane pozytywnie. Odległość od rozwiązania optymalnego jest w obu przypadkach taka sama i w związku z tym możemy ustalić współczynnik β=1.

L-redukcja problemu MAX2SAT do MAX NAE3SAT przebiega w bardzo łatwy sposób. Do każdej klauzuli dopisujemy wystąpienie nowej zmiennej x. Wystarczy zauważyć, że jeżeli jakieś wartościowanie zmiennych NAE-spełnia daną formułę, to wartościowanie do niego odwrotne również. Możemy zatem założyć, że zmienna x zawsze jest wartościowana negatywnie. Maksymalna liczba klauzul spełnialnych jednocześnie, jak i spełnionych przy konkretnym wartościowaniu jest zatem taka sama w obu problemach i możemy ustalić współczynniki α=1 i β=1.

Ćwiczenie 4.6

MAX CUT jest MAXSNP-zupełny.

Wskazówka
Rozwiązanie


Ćwiczenie 4.7

(2d+1)OCCUR MAX NAE3SAT jest MAXSNP-zupełny.

Wskazówka
Rozwiązanie

Problem INDEPENDENT SET

Wiemy już, że problem INDEPENDENT SET jest MAXSNP-trudny, gdyż jego zawężenia są zupełne dla tej klasy. Oznacza to, że o ile PNP, to nie ma algorytmu PTAS dla INDEPENDENT SET. Udowodnimy teraz, że nie jest możliwa również aproksymacja ze stałą. Pokażemy, że jeżeli istniałby jakikolwiek algorytm ze stałą aproksymacji, to można by to wykorzystać do stworzenia algorytmu PTAS.

Co ciekawe, fakt ten był znany na długo przed pojawieniem się twierdzenia PCP. Wiedziano, że problem INDEPENDENT SET albo można aproksymować dowolnie dobrze, albo w ogóle. Dopiero twierdzenie PCP rozwiało wątpliowści, która z tych możliwości jest prawdziwa.

Żeby udowodnić zapowiedziane twierdzenie, będziemy chcieli przyjrzeć się następującej konstrukcji:

Definicja 5.1

Dla dwóch grafów G=(VG,EG) i H=(VH,EH) {grafem iloczynowym} G×H oznaczamy graf o wierzchołkach VG×VH i krawędziach:

  • (a,x)(b,y) dla abEG i dowolnych x i y.
  • (a,x)(a,y) dla xyEH.
Rys.9.2. Graf iloczynowy

Przykład 5.2

Konstrukcja odpowiada "włożeniu" grafu H w każdy wierzchołek grafu G. Nam będzie potrzebna tylko konstrukcja G2=G×G.

Lemat 5.3

W grafie G=(V,E) istnieje zbiór niezależny rozmiaru k wtedy i tylko wtedy, gdy w G2 istnieje zbiór niezależny rozmiaru k2.

Dowód

Jeżeli IV jest zbiorem niezależnym rozmiaru k w G, to zbiór I2={(x,y):xIyI} jest zbiorem niezależnym rozmiaru k2 w grafie G2.

Jeżeli natomiast IV2 jest zbiorem niezależnym rozmiaru k2 w G2, to każdy ze zbiorów:

  • I1={x:y(x,y)I},
  • I2x={y:(x,y)I} dla każdego xI1,

musi być zbiorem niezależnym w G. Jeżeli rozmiar każdego z tych zbiorów byłby mniejszy od k, to rozmiar I byłby mniejszy od k2. Zatem któryś z tych zbiorów musi mieć rozmiar większy lub równy k.

Twierdzenie 5.4

Jeżeli istnieje algorytm a-aproksymacyjny dla problemu INDEPENDENT SET, to istnieje algorytm PTAS dla tego problemu.

Dowód

Załóżmy, że 𝒜 jest a-aproksymacyjnym algorytmem dla problemu INDEPENDENT SET. Niech k będzie rozmiarem maksymalnego zbioru niezależnego w grafie G. Jeżeli wykonamy algorytm 𝒜 na grafie G2, to otrzymamy zbiór niezależny rozmiaru ak2. Poprzedni lemat zapewnia, że w czasie wielomianowym możemy z tego rozwiązania uzyskać pewien zbiór niezależny rozmiaru ak2. Tym samym stworzyliśmy nowy algorytm, który jest a-aproksymacyjny.

Skorzystamy teraz z tego, że dla 0<a1 ciąg a2n ma granicę w nieskończoności równą 1. Schemat PTAS powstaje w związku z tym przez zastosowanie algorytmu 𝒜 dla grafu G2n, dla odpowiednio dużego n. Jeżeli chcemy osiągnąć (1ϵ)-aproksymację, to otrzymamy następujące oszacowanie na n:

1ϵa2n(1epsilon)2na2nlog1ϵanlog2(log1ϵa).

Ćwiczenie 5.5

Algorytm zachłanny dla problemu INDEPENDENT SET.

Pokazaliśmy, że o ile PNP, to nie ma algorytmu a-aproksymacyjnego dla INDEPENDENT SET. Pokaż, że algorytm zachłanny nie jest algorytmem a-aproksymacyjnym.

Algorytm zachłanny.
Dopóki w grafie są wierzchołki:
1. Wybierz wierzchołek v o najmniejszym stopniu.
2. Dodaj v do zbioru niezależnego i usuń go z grafu wraz ze wszystkimi sąsiadami.
Wskazówka
Rozwiązanie

Pewniejsze weryfikatory

Przedstawimy teraz pewne uogólnienie definicji języków rozpoznawanych przez weryfikatory. To wzbogacenie pozwoli nam w następnej części pokazać bardzo ciekawe ograniczenie możliwości aproksymacji.

W definicji języka rozpoznawanego przez ograniczony weryfikator wymagaliśmy, aby prawdopodobieństwo zaakceptowania słowa z języka przy odpowiednim świadku wynosiło 1, a prawdopodobieństwo zaakceptowania słowa spoza języka przy żadnym świadku nie przekraczało 12. Spróbujemy się teraz przyjrzeć sytuacji, w której stałe 1 i 12 mogą się zmieniać.

Definicja 6.1

Język L należy do klasy PCPc,s(p,q), jeżeli istnieje weryfikator V, który dla wejścia x długości n bitów działa w czasie wielomianowym od n, korzysta z 𝒪p(n) bitów losowych i 𝒪q(n) bitów świadka oraz:

  • Dla xL istnieje świadek y taki, że V akceptuje z prawdopodobieństwem większym lub równym c.
  • Dla xL, dla każdego świadka y, V akceptuje z prawdopodobieństwem mniejszym od s.

Zauważmy, że wcześniejsza definicja PCP(p,q) odpowiada teraz PCP1,12(p,q). Dość łatwo można uzyskać równość PCP1,12(logn,1)=PCP1,a(logn,1) dla każdej stałej 0<a<1. Działanie weryfikatora klasy PCP1,a(logn,1) można powtórzyć k razy, otrzymując weryfikator klasy PCP1,ak(klogn,k). Dlatego naprawdę ciekawe rezultaty otrzymamy dopiero, kiedy dopuścimy, aby c i s mogły zależeć od n.

Szczególnie interesującym wydaje się ograniczenie błędnej akceptacji w sposób odwrotnie proporcjonalny do rozmiaru wejścia. Równość PCP1,12(logn,1)=PCP1,1n(log2n,logn) otrzymujemy tą samą metodą. Możemy przecież powtórzyć działanie weryfikatora logn razy, wykorzystując logn razy więcej bitów losowych i bitów świadka.

Okazuje się jednak, że można użyć znacznie mniej bitów losowych. Mówi o tym następujące twierdzenie:

Twierdzenie 6.2

NP=PCP1,1n(logn,logn).

Dowód

Przypomnijmy, że pokazaliśmy, że NP=PCP(logn,poly(n)) i w związku z tym zawieranie PCP1,1n(logn,logn)NP nie wymaga dalszego komentarza.

Aby pokazać, że NP=PCP1,12(logn,1)PCP1,1n(logn,logn), odwołamy się jeszcze raz do ekspanderów. Okazuje się, że nadają się one świetnie do zmniejszenia liczby bitów losowych wymaganych przy obliczeniu. Konkretnie skorzystamy z następującej własności, którą pozostawimy bez dowodu:

Twierdzenie 6.3

Jeżeli graf F=(V,E) jest ekspanderem o nc wierzchołkach i SV jest podzbiorem wierzchołków takim, że |S|<|V|2, to istnieje stała k taka, że prawdopodobieństwo następującego zdarzenia:

"Wszystkie wierzchołki losowej ścieżki długości klogn należą do S ",

jest mniejsze od 1n.

Zauważmy, że aby opisać ścieżkę losową długości klogn w ekspanderze potrzeba 𝒪logn bitów -- clogn bitów opisuje wierzchołek początkowy, a ponieważ wierzchołki ekspandera mają stały stopień, to do opisania każdej kolejnej krawędzi jest potrzebna stała ilość bitów.

To spostrzeżenie jest kluczowe dla dowodu. Pozwala ono opisać ścieżkę, która ma dobre właściwości "przeglądania" grafu przy pomocy 𝒪logn bitów.

Niech V będzie (logn,1)-ograniczonym weryfikatorem dla języka L. V używa podczas obliczenia co najwyżej clogn bitów losowych i d bitów świadka.

Skonstruujemy weryfikator W klasy PCP1,1n(logn,logn) dla języka L.

Algorytm 6.4 [Weryfikator klasy PCP1,1n(logn,logn)]


1. Skonstruuj ekspander F o nc wierzchołkach.
Każdy wierzchołek jest etykietowany ciągiem clogn bitów.

2. Używając klogn bitów losowych, wygeneruj ścieżkę losową P w grafie F.

3. Przechodząc ścieżkę P, dokonaj symulacji weryfikatora V
na ciągu losowym reprezentowanym przez każdy z wierzchołków.

4. Zaakceptuj słowo, jeżeli każda z symulacji weryfikatora V zakończyła się akceptacją.

Podany algorytm weryfikatora działa w czasie wielomianowym od n, używa 𝒪logn bitów losowych do ustalenia ścieżki P, a podczas wszystkich symulacji weryfikatora V używane jest w sumie 𝒪logn bitów świadka.

Jeżeli słowo xL, to istnieje świadek y, przy którym prawdopodobieństwo akceptacji weryfikatora V wynosi 1. Dla tego samego świadka weryfikator W także dokona akceptacji z prawdopodobieństwem 1.

Jeżeli natomiast xL, to dla każdego świadka y prawdopodobieństwo akceptacji przez weryfikator V jest mniejsze od 12. Oznaczmy przez S wierzchołki F, które reprezentują te ciągi bitów losowych, przy których następuje akceptacja. Własności ścieżek losowych w ekspanderach zapewniają, że prawdopodobieństwo, że ścieżka P w całości znajduje się w S jest mniejsze od 1n. Jeżeli ścieżka P wyjdzie poza zbiór S, to weryfikator W odrzuci słowo. W związku z tym prawdopodobieństwo błędnej akceptacji jest mniejsze od 1n.

Ćwiczenie 6.5

Niepewny weryfikator.

Nie analizowaliśmy jeszcze weryfikatorów, dla których prawdopodobieństwo akceptacji słowa należącego do języka jest mniejsze od 1. Pokaż, że dla dowolnego 0<ϵ<12 zachodzi:

NP=PCP1ϵ,12(logn,1).
Wskazówka
Rozwiązanie

Problem CLIQUE

Jest to kontynuacja naszych rozważań dotyczących aproksymacji problemu INDEPENDENT SET. Każdy wynik dotyczący aproksymacji problemu CLIQUE jest jednocześnie wynikiem dla INDEPENDENT SET. Wystarczy przecież zamienić graf na jego dopełnienie, żeby jeden problem zamienił się w drugi. Tylko ze względu na wygodniejsze oznaczenia zdecydowaliśmy się "przenieść" do grafu dopełnieniowego i rozważać problem CLIQUE zamiast INDEPENDENT SET.

Wykorzystamy teraz nowo wprowadzone definicje do pokazania bardzo ciekawego rezultatu. Udowodnimy mianowicie, że o ile PNP, to dla problemu CLIQUE nie istnieje algorytm α-aproksymacyjny, gdzie α(n)=1nϵ dla pewnego 0<ϵ<1.

Jest to stwierdzenie mocniejsze niż wyniki pokazane wcześniej, gdyż podaje pewne asymptotyczne ograniczenie możliwości tworzenia algorytmów α-aproksymacyjnych.

Dowód będzie w swojej konstrukcji przypominał dowód nieaproksymowalności MAX3SAT w oparciu o twierdzenie PCP. Z tą różnicą, że tym razem wykorzystamy weryfikator klasy PCP1,1n(logn,logn). Gdybyśmy wykorzystali charakteryzację NP=PCP1,12(logn,1), uzyskalibyśmy podobny rezultat mówiący o tym, że nie istnieje algorytm ϵ-aproksymacyjny dla problemu CLIQUE.

Twierdzenie 7.1

Istnieją stałe c i d takie, że dla każdej instancji ϕ problem SAT można skonstruować graf G o nc+d wierzchołkach taki, że dla problemu CLIQUE:

  • opt(G)nc, gdy ϕ SAT,
  • opt(G)<nc1, gdy ϕ SAT.

Dowód

Niech V będzie weryfikatorem klasy PCP1,1n(logn,logn) dla języka SAT. V podczas działania używa co najwyżej clogn bitów losowych i dlogn bitów świadka.

Konstruujemy graf G=(V,E), gdzie wierzchołki V odpowiadają parom ciągów bitowych długości clogn i dlogn. Takich par jest oczywiście nc+d. Wierzchołek reprezentujący ciągi r i b oznaczamy przez vr,b i intuicyjnie będzie on odpowiadał sytuacji, kiedy ciągiem losowym był r, a odczytane bity świadka tworzą ciąg b.

Wierzchołek vr,b jest akceptujący, gdy weryfikator V akceptuje formułę ϕ przy ciągu bitów losowych równym r i odczytach świadka równych b.

Dwa wierzchołki vr1,b1 i vr2,b2 łączymy krawędzią, gdy oba są akceptujące i bity odczytane z tych samych pozycji świadka są takie same w b1 i b2. Zauważmy, że jeżeli r1=r2 i b1b2, to nie może być krawędzi łączącej vr1,b1 z vr2,b2, gdyż pierwszy bit rozróżniający b1 i b2 jest odczytywany przez V z tej samej pozycji.

Jeżeli formuła ϕ jest spełnialna, to istnieje taki świadek y, przy którym każdy ciąg losowy długości clogn zapewnia akceptację. Zatem wierzchołki odpowiadające wszystkim możliwym r i odczytom b, takim jak przy świadku y, tworzą klikę. Rozmiar tej kliki to nc.

Jeżeli natomiast formuła ϕ nie jest spełnialna, a C jest kliką w grafie G, to musi zachodzić |C|<nc1. Gdyby było przeciwnie, to zauważmy, że klika C generuje pewnego świadka y, który odpowiada odczytom w wierzchołkach kliki (być może bity na nie wszystkich pozycjach są określone, ale nie jest to istotne). Zauważmy dalej, że jeżeli |C|nc1, to wierzchołki C odpowiadają nc1 różnym ciągom losowym r i przy każdym z nich weryfikator V akceptuje formułę ϕ.

Zatem przy świadku y prawdopodobieństwo zaakceptowania formuły ϕ jest większe lub równe nc1nc=1n. Jest to niemożliwe ze względu na to, że formuła ϕ nie jest spełnialna, a V ma prawdopodbieństwo błędnej akceptacji mniejsze od 1n.

Zatem rozmiar największej kliki w grafie G skonstruowanym dla niespełnialnej formuły ϕ musi być mniejszy od nc1.

Wniosek 7.2

Istnieje stała 0<ϵ<1 taka, że o ile PNP, to nie istnieje algorytm 1nϵ-aproksymacyjny dla problemu CLIQUE.

Dowód

Ustalmy ϵ=1c dla stałej c z poprzedniego twierdzenia. Niech 𝒜 będzie algorytmem 1nϵ-aproksymacyjnym dla problemu CLIQUE.

Dla dowolnej formuły ϕ możemy skonstruować graf G taki jak w poprzednim twierdzeniu.

Jeżeli ϕ jest spełnialna, to opt(G)nc i algorytm 𝒜 znajdzie rozwiązanie o rozmiarze większym lub równym:

(1n1c)nc=ncn1c=nc1cnc1.

Jeżeli natomiast ϕ nie jest spełnialna to rozmiar każdego rozwiązania jest mniejszy od nc1.

Możemy zatem przy pomocy algorytmu 𝒜 rozstrzygnąć NP-zupełny problem SAT, co jest sprzeczne z założeniem PNP.

Wniosek 7.3

Istnieje stała 0<ϵ<1 taka, że o ile PNP, to nie istnieje algorytm 1nϵ-aproksymacyjny dla problemu INDEPENDENT SET.

Testy końcowe