Złożoność obliczeniowa/Wykład 8: Schematy aproksymacji i klasa MAXSNP: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arek (dyskusja | edycje)
Nie podano opisu zmian
m Zastępowanie tekstu – „<math> ” na „<math>”
 
(Nie pokazano 81 wersji utworzonych przez 5 użytkowników)
Linia 1: Linia 1:
<div class="thumb"><div style="width:250px;">
<flashwrap>file=ZO-8-1.swf|size=small</flashwrap>
<div.thumbcaption>Rysunek 8.1.</div></div></div>
<div class="thumb"><div style="width:300px;">
<flash>file=ZO-8-2.swf|width=300|height=200</flash>
<div.thumbcaption>Rysunek 8.2.</div>
</div></div>
''Uwaga: przekonwertowane latex2mediawiki; prawdopodobnie trzeba wprowadzi� poprawki''
==Wprowadzenie==
==Wprowadzenie==


Na poprzednim wykładzie zajmowaliśmy się algorytmami
W poprzednim wykładzie zajmowaliśmy się algorytmami
aproksymacyjnymi dla przykładowych trudnych problemów
aproksymacyjnymi dla przykładowych trudnych problemów
optymalizacyjnych. Dla większości z tych algorytmów udawało nam się
optymalizacyjnych. Dla większości z tych algorytmów udawało nam się
Linia 19: Linia 7:
efektywności przybliżenia.
efektywności przybliżenia.


W tym module postawimy sobie znacznie ambitniejsze zadanie -
W tym module postawimy sobie znacznie ambitniejsze zadanie.
będziemy szukać algorytmów, którym na wejściu ustala się
Będziemy szukać algorytmów, którym na wejściu ustala się
dopuszczalny błąd przybliżenia rozwiązania optymalnego. Pokażemy
dopuszczalny błąd przybliżenia rozwiązania optymalnego. Pokażemy
problemy, dla których jest możliwa taka "dowolnie dokładna"
problemy, dla których jest możliwa taka "dowolnie dokładna"
aproksymacja.
aproksymacja.


W drugiej części poznamy klasę <math>\displaystyle \cc{MAXSNP}</math> - jest to bardzo szeroka i interesująca klasa problemów optymalizacyjnych, a pytanie o to, czy należące do niej problemy mogą być dowolnie dobrze aproksymowane było bardzo istotnym zagadnieniem teorii algorytmów aproksymacyjnych. Odpowiedź na to pytanie poznamy dopiero w następnym module.
W drugiej części poznamy klasę <math>\mathrm{MAXSNP}</math>. Jest to bardzo szeroka i interesująca klasa problemów optymalizacyjnych, a pytanie o to, czy należące do niej problemy mogą być dowolnie dobrze aproksymowane, było bardzo istotnym zagadnieniem teorii algorytmów aproksymacyjnych. Odpowiedź na to pytanie poznamy dopiero w następnym module.


==Schematy aproksymacji==
==Schematy aproksymacji==
Linia 31: Linia 19:
Żeby wyrazić te nowe oczekiwania potrzebujemy nowych notacji:
Żeby wyrazić te nowe oczekiwania potrzebujemy nowych notacji:


{{definicja|||
{{definicja|2.1||
Mówimy, że algorytm <math>\displaystyle \mathcal{A}</math> jest {schematem aproksymacji} dla problemu <math>\displaystyle \cc{NP}</math>-optymalizacyjnego <math>\displaystyle \Pi</math>, jeżeli dla wejścia <math>\displaystyle \braq{I,\epsilon}</math>, gdzie <math>\displaystyle I</math> jest instancją problemu <math>\displaystyle \Pi</math>, a <math>\displaystyle \epsilon > 0</math> opisuje dopuszczalny błąd, znajduje rozwiązanie takie, że:
Mówimy, że algorytm <math>\mathcal{A}</math> jest {schematem aproksymacji} dla problemu <math>\mathrm{NP}</math>-optymalizacyjnego <math>\Pi</math>, jeżeli dla wejścia <math>(\mathit{I,\epsilon})</math>, gdzie <math>I</math> jest instancją problemu <math>\Pi</math>, a <math>\epsilon > 0</math> opisuje dopuszczalny błąd, znajduje rozwiązanie takie, że:
* <math>\displaystyle  \obj_\Pi(I,{ \mathcal{A}(I,\epsilon) })  \leq \braq{1 + \epsilon} \opt_\Pi(I) </math> dla problemu minimalizacji.
* <math>\text{obj}_\Pi(I,{ \mathcal{A}(I,\epsilon) })  \leq (\mathit{1 + \epsilon}\text{opt} _\Pi(I)</math> dla problemu minimalizacji.
* <math>\displaystyle  \obj_\Pi(I,{ \mathcal{A}(I,\epsilon) })  \geq \braq{1 - \epsilon} \opt_\Pi(I) </math> dla problemu maksymalizacji.
* <math>\text{obj}_\Pi(I,{ \mathcal{A}(I,\epsilon) })  \geq (\mathit{1 - \epsilon}) \text{opt} _\Pi(I)</math> dla problemu maksymalizacji.
   
   
}}
}}


{{definicja|||
{{definicja|2.2||
Jeśli dla dowolnego <math>\displaystyle \epsilon > 0</math> czas działania <math>\displaystyle \mathcal{A}</math> na wejściu <math>\displaystyle \braq{I,\epsilon}</math> jest wielomianowy względem <math>\displaystyle \size{I}</math>, to <math>\displaystyle \mathcal{A}</math> jest {wielomianowym schematem aproksymacji}. Będziemy używać skróconej notacji PTAS (od ''polynomial time approximation scheme'') dla oznaczenia tego faktu.
Jeśli dla dowolnego <math>\epsilon > 0</math> czas działania <math>\mathcal{A}</math> na wejściu <math>(\mathit{I,\epsilon})</math> jest wielomianowy względem <math>|\mathit{I}|</math>, to <math>\mathcal{A}</math> jest {wielomianowym schematem aproksymacji}. Będziemy używać skróconej notacji PTAS (od ''polynomial time approximation scheme'') dla oznaczenia tego faktu.
}}
}}


Linia 45: Linia 33:
tylko względem rozmiaru instancji przy ustalonym dopuszczalnym
tylko względem rozmiaru instancji przy ustalonym dopuszczalnym
błędzie. Oznacza to, że czas działania może być nawet wykładniczy
błędzie. Oznacza to, że czas działania może być nawet wykładniczy
względem wartości parametru <math>\displaystyle \epsilon</math>. Nie jest to sytuacja
względem wartości parametru <math>\epsilon</math>. Nie jest to sytuacja
komfortowa. Możemy w związku z tym wzmocnić wymagania postawione dla
komfortowa. Możemy w związku z tym wzmocnić wymagania postawione dla
algorytmu.
algorytmu.


{{definicja|||
{{definicja|2.3||
Jeżeli czas działania algorytmu <math>\displaystyle \mathcal{A}</math> jest wielomianowy względem <math>\displaystyle \size{I}</math>
Jeżeli czas działania algorytmu <math>\mathcal{A}</math> jest wielomianowy względem <math>|\mathit{I}|</math>
oraz wartości <math>\displaystyle \frac{1}{\epsilon}</math>, to <math>\displaystyle \mathcal{A}</math> jest
oraz wartości <math>\frac{1}{\epsilon}</math>, to <math>\mathcal{A}</math> jest
{w pełni wielomianowym schematem aproksymacji}.
{w pełni wielomianowym schematem aproksymacji}.
Omawiając takie algorytmy będziemy używać notacji FPTAS (''fully
Omawiając takie algorytmy, będziemy używać notacji FPTAS (''fully
polynomial time approximation scheme'').
polynomial time approximation scheme'').
}}
}}


{{cwiczenie|||
{{cwiczenie|2.4||
FPTAS dla problemów silnie <math>\displaystyle \cc{NP}</math>-zupełnych.
FPTAS dla problemów silnie <math>\mathrm{NP}</math>-zupełnych.


Wykaż, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, i <math>\displaystyle \Pi</math> jest silnie <math>\displaystyle \cc{NP}</math>-zupełnym
Wykaż, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math> i <math>\Pi</math> jest silnie <math>\mathrm{NP}</math>-zupełnym
problemem optymalizacyjnym takim, że funkcja celu <math>\displaystyle \obj_\Pi</math>
problemem optymalizacyjnym takim, że funkcja celu <math>\text{obj}_\Pi</math>
przyjmuje wartości całkowite i ograniczone wielomianowo od rozmiaru
przyjmuje wartości całkowite i ograniczone wielomianowo od rozmiaru
instancji wejściowej oraz jej największej liczby, to nie istnieje
instancji wejściowej oraz jej największej liczby, to nie istnieje
algorytm FPTAS dla <math>\displaystyle \Pi</math>.
algorytm FPTAS dla <math>\Pi</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">   
Wykorzystaj ograniczenie na wartości funkcji celu do zdefiniowania odpowiedniego
Wykorzystaj ograniczenie na wartości funkcji celu do zdefiniowania odpowiedniego
progu dopuszczalnego błędu w algorytmie FPTAS. Otrzymasz algorytm pseudowielomianowy
progu dopuszczalnego błędu w algorytmie FPTAS. Otrzymasz algorytm pseudowielomianowy
dla silnie <math>\displaystyle \cc{NP}</math>-zupełnej decyzyjnej wersji problemu <math>\displaystyle \Pi</math>.
dla silnie <math>\mathrm{NP}</math>-zupełnej decyzyjnej wersji problemu <math>\Pi</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">   
Niech <math>\displaystyle \Pi</math> będzie problemem maksymalizacji z funkcją celu
Niech <math>\Pi</math> będzie problemem maksymalizacji z funkcją celu
<math>\displaystyle \obj_\Pi</math> (dla problemu minimalizacji dowód przebiega
<math>\text{obj}_\Pi</math> (dla problemu minimalizacji dowód przebiega
analogicznie). Załóżmy, że jej wartości są całkowite dodatnie oraz
analogicznie). Załóżmy, że jej wartości są całkowite dodatnie oraz
dla każdej instancji <math>\displaystyle I</math>, <math>\displaystyle \obj_\Pi(I) < p(|I|,NUM(I))</math>, gdzie <math>\displaystyle p</math>
dla każdej instancji <math>I</math>, <math>\text{obj}_\Pi(I) < p(|I|,NUM(I))</math>, gdzie <math>p</math>
jest pewnym wielomianem dwóch zmiennych, a <math>\displaystyle NUM(I)</math> jest skojarzoną
jest pewnym wielomianem dwóch zmiennych, a <math>NUM(I)</math> jest skojarzoną
z problemem funkcją określającą wartość największej liczby
z problemem funkcją określającą wartość największej liczby
występującej w instancji. Załóżmy, że <math>\displaystyle A</math> jest FPTAS dla <math>\displaystyle \Pi</math>.
występującej w instancji. Załóżmy, że <math>A</math> jest FPTAS dla <math>\Pi</math>.
Skonstruujemy algorytm pseudowielomianowy dla <math>\displaystyle \Pi</math>.
Skonstruujemy algorytm pseudowielomianowy dla <math>\Pi</math>.


Na wejściu dana jest instancja <math>\displaystyle I</math>. Algorytm składa sie z dwóch
Na wejściu dana jest instancja <math>I</math>. Algorytm składa sie z dwóch
kroków:
kroków:


1. oblicz <math>\displaystyle \delta = 1/p(|I|,NUM(I))</math>
1. oblicz <math>\delta = 1/p(|I|,NUM(I))</math>,


2. zastosuj <math>\displaystyle A</math> dla instancji <math>\displaystyle I</math> i dokładności <math>\displaystyle \delta</math>, obliczone
2. zastosuj <math>A</math> dla instancji <math>I</math> i dokładności <math>\delta</math> obliczone
rozwiązanie dopuszczalne <math>\displaystyle S</math> wypisz na wyjście.
rozwiązanie dopuszczalne <math>S</math> wypisz na wyjście.


Ponieważ <math>\displaystyle \Pi</math> jest maksymalizacyjny, więc <math>\displaystyle \obj_\Pi(I,S)\geq
Ponieważ <math>\Pi</math> jest maksymalizacyjny, więc <math>\text{obj}_\Pi(I,S)\geq
(1-\delta)</math>. Zatem <math>\displaystyle opt(I)-\obj_\Pi(I,S) \leq \delta \, opt(I) < 1</math>.
(1-\delta)</math>. Zatem <math>\text{opt}(I)-\text{obj}_\Pi(I,S) \leq \delta \, \text{opt}(I) < 1</math>.


Z tego, że wartości funkcji celu są całkowitoliczbowe, wynika
Z tego, że wartości funkcji celu są całkowitoliczbowe, wynika
<math>\displaystyle \obj_\Pi(I,S)=opt(I)</math>, a zatem nasz algorytm znajduje rozwiązania
<math>\text{obj}_\Pi(I,S)=\text{opt}(I)</math>, a zatem nasz algorytm znajduje rozwiązania
optymalne. Zgodnie z definicja FPTAS, algorytm działa w czasie
optymalne. Zgodnie z definicją FPTAS, algorytm działa w czasie
wielomianowym od <math>\displaystyle |I|</math> oraz <math>\displaystyle 1/\delta</math>, jest to więc algorytm
wielomianowym od <math>|I|</math> oraz <math>1/\delta</math>, jest to więc algorytm
pseudowielomianowy dla <math>\displaystyle \Pi</math>.
pseudowielomianowy dla <math>\Pi</math>.


Z analizowanych na poprzednim wykładzie własności silnej
Z analizowanych w poprzednim wykładzie własności silnej
NP-zupełności wynika, że musi to być algorytm wielomianowy dla
NP-zupełności wynika, że musi to być algorytm wielomianowy dla
<math>\displaystyle \Pi</math>, co oczywiście jest sprzeczne  z założeniem <math>\displaystyle \cc{P} \neq \cc{NP}</math>.
<math>\Pi</math>, co oczywiście jest sprzeczne  z założeniem <math>\mathrm{P} \neq \mathrm{NP}</math>.
</div></div>
</div></div>
}}


==Schemat aproksymacji dla problemu KNAPSACK==
==Schemat aproksymacji dla problemu KNAPSACK==


Pokazaliśmy, że nie warto szukać algorytmów FPTAS dla problemów silnie <math>\displaystyle \cc{NP}</math>-zupełnych. Rozpoczniemy w związku z tym dalsze poszukiwania schematów aproksymacyjnych od przyjrzenia się raz jeszcze problemowi plecakowemu. Wiemy, że nie jest to problem silnie <math>\displaystyle \cc{NP}</math>-zupełny i znamy dla niego algorytm pseudowielomianowy. Bardzo często istnienie algorytmu pseudowielomianowego można wykorzystać przy konstrukcjii schematów aproksymacji. Zobaczymy teraz klasyczną konstrukcję opartą o ten pomysł.
Pokazaliśmy, że nie warto szukać algorytmów FPTAS dla problemów silnie <math>\mathrm{NP}</math>-zupełnych. Rozpoczniemy w związku z tym dalsze poszukiwania schematów aproksymacyjnych od przyjrzenia się raz jeszcze problemowi plecakowemu. Wiemy, że nie jest to problem silnie <math>\mathrm{NP}</math>-zupełny i znamy dla niego algorytm pseudowielomianowy. Bardzo często istnienie algorytmu pseudowielomianowego można wykorzystać przy konstrukcjii schematów aproksymacji. Zobaczymy teraz klasyczną konstrukcję opartą o ten pomysł.


Pokażemy teraz algorytm pseudowielomianowemu rozwiązujący problem KNAPSACK. Poznaliśmy już jeden taki alorytm, ale tamten nie nadaje się do konstrukcji schematu aproksymacji.
Pokażemy teraz algorytm pseudowielomianowy rozwiązujący problem KNAPSACK. Poznaliśmy już jeden taki alorytm, ale tamten nie nadaje się do konstrukcji schematu aproksymacji.
   
   
Algorytm pseudowielomianowy dla problemu plecakowego.
{{algorytm|3.1 [Algorytm pseudowielomianowy dla problemu plecakowego]|al 2.1|
# Oblicz <math>\displaystyle V = \max_{i=1,2,\ldots,n}  v(a_i) </math>.
1. Oblicz <math>V = \max_{i=1,2,\ldots,n}  v(a_i)</math>.
# Oblicz <math>\displaystyle W_{i,u}</math> określone dla <math>\displaystyle 0 \leq i \leq n</math> i <math>\displaystyle 0 \leq u \leq nV</math> jako "minimalny sumaryczny rozmiar podzbioru przedmiotów <math>\displaystyle S \subseteq{a_1,a_2,\ldots,a_i}</math> taki że sumaryczna wartość tych przedmiotów wynosi dokładnie <math>\displaystyle u</math>". Obliczenia można dokonać metodą dynamiczną korzystając z następujących własności rekurencyjnych:
 
2. Oblicz <math>W_{i,u}</math> określone dla <math>0 \leq i \leq n</math> i <math>0 \leq u \leq nV</math> jako "minimalny sumaryczny rozmiar podzbioru przedmiotów <math>S \subseteq{a_1,a_2,\ldots,a_i}</math> taki, że sumaryczna wartość tych przedmiotów wynosi dokładnie <math>u</math>". Obliczenia można dokonać metodą dynamiczną, korzystając z następujących własności rekurencyjnych:
<math>\begin{align} W_{0,u} &= \infty\text{,} \\ W_{i+1,u} &=  \min(W_{i,u},W_{i,u- v(a_{i+1}) }+ w(a_{i+1}) )\text{.} \end{align}</math>


<center><math>\displaystyle \aligned W_{0,u} &= \infty \\
3. Odczytaj rozwiązanie z wartości <math>W</math>.}}
W_{i+1,u} &=  \min(W_{i,u},W_{i,u- v(a_{i+1}) }+ w(a_{i+1}) )
 
\endaligned</math></center>
Algorytm ten można zakodować tak, aby znajdował optymalne rozwiązanie w czasie <math>\mathcal{O}({n^2V})</math>. Szczegóły implementacji pozostawiamy jako ćwiczenie.
# Odczytaj rozwiązanie z wartości <math>\displaystyle W</math>.
 
Zauważmy, że gdyby wartości przedmiotów były ograniczone przez wielomianową funkcję <math>n</math>, to skonstruowany algorytm byłby wielomianowy. To jest podstawą schematu aproksymacji, który będzie zaokrąglał wartości przedmiotów tak, aby były one wielomianowe względem <math>n</math> i <math>\frac{1}{\epsilon}</math>. Oto algorytm:
Algorytm ten można zakodować tak, aby znajdował optymalne rozwiązanie w czasie <math>\displaystyle \notO{n^2V}</math>. Szczegóły implementacji pozostawiamy jako ćwiczenie.
 
{{algorytm|3.2 [Algorytm zaokrągleniowy]|al 2.2|
1. Oblicz <math>K = \frac{\epsilon V}{n}</math>.


Zauważmy, że gdyby wartości przedmiotów były ograniczone przez wielomianową funkcję <math>\displaystyle n</math>, to skonstruowany algorytm byłby wielomianowy. To jest podstawą schematu aproksymacji, który będzie zaokrąglał wartości przedmiotów tak, aby były one wielomianowe względem <math>\displaystyle n</math> i <math>\displaystyle \frac{1}{\epsilon}</math>. Oto algorytm:
2. Dla każdego przedmiotu oblicz <math>v'(a_i)  = [{\frac{ v(a_i) }{K}}]</math>.


Algorytm zaokrągleniowy.
3. Używając algorytmu pseudowielomianowego, rozwiąż problem z wartościami <math>v'</math>.}}
# Oblicz <math>\displaystyle K = \frac{\epsilon V}{n}</math>.
# Dla każdego przedmiotu oblicz <math>\displaystyle  v'(a_i)  = \floor{\frac{ v(a_i) }{K}}</math>.
# Używając algorytmu pseudowielomianowego rozwiąż problem z wartościami <math>\displaystyle v'</math>.
   
   
{{twierdzenie|||
{{twierdzenie|3.3||
Algorytm zaokrągleniowy jest FPTAS dla problemu plecakowego.
Algorytm zaokrągleniowy jest FPTAS dla problemu plecakowego.
}}
}}


{{dowod|||
{{dowod|||
Musimy pokazać, że dla zbioru <math>\displaystyle S</math> znajdowanego przez algorytm zachodzi:
Musimy pokazać, że dla zbioru <math>S</math> znajdowanego przez algorytm zachodzi:


<center><math>\displaystyle \sum_{i \in S}  v(a_i)  \geq \braq{1 - \epsilon} \opt
<center><math>\sum_{i \in S}  v(a_i)  \geq (\mathit{1 - \epsilon}\text{opt}\text{.}</math></center>
</math></center>


Niech <math>\displaystyle O</math> będzie rozwiązaniem optymalnym. Możemy wtedy zapisać ciąg nierówności:
Niech <math>O</math> będzie rozwiązaniem optymalnym. Możemy wtedy zapisać ciąg nierówności:


<center><math>\displaystyle \sum_{i \in S}  v(a_i)  \geq \sum_{i \in S} \floor{\frac{ v(a_i) }{K}} K \geq \sum_{i \in O} \floor{\frac{ v(a_i) }{K}} K \geq \sum_{i \in O} \braq{ v(a_i)  - K} \geq \sum_{i \in O}  v(a_i)  - nK
<center><math>\sum_{i \in S}  v(a_i)  \geq \sum_{i \in S} [{\frac{ v(a_i) }{K}}] K \geq \sum_{i \in O} [{\frac{ v(a_i) }{K}}] K \geq \sum_{i \in O} (\mathit{ v(a_i))  - K} \geq \sum_{i \in O}  v(a_i)  - nK\text{.}
</math></center>
</math></center>


Korzystamy po kolei z własności zaokrąglenia, optymalności rozwiązania <math>\displaystyle S</math> przy wartościach wydzielonych przez <math>\displaystyle K</math>, własności zaokrąglenia i tego, że <math>\displaystyle \size{S} \leq n</math>.
Korzystamy po kolei z własności zaokrąglenia, optymalności rozwiązania <math>S</math> przy wartościach wydzielonych przez <math>K</math>, własności zaokrąglenia i tego, że <math>|\mathit{S}| \leq n</math>.


Udowodniliśmy, że wartość rozwiązania znajdowanego przez algorytm jest nie mniejsze niż <math>\displaystyle \opt - nK = \opt - \epsilon V \geq \braq{1-\epsilon} \opt</math>. Jest to zatem schemat aproksymacyjny. Musimy jeszcze oszacować czas działania algorytmu. Wynosi on <math>\displaystyle \notO{n^2\floor{\frac{V}{K}}} = \notO{n^2\floor{\frac{n}{\epsilon}}}</math>, a więc jest wielomianowy zarówno względem <math>\displaystyle n</math>, jak i <math>\displaystyle \frac{1}{\epsilon}</math>.
Udowodniliśmy, że wartość rozwiązania znajdowanego przez algorytm jest nie mniejsze niż <math>\text{opt- nK = \text{opt- \epsilon V \geq (\mathit{1-\epsilon}) \text{opt}</math>. Jest to zatem schemat aproksymacyjny. Musimy jeszcze oszacować czas działania algorytmu. Wynosi on <math>\mathcal{O}({n^2[{\frac{V}{K}}]}) = \mathcal{O}({n^2[{\frac{n}{\epsilon}}]})</math>, a więc jest wielomianowy zarówno względem <math>n</math>, jak i <math>\frac{1}{\epsilon}</math>.
}}
}}


{{cwiczenie|||
{{cwiczenie|3.4||
Algorytm pseudowielomianowy.
Algorytm pseudowielomianowy.


Doprecyzuj implementację algorytmu pseudowielomianowego dla problemu plecakowego. Jak odzyskać wybór przedmiotów z tablicy <math>\displaystyle W_{i,u}</math>?
Doprecyzuj implementację algorytmu pseudowielomianowego dla problemu plecakowego. Jak odzyskać wybór przedmiotów z tablicy <math>W_{i,u}</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 standardowej konstrukcji algorytmu dynamicznego w oparciu o
Użyj standardowej konstrukcji algorytmu dynamicznego w oparciu o
Linia 161: Linia 147:


<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">   
Następujący program wypełni tablicę <math>\displaystyle W_{i,u}</math>:
Następujący program wypełni tablicę <math>W_{i,u}</math>:


{{algorytm|||
'''for''' <math>u=0,1,\ldots,V</math> '''do'''
'''for''' <math>\displaystyle u=0,1,\ldots,V\displaystyle W_{0,u} = \infty</math>
  <math>W_{0,u} = \infty</math>
'''endfor'''
'''end for'''
'''for''' <math>\displaystyle i=1,2,\ldots,n</math>  
'''for''' <math>i=1,2,\ldots,n</math> '''do'''
'''for''' <math>\displaystyle u=0,1,\ldots,nV\displaystyle W_{i,u} = W_{i-1,u}</math>
  '''for''' <math>u=0,1,\ldots,nV</math> '''do'''
'''if''' <math>\displaystyle u- v(a_i)  \geq 0</math> '''and''' <math>\displaystyle W_{i-1,u- v(a_i) }+ w(a_i)  < W_{i,u}\displaystyle W_{i,u} = W_{i-1,u- v(a_i) }+ w(a_{i}) </math>
    <math>W_{i,u} = W_{i-1,u}</math>
'''endif'''
    '''if''' <math>u- v(a_i)  \geq 0</math> '''and''' <math>W_{i-1,u- v(a_i) }+ w(a_i)  < W_{i,u}</math> '''then'''
'''endfor'''
      <math>W_{i,u} = W_{i-1,u- v(a_i) }+ w(a_{i})</math>
'''endfor'''
    '''end if'''
}}
  '''end for'''
'''end for'''


A ten pozowoli odszukać rozwiązanie optymalne:
A ten pozowoli odszukać rozwiązanie optymalne:


{{algorytm|||
<math>S=\emptyset</math>
<math>\displaystyle S=\emptyset\displaystyle o=0</math>
<math>o=0</math>
'''for''' <math>\displaystyle u=0,1,\ldots,nV</math>  
'''for''' <math>u=0,1,\ldots,nV</math> '''do'''
'''if''' <math>\displaystyle W_{n,u} \leq B\displaystyle o=u</math>
  '''if''' <math>W_{n,u} \leq B</math>
'''endif'''
    <math>o=u</math>
'''endfor'''
  '''end if'''
<math>\displaystyle i=n</math>
'''end for'''
'''while''' <math>\displaystyle o > 0</math>  
<math>i=n</math>
'''if''' <math>\displaystyle W_{i,o} = W_{i-1,o}\displaystyle i = i-1</math>
'''while''' <math>o > 0</math> '''do'''
'''else'''
  '''if''' <math>W_{i,o} = W_{i-1,o}</math> '''then'''
<math>\displaystyle S = S \cup \{i\}\displaystyle o = o -  v(a_i) \displaystyle i = i-1</math>
    <math>i = i-1</math>  
'''endif'''
  '''else'''
'''endwhile'''
    <math>S = S \cup \{i\}</math>
'''return''' <math>\displaystyle S</math>
    <math>o = o -  v(a_i)</math>
}}
    <math>i = i-1</math>
  '''end if'''
'''end while'''
'''return''' <math>S</math>


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


==Asymptotyczny PTAS dla BIN PACKING==
==Asymptotyczny PTAS dla BIN PACKING==
Linia 202: Linia 190:
dopuszczalnego błędu. Dla problemuu pakowania nie możemy się
dopuszczalnego błędu. Dla problemuu pakowania nie możemy się
spodziewać równie dobrych wyników. Jest to problem silnie
spodziewać równie dobrych wyników. Jest to problem silnie
<math>\displaystyle \cc{NP}</math>-zupełny i o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to nie może istnieć FPTAS.
<math>\mathrm{NP}</math>-zupełny i o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie może istnieć FPTAS.
Pokazaliśmy również, że nie ma algorytmu osiągającego stałą
Pokazaliśmy również, że nie ma algorytmu osiągającego stałą
aproksymacji mniejszą od <math>\displaystyle \frac{3}{2}</math>. Dowód opierał się o fakt, że
aproksymacji mniejszą od <math>\frac{3}{2}</math>. Dowód opierał się o fakt, że
o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math>, to nie da się efektywnie sprawdzać, czy da się
o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie da się efektywnie sprawdzać, czy da się
przedmioty upakować do dwóch pojemników.
przedmioty upakować do dwóch pojemników.


Instancje, które zabraniały aproksymacji lepszej niż <math>\displaystyle \frac{3}{2}</math>
Instancje, które zabraniały aproksymacji lepszej niż <math>\frac{3}{2}</math>
miały ograniczoną wartość optimum. Skonstruujemy teraz asymptotyczny
miały ograniczoną wartość optimum. Skonstruujemy teraz asymptotyczny
PTAS dla problemu pakowania, który może osiągać dowolnie dobrą
PTAS dla problemu pakowania, który może osiągać dowolnie dobrą
aproksymację ale dla odpowiednio dużych wartości optimum.
aproksymację, ale dla odpowiednio dużych wartości optimum.


Precyzując, podamy rodzinę algorytmów <math>\displaystyle \mathcal{A}_\epsilon</math> dla <math>\displaystyle 0 < \epsilon \leq \frac{1}{2}</math> działających w czasie wielomianowym od liczby przedmiotów i znajdujących rozwiązanie używające co najwyżej <math>\displaystyle \braq{1 + 2\epsilon}\opt + 1</math> pojemników.
Precyzując, podamy rodzinę algorytmów <math>\mathcal{A}_\epsilon</math> dla <math>0 < \epsilon \leq \frac{1}{2}</math> działających w czasie wielomianowym od liczby przedmiotów i znajdujących rozwiązanie używające co najwyżej <math>(\mathit{1 + 2\epsilon}) \text{opt+ 1</math> pojemników.


Zanim będziemy mogli przedstawić algorytmy <math>\displaystyle \mathcal{A}_\epsilon</math> musimy pokazać dwa pomocnicze lematy, które pokazują rozwiązania dla pewnych uproszczonych instancji problemu.
Zanim będziemy mogli przedstawić algorytmy <math>\mathcal{A}_\epsilon</math> musimy pokazać dwa pomocnicze lematy, które pokazują rozwiązania dla pewnych uproszczonych instancji problemu.


{{lemat|||
{{lemat|4.1||
Dla dowolnego <math>\displaystyle \epsilon > 0</math> oraz liczby całkowitej <math>\displaystyle K</math> istnieje algorytm wielomianowy rozwiązujący problem pakowania dla instancji, w których występują przedmioty o co najwyżej <math>\displaystyle K</math> różnych rozmiarach, z których każdy jest nie mniejszy niż <math>\displaystyle \epsilon</math>.
Dla dowolnego <math>\epsilon > 0</math> oraz liczby całkowitej <math>K</math> istnieje algorytm wielomianowy rozwiązujący problem pakowania dla instancji, w których występują przedmioty o co najwyżej <math>K</math> różnych rozmiarach, z których każdy jest nie mniejszy niż <math>\epsilon</math>.
}}
}}


{{dowod|||
{{dowod|||
Liczba przedmiotów w jednym pojemniku jest ograniczona przez <math>\displaystyle M=\floor{\frac{1}{\epsilon}}</math>. Suma rozmiarów większej liczby przedmiotów musi przekraczać <math>\displaystyle 1</math>, gdyż każdy z nich ma rozmiar nie mniejszy niż <math>\displaystyle \epsilon</math>.
Liczba przedmiotów w jednym pojemniku jest ograniczona przez <math>M=[{\frac{1}{\epsilon}}]</math>. Suma rozmiarów większej liczby przedmiotów musi przekraczać <math>1</math>, gdyż każdy z nich ma rozmiar nie mniejszy niż <math>\epsilon</math>.


Liczba możliwych zawartości jednego pojemnika jest zatem ograniczona przez <math>\displaystyle R=\binom{M+K}{M}</math>. Ograniczenie to uzyskujemy, gdyż jest to liczba <math>\displaystyle M</math>-elementowych multipodzbiorów zbioru <math>\displaystyle K</math>-elementowego. Zauważmy, że liczb <math>\displaystyle R</math> jest stałą zależną tylko od <math>\displaystyle K</math> i <math>\displaystyle \epsilon</math>.
Liczba możliwych zawartości jednego pojemnika jest zatem ograniczona przez <math>R=\binom{M+K}{M}</math>. Ograniczenie to uzyskujemy, gdyż jest to liczba <math>M</math>-elementowych multipodzbiorów zbioru <math>K</math>-elementowego. Zauważmy, że liczb <math>R</math> jest stałą zależną tylko od <math>K</math> i <math>\epsilon</math>.


Liczba pojemników w rozwiązaniu jest ograniczona w oczywisty sposób przez <math>\displaystyle n</math>. Zatem liczba możliwych rozwiązań dopuszczalnych jest ograniczona przez <math>\displaystyle P=\binom{n+R}{R}</math>. Tym razem jest to liczba <math>\displaystyle n</math>-elementowych multipodzbiorów zbioru <math>\displaystyle R</math>-elementowego.
Liczba pojemników w rozwiązaniu jest ograniczona w oczywisty sposób przez <math>n</math>. Zatem liczba możliwych rozwiązań dopuszczalnych jest ograniczona przez <math>P=\binom{n+R}{R}</math>. Tym razem jest to liczba <math>n</math>-elementowych multipodzbiorów zbioru <math>R</math>-elementowego.


Liczba <math>\displaystyle P</math> wyraża się wielomianem względem <math>\displaystyle n</math>. Możemy w związku z tym w czasie wielomianowy przejrzeć wszystkie rozwiązania dopuszczalne i wybrać optymalne.
Liczba <math>P</math> wyraża się wielomianem względem <math>n</math>. Możemy w związku z tym w czasie wielomianowym przejrzeć wszystkie rozwiązania dopuszczalne i wybrać optymalne.
 
{{uwaga|||
Niestety czas tego algorytmu jest wielomianem stopnia <math>\displaystyle R</math>. Jest to bardzo wysoki stopień i przez to algorytm ten nie może być traktowany jako praktyczne rozwiązanie problemu.
}}
}}


{{uwaga|4.2||
Niestety czas tego algorytmu jest wielomianem stopnia <math>R</math>. Jest to bardzo wysoki stopień i przez to algorytm ten nie może być traktowany jako praktyczne rozwiązanie problemu.
}}
}}


{{lemat|||
{{lemat|4.3||
Dla dowolnego <math>\displaystyle \epsilon > 0</math> istnieje wielomianowy algorytm <math>\displaystyle \braq{1+\epsilon}</math>-aproksymacyjny dla problemu pakowania dla instancji, w których występują przedmioty o rozmiarach nie mniejszych niż <math>\displaystyle \epsilon</math>.
Dla dowolnego <math>\epsilon > 0</math> istnieje wielomianowy algorytm <math>(\mathit{1+\epsilon})</math>-aproksymacyjny dla problemu pakowania dla instancji, w których występują przedmioty o rozmiarach nie mniejszych niż <math>\epsilon</math>.
}}
}}


{{dowod|||
{{dowod|||
   
   
Algorytm dzielący na grupy.
{{algorytm|4.4 [Algorytm dzielący na grupy]|al 3.4|
# Oblicz <math>\displaystyle K=\ceil{\frac{1}{\epsilon^2}}</math>.
1. Oblicz <math>K=[{\frac{1}{\epsilon^2}}]</math>.
# Posortuj przedmioty względem rosnącego rozmiaru i podziel posortowany ciąg na <math>\displaystyle K</math> grup tak, aby w każdej grupie było co najwyżej <math>\displaystyle Q=\floor{n\epsilon^2}</math> przedmiotów.
 
# Zamień rozmiar każdego z przedmiotów na rozmiar największego przedmiotu w tej samej grupie.
2. Posortuj przedmioty względem rosnącego rozmiaru i podziel posortowany ciąg na <math>K</math> grup tak, aby w każdej grupie było co najwyżej <math>Q=[{n\epsilon^2}]</math> przedmiotów.
# Użyj algorytmu z poprzedniego lematu działającego na przedmiotach o <math>\displaystyle K</math> różnych rozmiarach nie mniejszych niż <math>\displaystyle \epsilon</math>.
 
3. Zamień rozmiar każdego z przedmiotów na rozmiar największego przedmiotu w tej samej grupie.
 
4. Użyj algorytmu z poprzedniego lematu działającego na przedmiotach o <math>K</math> różnych rozmiarach nie mniejszych niż <math>\epsilon</math>.}}
   
   
Niech <math>\displaystyle I</math> będzie instancją podaną na wejściu algorytmu. Niech <math>\displaystyle I^*</math> będzie instancją otrzymaną w trzecim kroku algorytmu, a <math>\displaystyle I_*</math> instancją, którą otrzymalibyśmy zamieniając rozmiar każdego z przedmiotów na rozmiar najmniejszego w tej samej grupie.
Niech <math>I</math> będzie instancją podaną na wejściu algorytmu. Niech <math>I^*</math> będzie instancją otrzymaną w trzecim kroku algorytmu, a <math>I_*</math> instancją, którą otrzymalibyśmy, zamieniając rozmiar każdego z przedmiotów na rozmiar najmniejszego w tej samej grupie.


Wynikiem działania algorytmu jest rozwiązanie optymalne dla instancji <math>\displaystyle I^*</math>. Musimy wykazać, że <math>\displaystyle  \opt(I^*)  \leq \braq{1+\epsilon} \opt(I) </math>. Łatwo jest uzasadnić oszacowanie <math>\displaystyle  \opt(I_*)  \leq \opt(I) </math>.
Wynikiem działania algorytmu jest rozwiązanie optymalne dla instancji <math>I^*</math>. Musimy wykazać, że <math>\text{opt} (I^*)  \leq (\mathit{1+\epsilon}) \text{opt} (I)</math>. Łatwo jest uzasadnić oszacowanie <math>\text{opt} (I_*)  \leq \text{opt} (I)</math>.


Możemy teraz zauważyć, że każde rozwiązanie instancjii <math>\displaystyle I_*</math> wyznacza pewne rozwiązanie dla <math>\displaystyle I^*</math>. Ponieważ najmniejszy przedmiot z <math>\displaystyle i+1</math> grupy przedmiotów jest większy lub równy największemu przedmiotowi z grupy <math>\displaystyle i</math>. Zatem rozwiązanie instancji <math>\displaystyle I_*</math> pozwala upakować wszystkie przedmioty z instancji <math>\displaystyle I^*</math> oprócz ostatniej grupy. Więc nawet jeżeli każdy z tych przedmiotów zostałby upakowany do osobnego pojemnika, otrzymujemy ograniczenie:
Możemy teraz zauważyć, że każde rozwiązanie instancjii <math>I_*</math> wyznacza pewne rozwiązanie dla <math>I^*</math>, ponieważ najmniejszy przedmiot z <math>i+1</math> grupy przedmiotów jest większy lub równy największemu przedmiotowi z grupy <math>i</math>. Zatem rozwiązanie instancji <math>I_*</math> pozwala upakować wszystkie przedmioty z instancji <math>I^*</math> oprócz ostatniej grupy. Więc nawet jeżeli każdy z tych przedmiotów zostałby upakowany do osobnego pojemnika, otrzymujemy ograniczenie:


<center><math>\displaystyle  \opt(I^*)  \leq \opt(I_*)  + Q \leq \opt(I)  + Q \leq \opt(I)  + \floor{n\epsilon^2} \leq \braq{1+\epsilon} \opt(I)  
<center><math>\text{opt} (I^*)  \leq \text{opt} (I_*)  + Q \leq \text{opt} (I)  + Q \leq \text{opt} (I)  + [{n\epsilon^2}] \leq (\mathit{1+\epsilon}) \text{opt} (I)\text{.}
</math></center>
</math></center>


Ostatnia nierówność wynika z tego, że <math>\displaystyle n\epsilon \leq \opt(I) </math>. Pokazaliśmy zatem, że algorytm jest <math>\displaystyle \braq{1+\epsilon}</math>-aproksymacyjny.
Ostatnia nierówność wynika z tego, że <math>n\epsilon \leq \text{opt} (I)</math>. Pokazaliśmy zatem, że algorytm jest <math>(\mathit{1+\epsilon})</math>-aproksymacyjny.
}}
}}


Mając w ręku te dwa pomocnicze lematy możemy już pokazać algorytm <math>\displaystyle \mathcal{A}_\epsilon</math>.
Mając w ręku te dwa pomocnicze lematy, możemy już pokazać algorytm <math>\mathcal{A}_\epsilon</math>.
 
{{algorytm|4.5 [Algorytm <math>\mathcal{A}_\epsilon</math>]|al 3.5|
1. Stwórz instancję <math>I_{\geq\epsilon}</math>, usuwając wszystkie przedmioty o rozmiarze mniejszym od <math>\epsilon</math> z <math>I</math>.


Algorytm <math>\displaystyle \mathcal{A}_\epsilon</math>.
2. Oblicz instancję <math>I_{\geq\epsilon}^*</math> i znajdź dla niej optymalne upakowanie, korzystając z algorytmu przeglądającego wszystkie rozwiązania dopuszczalne.
# Stwórz instancję <math>\displaystyle I_{\geq\epsilon}</math> usuwając wszystkie przedmioty o rozmiarze mniejszym od <math>\displaystyle \epsilon</math> z <math>\displaystyle I</math>.
 
# Oblicz instancję <math>\displaystyle I_{\geq\epsilon}^*</math> i znajdź dla niej optymalne upakowanie korzystając z algorytmu przeglądającego wszystkie rozwiązania dopuszczalne.
3. Dopakuj przedmioty o rozmiarze mniejszym od <math>\epsilon</math> za pomocą algorytmu First-Fit, otrzymując rozwiązanie dla instancji wejściowej <math>I</math>.}}
# Dopakuj przedmioty o rozmiarze mniejszym od <math>\displaystyle \epsilon</math> za pomocą algorytmu First-Fit otrzymując rozwiązanie dla instancji wejściowej <math>\displaystyle I</math>.
   
   
{{twierdzenie|||
{{twierdzenie|4.6||
Dla dowolnego <math>\displaystyle 0 < \epsilon \leq \frac{1}{2}</math> algorytm <math>\displaystyle \mathcal{A}_\epsilon</math> znajduje upakowanie przedmiotów instancji <math>\displaystyle I</math> w co najwyżej <math>\displaystyle \braq{1 + 2\epsilon} \opt(I)  + 1</math> pojemnikach.
Dla dowolnego <math>0 < \epsilon \leq \frac{1}{2}</math> algorytm <math>\mathcal{A}_\epsilon</math> znajduje upakowanie przedmiotów instancji <math>I</math> w co najwyżej <math>(\mathit{1 + 2\epsilon}) \text{opt} (I)  + 1</math> pojemnikach.
}}
}}


{{dowod|||
{{dowod|||
Jeżeli w ostatnim kroku algorytmu nie zostały utworzone żadne nowe pojemniki, to rozwiązanie znalezione dla <math>\displaystyle I_{\geq\epsilon}</math> używa <math>\displaystyle \braq{1+\epsilon} \opt(I_{\geq\epsilon}) </math> pojemników, a więc spełnia warunki twierdzenia.
Jeżeli w ostatnim kroku algorytmu nie zostały utworzone żadne nowe pojemniki, to rozwiązanie znalezione dla <math>I_{\geq\epsilon}</math> używa <math>(\mathit{1+\epsilon}) \text{opt} (I_{\geq\epsilon})</math> pojemników, a więc spełnia warunki twierdzenia.


Jeżeli natomiast zostały utworzone nowe pojemniki, to zauważmy, że tylko w jednym ze wszystkich pojemników mogą znajdować się przedmioty o sumarycznym rozmiarze mniejszym niż <math>\displaystyle 1 - \epsilon</math>. Zatem jeżeli oznaczymy przez <math>\displaystyle M</math> liczbę wszystkich użytych pojemników, to sumarczyny rozmiar wszystkich przedmiotów (a więc i optimum) możemy ograniczyć z dołu przez <math>\displaystyle \braq{M-1}\braq{1-\epsilon}</math>. W związku z tym możemy napisać:
Jeżeli natomiast zostały utworzone nowe pojemniki, to zauważmy, że tylko w jednym ze wszystkich pojemników mogą znajdować się przedmioty o sumarycznym rozmiarze mniejszym niż <math>1 - \epsilon</math>. Zatem jeżeli oznaczymy przez <math>M</math> liczbę wszystkich użytych pojemników, to sumarczyny rozmiar wszystkich przedmiotów (a więc i optimum) możemy ograniczyć z dołu przez <math>(\mathit{M-1})(\mathit{1-\epsilon})</math>. W związku z tym możemy napisać:


<center><math>\displaystyle M \leq \frac{ \opt(I) }{1-\epsilon} + 1 \leq \braq{1 + 2\epsilon} \opt(I)  + 1
<center><math>M \leq \frac{ \text{opt} (I) }{1-\epsilon} + 1 \leq (\mathit{1 + 2\epsilon}) \text{opt} (I)  + 1\text{.}
</math></center>
</math></center>


Druga nierówność wynika z prostego przekształcenia arytmetycznego przy <math>\displaystyle 0 < \epsilon \leq \frac{1}{2}</math>.
Druga nierówność wynika z prostego przekształcenia arytmetycznego przy <math>0 < \epsilon \leq \frac{1}{2}</math>.
}}
}}


{{cwiczenie|||
{{cwiczenie|4.7||
Aproksymacja dla problemu PARTITION.
Aproksymacja dla problemu PARTITION.


Optymalizacyjna wersja problemu PARTITION powstaje, kiedy chcemy wybrać podzbiór <math>\displaystyle A' \subseteq A</math> taki, że minimalizuje wartość <math>\displaystyle \size{\sum_{a \in A'} s(a)  - \sum_{a \in A \setminus A'}  s(a) }</math>
Optymalizacyjna wersja problemu PARTITION powstaje, kiedy chcemy wybrać podzbiór <math>A' \subseteq A</math> taki, że minimalizuje wartość <math>|\mathit{\sum_{a \in A'}| s(a)  - \sum_{a \in A \setminus A'}  s(a) }|</math>.


Uzasadnij, że dla tego problemu nie ma algorytmu PTAS.
Uzasadnij, że dla tego problemu nie ma algorytmu PTAS.


Inna wersja optymalizacyjna problemu PARTITION powstaje, kiedy mierzymy odległość od równomiernego podziału przez iloraz zamiast przez różnicę. Chcemy wtedy wybrać podzbiór <math>\displaystyle A' \subseteq A</math> taki, że iloraz
Inna wersja optymalizacyjna problemu PARTITION powstaje, kiedy mierzymy odległość od równomiernego podziału przez iloraz zamiast przez różnicę. Chcemy wtedy wybrać podzbiór <math>A' \subseteq A</math> taki, że iloraz:


<center><math>\displaystyle \frac{\sum_{a \in A'}  s(a) }{\sum_{a \in A \setminus A'}  s(a) } \geq 1
<center><math>\frac{\sum_{a \in A'}  s(a) }{\sum_{a \in A \setminus A'}  s(a) } \geq 1\text{,}
</math></center>
</math></center>


Linia 297: Linia 289:


Pokaż algorytm FPTAS dla tej wersji problemu PARTITION.
Pokaż algorytm FPTAS dla tej wersji problemu PARTITION.
 
}}
<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">   
Zauważ, że optimum dla pierwszego problemu wynosi <math>\displaystyle 0</math> wtedy i tylko wtedy, gdy elementy wejściowe są pozytywnym przykładem dla zwykłego problemu PARTITION.
Zauważ, że optimum dla pierwszego problemu wynosi <math>0</math> wtedy i tylko wtedy, gdy elementy wejściowe są pozytywnym przykładem dla zwykłego problemu PARTITION.


Konstrukcję FPTAS dla drugiego problemu rozpocznij od przypomnienia sobie algorytmu pseudowielomianowego.
Konstrukcję FPTAS dla drugiego problemu rozpocznij od przypomnienia sobie algorytmu pseudowielomianowego.
Linia 305: Linia 297:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
Pokażemy, że dla pierwszego problemu nie istnieje żaden algorytm <math>\displaystyle a</math>-aproksymacyjny. To w oczywisty sposób pociąga za sobą brak algorytmu PTAS.
Pokażemy, że dla pierwszego problemu nie istnieje żaden algorytm <math>a</math>-aproksymacyjny. To w oczywisty sposób pociąga za sobą brak algorytmu PTAS.
Ponieważ optimum dla pierwszego problemu wynosi <math>\displaystyle 0</math> tylko dla takiego zbioru <math>\displaystyle A</math>, który da się podzielić na dwie równe części, więc dowolny algorytm <math>\displaystyle a</math>-aproksymacyjny musiałby znajdować rozwiązanie nie większe niż <math>\displaystyle a\cdot 0 = 0</math> i tym samym rozstrzygać problem PARTITION.
Ponieważ optimum dla pierwszego problemu wynosi <math>0</math> tylko dla takiego zbioru <math>A</math>, który da się podzielić na dwie równe części, więc dowolny algorytm <math>a</math>-aproksymacyjny musiałby znajdować rozwiązanie nie większe niż <math>a\cdot 0 = 0</math> i tym samym rozstrzygać problem PARTITION.


Żeby skonstruować FPTAS dla drugiego problemu załóżmy, że <math>\displaystyle A=\{a_1,a_2,\ldots,a_n\}</math> i przypomnijmy, że znamy algorytm pseudowielomianowy dla tego problemu.
Żeby skonstruować FPTAS dla drugiego problemu, załóżmy, że <math>A=\{a_1,a_2,\ldots,a_n\}</math> i przypomnijmy, że znamy algorytm pseudowielomianowy dla tego problemu.


Algorytm FPTAS dla tego problemu powstaje poprzez zaokrąglenie liczb podanych na wejściu i wykonanie pseudowielomianowego algorytmu dokładnego.
Algorytm FPTAS dla tego problemu powstaje poprzez zaokrąglenie liczb podanych na wejściu i wykonanie pseudowielomianowego algorytmu dokładnego.


Przyjmując <math>\displaystyle T=\sum_{i=1}^n  s(a_i) </math> i <math>\displaystyle K=\frac{\epsilon T}{4n}</math> i znajdując rozwiązanie dokładne przy <math>\displaystyle  s'(a)  = \frac{ s(a) }{K}</math> możemy przeprowadzić analizę podobną do tej wykorzystanej w problemie KNAPSACK. Są jednak subtelne różnice.
Przyjmując <math>T=\sum_{i=1}^n  s(a_i)</math> i <math>K=\frac{\epsilon T}{4n}</math> i znajdując rozwiązanie dokładne przy <math>s'(a)  = \frac{ s(a) }{K}</math>, możemy przeprowadzić analizę podobną do tej wykorzystanej w problemie KNAPSACK. Są jednak subtelne różnice.


Może się zdarzyć, że podzbiór <math>\displaystyle A'</math> znaleziony przy wagach <math>\displaystyle s'</math> nie jest rozwiązaniem dopuszczalnym przy wagach <math>\displaystyle s</math>, gdyż <math>\displaystyle \frac{\sum_{a \in A'}  s'(a) }{\sum_{a \in A\setminus A'}  s'(a) } \geq 1</math> nie pociąga za sobą takiej samej nierówności przy wagach <math>\displaystyle s</math>. Z problemem tym możemy sobie na szczęście łatwo poradzić zamieniając znaleziony zbiór <math>\displaystyle A'</math> na <math>\displaystyle A\setminus A'</math>. Dalszą analizę przeprowadzimy tylko w przypadku kiedy nie jest potrzebna taka zamiana, gdyż drugi przypadek jest analogiczny.
Może się zdarzyć, że podzbiór <math>A'</math> znaleziony przy wagach <math>s'</math> nie jest rozwiązaniem dopuszczalnym przy wagach <math>s</math>, gdyż <math>\frac{\sum_{a \in A'}  s'(a) }{\sum_{a \in A\setminus A'}  s'(a) } \geq 1</math> nie pociąga za sobą takiej samej nierówności przy wagach <math>s</math>. Z problemem tym możemy sobie na szczęście łatwo poradzić, zamieniając znaleziony zbiór <math>A'</math> na <math>A\setminus A'</math>. Dalszą analizę przeprowadzimy tylko w przypadku, kiedy nie jest potrzebna taka zamiana, gdyż drugi przypadek jest analogiczny.


Możemy zatem zapisać następujący ciąg nierówności, gdzie <math>\displaystyle O</math> jest rozwiązaniem optymalnym:
Możemy zatem zapisać następujący ciąg nierówności, gdzie <math>O</math> jest rozwiązaniem optymalnym:


<center><math>\displaystyle \frac{T}{2} \leq \sum_{a \in A'}  s(a)  \leq \sum_{a \in A'} \floor{\frac{ s(a) +K}{K}}K \leq \sum_{a \in O} \floor{\frac{ s(a) }{K}}K + Kn \leq \opt + 2Kn \leq \opt + \epsilon\frac{T}{2} \leq \braq{1+\epsilon} \opt
<center><math>\frac{T}{2} \leq \sum_{a \in A'}  s(a)  \leq \sum_{a \in A'} [{\frac{ s(a) +K}{K}}]K \leq \sum_{a \in O} [{\frac{ s(a) }{K}}]K + Kn \leq \text{opt+ 2Kn \leq \text{opt+ \epsilon\frac{T}{2} \leq (\mathit{1+\epsilon}) \text{opt}\text{.}</math></center>
</math></center>


Przy przekształceniach korzystamy z własności zaokrągleń, a ostatnia nierówność wynika z tego, że <math>\displaystyle \opt \geq \frac{T}{2}</math>.
Przy przekształceniach korzystamy z własności zaokrągleń, a ostatnia nierówność wynika z tego, że <math>\text{opt\geq \frac{T}{2}</math>.
</div></div>
</div></div>


}}


{{cwiczenie|||
 
{{cwiczenie|4.8||
Problem BIN COVERING.
Problem BIN COVERING.


Rozważ problem dualny do BIN PACKING:
Rozważ problem dualny do BIN PACKING:
}}


{{problem|||
{{problem|||
Pokrywanie - BIN COVERING.
Pokrywanie BIN COVERING.


Mając dany zbiór <math>\displaystyle n</math> przedmiotów o wagach wymiernych <math>\displaystyle w_1, w_2, \ldots, w_n \in \left(0,1\right]</math>. Należy znaleźć przyporządkowanie ich do jak największej liczby pojemników. Suma wag przedmiotów w jednym pojemniku musi przekraczać <math>\displaystyle 1</math>, a część przedmiotów może być w ogóle nie wykorzystana.
Mając dany zbiór <math>n</math> przedmiotów o wagach wymiernych <math>w_1,w_2,\ldots,w_n\in(0,1]</math>, należy znaleźć przyporządkowanie ich do jak największej liczby pojemników. Suma wag przedmiotów w jednym pojemniku musi przekraczać <math>1</math>, a część przedmiotów może być w ogóle niewykorzystana.
}}
}}


Można się domyślać, ze problem ten ma charakterystykę podobną do BIN PACKING.
Można się domyślać, że problem ten ma charakterystykę podobną do BIN PACKING.


Pokaż, że o ile <math>\displaystyle \cc{P} \neq \cc{NP}</math> to nie ma dla niego algorytmu <math>\displaystyle a</math>-aproksymacyjnego dla <math>\displaystyle a>\frac{1}{2}</math>. Skonstruuj asymptotyczny PTAS przy dodatkowym założeniu, że rozmiary wszystkich przedmiotów są większe niż pewna stała <math>\displaystyle c>0</math> (istnieje również asymptotyczny PTAS bez tego dodatkowego założenia, ale jego analiza jest znacznie trudniejsza).
Pokaż, że o ile <math>\mathrm{P} \neq \mathrm{NP}</math>, to nie ma dla niego algorytmu <math>a</math>-aproksymacyjnego dla <math>a>\frac{1}{2}</math>. Skonstruuj asymptotyczny PTAS przy dodatkowym założeniu, że rozmiary wszystkich przedmiotów są większe niż pewna stała <math>c>0</math> (istnieje również asymptotyczny PTAS bez tego dodatkowego założenia, ale jego analiza jest znacznie trudniejsza).


<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">   
Wykorzystaj te same techniki co w problemie BIN PACKING. Użyj redukcji problemu PARTITION do pokazania, że nie istnieje algorytm <math>\displaystyle a</math>-aproksymacyjny. Skonstruuj rodzinę algorytmów <math>\displaystyle \mathcal{A}_\epsilon</math> pokrywających conajmniej <math>\displaystyle \braq{1 - \epsilon}\opt</math> pojemników przy pomocy grupowania, zaokrąglania i przeglądania wyczerpującego. Dzięki stałej <math>\displaystyle c</math> nie musisz się przejmować przedmiotami o wadze mniejszej niż <math>\displaystyle \epsilon</math>.
Wykorzystaj te same techniki co w problemie BIN PACKING. Użyj redukcji problemu PARTITION do pokazania, że nie istnieje algorytm <math>a</math>-aproksymacyjny. Skonstruuj rodzinę algorytmów <math>\mathcal{A}_\epsilon</math> pokrywających conajmniej <math>(\mathit{1 - \epsilon}) \text{opt}</math> pojemników przy pomocy grupowania, zaokrąglania i przeglądania wyczerpującego. Dzięki stałej <math>c</math> nie musisz się przejmować przedmiotami o wadze mniejszej niż <math>\epsilon</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">   
Aby pokazać pierwszą część wystarczy zauważyć, że jeżeli mamy instancję problemu PARTITION z elementami <math>\displaystyle a_1,a_2,\ldots,a_n</math> i sumą wag <math>\displaystyle S=\sum_{i=1}^{n} s(a_i) </math>, to przy użyciu przedmiotów o wagach <math>\displaystyle \frac{ s(a_1) }{S},\frac{ s(a_2) }{S},\ldots,\frac{ s(a_n) }{S}</math> można pokryć <math>\displaystyle 2</math> pojemniki tylko wtedy kiedy da się elementy <math>\displaystyle A</math> rozbić na dwa podzbiory o tej samej wadze sumarycznej. Zatem algorytm <math>\displaystyle a</math>-aproksymacyjny dla <math>\displaystyle a> \frac{1}{2}</math> pozwoliłby rozstrzygać o problemie PARTITION.
Aby pokazać pierwszą część, wystarczy zauważyć, że jeżeli mamy instancję problemu PARTITION z elementami <math>a_1,a_2,\ldots,a_n</math> i sumą wag <math>S=\sum_{i=1}^{n} s(a_i)</math>, to przy użyciu przedmiotów o wagach <math>\frac{ s(a_1) }{S},\frac{ s(a_2) }{S},\ldots,\frac{ s(a_n) }{S}</math> można pokryć <math>2</math> pojemniki tylko wtedy, kiedy da się elementy <math>A</math> rozbić na dwa podzbiory o tej samej wadze sumarycznej. Zatem algorytm <math>a</math>-aproksymacyjny dla <math>a> \frac{1}{2}</math> pozwoliłby rozstrzygać o problemie PARTITION.


Konstrukcja asymptotycznego PTAS przebiega dokładnie tak samo jak dla prolemu BIN PACKING.
Konstrukcja asymptotycznego PTAS przebiega dokładnie tak samo jak dla prolemu BIN PACKING.


Istnieje algorytm, który dla instancji z co najwyżej <math>\displaystyle K</math> różnymi wagami większymi niż <math>\displaystyle \epsilon</math> w czasie wielomianowym podaje rozwiązanie optymalne. Tak jak poprzednio można wtedy rozważyć wszystkie przypadki, których jest wielomianowo wiele.
Istnieje algorytm, który dla instancji z co najwyżej <math>K</math> różnymi wagami większymi niż <math>\epsilon</math> w czasie wielomianowym podaje rozwiązanie optymalne. Tak jak poprzednio można wtedy rozważyć wszystkie przypadki, których jest wielomianowo wiele.


Dla zadanego <math>\displaystyle \epsilon</math> i ograniczeniu instancji do zawierających przedmioty większe niż <math>\displaystyle \epsilon</math> możemy przeprowadzić taki sam podział przedmiotów na <math>\displaystyle K=\ceil{\frac{1}{\epsilon^2}}</math> grup tak, aby w każdej grupie było co najwyżej <math>\displaystyle Q=\floor{n\epsilon^2}</math> przedmiotów, a następnie zastosować algorytm dokładny dla zaokrągleń do najmniejszego przedmiotu w grupie.
Dla zadanego <math>\epsilon</math> i ograniczeniu instancji do zawierających przedmioty większe niż <math>\epsilon</math> możemy przeprowadzić taki sam podział przedmiotów na <math>K=[{\frac{1}{\epsilon^2}}]</math> grup tak, aby w każdej grupie było co najwyżej <math>Q=[{n\epsilon^2}]</math> przedmiotów, a następnie zastosować algorytm dokładny dla zaokrągleń do najmniejszego przedmiotu w grupie.


Powtórzenie tej samej analizy pokazuje, że jest to algorytm <math>\displaystyle \braq{1-\epsilon}</math>-aproksymacyjny.
Powtórzenie tej samej analizy pokazuje, że jest to algorytm <math>(\mathit{1-\epsilon})</math>-aproksymacyjny.


Dodatkowe założenie o tym, że <math>\displaystyle w_i > c</math> pozwala dla <math>\displaystyle \epsilon < c</math> nie rozważać przedmiotów o wagach mniejszych od <math>\displaystyle \epsilon</math>. Jeżeli natomiast <math>\displaystyle \epsilon > c</math> możemy uzyć algorytmu <math>\displaystyle \mathcal{A}_c</math>.
Dodatkowe założenie o tym, że <math>w_i > c</math>, pozwala dla <math>\epsilon < c</math>,nie rozważać przedmiotów o wagach mniejszych od <math>\epsilon</math>. Jeżeli natomiast <math>\epsilon > c</math>, możemy użyć algorytmu <math>\mathcal{A}_c</math>.
</div></div>
</div></div>
}}


==L-redukcje==
==L-redukcje==


Wprowadzimy teraz pojęcie redukcji zachowującej aproksymację. Pozwoli nam to na bardziej systematyczne niż do tej pory zbadanie klasy problemów, dla których możliwa jest aproksymacja. W dalszej części będziemy poszukiwać klasy problemów aproksymowalnych i problemów w tej klasie zupełnych względem podanej redukcji. Definicja interesującej nas redukcji jest podobna do tej jaką wprowadziliśmy pomiędzy problemami funkcyjnymi.
Wprowadzimy teraz pojęcie redukcji zachowującej aproksymację. Pozwoli nam to na bardziej systematyczne niż do tej pory zbadanie klasy problemów, dla których możliwa jest aproksymacja. W dalszej części będziemy poszukiwać klasy problemów aproksymowalnych i problemów w tej klasie zupełnych względem podanej redukcji. Definicja interesującej nas redukcji jest podobna do tej, jaką wprowadziliśmy pomiędzy problemami funkcyjnymi.


{{definicja|||
{{definicja|5.1||
Dla dwóch problemów optymalizacyjnych <math>\displaystyle A</math> i <math>\displaystyle B</math>, parę funkcji <math>\displaystyle R: D_A \rightarrow D_B</math> i <math>\displaystyle S: S_B \rightarrow S_A</math> obliczalnych w pamięci logarytmicznej nazywamy L-redukcją, jeżeli istnieją dwie stałe dodatnie <math>\displaystyle \alpha</math> i <math>\displaystyle \beta</math> takie, że spełnione są następujące własności:
Dla dwóch problemów optymalizacyjnych <math>A</math> i <math>B</math>, parę funkcji <math>R: D_A \rightarrow D_B</math> i <math>S: S_B \rightarrow S_A</math> obliczalnych w pamięci logarytmicznej nazywamy L-redukcją, jeżeli istnieją dwie stałe dodatnie <math>\alpha</math> i <math>\beta</math> takie, że spełnione są następujące własności:
* Dla dowolnej instancji <math>\displaystyle x</math> problemu <math>\displaystyle A</math> zachodzi:
* Dla dowolnej instancji <math>x</math> problemu <math>A</math> zachodzi:


<center><math>\displaystyle  \opt_B( R(x) )  \leq \alpha \cdot \opt_A(x)  
<center><math>\text{opt} _B( R(x) )  \leq \alpha \cdot \text{opt} _A(x)\text{.}
</math></center>
</math></center>
* Dla dowolnego rozwiązania dopuszczalnego <math>\displaystyle s</math> instancji <math>\displaystyle  R(x) </math> zachodzi:
* Dla dowolnego rozwiązania dopuszczalnego <math>s</math> instancji <math>R(x)</math> zachodzi:


<center><math>\displaystyle \size{ \opt_A(x)  -  \obj_A(x, S(s) ) } \leq \beta  \size{ \opt_B( R(x) )  -  \obj_B( R(x) ,s) }
<center><math>|\mathit{ \text{opt} _A(x)  -  \text{obj}_A(x, S(s) ) }| \leq \beta  |\mathit{ \text{opt} _B( R(x) )  -  \text{obj}_B( R(x) ,s) }|\text{.}
</math></center>
</math></center>


}}
}}


Intuicyjnie, funkcja <math>\displaystyle R</math> L-redukcji (redukcji liniowej) zamienia instancję problemu <math>\displaystyle A</math> na instancję problemu <math>\displaystyle B</math> nie zmieniając wartości rozwiązania optymalnego bardziej niż o stałą <math>\displaystyle \alpha</math>. Funkcja <math>\displaystyle S</math> pozwala natomiast przeprowadzić dowolne z rozwiązań z powrotem na rozwiązanie instancji <math>\displaystyle A</math> nie zmieniając odległości od optimum bardziej niż o stałą <math>\displaystyle \beta</math>.
Intuicyjnie, funkcja <math>R</math> L-redukcji (redukcji liniowej) zamienia instancję problemu <math>A</math> na instancję problemu <math>B</math>, nie zmieniając wartości rozwiązania optymalnego bardziej niż o stałą <math>\alpha</math>. Funkcja <math>S</math> pozwala natomiast przeprowadzić dowolne z rozwiązań z powrotem na rozwiązanie instancji <math>A</math>, nie zmieniając odległości od optimum bardziej niż o stałą <math>\beta</math>.


{{uwaga|||
{{uwaga|5.2||
Warto zauważyć, że definicja L-redukcji nie zależy od tego, czy problemy <math>\displaystyle A</math> i <math>\displaystyle B</math> są problami minimalizacyjnymi, czy maksymalizacyjnymi.
Warto zauważyć, że definicja L-redukcji nie zależy od tego, czy problemy <math>A</math> i <math>B</math> są problami minimalizacyjnymi, czy maksymalizacyjnymi.
}}
}}


Przyjrzyjmy się teraz jeszcze raz redukcji problemu zbioru niezależnego do pokrycia wierzchołkowego. Jest ona oparta o fakt, że problemy te są do siebie dualne. Dopełnienie dowolnego zbioru niezależnego jest pokryciem wierzchołkowym i na odwrót.
Przyjrzyjmy się teraz jeszcze raz redukcji problemu zbioru niezależnego do pokrycia wierzchołkowego. Jest ona oparta o fakt, że problemy te są do siebie dualne. Dopełnienie dowolnego zbioru niezależnego jest pokryciem wierzchołkowym i na odwrót.


Definicje odpowiednich funkcji są w związku z tym bardzo proste. <math>\displaystyle R</math> to po prostu funkcja identycznościowa na grafach, a <math>\displaystyle S</math> zwraca dopełnienie zbioru wierzchołków. Okazuje się, że nie jest to jednak L-redukcja, gdyż stosunku rozmiarów rozwiązań obu problemów nie da się w żaden sposób ograniczyć przez stałe.
Definicje odpowiednich funkcji są w związku z tym bardzo proste. <math>R</math> to po prostu funkcja identycznościowa na grafach, a <math>S</math> zwraca dopełnienie zbioru wierzchołków. Okazuje się, że nie jest to jednak L-redukcja, gdyż stosunku rozmiarów rozwiązań obu problemów nie da się w żaden sposób ograniczyć przez stałe.


Takie ograniczenie można uzyskać zawężając klasę grafów. Jeżeli ograniczymy maksymalny stopień wierzchołków występujących w grafie przez liczbę <math>\displaystyle k</math>, to otrzymamy problemy <math>\displaystyle k</math>-INDPENDENT SET i <math>\displaystyle k</math>-VERTEX COVER. Przypomnijmy, że z redukcji problemu <math>\displaystyle 3</math>SAT wynika, że już problem <math>\displaystyle 4</math>-INDEPENDENT SET jest <math>\displaystyle \cc{NP}</math>-zupełny.
Takie ograniczenie można uzyskać, zawężając klasę grafów. Jeżeli ograniczymy maksymalny stopień wierzchołków występujących w grafie przez liczbę <math>k</math>, to otrzymamy problemy <math>k</math>-INDPENDENT SET i <math>k</math>-VERTEX COVER. Przypomnijmy, że z redukcji problemu <math>3</math>SAT wynika, że już problem <math>4</math>-INDEPENDENT SET jest <math>\mathrm{NP}</math>-zupełny.


Pokażemy, że funkcje <math>\displaystyle R</math> i <math>\displaystyle S</math> tworzą L-redukcję problemu <math>\displaystyle k</math>-INDEPENDENT SET do <math>\displaystyle k</math>-NODE COVER.
Pokażemy, że funkcje <math>R</math> i <math>S</math> tworzą L-redukcję problemu <math>k</math>-INDEPENDENT SET do <math>k</math>-NODE COVER.


Zauważmy, że dla grafu <math>\displaystyle G=\braq{V,E}</math> ze stopniem wierzchołków ograniczonym przez <math>\displaystyle k</math> rozmiar maksymalnego zbioru niezależnego to co najmniej <math>\displaystyle \frac{\size{V}}{k+1}</math> - dla każdego zbioru niezależnego o mniejszym rozmiarze, zbiór jego wszystkich sąsiadów jest co najwyżej <math>\displaystyle k</math> razy większy i nie obejmuje w związku z tym całego grafu. Można zatem taki zbiór niezależny poszerzyć.
Zauważmy, że dla grafu <math>G=(\mathit{V,E})</math> ze stopniem wierzchołków ograniczonym przez <math>k</math> rozmiar maksymalnego zbioru niezależnego to co najmniej <math>\frac{|\mathit{V}|}{k+1}</math>. Dla każdego zbioru niezależnego o mniejszym rozmiarze, zbiór jego wszystkich sąsiadów jest co najwyżej <math>k</math> razy większy i nie obejmuje w związku z tym całego grafu. Można zatem taki zbiór niezależny poszerzyć.


Tymczasem minimalne pokrycie wierzchołkowe ma w oczywisty sposób co najwyżej <math>\displaystyle \size{V}</math> elementów. W związku z tym możemy ustalić wartość parametru <math>\displaystyle \alpha</math> na <math>\displaystyle k+1</math>.
Tymczasem minimalne pokrycie wierzchołkowe ma w oczywisty sposób co najwyżej <math>|\mathit{V}|</math> elementów. W związku z tym możemy ustalić wartość parametru <math>\alpha</math> na <math>k+1</math>.


Wystarczy teraz zauważyć, że odległość rozwiązania znalezionego od optymalnego nie zmienia się przy przejściu przez funkcję <math>\displaystyle S</math>. W związku z tym możemy ustalić wartość parametru <math>\displaystyle \beta</math> na <math>\displaystyle 1</math>.
Wystarczy teraz zauważyć, że odległość rozwiązania znalezionego od optymalnego nie zmienia się przy przejściu przez funkcję <math>S</math>. W związku z tym możemy ustalić wartość parametru <math>\beta</math> na <math>1</math>.


Ta krótka analiza pozwala stwierdzić, że para <math>\displaystyle \braq{R,S}</math> jest L-redukcją problemu <math>\displaystyle k</math>-INDEPENDENT SET do <math>\displaystyle k</math>-NODE COVER.
Ta krótka analiza pozwala stwierdzić, że para <math>(\mathit{R,S})</math> jest L-redukcją problemu <math>k</math>-INDEPENDENT SET do <math>k</math>-NODE COVER.


Można też skonstruować odwrotną L-redukcję problemu <math>\displaystyle k</math>-NODE COVER do <math>\displaystyle k</math>-INDEPENDENT SET. Oczywiście należy użyć tych samych funkcji <math>\displaystyle R</math> i <math>\displaystyle S</math>, ale żeby uzyskać liniową zależność rozmiaru maksymalnego zbioru niezależnego od minimlanego pokrycia wierzchołkowego trzeba się trochę postarać. Zauważmy, że dla antykliki rozmiar minimalnego pokrycia wierzchołkowego wynosi <math>\displaystyle 0</math>, a maksymalny zbiór niezależny ma rozmiar równy ilości wierzchołków. Wynika stąd, że punkty izolowane mogą sprawiać problem dla L-redukcji.
Można też skonstruować odwrotną L-redukcję problemu <math>k</math>-NODE COVER do <math>k</math>-INDEPENDENT SET. Oczywiście należy użyć tych samych funkcji <math>R</math> i <math>S</math>, ale żeby uzyskać liniową zależność rozmiaru maksymalnego zbioru niezależnego od minimlanego pokrycia wierzchołkowego trzeba się trochę postarać. Zauważmy, że dla antykliki rozmiar minimalnego pokrycia wierzchołkowego wynosi <math>0</math>, a maksymalny zbiór niezależny ma rozmiar równy ilości wierzchołków. Wynika stąd, że punkty izolowane mogą sprawiać problem dla L-redukcji.


W nowej redukcji funkcja <math>\displaystyle R</math> będzie usuwać wierzchołki izolowane z grafu (które i tak nie należą do minimalnego pokrycia wierzchołkowego). Funkcja <math>\displaystyle S</math> nadal będzie zamieniać zbiór wierzchołków na jego uzupełnienie (ale tylko w obrębie wierzchołków nie izolowanych). Rozmiar minimalnego pokrycia wierzchołkowego w grafie bez wierzchołków izolowanych wynosi co najmniej <math>\displaystyle \frac{\size{V}}{k}</math> - ponieważ jest co najmniej <math>\displaystyle \size{V}</math> krawędzi, a każdy wierzchołek pokrywa co najwyżej <math>\displaystyle k</math> z nich. To oszacowanie pozwala nam stwierdzić, że nowa redukcja jest L-redukcją z parametrami <math>\displaystyle k</math> i <math>\displaystyle 1</math>.
W nowej redukcji funkcja <math>R</math> będzie usuwać wierzchołki izolowane z grafu (które i tak nie należą do minimalnego pokrycia wierzchołkowego). Funkcja <math>S</math> nadal będzie zamieniać zbiór wierzchołków na jego uzupełnienie (ale tylko w obrębie wierzchołków nieizolowanych). Rozmiar minimalnego pokrycia wierzchołkowego w grafie bez wierzchołków izolowanych wynosi co najmniej <math>\frac{|\mathit{V}|}{k}</math> ponieważ jest co najmniej <math>|\mathit{V}|</math> krawędzi, a każdy wierzchołek pokrywa co najwyżej <math>k</math> z nich. To oszacowanie pozwala nam stwierdzić, że nowa redukcja jest L-redukcją z parametrami <math>k</math> i <math>1</math>.


{{cwiczenie|||
{{cwiczenie|5.3||
Złożenie L-redukcji.
Złożenie L-redukcji.


Pokaż, że jeżeli para <math>\displaystyle \braq{R_1,S_1}</math> jest L-redukcją problemu <math>\displaystyle \Pi_1</math> do <math>\displaystyle \Pi_2</math>, a para <math>\displaystyle \braq{R_2,S_2}</math> L-reduckją <math>\displaystyle \Pi_2</math> do <math>\displaystyle \Pi_3</math>, to <math>\displaystyle \braq{R_1 \circ R_2, S_2 \circ S_1}</math> jest L-redukcją <math>\displaystyle \Pi_1</math> do <math>\displaystyle \Pi_3</math>.
Pokaż, że jeżeli para <math>(\mathit{R_1,S_1})</math> jest L-redukcją problemu <math>\Pi_1</math> do <math>\Pi_2</math>, a para <math>(\mathit{R_2,S_2})</math> L-reduckją <math>\Pi_2</math> do <math>\Pi_3</math>, to <math>(\mathit{R_1 \circ R_2, S_2 \circ S_1})</math> jest L-redukcją <math>\Pi_1</math> do <math>\Pi_3</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">   
Współczynniki nowej redukcji są iloczynami współczynników redukcji <math>\displaystyle \braq{R_1,S_1}</math> i <math>\displaystyle \braq{R_2,S_2}</math>.
Współczynniki nowej redukcji są iloczynami współczynników redukcji <math>(\mathit{R_1,S_1})</math> i <math>(\mathit{R_2,S_2})</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">   
Niech <math>\displaystyle \alpha_1</math> i <math>\displaystyle \beta_1</math> będą współczynnikami pierwszej redukcji, a <math>\displaystyle \alpha_2</math> i <math>\displaystyle \beta_2</math> drugiej. Zatem dla dowolnej instancji <math>\displaystyle x</math> problemu <math>\displaystyle \Pi_1</math> zachodzi:
Niech <math>\alpha_1</math> i <math>\beta_1</math> będą współczynnikami pierwszej redukcji, a <math>\alpha_2</math> i <math>\beta_2</math> drugiej. Zatem dla dowolnej instancji <math>x</math> problemu <math>\Pi_1</math> zachodzi:


<center><math>\displaystyle  \opt_{\Pi_3}( R_2( R_1(x) ) )  \leq \alpha_2 \opt_{\Pi_2}( R_1(x) )  \leq \alpha_1 \alpha_2 \opt_{\Pi_1}(x)  
<center><math>\text{opt}_{\Pi_3}( R_2( R_1(x) ) )  \leq \alpha_2 \text{opt}_{\Pi_2}( R_1(x) )  \leq \alpha_1 \alpha_2 \text{opt}_{\Pi_1}(x)\text{,}
</math></center>
</math></center>


Dla dowolnego rozwiązania dopuszczalnego <math>\displaystyle s</math> dla <math>\displaystyle  R_2( R_1(x) ) </math> zachodzi:
Dla dowolnego rozwiązania dopuszczalnego <math>s</math>, dla <math>R_2( R_1(x) )</math> zachodzi:


<center><math>\displaystyle \size{ \opt_{\Pi_1}(x)  -  \obj_{\Pi_1}(x, S_1( S_2(s) ) ) } \leq
<center><math>|\mathit{ \text{opt}_{\Pi_1}(x)  -  \text{obj}_{\Pi_1}(x, S_1( S_2(s) ) ) }| \leq
\beta_1 \size{ \opt_{\Pi_2}( R_1(x) )  -  \obj_{\Pi_2}( R_1(x) , S_2(s) ) } \leq
\beta_1 |\mathit{ \text{opt}_{\Pi_2}( R_1(x) )  -  \text{obj}_{\Pi_2}( R_1(x) , S_2(s) ) }| \leq
\beta_1 \beta_2 \size{ \opt_{\Pi_3}( R_2( R_1(x) ) )  -  \obj_{\Pi_3}( R_2( R_1(x) ) ,s) }
\beta_1 \beta_2 |\mathit{ \text{opt}_{\Pi_3}( R_2( R_1(x) ) )  -  \text{obj}_{\Pi_3}( R_2( R_1(x) ) ,s) }|\text{.}
</math></center>
</math></center>


Zatem skonstruowana redukcja jest L-redukcją z parametrami <math>\displaystyle \alpha_1 \alpha_2</math> i <math>\displaystyle \beta_1 \beta_2</math>.
Zatem skonstruowana redukcja jest L-redukcją z parametrami <math>\alpha_1 \alpha_2</math> i <math>\beta_1 \beta_2</math>.
</div></div>
</div></div>


}}


{{cwiczenie|||
{{cwiczenie|5.4||
Przenoszenie aproksymacji przez L-redukcje.
Przenoszenie aproksymacji przez L-redukcje.


Pokaż, że jeżeli problem minimalizacyjny <math>\displaystyle A</math> L-redukuje się do problemu <math>\displaystyle B</math> i dla problemu <math>\displaystyle B</math> istnieje algorytm <math>\displaystyle b</math>-aproksymacyjny, to istnieje stała <math>\displaystyle a</math> taka, że dla problemu <math>\displaystyle A</math> istnieje algorytm <math>\displaystyle a</math>-aproksymacyjny.
Pokaż, że jeżeli problem minimalizacyjny <math>A</math> L-redukuje się do problemu <math>B</math> i dla problemu <math>B</math> istnieje algorytm <math>b</math>-aproksymacyjny, to istnieje stała <math>a</math> taka, że dla problemu <math>A</math> istnieje algorytm <math>a</math>-aproksymacyjny.
 
Pokaż, że dla dowolnych problemów optymalizacyjnych <math>\displaystyle A</math> i <math>\displaystyle B</math>, że jeżeli <math>\displaystyle A</math> L-redukuje się do <math>\displaystyle B</math> i  istnieje wielomianowy schemat aproksymacji dla problemu <math>\displaystyle B</math>, to istnieje też taki schemat dla problemu <math>\displaystyle A</math>.


Pokaż, że dla dowolnych problemów optymalizacyjnych <math>A</math> i <math>B</math>, że jeżeli <math>A</math> L-redukuje się do <math>B</math> i  istnieje wielomianowy schemat aproksymacji dla problemu <math>B</math>, to istnieje też taki schemat dla problemu <math>A</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">   
Przeprowadź instancję problemu <math>\displaystyle A</math> na instnację <math>\displaystyle B</math>, użyj algorytmu aproksymacyjnego i przeprowadź znalezione rozwiązanie z powrotem na wynik problemu <math>\displaystyle A</math>. Użyj ograniczeń <math>\displaystyle \alpha</math> i <math>\displaystyle \beta</math> do przeniesienia gwarancji aproksymacji.
Przeprowadź instancję problemu <math>A</math> na instnację <math>B</math>, użyj algorytmu aproksymacyjnego i przeprowadź znalezione rozwiązanie z powrotem na wynik problemu <math>A</math>. Użyj ograniczeń <math>\alpha</math> i <math>\beta</math> do przeniesienia gwarancji aproksymacji.
</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 \braq{R,S}</math> będzie L-redukcją problemu <math>\displaystyle A</math> do <math>\displaystyle B</math> ze stałymi <math>\displaystyle \alpha</math> i <math>\displaystyle \beta</math>.
Niech <math>(\mathit{R,S})</math> będzie L-redukcją problemu <math>A</math> do <math>B</math> ze stałymi <math>\alpha</math> i <math>\beta</math>.
Niech <math>\displaystyle \mathcal{B}</math> będzie <math>\displaystyle b</math>-aproksymacyjnym algorytmem dla problemu <math>\displaystyle B</math>. Skonstruujemy teraz algorytm <math>\displaystyle \mathcal{A}</math> dla problemu <math>\displaystyle A</math>, którego działanie dla dowolnej instancji <math>\displaystyle x</math> można opisać poprzez równanie:
Niech <math>\mathcal{B}</math> będzie <math>b</math>-aproksymacyjnym algorytmem dla problemu <math>B</math>. Skonstruujemy teraz algorytm <math>\mathcal{A}</math> dla problemu <math>A</math>, którego działanie dla dowolnej instancji <math>x</math> można opisać poprzez równanie:


<center><math>\displaystyle  \mathcal{A}(x)  =  S( \mathcal{B}( R(x) ) )  
<center><math>\mathcal{A}(x)  =  S( \mathcal{B}( R(x) ) )\text{.}
</math></center>
</math></center>


Załóżmy, że <math>\displaystyle B</math> jest problemem maksymalizacyjnym.
Załóżmy, że <math>B</math> jest problemem maksymalizacyjnym.
Fakt, że <math>\displaystyle \mathcal{B}</math> jest algorytmem <math>\displaystyle b</math>-aproksymacyjnym i własności L-redukcji gwarantują nam wtedy następujące nierówności:
Fakt, że <math>\mathcal{B}</math> jest algorytmem <math>b</math>-aproksymacyjnym i własności L-redukcji gwarantują nam wtedy następujące nierówności:


<center><math>\displaystyle \aligned \opt_B( R(x) )  &\leq  \alpha \opt_A(x)  \\
<center><math>\begin{align} \text{opt}_B( R(x) )  &\leq  \alpha \text{opt}_A(x)  \\
  \obj_B( R(x) , \mathcal{B}( R(x) ) )  &\geq  b \cdot \opt_B( R(x) )  \\
  \text{obj}_B( R(x) , \mathcal{B}( R(x) ) )  &\geq  b \cdot \text{opt}_B( R(x) )  \\
  \obj_A(x, \mathcal{A}(x) )  -  \opt_A(x)  &\leq  \beta\braq{ \opt_B( R(x) )  -  \obj_B( R(x) , \mathcal{B}( R(x) ) ) } </math> , <math>\displaystyle 
  \text{obj}_A(x, \mathcal{A}(x) )  -  \text{opt}_A(x)  &\leq  \beta(\mathit{ \text{opt}_B( R(x) )  -  \text{obj}_B( R(x) , \mathcal{B}( R(x) ) ) }) \text{, }
\endaligned</math></center>
\end{align}</math></center>


co po prostym przekształceniu daje:
co po prostym przekształceniu daje:


<center><math>\displaystyle  \obj_A(x, \mathcal{A}(x) )  \leq \braq{1 + \alpha\beta\braq{1-b}} \opt_A(x)  
<center><math>\text{obj}_A(x, \mathcal{A}(x) )  \leq (\mathit{1 + \alpha\beta(\mathit{1-b})}) \text{opt} _A(x)  
</math></center>
</math></center>


i pozwala stwierdzić, że <math>\displaystyle \mathcal{A}</math> jest algorytmem <math>\displaystyle \braq{1+\alpha\beta\braq{1-b}}</math>-aproksymacyjnym.
i pozwala stwierdzić, że <math>\mathcal{A}</math> jest algorytmem <math>(\mathit{1+\alpha\beta(\mathit{1-b})})</math>-aproksymacyjnym.


Jeżeli <math>\displaystyle B</math> jest problemem minimalizacyjnym to analogiczna analiza dowodzi, że <math>\displaystyle \mathcal{A}</math> jest algorytmem <math>\displaystyle a</math>-aproksymacyjnym dla <math>\displaystyle a=1+\alpha\beta\braq{b-1}</math>.
Jeżeli <math>B</math> jest problemem minimalizacyjnym to analogiczna analiza dowodzi, że <math>\mathcal{A}</math> jest algorytmem <math>a</math>-aproksymacyjnym dla <math>a=1+\alpha\beta(\mathit{b-1})</math>.


Przeprowadzenie analogicznego rozumowania przy założeniu, że <math>\displaystyle A</math> jest problemem maksymalizacyjnym prowadzi do następujących nierówności:
Przeprowadzenie analogicznego rozumowania przy założeniu, że <math>A</math> jest problemem maksymalizacyjnym prowadzi do następujących nierówności:


<center><math>\displaystyle  \obj_A(x, \mathcal{A}(x) )  \geq \braq{1 - \alpha\beta\braq{1-b}} \opt_A(x)  
<center><math>\text{obj}_A(x, \mathcal{A}(x) )  \geq (\mathit{1 - \alpha\beta(\mathit{1-b})}) \text{opt} _A(x)\text{,}
</math></center>
</math></center>


dla <math>\displaystyle B</math> maksymalizacyjnego i
dla <math>B</math> maksymalizacyjnego i


<center><math>\displaystyle  \obj_A(x, \mathcal{A}(x) )  \geq \braq{1 - \alpha\beta\braq{b-1}} \opt_A(x)  
<center><math>\text{obj}_A(x, \mathcal{A}(x) )  \geq (\mathit{1 - \alpha\beta(\mathit{b-1})}) \text{opt} _A(x)\text{,}
</math></center>
</math></center>


dla <math>\displaystyle B</math> minimalizacyjnego.
dla <math>B</math> minimalizacyjnego.


Te wyniki nie pozwalają przenieść gwarancji aproksymacji, gdyż otrzymane współczynniki mogą być ujemne, ale wszystkie cztery ograniczenia mają własność, że zmierzają do <math>\displaystyle 1</math> przy <math>\displaystyle b</math> zmierzającym do <math>\displaystyle 1</math>. To pozwala przenieść PTAS dla problemu <math>\displaystyle B</math> na PTAS dla problemu <math>\displaystyle A</math>.
Te wyniki nie pozwalają przenieść gwarancji aproksymacji, gdyż otrzymane współczynniki mogą być ujemne, ale wszystkie cztery ograniczenia mają własność, że zmierzają do <math>1</math> przy <math>b</math> zmierzającym do <math>1</math>. To pozwala przenieść PTAS dla problemu <math>B</math> na PTAS dla problemu <math>A</math>.
</div></div>
</div></div>


}}


{{cwiczenie|||
 
{{cwiczenie|5.5||
Różnica optimum dla NODE COVER i INDEPENDENT SET.
Różnica optimum dla NODE COVER i INDEPENDENT SET.


Pokaż, że dla dowolnej liczby wymiernej <math>\displaystyle q > 0</math> można skonstruować graf, dla którego iloraz rozmiaru maksymalnego zbioru niezależnego do minimalnego pokrycia wierzchołkowego wynosi <math>\displaystyle q</math>.
Pokaż, że dla dowolnej liczby wymiernej <math>q > 0</math> można skonstruować graf, dla którego iloraz rozmiaru maksymalnego zbioru niezależnego do minimalnego pokrycia wierzchołkowego wynosi <math>q</math>.
}}
<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">
 
[[File:ZO-8-1.mp4|253x253px|thumb|center]]


<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"> 
Przykładem grafu spełniającego warunki zadania dla liczby <math>q=\frac{k}{l}</math> jest graf składający się z <math>k-1</math> elementowej antykliki i <math>l+1</math> elementowej kliki. Rozmiar minimalnego pokrycia wierzchołkowego dla tego grafu to <math>l</math>, a największy zbiór niezależny ma <math>k</math> wierzchołków.
{różnica optimum NC i IS - ZO-8.1}
Przykładem grafu spełniającego warunki zadania dla liczby <math>\displaystyle q=\frac{k}{l}</math> jest graf składający się z <math>\displaystyle k-1</math> elementowej antykliki i <math>\displaystyle l+1</math> elementowej kliki. Rozmiar minimalnego pokrycia wierzchołkowego dla tego grafu to <math>\displaystyle l</math>, a największy zbiór niezależny ma <math>\displaystyle k</math> wierzchołków.
</div></div>
</div></div>


}}
==Klasa <math>\mathrm{MAXSNP}</math>==


==Klasa <math>\displaystyle \cc{MAXSNP}</math>==
Wprowadzimy teraz formalną definicję klasy <math>\mathrm{MAXSNP}</math>, która pozwoli nam bardziej metodycznie zbadać problemy optymalizacyjne. Dalsze badania nad tą klasą doprowadzą nas do bardzo ciekawych rezultatów dotyczących możliwości aproksymacji.


Wprowadzimy teraz formalną definicję klasy <math>\displaystyle \cc{MAXSNP}</math>, która pozwoli nam bardziej metodycznie zbadać problemy optymalizacyjne. Dalsze badania nad tą klasą doprowadzą nas do bardzo ciekawych rezultatów dotyczących możliwości aproksymacji.
Zaczniemy od zdefiniowania klasy <math>\mathrm{MAXSNP}_0</math>, która opisuje problemy maksymalizacyjne. Jej charakteryzacja jest analogiczna do charakteryzacji klasy <math>\mathrm{NP}</math> podanej w twierdzeniu Fagina.


Zaczniemy od zdefiniowania klasy <math>\displaystyle \cc{MAXSNP}_0</math>, która opisuje problemy maksymalizacyjne. Jej charakteryzacja jest analogiczna do charakteryzacji klasy <math>\displaystyle \cc{NP}</math> podanej w twierdzeniu Fagina.
{{definicja|6.1||
Problem <math>A</math> należy do klasy <math>\mathrm{MAXSNP}_0</math>, jeżeli można go wyrazić za pomocą formuły:


{{definicja|||
<center><math>\max_{S}{\{(\mathit{x_1,x_2,\ldots,x_k}) \in V^k} : { \phi(G_1,G_2,\ldots,G_m,S,x_1,x_2,\ldots,x_k) }\}\text{.}
Problem <math>\displaystyle A</math> należy do klasy <math>\displaystyle \cc{MAXSNP}_0</math>, jeżeli można go wyrazić za pomocą formuły:
 
<center><math>\displaystyle \max_{S}\defset{\braq{x_1,x_2,\ldots,x_k} \in V^k}{ \phi(G_1,G_2,\ldots,G_m,S,x_1,x_2,\ldots,x_k) }
</math></center>
</math></center>


Wejściem dla problemu <math>\displaystyle A</math> jest ciąg relacji (być może wieloargumentowych) <math>\displaystyle G_i,i=1,2,\ldots,m</math> nad skończonym uniwersum <math>\displaystyle V</math>. Poszukiwana jest natomiast relacja <math>\displaystyle S</math>, która maksymalizowałaby liczbę naborów zmiennych <math>\displaystyle x_i</math> takich że formuła pierwszego rzędu bez kwantyfikatorów <math>\displaystyle \phi</math> jest spełniona.
Wejściem dla problemu <math>A</math> jest ciąg relacji (być może wieloargumentowych) <math>G_i,i=1,2,\ldots,m</math> nad skończonym uniwersum <math>V</math>. Poszukiwana jest natomiast relacja <math>S</math>, która maksymalizowałaby liczbę naborów zmiennych <math>x_i</math> takich, że formuła pierwszego rzędu bez kwantyfikatorów <math>\phi</math> jest spełniona.
}}
}}


{{definicja|||
{{definicja|6.2||
Klasa <math>\displaystyle \cc{MAXSNP}</math> jest domknięciem <math>\displaystyle \cc{MAXSNP}_0</math> ze względu na L-redukcje.
Klasa <math>\mathrm{MAXSNP}</math> jest domknięciem <math>\mathrm{MAXSNP}_0</math> ze względu na L-redukcje.
}}
}}
Zobaczmy teraz przykład problemu, który należy do <math>\mathrm{MAXSNP}_0</math>. Wybierzemy problem <math>k</math>-INDEPENDENT SET. Zwykła reprezentacja grafu poprzez relację binarną nie pozwala wygodnie przedstawić ograniczenia stopnia wierzchołka i raczej nie prowadzi do reprezentacji poprzez odpowiednią formułę. Dlatego użyjemy niestandardowej reprezentacji grafu poprzez <math>k+1</math>-argumentową relację <math>H</math>. Każdemu wierzchołkowi <math>G</math> odpowiada jedna krotka relacji <math>H</math> - <math>(\mathit{x,y_1,y_2,\ldots,y_k})</math>, która koduje sąsiedztwo wierzchołka <math>x</math>. Wierzchołki <math>y_1,y_2,\ldots,y_k</math> to sąsiedzi <math>x</math>. Jeżeli <math>x</math> nie ma <math>k</math> sąsiadów, to na brakujących pozycjach występuje <math>x</math>. Problem <math>k</math>-zbioru niezależnego koduje się wtedy w następujący sposób:


Zobaczmy teraz przykład problemu, który należy do <math>\displaystyle \cc{MAXSNP}_0</math>. Wybierzemy problem <math>\displaystyle k</math>-INDEPENDENT SET. Zwykła reprezentacja grafu poprzez relację binarną nie pozwala wygodnie przedstawić ograniczenia stopnia wierzchołka i raczej nie prowadzi do reprezentacji poprzez odpowiednią formułę. Dlatego użyjemy niestandardowej reprezentacji grafu poprzez <math>\displaystyle k+1</math>-argumentową relację <math>\displaystyle H</math>. Każdemu wierzchołkowi <math>\displaystyle G</math> odpowiada jedna krotka relacji <math>\displaystyle H</math> - <math>\displaystyle \braq{x,y_1,y_2,\ldots,y_k}</math>, która koduje sąsiedztwo wierzchołka <math>\displaystyle x</math>. Wierzchołki <math>\displaystyle y_1,y_2,\ldots,y_k</math> to sąsiedzi <math>\displaystyle x</math>. Jeżeli <math>\displaystyle x</math> nie ma <math>\displaystyle k</math> sąsiadów, to na brakujących pozycjach występuje <math>\displaystyle x</math>. Problem <math>\displaystyle k</math>-zbioru niezależnego koduje się wtedy w następujący sposób:
<center><math>\begin{align} \max_{S\subseteq V}\{(\mathit{x,y_1,y_2,\ldots,y_k}) \in V^k : (\mathit{x,y_1,y_2,\ldots,y_k}) \in H \wedge x \in S \wedge \\
 
<center><math>\displaystyle \aligned \max_{S\subseteq V}\{\braq{x,y_1,y_2,\ldots,y_k} \in V^k : \braq{x,y_1,y_2,\ldots,y_k} \in H \wedge x \in S \wedge \\
\wedge \left[x = y_1 \vee y_1 \notin S\right] \wedge \left[ x = y_2 \vee y_2 \notin S\right] \wedge \ldots \wedge \left[ x = y_k \vee y_k \notin S\right]\}
\wedge \left[x = y_1 \vee y_1 \notin S\right] \wedge \left[ x = y_2 \vee y_2 \notin S\right] \wedge \ldots \wedge \left[ x = y_k \vee y_k \notin S\right]\}
\endaligned</math></center>
\end{align}\text{.}</math></center>


Wybór relacji <math>\displaystyle S</math> koduje pewien podzbiór wierzchołków. Formuła kodująca problem jest spełniona dla krotek odpowiadających tym wierzchołkom <math>\displaystyle x</math>, które należą do wybranego zbioru, a żaden z sąsiadów nie należy. Odpowiada to więc zbiorowi niezależnemu.
Wybór relacji <math>S</math> koduje pewien podzbiór wierzchołków. Formuła kodująca problem jest spełniona dla krotek odpowiadających tym wierzchołkom <math>x</math>, które należą do wybranego zbioru, a żaden z sąsiadów nie należy. Odpowiada to więc zbiorowi niezależnemu.


Pokazaliśmy zatem, że problem <math>\displaystyle k</math>-INDEPENDENT SET należy do klasy <math>\displaystyle \cc{MAXSNP}_0</math>.
Pokazaliśmy zatem, że problem <math>k</math>-INDEPENDENT SET należy do klasy <math>\mathrm{MAXSNP}_0</math>.
Natychmiastowym wnioskiem jest, że problem <math>\displaystyle k</math>-NODE COVER jest problemem z <math>\displaystyle \cc{MAXSNP}</math>. Znamy przecież jego L-redukcję do <math>\displaystyle k</math>-INDEPENDENT SET.
Natychmiastowym wnioskiem jest, że problem <math>k</math>-NODE COVER jest problemem z <math>\mathrm{MAXSNP}</math>. Znamy przecież jego L-redukcję do <math>k</math>-INDEPENDENT SET.


{{cwiczenie|||
{{cwiczenie|6.3||
MAX CUT w <math>\displaystyle \cc{MAXSNP}</math>.
MAX CUT w <math>\mathrm{MAXSNP}</math>.
 
Pokaż, że problem MAX CUT należy do <math>\displaystyle \cc{MAXSNP}</math>.


Pokaż, że problem MAX CUT należy do <math>\mathrm{MAXSNP}</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 zwykłej binarnej reprezentacji grafu do skonstruowania odpowiedniej formuły pokazującej, że MAX CUT należy do <math>\displaystyle \cc{MAXSNP}_0</math>.
Użyj zwykłej binarnej reprezentacji grafu do skonstruowania odpowiedniej formuły pokazującej, że MAX CUT należy do <math>\mathrm{MAXSNP}_0</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">   
Formuła kodująca problem MAX CUT to
Formuła kodująca problem MAX CUT to:


<center><math>\displaystyle \max_{S\subseteq V}\defset{\braq{x,y} \in V^2}{\braq{x,y}\in G \wedge x \in S \wedge y \notin S}
<center><math>\max_{S\subseteq V} \{ {(\mathit{x,y}) \in V^2} : {(\mathit{x,y})\in G \wedge x \in S \wedge y \notin S} \}\text{.}
</math></center>
</math></center>


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


==Problemy MAXSAT i MAX FUNCTION SAT==
==Problemy MAXSAT i MAX FUNCTION SAT==


Problem maksymalnej spełnialności MAXSAT i jego zawężenia pełnią podobną rolę dla klasy <math>\displaystyle \cc{MAXSNP}</math> jak problem SAT dla <math>\displaystyle \cc{NP}</math>. W tej części przyjrzymy się dokładniej temu problemow i jego różnym wersjom. Podamy również algorytmy aproksymacyjne i udowodnimy zupełność zawężeń tego problemu dla klasy <math>\displaystyle \cc{MAXSNP}</math>.
Problem maksymalnej spełnialności MAXSAT i jego zawężenia pełnią podobną rolę dla klasy <math>\mathrm{MAXSNP}</math> jak problem SAT dla <math>\mathrm{NP}</math>. W tej części przyjrzymy się dokładniej temu problemowi i jego różnym wersjom. Podamy również algorytmy aproksymacyjne i udowodnimy zupełność zawężeń tego problemu dla klasy <math>\mathrm{MAXSNP}</math>.


Przypomnijmy, że na wejściu problemu MAXSAT dostajemy formułę logiczną w koniunkcyjnej postaci normalnej z <math>\displaystyle n</math> zmiennymi. Poszukujemy takiego wartościowania tych zmiennych, które zmaksymalizowałoby liczbę spełnionych klauzul. Dla wygody dodajemy warunek, aby każda z klauzul była inna.
Przypomnijmy, że na wejściu problemu MAXSAT dostajemy formułę logiczną w koniunkcyjnej postaci normalnej z <math>n</math> zmiennymi. Poszukujemy takiego wartościowania tych zmiennych, które zmaksymalizowałoby liczbę spełnionych klauzul. Dla wygody dodajemy warunek, aby każda z klauzul była inna.


<math>\displaystyle \frac{1}{2}</math>-aproksymację problemu MAXSAT można osiągnąć bardzo prostą metodą:
<math>\frac{1}{2}</math>-aproksymację problemu MAXSAT można osiągnąć bardzo prostą metodą:
   
   
Algorytm wybierający wartościowanie <math>\displaystyle x</math> lub <math>\displaystyle \overline{x}</math>.
{{algorytm|7.1 [Algorytm wybierający wartościowanie <math>x</math> lub <math>\overline{x}</math>]|al 6.1|
# Wybierz dowolne wartościowanie <math>\displaystyle x</math> dla <math>\displaystyle n</math> zmiennych występujących w formule.
1. Wybierz dowolne wartościowanie <math>x</math> dla <math>n</math> zmiennych występujących w formule.
# Skonstruuj wartościowanie <math>\displaystyle \overline{x}</math>, które przyporządkowuje zmiennym wartościowanie odwrotne do <math>\displaystyle x</math>.
 
# Jako wynik podaj to z wartościowań <math>\displaystyle x</math>, <math>\displaystyle \overline{x}</math>, przy którym więcej klauzul jest spełnionych.
2. Skonstruuj wartościowanie <math>\overline{x}</math>, które przyporządkowuje zmiennym wartościowanie odwrotne do <math>x</math>.
 
3. Jako wynik podaj to z wartościowań <math>x</math>, <math>\overline{x}</math>, przy którym więcej klauzul jest spełnionych.}}
   
   
{{twierdzenie|||
{{twierdzenie|7.2||
Podany algorytm jest algorytmem <math>\displaystyle \frac{1}{2}</math>-aproksymacyjnym.
Podany algorytm jest algorytmem <math>\frac{1}{2}</math>-aproksymacyjnym.
}}
}}


{{dowod|||
{{dowod|||
Zauważmy, że jeżeli któraś z alternatyw jest niespełniona przy wartościowaniu <math>\displaystyle x</math>, to musi być spełniona przy wartościowaniu <math>\displaystyle \overline{x}</math>. Jeżeli alternatywa jest niespełniona przy jakimś wartościowaniu, to znaczy, że każda ze zmiennych występujących w klauzuli jest wartościowana odwrotnie niż jej wystąpienie. Zatem przy wartościowaniu odwrotnym każdy z literałów występujących w alternatywie jest wartościowany pozytywnie i alternatywa musi być spełniona.
Zauważmy, że jeżeli któraś z alternatyw jest niespełniona przy wartościowaniu <math>x</math>, to musi być spełniona przy wartościowaniu <math>\overline{x}</math>. Jeżeli alternatywa jest niespełniona przy jakimś wartościowaniu, to znaczy, że każda ze zmiennych występujących w klauzuli jest wartościowana odwrotnie niż jej wystąpienie. Zatem przy wartościowaniu odwrotnym każdy z literałów występujących w alternatywie jest wartościowany pozytywnie i alternatywa musi być spełniona.


Jeżeli zatem oznaczymy przez <math>\displaystyle m</math> - liczbę alternatyw w formule, przez <math>\displaystyle c</math> - liczbę alternatyw spełnionych przy wartościowaniu <math>\displaystyle x</math>, a przez <math>\displaystyle \overline{c}</math> - liczbę alternatyw spełnionych przy wartościowaniu <math>\displaystyle \overline{x}</math>, to zachodzą następującee nierówności:
Jeżeli zatem oznaczymy przez <math>m</math> - liczbę alternatyw w formule, przez <math>c</math> liczbę alternatyw spełnionych przy wartościowaniu <math>x</math>, a przez <math>\overline{c}</math> liczbę alternatyw spełnionych przy wartościowaniu <math>\overline{x}</math>, to zachodzą następującee nierówności:


<center><math>\displaystyle \aligned c &\geq  m - \overline{c} \\
<center><math>\begin{align} c &\geq  m - \overline{c}\text{,} \\
\overline{c} &\geq  m - c \\
\overline{c} &\geq  m - c\text{,} \\
c + \overline{c} &\geq  2m - c - \overline{c} \\
c + \overline{c} &\geq  2m - c - \overline{c}\text{,} \\
c + \overline{c} &\geq  m
c + \overline{c} &\geq  m\text{.}
\endaligned</math></center>
\end{align}</math></center>


Ponieważ algorytm wybiera to z wartościowań <math>\displaystyle x</math> lub <math>\displaystyle \overline{x}</math>, przy którym więcej alternatyw jest spełnionych, to liczba spełnionych alternatyw jest nie mniejsza niż <math>\displaystyle \frac{1}{2}m</math>. Nawet jeżeli rozwiązanie optymalne zapewnia spełnienie wszystkich <math>\displaystyle m</math> alternatyw, to algorytm jest <math>\displaystyle \frac{1}{2}</math>-aproksymacyjny.
Ponieważ algorytm wybiera to z wartościowań <math>x</math> lub <math>\overline{x}</math>, przy którym więcej alternatyw jest spełnionych, to liczba spełnionych alternatyw jest nie mniejsza niż <math>\frac{1}{2}m</math>. Nawet jeżeli rozwiązanie optymalne zapewnia spełnienie wszystkich <math>m</math> alternatyw, to algorytm jest <math>\frac{1}{2}</math>-aproksymacyjny.
}}
}}


Linia 578: Linia 566:


{{problem|||
{{problem|||
Problem maksymalnej spełnialności funkcyjnej MAX FUNCTION SAT
Problem maksymalnej spełnialności funkcyjnej MAX FUNCTION SAT.


Danych jest <math>\displaystyle n</math> zmiennych logicznych <math>\displaystyle x_1,x_2,\ldots,x_n</math> oraz <math>\displaystyle m</math> funkcji logicznych <math>\displaystyle f_1,f_2,\ldots,f_m</math>. Należy znaleźć wartościowanie zmiennych <math>\displaystyle x_1,x_2,\ldots,x_n</math> przy którym największa liczba funkcji daje wynik pozytywny.
Danych jest <math>n</math> zmiennych logicznych <math>x_1,x_2,\ldots,x_n</math> oraz <math>m</math> funkcji logicznych <math>f_1,f_2,\ldots,f_m</math>. Należy znaleźć wartościowanie zmiennych <math>x_1,x_2,\ldots,x_n</math>, przy którym największa liczba funkcji daje wynik pozytywny.
}}
}}


Ciekawym i istotnym dla dalszych rozważań zawężeniem problemów MAXSAT i MAX FUNCTION SAT jest ograniczenie liczby różnych zmiennych występujących w pojedynczej klauzuli lub funkcji logicznej. Jeżeli ta liczba jest ograniczonaa przez <math>\displaystyle k</math>, to mamy do czynienia z problemem MAX<math>\displaystyle k</math>SAT i MAX<math>\displaystyle k</math>FSAT.
Ciekawym i istotnym dla dalszych rozważań zawężeniem problemów MAXSAT i MAX FUNCTION SAT jest ograniczenie liczby różnych zmiennych występujących w pojedynczej klauzuli lub funkcji logicznej. Jeżeli ta liczba jest ograniczonaa przez <math>k</math>, to mamy do czynienia z problemem MAX<math>k</math>SAT i MAX<math>k</math>FSAT.


Przypomnijmy, że pokazaliśmy, że już problem MAX<math>\displaystyle 2</math>SAT jest <math>\displaystyle \cc{NP}</math>-zupełny (mimo że problem <math>\displaystyle 2</math>SAT nie jest). Teraz okaże się dlaczego te problemy są dla nas tak interesujące:
Przypomnijmy, pokazaliśmy, że już problem MAX<math>2</math>SAT jest <math>\mathrm{NP}</math>-zupełny (mimo że problem <math>2</math>SAT nie jest). Teraz okaże się, dlaczego te problemy są dla nas tak interesujące:


{{twierdzenie|||
{{twierdzenie|7.3||
Problemy MAX<math>\displaystyle k</math>SAT należą do klasy <math>\displaystyle \cc{MAXSNP}_0</math>.
Problemy MAX<math>k</math>SAT należą do klasy <math>\mathrm{MAXSNP}_0</math>.
}}
}}


{{dowod|||
{{dowod|||
Pokażemy, że problem MAX<math>\displaystyle 2</math>SAT należy do <math>\displaystyle \cc{MAXSNP}_0</math>. Konstrukcja reprezentacji formuły i kodowania problemu dla większych <math>\displaystyle k</math> jest analogiczna.
Pokażemy, że problem MAX<math>2</math>SAT należy do <math>\mathrm{MAXSNP}_0</math>. Konstrukcja reprezentacji formuły i kodowania problemu dla większych <math>k</math> jest analogiczna.


Zatem ustalamy, że uniwersum <math>\displaystyle V</math> to zbiór zmiennych występujących w formule, a trzy relacje binarne <math>\displaystyle G_0,G_1,G_2</math> kodują formułę. Para <math>\displaystyle \braq{x_1,x_2}</math> w relacji <math>\displaystyle G_i</math> koduje wystąpienie klauzuli zawierającej literały <math>\displaystyle x_1</math> i <math>\displaystyle x_2</math> z których <math>\displaystyle i</math> występuje pozytywnie. Żeby zapewnić reprezentację każdej alternatywy przez dokładnie jedną krotkę którejś z relacji wprowadzamy taką odpowiedniość pomiędzy relacjami i klauzulami:
Zatem ustalamy, że uniwersum <math>V</math> to zbiór zmiennych występujących w formule, a trzy relacje binarne <math>G_0,G_1,G_2</math> kodują formułę. Para <math>(\mathit{x_1,x_2})</math> w relacji <math>G_i</math> koduje wystąpienie klauzuli zawierającej literały <math>x_1</math> i <math>x_2</math>, z których <math>i</math> występuje pozytywnie. Żeby zapewnić reprezentację każdej alternatywy przez dokładnie jedną krotkę którejś z relacji, wprowadzamy taką odpowiedniość pomiędzy relacjami i klauzulami:


<center><math>\displaystyle \aligned G_0(x_i,x_j)  & \Longleftrightarrow & \braq{\neg x_i \vee \neg x_j}; i < j \\
<center><math>\begin{align} G_0(x_i,x_j)  & \Longleftrightarrow & (\mathit{\neg x_i \vee \neg x_j}); i < j\text{,} \\
  G_1(x_i,x_j)  & \Longleftrightarrow & \braq{x_i \vee \neg x_j} \\
  G_1(x_i,x_j)  & \Longleftrightarrow & (\mathit{x_i \vee \neg x_j})\text{,} \\
  G_2(x_i,x_j)  & \Longleftrightarrow & \braq{x_i \vee x_j}; i < j
  G_2(x_i,x_j)  & \Longleftrightarrow & (\mathit{x_i \vee x_j}); i < j\text{.}
\endaligned</math></center>
\end{align}</math></center>


Możemy teraz użyć następującej formuły reprezentującej problem MAX<math>\displaystyle 2</math>SAT:
Możemy teraz użyć następującej formuły reprezentującej problem MAX<math>2</math>SAT:


<center><math>\displaystyle \max_{S\subseteq V}\defset{\braq{x,y}}{\left[ G_0(x,y)  \wedge \braq{\neg  S(x)  \vee \neg  S(y) }\right] \vee \left[ G_1(x,y)  \wedge \braq{ S(x)  \vee \neg  S(y) }\right] \vee \left[ G_2(x,y)  \wedge \braq{ S(x)  \vee  S(y) }\right]}
<center><math>\max_{S\subseteq V} \{ {(\mathit{x,y})} : {\left[ G_0(x,y)  \wedge (\mathit{\neg  S(x)  \vee \neg  S(y) })\right] \vee \left[ G_1(x,y)  \wedge (\mathit{ S(x)  \vee \neg  S(y) })\right] \vee \left[ G_2(x,y)  \wedge (\mathit{ S(x)  \vee  S(y) })\right]} \}\text{.}
</math></center>
</math></center>


Wybór relacji <math>\displaystyle S</math> odpowiada ustaleniu wartościowania, a konstrukcja formuły zapewnia, że liczba krotek <math>\displaystyle \braq{x,y}</math> spełniających formułę odpowiada liczbie alternatyw spełnionych przy danym wartościowaniu.
Wybór relacji <math>S</math> odpowiada ustaleniu wartościowania, a konstrukcja formuły zapewnia, że liczba krotek <math>(\mathit{x,y})</math> spełniających formułę odpowiada liczbie alternatyw spełnionych przy danym wartościowaniu.
}}
}}


Zbudowanie algorytmu aproksymacyjnego dla problemu MAX<math>\displaystyle k</math>FSAT nie jest już tak proste, jak dla problemu MAXSAT. Załóżmy, że mamy <math>\displaystyle n</math> zmiennych <math>\displaystyle x_1,x_2,\ldots,x_n</math> i <math>\displaystyle m</math> funkcji logicznych <math>\displaystyle f_1,f_2,\ldots,f_m</math>, z których każda zależy od co najwyżej <math>\displaystyle k</math> zmiennych. Żeby dobrze zobrazować działanie algorytmu wyobraźmy sobie pełne drzewo binarne o <math>\displaystyle 2^n</math> liściach. Każdy węzeł wewnętrzny reprezentuje pewne częściowe wartościowanie zmiennych.
[[File:ZO-8-2.svg|300x200px|thumb|right|Drzewo wartościowań]]


{drzewo wartościowań - ZO-8.2}
Zbudowanie algorytmu aproksymacyjnego dla problemu MAX<math>k</math>FSAT nie jest już tak proste, jak dla problemu MAXSAT. Załóżmy, że mamy <math>n</math> zmiennych <math>x_1,x_2,\ldots,x_n</math> i <math>m</math> funkcji logicznych <math>f_1,f_2,\ldots,f_m</math>, z których każda zależy od co najwyżej <math>k</math> zmiennych. Żeby dobrze zobrazować działanie algorytmu, wyobraźmy sobie pełne drzewo binarne o <math>2^n</math> liściach. Każdy węzeł wewnętrzny reprezentuje pewne częściowe wartościowanie zmiennych (rysunek [http://osilek.mimuw.edu.pl/images/d/da/ZO-8-2.swf Drzewo wartościowań]).


Dla każdego węzła drzewa <math>\displaystyle t</math> i funkcji <math>\displaystyle f_i</math> określamy funkcję:
Dla każdego węzła drzewa <math>t</math> i funkcji <math>f_i</math> określamy funkcję:


<center><math>\displaystyle  p(t,f_i)  = \frac{\text{liczba wartościowań rozszerzających }t\text{ przy których }f_i\text{ daje wynik pozytywny}}{\text{liczba wszystkich wartościowań rozszerzających }t}
<center><math>p(t,f_i)  = \frac{\text{liczba wartościowań rozszerzających }t\text{ przy których }f_i\text{ daje wynik pozytywny}}{\text{liczba wszystkich wartościowań rozszerzających }t}\text{.}
</math></center>
</math></center>


Łatwo zauważyć, że jeżeli węzły <math>\displaystyle t_0</math> i <math>\displaystyle t_1</math> są dziećmi <math>\displaystyle t</math> w drzewie wartościowań, to zachodzi:
Łatwo zauważyć, że jeżeli węzły <math>t_0</math> i <math>t_1</math> są dziećmi <math>t</math> w drzewie wartościowań, to zachodzi:


<center><math>\displaystyle  p(t,f_i)  = \frac{1}{2}\braq{ p(t_0,f_i)  +  p(t_1,f_i) }
<center><math>p(t,f_i)  = \frac{1}{2}(\mathit{ p(t_0,f_i)  +  p(t_1,f_i) })\text{.}
</math></center>
</math></center>


Rozważmy teraz funkcję <math>\displaystyle  P(t)  = \sum_{i=1}^{m}  p(t,f_i) </math>. Oczywistym wnioskiem z poprzedniej równości jest:
Rozważmy teraz funkcję <math>P(t)  = \sum_{i=1}^{m}  p(t,f_i)</math>. Oczywistym wnioskiem z poprzedniej równości jest:


<center><math>\displaystyle  P(t)  = \frac{1}{2}\braq{ P(t_0)  +  P(t_1) }
<center><math>P(t)  = \frac{1}{2}(\mathit{ P(t_0)  +  P(t_1) })\text{.}
</math></center>
</math></center>


Zauważmy jeszcze, że obliczenia wartości <math>\displaystyle  P(t) </math> dla konkretnego <math>\displaystyle t</math> można dokonać w czasie wielomianowym. Ponieważ każda z funkcji <math>\displaystyle f_i</math> zależy tylko od <math>\displaystyle k</math> zmiennych, więc można dokonać wyczerpującego przeglądu wszystkich <math>\displaystyle 2^k</math> wartościowań tych zmiennych zliczając te dla których <math>\displaystyle f_i</math> daje wynik pozytywny i są rozszerzeniami wartościowania <math>\displaystyle t</math>. Można zatem w czasie wielomianowym zsumować wartości <math>\displaystyle  p(t,f_i) </math> dla wszystkich <math>\displaystyle m</math> funkcji <math>\displaystyle f_i</math>.
Zauważmy jeszcze, że obliczenia wartości <math>P(t)</math> dla konkretnego <math>t</math> można dokonać w czasie wielomianowym. Ponieważ każda z funkcji <math>f_i</math> zależy tylko od <math>k</math> zmiennych, więc można dokonać wyczerpującego przeglądu wszystkich <math>2^k</math> wartościowań tych zmiennych, zliczając te, dla których <math>f_i</math> daje wynik pozytywny i są rozszerzeniami wartościowania <math>t</math>. Można zatem w czasie wielomianowym zsumować wartości <math>p(t,f_i)</math> dla wszystkich <math>m</math> funkcji <math>f_i</math>.


Możemy już teraz przedstawić algorytm:
Możemy już teraz przedstawić algorytm:
   
   
Algorytm schodzący po drzewie wartościowań
{{algorytm|7.4 [Algorytm schodzący po drzewie wartościowań]|al 6.4|
# Ustaw zmienną <math>\displaystyle t</math> na korzeń <math>\displaystyle r</math> drzewa wartościowań.
1. Ustaw zmienną <math>t</math> na korzeń <math>r</math> drzewa wartościowań.
# Dopóki <math>\displaystyle t</math> nie będzie liściem drzewa wartościowań:


;
2. Dopóki <math>t</math> nie będzie liściem drzewa wartościowań:
:  Obliczaj wartość <math>\displaystyle  P(t_0) </math> i <math>\displaystyle  P(t_1) </math> dla dzieci węzła <math>\displaystyle t</math> i ustaw <math>\displaystyle t</math> na to z dzieci, dla którego wartość <math>\displaystyle  P(t_i) </math> jest większa.


: Podaj wartościowanie opisywane przez węzeł <math>\displaystyle t</math> jako wynik.
obliczaj wartość <math>P(t_0)</math> i <math>P(t_1)</math> dla dzieci węzła <math>t</math>
 
i ustaw <math>t</math> na to z dzieci, dla którego wartość <math>P(t_i)</math>  jest większa.
 
3. Podaj wartościowanie opisywane przez węzeł <math>t</math> jako wynik.}}
   
   
{{twierdzenie|||
{{twierdzenie|7.5||
Algorytm schodzący po drzewie wartościowań jest algorytmem <math>\displaystyle \frac{1}{2^k}</math>-aproksymacyjnym dla problemu MAX<math>\displaystyle k</math>FSAT.
Algorytm schodzący po drzewie wartościowań jest algorytmem <math>\frac{1}{2^k}</math>-aproksymacyjnym dla problemu MAX<math>k</math>FSAT.
}}
}}


{{dowod|||
{{dowod|||
Liczba funkcji dających wynik pozytywny przy wartościowaniu <math>\displaystyle t</math> znalezionym przez algorytm jest równa dokładnie <math>\displaystyle  P(t) </math>. Ponieważ węzeł <math>\displaystyle t</math> określa wartość każdej ze zmiennych, to <math>\displaystyle  p(t,f_i) </math> jest równe <math>\displaystyle 1</math> dla funkcji dających wynik pozytywny, a <math>\displaystyle 0</math> dla tych dających wynik negatywny.
Liczba funkcji dających wynik pozytywny przy wartościowaniu <math>t</math> znalezionym przez algorytm jest równa dokładnie <math>P(t)</math>. Ponieważ węzeł <math>t</math> określa wartość każdej ze zmiennych, to <math>p(t,f_i)</math> jest równe <math>1</math> dla funkcji dających wynik pozytywny, a <math>0</math> dla tych dających wynik negatywny.


Zauważmy, że <math>\displaystyle  P(t)  \geq  P(r) </math>. Jest tak dlatego, że przy każdym zejściu w dół drzewa od węzła <math>\displaystyle s</math> jest spełnione <math>\displaystyle  P(s)  = \frac{1}{2}\braq{ P(s_0)  +  P(s_1) }</math>, więc któraś z wartości <math>\displaystyle  P(s_0) </math>, lub <math>\displaystyle  P(s_1) </math> jest większa lub równa <math>\displaystyle  P(s) </math>, a algorytm wybiera zejście w kierunku większej z nich. W związku z tym wartość funkcji <math>\displaystyle P</math> dla aktualnie przeglądanego węzła nigdy nie maleje.
Zauważmy, że <math>P(t)  \geq  P(r)</math>. Jest tak dlatego, że przy każdym zejściu w dół drzewa od węzła <math>s</math> jest spełnione <math>P(s)  = \frac{1}{2}(\mathit{ P(s_0)  +  P(s_1) })</math>, więc któraś z wartości <math>P(s_0)</math>, lub <math>P(s_1)</math> jest większa lub równa <math>P(s)</math>, a algorytm wybiera zejście w kierunku większej z nich. W związku z tym wartość funkcji <math>P</math> dla aktualnie przeglądanego węzła nigdy nie maleje.


Zatem liczba funkcji z wynikiem pozytywnym w rozwiązaniu znalezionym przez algorytm jest nie mniejsza niż <math>\displaystyle \ceil{ P(r) }</math>. Ponieważ dla każdej funkcji, która może w ogóle dać wynik pozytywny przy jakimkolwiek wartościowaniu zachodzi <math>\displaystyle  p(r,f_i)  \geq \frac{1}{2^k}</math>, to liczba funkcji, które dają wynik pozytywny w rozwiązaniu optymalnym jest ograniczona z góry przez <math>\displaystyle \frac{ P(r) }{\frac{1}{2^k}}</math>. To dowodzi że algorytm jest algorytmem <math>\displaystyle \frac{1}{2^k}</math>-aproksymacyjnym.
Zatem liczba funkcji z wynikiem pozytywnym w rozwiązaniu znalezionym przez algorytm jest nie mniejsza niż <math>[{ P(r) }]</math>. Ponieważ dla każdej funkcji, która może w ogóle dać wynik pozytywny, przy jakimkolwiek wartościowaniu zachodzi <math>p(r,f_i)  \geq \frac{1}{2^k}</math>, to liczba funkcji, które dają wynik pozytywny w rozwiązaniu optymalnym, jest ograniczona z góry przez <math>\frac{ P(r) }{\frac{1}{2^k}}</math>. To dowodzi, że algorytm jest algorytmem <math>\frac{1}{2^k}</math>-aproksymacyjnym.
}}
}}


{{cwiczenie|||
{{cwiczenie|7.6||
Kodowanie MAX<math>\displaystyle k</math>FSAT w MAX<math>\displaystyle 3</math>SAT.
Kodowanie MAX<math>k</math>FSAT w MAX<math>3</math>SAT.
 
Pokaż L-redukcję problemu MAX<math>\displaystyle k</math>FSAT do MAX<math>\displaystyle 3</math>SAT.


Pokaż L-redukcję problemu MAX<math>k</math>FSAT do MAX<math>3</math>SAT.
}}
<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 reprezentacji funkcji logicznej przez układ bramek logicznych, a następnie przedstaw każdą bramkę jako klauzulę <math>\displaystyle 3</math>SAT.
Użyj reprezentacji funkcji logicznej przez układ bramek logicznych, a następnie przedstaw każdą bramkę jako klauzulę <math>3</math>SAT.
</div></div>
</div></div>


Linia 666: Linia 656:


Skorzystamy teraz z tego, że każdą funkcję logiczną można przedstawić jako układ bramek logicznych zbudowany z bramek:
Skorzystamy teraz z tego, że każdą funkcję logiczną można przedstawić jako układ bramek logicznych zbudowany z bramek:
* wejściowych
* wejściowych,
* negacji (<math>\displaystyle \neg</math>)
* negacji (<math>\neg</math>),
* koniunkcji (<math>\displaystyle \wedge</math>)
* koniunkcji (<math>\wedge</math>),
* alternatywy (<math>\displaystyle \vee</math>)
* alternatywy (<math>\vee</math>),
* jednej bramki wyjściowej
* jednej bramki wyjściowej.
   
   
Skonstruowana formuła <math>\displaystyle 3</math>SAT będzie modelować układ takich bramek. Zmienne formuły będą odpowiadać bramkom i zmiennym występującym w modelowanej funkcji.
Skonstruowana formuła <math>3</math>SAT będzie modelować układ takich bramek. Zmienne formuły będą odpowiadać bramkom i zmiennym występującym w modelowanej funkcji.
Dla każdej bramki wejściowej <math>\displaystyle g</math> dodajemy klauzule:
Dla każdej bramki wejściowej <math>g</math> dodajemy klauzule:
* <math>\displaystyle \braq{g \vee \neg x} \wedge \braq{\neg g \vee x}</math> - jeżeli bramka <math>\displaystyle g</math> odpowiada zmiennej <math>\displaystyle x</math>.
* <math>(\mathit{g \vee \neg x}) \wedge (\mathit{\neg g \vee x})</math> jeżeli bramka <math>g</math> odpowiada zmiennej <math>x</math>.
* <math>\displaystyle \braq{g}</math> lub <math>\displaystyle \braq{\neg g}</math> - jeżeli bramka <math>\displaystyle g</math> ma stałą wartość logiczną.
* <math>(\mathit{g})</math> lub <math>(\mathit{\neg g})</math> jeżeli bramka <math>g</math> ma stałą wartość logiczną.
   
   
Dalej, konstrukcja dla bramek operatorów logicznych jest następująca:
Dalej, konstrukcja dla bramek operatorów logicznych jest następująca:
* <math>\displaystyle \braq{g \vee a} \wedge \braq{\neg g \vee \neg a}</math> - bramka <math>\displaystyle g</math> odpowiadająca operacji <math>\displaystyle \neg</math> z wejściem z bramki <math>\displaystyle a</math>.
* <math>(\mathit{g \vee a}) \wedge (\mathit{\neg g \vee \neg a})</math> bramka <math>g</math> odpowiadająca operacji <math>\neg</math> z wejściem z bramki <math>a</math>.
* <math>\displaystyle \braq{g \vee \neg a} \wedge \braq{g \vee \neg b} \wedge \braq{\neg b \vee a \vee b}</math> - bramka <math>\displaystyle g</math> odpowiadająca operacji <math>\displaystyle \vee</math> z wejściami z bramek <math>\displaystyle a</math> i <math>\displaystyle b</math>.
* <math>(\mathit{g \vee \neg a}) \wedge (\mathit{g \vee \neg b}) \wedge (\mathit{\neg b \vee a \vee b})</math> bramka <math>g</math> odpowiadająca operacji <math>\vee</math> z wejściami z bramek <math>a</math> i <math>b</math>.
* <math>\displaystyle \braq{\neg g \vee a} \wedge \braq{\neg g \vee b} \wedge \braq{g \vee \neg a \vee \neg b}</math> - bramka <math>\displaystyle g</math> odpowiadająca operacji <math>\displaystyle \wedge</math> z wejściami z bramek <math>\displaystyle a</math> i <math>\displaystyle b</math>.
* <math>(\mathit{\neg g \vee a}) \wedge (\mathit{\neg g \vee b}) \wedge (\mathit{g \vee \neg a \vee \neg b})</math> bramka <math>g</math> odpowiadająca operacji <math>\wedge</math> z wejściami z bramek <math>a</math> i <math>b</math>.
   
   
Dla bramki wyjściowej <math>\displaystyle g</math> dodajemy jedną klauzulę <math>\displaystyle \braq{g}</math>. W tak skonstruowanej formule wszystkie klauzule mogą być spełnione być może z wyjątkiem ostatniej. Wystarczy zawuażyć, że w każdej dodanej grupie mogą być spełnione wszystkie klauzule, o ile wartościowania są "zgodne" z zachowaniem bramki.
Dla bramki wyjściowej <math>g</math> dodajemy jedną klauzulę <math>(\mathit{g})</math>. W tak skonstruowanej formule wszystkie klauzule mogą być spełnione, być może z wyjątkiem ostatniej. Wystarczy zauważyć, że w każdej dodanej grupie mogą być spełnione wszystkie klauzule, o ile wartościowania są "zgodne" z zachowaniem bramki.


Możemy zatem zamienić wszystkie funkcje logiczne występujące w problemie MAX<math>\displaystyle k</math>FSAT na formuły MAX<math>\displaystyle 3</math>SAT. Optimum tego drugiego problemu będzie równe ilości wszystkich bramek poza wyjściowymi zwiększonym o liczbę funkcji, które mogą jednocześnie dawać wynik pozytywny. Stąd możemy ustalić współczynnik <math>\displaystyle \beta</math> redukcji na <math>\displaystyle 1</math>.
Możemy zatem zamienić wszystkie funkcje logiczne występujące w problemie MAX<math>k</math>FSAT na formuły MAX<math>3</math>SAT. Optimum tego drugiego problemu będzie równe ilości wszystkich bramek poza wyjściowymi zwiększonym o liczbę funkcji, które mogą jednocześnie dawać wynik pozytywny. Stąd możemy ustalić współczynnik <math>\beta</math> redukcji na <math>1</math>.


Żeby uzasadnić, że optimum w skonstruowanej formule jest ograniczone liniowo od optimum problemu MAX<math>\displaystyle k</math>FSAT przypomnijmy dowód dla algorytmu aproksymacyjnego dla problemu MAX<math>\displaystyle k</math>FSAT. Pokazaliśmy tam, że optimum problemu wynosi co najmniej <math>\displaystyle \frac{1}{2^k}m</math>, gdzie <math>\displaystyle m</math> jest liczbą funkcji. Tymczasem liczba klauzul zależy liniowo od liczby funkcji. Skonstruowana redukcja jest zatem L-redukcją.
Żeby uzasadnić, że optimum w skonstruowanej formule jest ograniczone liniowo od optimum problemu MAX<math>k</math>FSAT, przypomnijmy dowód dla algorytmu aproksymacyjnego dla problemu MAX<math>k</math>FSAT. Pokazaliśmy tam, że optimum problemu wynosi co najmniej <math>\frac{1}{2^k}m</math>, gdzie <math>m</math> jest liczbą funkcji. Tymczasem liczba klauzul zależy liniowo od liczby funkcji. Skonstruowana redukcja jest zatem L-redukcją.
</div></div>
</div></div>


}}


{{cwiczenie|||
 
{{cwiczenie|7.7||
Lepsza aproksymacja MAXSAT.
Lepsza aproksymacja MAXSAT.


Pokaż, że jeżeli wymagalibyśmy od instancji problemu MAXSAT aby w każdej alternatywie występowało przynajmniej <math>\displaystyle k</math> literałów, to istnieje algorytm <math>\displaystyle \braq{1-\frac{1}{2^k}}</math>-aproksymacyjny dla takiego problemu.
Pokaż, że jeżeli wymagalibyśmy od instancji problemu MAXSAT, aby w każdej alternatywie występowało przynajmniej <math>k</math> literałów, to istnieje algorytm <math>(\mathit{1-\frac{1}{2^k}})</math>-aproksymacyjny dla takiego problemu.
 
}}
<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">   
Jak wygląda oszacowanie <math>\displaystyle  P(r,f_i) </math>, gdy <math>\displaystyle f_i</math> reprezentuje klauzulę?
Jak wygląda oszacowanie <math>P(r,f_i)</math>, gdy <math>f_i</math> reprezentuje klauzulę?
</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">   
Wystarczy zauważyć, że jeżeli <math>\displaystyle f_i</math> reprezentuje klauzulę z <math>\displaystyle j</math> literałami, to <math>\displaystyle  P(r,f_i) =1-\frac{1}{2^j}</math>, gdyż jest tylko jedno wartościowanie występujących w niej zmiennych, które jej nie spełnia. Możemy w związku z tym powtórzyć rozumowanie z dowodu aproksymacji problemu MAX<math>\displaystyle k</math>FSAT i podany tam algorytm w tym wypadku jest algorytmem <math>\displaystyle \braq{1-\frac{1}{2^k}}</math>-aproksymacyjnym.
Wystarczy zauważyć, że jeżeli <math>f_i</math> reprezentuje klauzulę z <math>j</math> literałami, to <math>P(r,f_i) =1-\frac{1}{2^j}</math>, gdyż jest tylko jedno wartościowanie występujących w niej zmiennych, które jej nie spełnia. Możemy w związku z tym powtórzyć rozumowanie z dowodu aproksymacji problemu MAX<math>k</math>FSAT i podany tam algorytm w tym wypadku jest algorytmem <math>(\mathit{1-\frac{1}{2^k}})</math>-aproksymacyjnym.
</div></div>
</div></div>


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


Pokażemy teraz, że problem MAX<math>\displaystyle 3</math>SAT jest problemem zupełnym w sensie L-redukcji w klasie <math>\displaystyle \cc{MAXSNP}</math>. Jest to bardzo istotny fakt, bo oznacza, że pozytywne wyniki aproksymacjii tego elementarnego problemu przekładają się poprzez L-redukcje na wszystkie problemy z klasy <math>\displaystyle \cc{MAXSNP}</math>. Jest też to fakt interesujący ze względu na to, że wcale nie jest oczywiste, że problemy <math>\displaystyle \cc{MAXSNP}</math>-zupełne muszą w ogóle istnieć.
Pokażemy teraz, że problem MAX<math>3</math>SAT jest problemem zupełnym w sensie L-redukcji w klasie <math>\mathrm{MAXSNP}</math>. Jest to bardzo istotny fakt, bo oznacza, że pozytywne wyniki aproksymacjii tego elementarnego problemu przekładają się poprzez L-redukcje na wszystkie problemy z klasy <math>\mathrm{MAXSNP}</math>. Jest też to fakt interesujący ze względu na to, że wcale nie jest oczywiste, problemy <math>\mathrm{MAXSNP}</math>-zupełne muszą w ogóle istnieć.


{{twierdzenie|||
{{twierdzenie|8.1||
MAX<math>\displaystyle 3</math>SAT jest problemem zupełnym w sensie L-redukcji w klasie <math>\displaystyle \cc{MAXSNP}</math>.
MAX<math>3</math>SAT jest problemem zupełnym w sensie L-redukcji w klasie <math>\mathrm{MAXSNP}</math>.
}}
}}


{{dowod|||
{{dowod|||
Przypomnijmy, że klasa <math>\displaystyle \cc{MAXSNP}</math> jest definiowana jako klasa problemów L-redukowalnych do problemów z <math>\displaystyle \cc{MAXSNP}_0</math>. Zatem wystarczy, że pokażemy, że każdy problem z <math>\displaystyle \cc{MAXSNP}_0</math> jest L-redukowalny do problemu MAX<math>\displaystyle 3</math>SAT i skorzystamy z tego, że złożenie L-redukcji jest L-redukcją.
Przypomnijmy, że klasa <math>\mathrm{MAXSNP}</math> jest definiowana jako klasa problemów L-redukowalnych do problemów z <math>\mathrm{MAXSNP}_0</math>. Zatem wystarczy, że pokażemy, każdy problem z <math>\mathrm{MAXSNP}_0</math> jest L-redukowalny do problemu MAX<math>3</math>SAT i skorzystamy z tego, że złożenie L-redukcji jest L-redukcją.


Rozważmy zatem problem <math>\displaystyle A</math> z klasy <math>\displaystyle \cc{MAXSNP}_0</math> definiowany formułą:
Rozważmy zatem problem <math>A</math> z klasy <math>\mathrm{MAXSNP}_0</math> definiowany formułą:


<center><math>\displaystyle \max_S\defset{\braq{x_1,x_2,\ldots,x_k}}{\phi}
<center><math>\max_S \{ {(\mathit{x_1,x_2,\ldots,x_k})} : {\phi} \}\text{.}
</math></center>
</math></center>


Rozważymy teraz konkretną instancję problemu <math>\displaystyle A</math> z ustalonym uniwersum <math>\displaystyle V</math> i relacjami <math>\displaystyle G_1,G_2,\ldots,G_m</math>. Dla każdej krotki <math>\displaystyle v = \braq{v_1,v_2,\ldots,v_k} \in V^k</math> definiujemy formułę <math>\displaystyle \phi_v</math>, która powstaje z <math>\displaystyle \phi</math> przez podstawienie wartości <math>\displaystyle v_1,v_2,\ldots,v_k</math> za zmienne <math>\displaystyle x_1,x_2,\ldots,x_k</math>. Każdą w formuł <math>\displaystyle \phi_v</math> możemy uprościć zamieniając każde wystąpienie relacji <math>\displaystyle G</math> i symbolu <math>\displaystyle =</math> wartościami prawdy i fałszu, które w konkretnej instancji są ustalone. W wyniku otrzymujemy formułę <math>\displaystyle \phi_v</math>, w której występują tylko symbole logiczne i relacja <math>\displaystyle S</math>.
Rozważymy teraz konkretną instancję problemu <math>A</math> z ustalonym uniwersum <math>V</math> i relacjami <math>G_1,G_2,\ldots,G_m</math>. Dla każdej krotki <math>v = (\mathit{v_1,v_2,\ldots,v_k}) \in V^k</math> definiujemy formułę <math>\phi_v</math>, która powstaje z <math>\phi</math> przez podstawienie wartości <math>v_1,v_2,\ldots,v_k</math> za zmienne <math>x_1,x_2,\ldots,x_k</math>. Każdą w formuł <math>\phi_v</math> możemy uprościć, zamieniając każde wystąpienie relacji <math>G</math> i symbolu <math>=</math> wartościami prawdy i fałszu, które w konkretnej instancji są ustalone. W wyniku otrzymujemy formułę <math>\phi_v</math>, w której występują tylko symbole logiczne i relacja <math>S</math>.


Możemy teraz spojrzeć na rozwiązanie tej instancjii problemu <math>\displaystyle A</math> jak na ustalenie wartościowania formuł <math>\displaystyle  S(v_{i_1},v_{i_2},\ldots,v_{i_r}) </math> tak aby zmaksymalizować liczbę spełnionych formuł <math>\displaystyle \phi_v</math>. Jeżeli któraś z formuł <math>\displaystyle \phi_v</math> jest niespełnialna dla żadnego wartościowania, to już na tym etapie usuwamy ją z opisu problemu.
Możemy teraz spojrzeć na rozwiązanie tej instancjii problemu <math>A</math> jak na ustalenie wartościowania formuł <math>S(v_{i_1},v_{i_2},\ldots,v_{i_r})</math>, tak aby zmaksymalizować liczbę spełnionych formuł <math>\phi_v</math>. Jeżeli któraś z formuł <math>\phi_v</math> jest niespełnialna dla żadnego wartościowania, to już na tym etapie usuwamy ją z opisu problemu.


Właśnie opisaliśmy redukcję problemu <math>\displaystyle A</math> do problemu MAX<math>\displaystyle l</math>FSAT, gdzie jest <math>\displaystyle \size{V}^r</math> zmiennych odpowiadających <math>\displaystyle  S(v_{i_1},v_{i_2},\ldots,v_{i_r}) </math> i <math>\displaystyle \size{V}^r</math> funkcji logicznych odpowiadających formułom <math>\displaystyle \phi_v</math>. Stała <math>\displaystyle l</math> zależy tylko od postaci formuły <math>\displaystyle \phi</math> i należy ją ustalić równą liczbie wystąpień symbolu relacyjnego <math>\displaystyle S</math> w formule <math>\displaystyle \phi</math>. Możemy teraz użyć redukcji MAX<math>\displaystyle l</math>FSAT do MAX<math>\displaystyle 3</math>SAT.
Właśnie opisaliśmy redukcję problemu <math>A</math> do problemu MAX<math>l</math>FSAT, gdzie jest <math>|\mathit{V}|^r</math> zmiennych odpowiadających <math>S(v_{i_1},v_{i_2},\ldots,v_{i_r})</math> i <math>|\mathit{V}|^r</math> funkcji logicznych odpowiadających formułom <math>\phi_v</math>. Stała <math>l</math> zależy tylko od postaci formuły <math>\phi</math> i należy ją ustalić równą liczbie wystąpień symbolu relacyjnego <math>S</math> w formule <math>\phi</math>. Możemy teraz użyć redukcji MAX<math>l</math>FSAT do MAX<math>3</math>SAT.


Musimy teraz pokazać, że otrzymana w ten sposób redukcja jest L-redukcją. Na podstawie instancji <math>\displaystyle x</math> problemu <math>\displaystyle A</math> możemy zbudować <math>\displaystyle  R(x) </math> instancję problemu MAX<math>\displaystyle 3</math>SAT. Rozwiązanie <math>\displaystyle  S(s) </math> możemy łatwo obliczyć odczytując relację <math>\displaystyle S</math> z wartości zmiennych występujących w rozwiązaniu problemu <math>\displaystyle  R(x) </math>.
Musimy teraz pokazać, że otrzymana w ten sposób redukcja jest L-redukcją. Na podstawie instancji <math>x</math> problemu <math>A</math> możemy zbudować <math>R(x)</math> instancję problemu MAX<math>3</math>SAT. Rozwiązanie <math>S(s)</math> możemy łatwo obliczyć, odczytując relację <math>S</math> z wartości zmiennych występujących w rozwiązaniu problemu <math>R(x)</math>.


Musimy teraz skorzystać z pewnych własności problemu MAX<math>\displaystyle l</math>FSAT i jego redukcji do MAX<math>\displaystyle 3</math>SAT.
Musimy teraz skorzystać z pewnych własności problemu MAX<math>l</math>FSAT i jego redukcji do MAX<math>3</math>SAT.


Po pierwsze - każda formuła <math>\displaystyle \phi_v</math> jest reprezentowana przez co najwyżej <math>\displaystyle c</math> klauzul, gdzie <math>\displaystyle c</math> zależy tylko od liczby bramek potrzebnych do wyrażenia formuły <math>\displaystyle \phi</math>.
Po pierwsze, każda formuła <math>\phi_v</math> jest reprezentowana przez co najwyżej <math>c</math> klauzul, gdzie <math>c</math> zależy tylko od liczby bramek potrzebnych do wyrażenia formuły <math>\phi</math>.


Po drugie - istnieje stała <math>\displaystyle d</math> taka, że dla <math>\displaystyle m</math> funkcji w problemie MAX<math>\displaystyle l</math>SAT istnieje wartościowanie, przy którym przynajmniej <math>\displaystyle dm</math> spośród funkcji ma wartość pozytywną. Skorzystamy z tego, że odrzuciliśmy funkcje, które stale przyjmują wartość negatywną. Stałą <math>\displaystyle d</math> równą <math>\displaystyle \frac{1}{2^l}</math> otrzymujemy z dowodu, że algorytm schodzący po drzewie wartościowań jest algorytmem <math>\displaystyle \frac{1}{2^l}</math>-aproksymacyjnym.
Po drugie, istnieje stała <math>d</math> taka, że dla <math>m</math> funkcji w problemie MAX<math>l</math>SAT istnieje wartościowanie, przy którym przynajmniej <math>dm</math> spośród funkcji ma wartość pozytywną. Skorzystamy z tego, że odrzuciliśmy funkcje, które stale przyjmują wartość negatywną. Stałą <math>d</math> równą <math>\frac{1}{2^l}</math> otrzymujemy z dowodu, że algorytm schodzący po drzewie wartościowań jest algorytmem <math>\frac{1}{2^l}</math>-aproksymacyjnym.


Po trzecie - zastosowana redukcja MAX<math>\displaystyle l</math>FSAT do MAX<math>\displaystyle 3</math>SAT gwarantuje, że w rozwiązaniu optymalnym problemu <math>\displaystyle  R(x) </math> wszystkie klauzule poza tymi przechowującymi wyniki funkcji są spełnione.
Po trzecie, zastosowana redukcja MAX<math>l</math>FSAT do MAX<math>3</math>SAT gwarantuje, że w rozwiązaniu optymalnym problemu <math>R(x)</math> wszystkie klauzule poza tymi przechowującymi wyniki funkcji są spełnione.


Te trzy fakty sprawiają, że opisana redukcja jest L-redukcją z parametrami <math>\displaystyle \alpha = \frac{c}{d}</math> (<math>\displaystyle  \opt(x)  \geq dm</math>, <math>\displaystyle  \opt( R(x) )  \leq cm</math>) i <math>\displaystyle \beta = 1</math> (w rozwiązaniu optymalnym <math>\displaystyle \opt</math> problemu <math>\displaystyle  R(x) </math> liczba spełnionych alternatyw zmniejszona o liczbę alternatyw innych niż przechowujące wyniki funkcji wyznacza dokładnie liczbę krotek <math>\displaystyle V^k</math>, dla których relacja <math>\displaystyle S</math> zachodzi).
Te trzy fakty sprawiają, że opisana redukcja jest L-redukcją z parametrami <math>\alpha = \frac{c}{d}( \text{opt} (x)  \geq dm</math>, <math>\text{opt} ( R(x) )  \leq cm</math>) i <math>\beta = 1</math> (w rozwiązaniu optymalnym <math>\text{opt}</math> problemu <math>R(x)</math> liczba spełnionych alternatyw zmniejszona o liczbę alternatyw innych niż przechowujące wyniki funkcji wyznacza dokładnie liczbę krotek <math>V^k</math>, dla których relacja <math>S</math> zachodzi).
}}
}}


{{cwiczenie|||
{{cwiczenie|8.2||
Problemy z <math>\displaystyle \cc{MAXSNP}_0</math> są aproksymowalne ze stałą.
Problemy z <math>\mathrm{MAXSNP}_0</math> są aproksymowalne ze stałą.
 
Pokaż, że dla każdego problemu z klasy <math>\displaystyle \cc{MAXSNP}</math> istnieje algorytm <math>\displaystyle a</math>-aproksymacyjny dla pewnej stałej.


Pokaż, że dla każdego problemu z klasy <math>\mathrm{MAXSNP}</math> istnieje algorytm <math>a</math>-aproksymacyjny dla pewnej stałej.
}}
<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">   
Wykorzystaj technikę użytą w dowodzie <math>\displaystyle \cc{MAXSNP}</math>-zupełności problemu MAX<math>\displaystyle 3</math>SAT.
Wykorzystaj technikę użytą w dowodzie <math>\mathrm{MAXSNP}</math>-zupełności problemu 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">   
W dowodzie <math>\displaystyle \cc{MAXSNP}</math>-zupełności problemu MAX<math>\displaystyle 3</math>SAT pokazaliśmy, że na każdy problem <math>\displaystyle A</math> z klasy <math>\displaystyle \cc{MAXSNP}_0</math> można patrzeć jak na problem MAX<math>\displaystyle k</math>FSAT dla pewnego <math>\displaystyle k</math>. Tymczasem pokazaliśmy wcześniej, że problem MAX<math>\displaystyle k</math>FSAT może być aproksymowany ze stałą <math>\displaystyle \frac{1}{2^k}</math>, co przenosi się bezpośrednio na taką samą aproksymację dla problemu <math>\displaystyle A</math>.
W dowodzie <math>\mathrm{MAXSNP}</math>-zupełności problemu MAX<math>3</math>SAT pokazaliśmy, że na każdy problem <math>A</math> z klasy <math>\mathrm{MAXSNP}_0</math> można patrzeć jak na problem MAX<math>k</math>FSAT dla pewnego <math>k</math>. Tymczasem pokazaliśmy wcześniej, że problem MAX<math>k</math>FSAT może być aproksymowany ze stałą <math>\frac{1}{2^k}</math>, co przenosi się bezpośrednio na taką samą aproksymację dla problemu <math>A</math>.
</div></div>
</div></div>
}}


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

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

Wprowadzenie

W poprzednim wykładzie zajmowaliśmy się algorytmami aproksymacyjnymi dla przykładowych trudnych problemów optymalizacyjnych. Dla większości z tych algorytmów udawało nam się podać gwarancję dokładności za pomocą stałego współczynnika efektywności przybliżenia.

W tym module postawimy sobie znacznie ambitniejsze zadanie. Będziemy szukać algorytmów, którym na wejściu ustala się dopuszczalny błąd przybliżenia rozwiązania optymalnego. Pokażemy problemy, dla których jest możliwa taka "dowolnie dokładna" aproksymacja.

W drugiej części poznamy klasę MAXSNP. Jest to bardzo szeroka i interesująca klasa problemów optymalizacyjnych, a pytanie o to, czy należące do niej problemy mogą być dowolnie dobrze aproksymowane, było bardzo istotnym zagadnieniem teorii algorytmów aproksymacyjnych. Odpowiedź na to pytanie poznamy dopiero w następnym module.

Schematy aproksymacji

Żeby wyrazić te nowe oczekiwania potrzebujemy nowych notacji:

Definicja 2.1

Mówimy, że algorytm 𝒜 jest {schematem aproksymacji} dla problemu NP-optymalizacyjnego Π, jeżeli dla wejścia (I,ϵ), gdzie I jest instancją problemu Π, a ϵ>0 opisuje dopuszczalny błąd, znajduje rozwiązanie takie, że:

  • objΠ(I,𝒜(I,ϵ))(1+ϵ)optΠ(I) dla problemu minimalizacji.
  • objΠ(I,𝒜(I,ϵ))(1ϵ)optΠ(I) dla problemu maksymalizacji.

Definicja 2.2

Jeśli dla dowolnego ϵ>0 czas działania 𝒜 na wejściu (I,ϵ) jest wielomianowy względem |I|, to 𝒜 jest {wielomianowym schematem aproksymacji}. Będziemy używać skróconej notacji PTAS (od polynomial time approximation scheme) dla oznaczenia tego faktu.

Zauważmy, że w tej definicji wymagamy wielomianowego czasu działania tylko względem rozmiaru instancji przy ustalonym dopuszczalnym błędzie. Oznacza to, że czas działania może być nawet wykładniczy względem wartości parametru ϵ. Nie jest to sytuacja komfortowa. Możemy w związku z tym wzmocnić wymagania postawione dla algorytmu.

Definicja 2.3

Jeżeli czas działania algorytmu 𝒜 jest wielomianowy względem |I| oraz wartości 1ϵ, to 𝒜 jest {w pełni wielomianowym schematem aproksymacji}. Omawiając takie algorytmy, będziemy używać notacji FPTAS (fully polynomial time approximation scheme).

Ćwiczenie 2.4

FPTAS dla problemów silnie NP-zupełnych.

Wykaż, że o ile PNP i Π jest silnie NP-zupełnym problemem optymalizacyjnym takim, że funkcja celu objΠ przyjmuje wartości całkowite i ograniczone wielomianowo od rozmiaru instancji wejściowej oraz jej największej liczby, to nie istnieje algorytm FPTAS dla Π.

Wskazówka
Rozwiązanie

Schemat aproksymacji dla problemu KNAPSACK

Pokazaliśmy, że nie warto szukać algorytmów FPTAS dla problemów silnie NP-zupełnych. Rozpoczniemy w związku z tym dalsze poszukiwania schematów aproksymacyjnych od przyjrzenia się raz jeszcze problemowi plecakowemu. Wiemy, że nie jest to problem silnie NP-zupełny i znamy dla niego algorytm pseudowielomianowy. Bardzo często istnienie algorytmu pseudowielomianowego można wykorzystać przy konstrukcjii schematów aproksymacji. Zobaczymy teraz klasyczną konstrukcję opartą o ten pomysł.

Pokażemy teraz algorytm pseudowielomianowy rozwiązujący problem KNAPSACK. Poznaliśmy już jeden taki alorytm, ale tamten nie nadaje się do konstrukcji schematu aproksymacji.

Algorytm 3.1 [Algorytm pseudowielomianowy dla problemu plecakowego]


1. Oblicz V=maxi=1,2,,nv(ai).

2. Oblicz Wi,u określone dla 0in i 0unV jako "minimalny sumaryczny rozmiar podzbioru przedmiotów Sa1,a2,,ai taki, że sumaryczna wartość tych przedmiotów wynosi dokładnie u". Obliczenia można dokonać metodą dynamiczną, korzystając z następujących własności rekurencyjnych: W0,u=,Wi+1,u=min(Wi,u,Wi,uv(ai+1)+w(ai+1)).

3. Odczytaj rozwiązanie z wartości W.

Algorytm ten można zakodować tak, aby znajdował optymalne rozwiązanie w czasie 𝒪(n2V). Szczegóły implementacji pozostawiamy jako ćwiczenie.

Zauważmy, że gdyby wartości przedmiotów były ograniczone przez wielomianową funkcję n, to skonstruowany algorytm byłby wielomianowy. To jest podstawą schematu aproksymacji, który będzie zaokrąglał wartości przedmiotów tak, aby były one wielomianowe względem n i 1ϵ. Oto algorytm:

Algorytm 3.2 [Algorytm zaokrągleniowy]


1. Oblicz K=ϵVn.

2. Dla każdego przedmiotu oblicz v(ai)=[v(ai)K].

3. Używając algorytmu pseudowielomianowego, rozwiąż problem z wartościami v.

Twierdzenie 3.3

Algorytm zaokrągleniowy jest FPTAS dla problemu plecakowego.

Dowód

Musimy pokazać, że dla zbioru S znajdowanego przez algorytm zachodzi:

iSv(ai)(1ϵ)opt.

Niech O będzie rozwiązaniem optymalnym. Możemy wtedy zapisać ciąg nierówności:

iSv(ai)iS[v(ai)K]KiO[v(ai)K]KiO(v(ai))KiOv(ai)nK.

Korzystamy po kolei z własności zaokrąglenia, optymalności rozwiązania S przy wartościach wydzielonych przez K, własności zaokrąglenia i tego, że |S|n.

Udowodniliśmy, że wartość rozwiązania znajdowanego przez algorytm jest nie mniejsze niż optnK=optϵV(1ϵ)opt. Jest to zatem schemat aproksymacyjny. Musimy jeszcze oszacować czas działania algorytmu. Wynosi on 𝒪(n2[VK])=𝒪(n2[nϵ]), a więc jest wielomianowy zarówno względem n, jak i 1ϵ.

Ćwiczenie 3.4

Algorytm pseudowielomianowy.

Doprecyzuj implementację algorytmu pseudowielomianowego dla problemu plecakowego. Jak odzyskać wybór przedmiotów z tablicy Wi,u?

Wskazówka
Rozwiązanie

Asymptotyczny PTAS dla BIN PACKING

Pokazaliśmy, że problem plecakowy może być aproksymowalny z dowolną dokładnością w czasie wielomianowo zależnym od wielkości danych i dopuszczalnego błędu. Dla problemuu pakowania nie możemy się spodziewać równie dobrych wyników. Jest to problem silnie NP-zupełny i o ile PNP, to nie może istnieć FPTAS. Pokazaliśmy również, że nie ma algorytmu osiągającego stałą aproksymacji mniejszą od 32. Dowód opierał się o fakt, że o ile PNP, to nie da się efektywnie sprawdzać, czy da się przedmioty upakować do dwóch pojemników.

Instancje, które zabraniały aproksymacji lepszej niż 32 miały ograniczoną wartość optimum. Skonstruujemy teraz asymptotyczny PTAS dla problemu pakowania, który może osiągać dowolnie dobrą aproksymację, ale dla odpowiednio dużych wartości optimum.

Precyzując, podamy rodzinę algorytmów 𝒜ϵ dla 0<ϵ12 działających w czasie wielomianowym od liczby przedmiotów i znajdujących rozwiązanie używające co najwyżej (1+2ϵ)opt+1 pojemników.

Zanim będziemy mogli przedstawić algorytmy 𝒜ϵ musimy pokazać dwa pomocnicze lematy, które pokazują rozwiązania dla pewnych uproszczonych instancji problemu.

Lemat 4.1

Dla dowolnego ϵ>0 oraz liczby całkowitej K istnieje algorytm wielomianowy rozwiązujący problem pakowania dla instancji, w których występują przedmioty o co najwyżej K różnych rozmiarach, z których każdy jest nie mniejszy niż ϵ.

Dowód

Liczba przedmiotów w jednym pojemniku jest ograniczona przez M=[1ϵ]. Suma rozmiarów większej liczby przedmiotów musi przekraczać 1, gdyż każdy z nich ma rozmiar nie mniejszy niż ϵ.

Liczba możliwych zawartości jednego pojemnika jest zatem ograniczona przez R=(M+KM). Ograniczenie to uzyskujemy, gdyż jest to liczba M-elementowych multipodzbiorów zbioru K-elementowego. Zauważmy, że liczb R jest stałą zależną tylko od K i ϵ.

Liczba pojemników w rozwiązaniu jest ograniczona w oczywisty sposób przez n. Zatem liczba możliwych rozwiązań dopuszczalnych jest ograniczona przez P=(n+RR). Tym razem jest to liczba n-elementowych multipodzbiorów zbioru R-elementowego.

Liczba P wyraża się wielomianem względem n. Możemy w związku z tym w czasie wielomianowym przejrzeć wszystkie rozwiązania dopuszczalne i wybrać optymalne.

Uwaga 4.2

Niestety czas tego algorytmu jest wielomianem stopnia R. Jest to bardzo wysoki stopień i przez to algorytm ten nie może być traktowany jako praktyczne rozwiązanie problemu.

Lemat 4.3

Dla dowolnego ϵ>0 istnieje wielomianowy algorytm (1+ϵ)-aproksymacyjny dla problemu pakowania dla instancji, w których występują przedmioty o rozmiarach nie mniejszych niż ϵ.

Dowód

Algorytm 4.4 [Algorytm dzielący na grupy]


1. Oblicz K=[1ϵ2].

2. Posortuj przedmioty względem rosnącego rozmiaru i podziel posortowany ciąg na K grup tak, aby w każdej grupie było co najwyżej Q=[nϵ2] przedmiotów.

3. Zamień rozmiar każdego z przedmiotów na rozmiar największego przedmiotu w tej samej grupie.

4. Użyj algorytmu z poprzedniego lematu działającego na przedmiotach o K różnych rozmiarach nie mniejszych niż ϵ.

Niech I będzie instancją podaną na wejściu algorytmu. Niech I* będzie instancją otrzymaną w trzecim kroku algorytmu, a I* instancją, którą otrzymalibyśmy, zamieniając rozmiar każdego z przedmiotów na rozmiar najmniejszego w tej samej grupie.

Wynikiem działania algorytmu jest rozwiązanie optymalne dla instancji I*. Musimy wykazać, że opt(I*)(1+ϵ)opt(I). Łatwo jest uzasadnić oszacowanie opt(I*)opt(I).

Możemy teraz zauważyć, że każde rozwiązanie instancjii I* wyznacza pewne rozwiązanie dla I*, ponieważ najmniejszy przedmiot z i+1 grupy przedmiotów jest większy lub równy największemu przedmiotowi z grupy i. Zatem rozwiązanie instancji I* pozwala upakować wszystkie przedmioty z instancji I* oprócz ostatniej grupy. Więc nawet jeżeli każdy z tych przedmiotów zostałby upakowany do osobnego pojemnika, otrzymujemy ograniczenie:

opt(I*)opt(I*)+Qopt(I)+Qopt(I)+[nϵ2](1+ϵ)opt(I).

Ostatnia nierówność wynika z tego, że nϵopt(I). Pokazaliśmy zatem, że algorytm jest (1+ϵ)-aproksymacyjny.

Mając w ręku te dwa pomocnicze lematy, możemy już pokazać algorytm 𝒜ϵ.

Algorytm 4.5 [Algorytm 𝒜ϵ]


1. Stwórz instancję Iϵ, usuwając wszystkie przedmioty o rozmiarze mniejszym od ϵ z I.

2. Oblicz instancję Iϵ* i znajdź dla niej optymalne upakowanie, korzystając z algorytmu przeglądającego wszystkie rozwiązania dopuszczalne.

3. Dopakuj przedmioty o rozmiarze mniejszym od ϵ za pomocą algorytmu First-Fit, otrzymując rozwiązanie dla instancji wejściowej I.

Twierdzenie 4.6

Dla dowolnego 0<ϵ12 algorytm 𝒜ϵ znajduje upakowanie przedmiotów instancji I w co najwyżej (1+2ϵ)opt(I)+1 pojemnikach.

Dowód

Jeżeli w ostatnim kroku algorytmu nie zostały utworzone żadne nowe pojemniki, to rozwiązanie znalezione dla Iϵ używa (1+ϵ)opt(Iϵ) pojemników, a więc spełnia warunki twierdzenia.

Jeżeli natomiast zostały utworzone nowe pojemniki, to zauważmy, że tylko w jednym ze wszystkich pojemników mogą znajdować się przedmioty o sumarycznym rozmiarze mniejszym niż 1ϵ. Zatem jeżeli oznaczymy przez M liczbę wszystkich użytych pojemników, to sumarczyny rozmiar wszystkich przedmiotów (a więc i optimum) możemy ograniczyć z dołu przez (M1)(1ϵ). W związku z tym możemy napisać:

Mopt(I)1ϵ+1(1+2ϵ)opt(I)+1.

Druga nierówność wynika z prostego przekształcenia arytmetycznego przy 0<ϵ12.

Ćwiczenie 4.7

Aproksymacja dla problemu PARTITION.

Optymalizacyjna wersja problemu PARTITION powstaje, kiedy chcemy wybrać podzbiór AA taki, że minimalizuje wartość |aA|s(a)aAAs(a)|.

Uzasadnij, że dla tego problemu nie ma algorytmu PTAS.

Inna wersja optymalizacyjna problemu PARTITION powstaje, kiedy mierzymy odległość od równomiernego podziału przez iloraz zamiast przez różnicę. Chcemy wtedy wybrać podzbiór AA taki, że iloraz:

aAs(a)aAAs(a)1,

jednocześnie minimalizując wartość tego ilorazu.

Pokaż algorytm FPTAS dla tej wersji problemu PARTITION.

Wskazówka
Rozwiązanie


Ćwiczenie 4.8

Problem BIN COVERING.

Rozważ problem dualny do BIN PACKING:

Problem

Pokrywanie BIN COVERING.

Mając dany zbiór n przedmiotów o wagach wymiernych w1,w2,,wn(0,1], należy znaleźć przyporządkowanie ich do jak największej liczby pojemników. Suma wag przedmiotów w jednym pojemniku musi przekraczać 1, a część przedmiotów może być w ogóle niewykorzystana.

Można się domyślać, że problem ten ma charakterystykę podobną do BIN PACKING.

Pokaż, że o ile PNP, to nie ma dla niego algorytmu a-aproksymacyjnego dla a>12. Skonstruuj asymptotyczny PTAS przy dodatkowym założeniu, że rozmiary wszystkich przedmiotów są większe niż pewna stała c>0 (istnieje również asymptotyczny PTAS bez tego dodatkowego założenia, ale jego analiza jest znacznie trudniejsza).

Wskazówka
Rozwiązanie

L-redukcje

Wprowadzimy teraz pojęcie redukcji zachowującej aproksymację. Pozwoli nam to na bardziej systematyczne niż do tej pory zbadanie klasy problemów, dla których możliwa jest aproksymacja. W dalszej części będziemy poszukiwać klasy problemów aproksymowalnych i problemów w tej klasie zupełnych względem podanej redukcji. Definicja interesującej nas redukcji jest podobna do tej, jaką wprowadziliśmy pomiędzy problemami funkcyjnymi.

Definicja 5.1

Dla dwóch problemów optymalizacyjnych A i B, parę funkcji R:DADB i S:SBSA obliczalnych w pamięci logarytmicznej nazywamy L-redukcją, jeżeli istnieją dwie stałe dodatnie α i β takie, że spełnione są następujące własności:

  • Dla dowolnej instancji x problemu A zachodzi:
optB(R(x))αoptA(x).
  • Dla dowolnego rozwiązania dopuszczalnego s instancji R(x) zachodzi:
|optA(x)objA(x,S(s))|β|optB(R(x))objB(R(x),s)|.

Intuicyjnie, funkcja R L-redukcji (redukcji liniowej) zamienia instancję problemu A na instancję problemu B, nie zmieniając wartości rozwiązania optymalnego bardziej niż o stałą α. Funkcja S pozwala natomiast przeprowadzić dowolne z rozwiązań z powrotem na rozwiązanie instancji A, nie zmieniając odległości od optimum bardziej niż o stałą β.

Uwaga 5.2

Warto zauważyć, że definicja L-redukcji nie zależy od tego, czy problemy A i B są problami minimalizacyjnymi, czy maksymalizacyjnymi.

Przyjrzyjmy się teraz jeszcze raz redukcji problemu zbioru niezależnego do pokrycia wierzchołkowego. Jest ona oparta o fakt, że problemy te są do siebie dualne. Dopełnienie dowolnego zbioru niezależnego jest pokryciem wierzchołkowym i na odwrót.

Definicje odpowiednich funkcji są w związku z tym bardzo proste. R to po prostu funkcja identycznościowa na grafach, a S zwraca dopełnienie zbioru wierzchołków. Okazuje się, że nie jest to jednak L-redukcja, gdyż stosunku rozmiarów rozwiązań obu problemów nie da się w żaden sposób ograniczyć przez stałe.

Takie ograniczenie można uzyskać, zawężając klasę grafów. Jeżeli ograniczymy maksymalny stopień wierzchołków występujących w grafie przez liczbę k, to otrzymamy problemy k-INDPENDENT SET i k-VERTEX COVER. Przypomnijmy, że z redukcji problemu 3SAT wynika, że już problem 4-INDEPENDENT SET jest NP-zupełny.

Pokażemy, że funkcje R i S tworzą L-redukcję problemu k-INDEPENDENT SET do k-NODE COVER.

Zauważmy, że dla grafu G=(V,E) ze stopniem wierzchołków ograniczonym przez k rozmiar maksymalnego zbioru niezależnego to co najmniej |V|k+1. Dla każdego zbioru niezależnego o mniejszym rozmiarze, zbiór jego wszystkich sąsiadów jest co najwyżej k razy większy i nie obejmuje w związku z tym całego grafu. Można zatem taki zbiór niezależny poszerzyć.

Tymczasem minimalne pokrycie wierzchołkowe ma w oczywisty sposób co najwyżej |V| elementów. W związku z tym możemy ustalić wartość parametru α na k+1.

Wystarczy teraz zauważyć, że odległość rozwiązania znalezionego od optymalnego nie zmienia się przy przejściu przez funkcję S. W związku z tym możemy ustalić wartość parametru β na 1.

Ta krótka analiza pozwala stwierdzić, że para (R,S) jest L-redukcją problemu k-INDEPENDENT SET do k-NODE COVER.

Można też skonstruować odwrotną L-redukcję problemu k-NODE COVER do k-INDEPENDENT SET. Oczywiście należy użyć tych samych funkcji R i S, ale żeby uzyskać liniową zależność rozmiaru maksymalnego zbioru niezależnego od minimlanego pokrycia wierzchołkowego trzeba się trochę postarać. Zauważmy, że dla antykliki rozmiar minimalnego pokrycia wierzchołkowego wynosi 0, a maksymalny zbiór niezależny ma rozmiar równy ilości wierzchołków. Wynika stąd, że punkty izolowane mogą sprawiać problem dla L-redukcji.

W nowej redukcji funkcja R będzie usuwać wierzchołki izolowane z grafu (które i tak nie należą do minimalnego pokrycia wierzchołkowego). Funkcja S nadal będzie zamieniać zbiór wierzchołków na jego uzupełnienie (ale tylko w obrębie wierzchołków nieizolowanych). Rozmiar minimalnego pokrycia wierzchołkowego w grafie bez wierzchołków izolowanych wynosi co najmniej |V|k ponieważ jest co najmniej |V| krawędzi, a każdy wierzchołek pokrywa co najwyżej k z nich. To oszacowanie pozwala nam stwierdzić, że nowa redukcja jest L-redukcją z parametrami k i 1.

Ćwiczenie 5.3

Złożenie L-redukcji.

Pokaż, że jeżeli para (R1,S1) jest L-redukcją problemu Π1 do Π2, a para (R2,S2) L-reduckją Π2 do Π3, to (R1R2,S2S1) jest L-redukcją Π1 do Π3.

Wskazówka
Rozwiązanie


Ćwiczenie 5.4

Przenoszenie aproksymacji przez L-redukcje.

Pokaż, że jeżeli problem minimalizacyjny A L-redukuje się do problemu B i dla problemu B istnieje algorytm b-aproksymacyjny, to istnieje stała a taka, że dla problemu A istnieje algorytm a-aproksymacyjny.

Pokaż, że dla dowolnych problemów optymalizacyjnych A i B, że jeżeli A L-redukuje się do B i istnieje wielomianowy schemat aproksymacji dla problemu B, to istnieje też taki schemat dla problemu A.

Wskazówka
Rozwiązanie


Ćwiczenie 5.5

Różnica optimum dla NODE COVER i INDEPENDENT SET.

Pokaż, że dla dowolnej liczby wymiernej q>0 można skonstruować graf, dla którego iloraz rozmiaru maksymalnego zbioru niezależnego do minimalnego pokrycia wierzchołkowego wynosi q.

Rozwiązanie

Klasa MAXSNP

Wprowadzimy teraz formalną definicję klasy MAXSNP, która pozwoli nam bardziej metodycznie zbadać problemy optymalizacyjne. Dalsze badania nad tą klasą doprowadzą nas do bardzo ciekawych rezultatów dotyczących możliwości aproksymacji.

Zaczniemy od zdefiniowania klasy MAXSNP0, która opisuje problemy maksymalizacyjne. Jej charakteryzacja jest analogiczna do charakteryzacji klasy NP podanej w twierdzeniu Fagina.

Definicja 6.1

Problem A należy do klasy MAXSNP0, jeżeli można go wyrazić za pomocą formuły:

maxS{(x1,x2,,xk)Vk:ϕ(G1,G2,,Gm,S,x1,x2,,xk)}.

Wejściem dla problemu A jest ciąg relacji (być może wieloargumentowych) Gi,i=1,2,,m nad skończonym uniwersum V. Poszukiwana jest natomiast relacja S, która maksymalizowałaby liczbę naborów zmiennych xi takich, że formuła pierwszego rzędu bez kwantyfikatorów ϕ jest spełniona.

Definicja 6.2

Klasa MAXSNP jest domknięciem MAXSNP0 ze względu na L-redukcje.

Zobaczmy teraz przykład problemu, który należy do MAXSNP0. Wybierzemy problem k-INDEPENDENT SET. Zwykła reprezentacja grafu poprzez relację binarną nie pozwala wygodnie przedstawić ograniczenia stopnia wierzchołka i raczej nie prowadzi do reprezentacji poprzez odpowiednią formułę. Dlatego użyjemy niestandardowej reprezentacji grafu poprzez k+1-argumentową relację H. Każdemu wierzchołkowi G odpowiada jedna krotka relacji H - (x,y1,y2,,yk), która koduje sąsiedztwo wierzchołka x. Wierzchołki y1,y2,,yk to sąsiedzi x. Jeżeli x nie ma k sąsiadów, to na brakujących pozycjach występuje x. Problem k-zbioru niezależnego koduje się wtedy w następujący sposób:

maxSV{(x,y1,y2,,yk)Vk:(x,y1,y2,,yk)HxS[x=y1y1S][x=y2y2S][x=ykykS]}.

Wybór relacji S koduje pewien podzbiór wierzchołków. Formuła kodująca problem jest spełniona dla krotek odpowiadających tym wierzchołkom x, które należą do wybranego zbioru, a żaden z sąsiadów nie należy. Odpowiada to więc zbiorowi niezależnemu.

Pokazaliśmy zatem, że problem k-INDEPENDENT SET należy do klasy MAXSNP0. Natychmiastowym wnioskiem jest, że problem k-NODE COVER jest problemem z MAXSNP. Znamy przecież jego L-redukcję do k-INDEPENDENT SET.

Ćwiczenie 6.3

MAX CUT w MAXSNP.

Pokaż, że problem MAX CUT należy do MAXSNP.

Wskazówka
Rozwiązanie

Problemy MAXSAT i MAX FUNCTION SAT

Problem maksymalnej spełnialności MAXSAT i jego zawężenia pełnią podobną rolę dla klasy MAXSNP jak problem SAT dla NP. W tej części przyjrzymy się dokładniej temu problemowi i jego różnym wersjom. Podamy również algorytmy aproksymacyjne i udowodnimy zupełność zawężeń tego problemu dla klasy MAXSNP.

Przypomnijmy, że na wejściu problemu MAXSAT dostajemy formułę logiczną w koniunkcyjnej postaci normalnej z n zmiennymi. Poszukujemy takiego wartościowania tych zmiennych, które zmaksymalizowałoby liczbę spełnionych klauzul. Dla wygody dodajemy warunek, aby każda z klauzul była inna.

12-aproksymację problemu MAXSAT można osiągnąć bardzo prostą metodą:

Algorytm 7.1 [Algorytm wybierający wartościowanie x lub x]


1. Wybierz dowolne wartościowanie x dla n zmiennych występujących w formule.

2. Skonstruuj wartościowanie x, które przyporządkowuje zmiennym wartościowanie odwrotne do x.

3. Jako wynik podaj to z wartościowań x, x, przy którym więcej klauzul jest spełnionych.

Twierdzenie 7.2

Podany algorytm jest algorytmem 12-aproksymacyjnym.

Dowód

Zauważmy, że jeżeli któraś z alternatyw jest niespełniona przy wartościowaniu x, to musi być spełniona przy wartościowaniu x. Jeżeli alternatywa jest niespełniona przy jakimś wartościowaniu, to znaczy, że każda ze zmiennych występujących w klauzuli jest wartościowana odwrotnie niż jej wystąpienie. Zatem przy wartościowaniu odwrotnym każdy z literałów występujących w alternatywie jest wartościowany pozytywnie i alternatywa musi być spełniona.

Jeżeli zatem oznaczymy przez m - liczbę alternatyw w formule, przez c liczbę alternatyw spełnionych przy wartościowaniu x, a przez c liczbę alternatyw spełnionych przy wartościowaniu x, to zachodzą następującee nierówności:

cmc,cmc,c+c2mcc,c+cm.

Ponieważ algorytm wybiera to z wartościowań x lub x, przy którym więcej alternatyw jest spełnionych, to liczba spełnionych alternatyw jest nie mniejsza niż 12m. Nawet jeżeli rozwiązanie optymalne zapewnia spełnienie wszystkich m alternatyw, to algorytm jest 12-aproksymacyjny.

Pokażemy teraz pewną wariację na temat problemu MAXSAT.

Problem

Problem maksymalnej spełnialności funkcyjnej MAX FUNCTION SAT.

Danych jest n zmiennych logicznych x1,x2,,xn oraz m funkcji logicznych f1,f2,,fm. Należy znaleźć wartościowanie zmiennych x1,x2,,xn, przy którym największa liczba funkcji daje wynik pozytywny.

Ciekawym i istotnym dla dalszych rozważań zawężeniem problemów MAXSAT i MAX FUNCTION SAT jest ograniczenie liczby różnych zmiennych występujących w pojedynczej klauzuli lub funkcji logicznej. Jeżeli ta liczba jest ograniczonaa przez k, to mamy do czynienia z problemem MAXkSAT i MAXkFSAT.

Przypomnijmy, iż pokazaliśmy, że już problem MAX2SAT jest NP-zupełny (mimo że problem 2SAT nie jest). Teraz okaże się, dlaczego te problemy są dla nas tak interesujące:

Twierdzenie 7.3

Problemy MAXkSAT należą do klasy MAXSNP0.

Dowód

Pokażemy, że problem MAX2SAT należy do MAXSNP0. Konstrukcja reprezentacji formuły i kodowania problemu dla większych k jest analogiczna.

Zatem ustalamy, że uniwersum V to zbiór zmiennych występujących w formule, a trzy relacje binarne G0,G1,G2 kodują formułę. Para (x1,x2) w relacji Gi koduje wystąpienie klauzuli zawierającej literały x1 i x2, z których i występuje pozytywnie. Żeby zapewnić reprezentację każdej alternatywy przez dokładnie jedną krotkę którejś z relacji, wprowadzamy taką odpowiedniość pomiędzy relacjami i klauzulami:

G0(xi,xj)(¬xi¬xj);i<j,G1(xi,xj)(xi¬xj),G2(xi,xj)(xixj);i<j.

Możemy teraz użyć następującej formuły reprezentującej problem MAX2SAT:

maxSV{(x,y):[G0(x,y)(¬S(x)¬S(y))][G1(x,y)(S(x)¬S(y))][G2(x,y)(S(x)S(y))]}.

Wybór relacji S odpowiada ustaleniu wartościowania, a konstrukcja formuły zapewnia, że liczba krotek (x,y) spełniających formułę odpowiada liczbie alternatyw spełnionych przy danym wartościowaniu.

Drzewo wartościowań

Zbudowanie algorytmu aproksymacyjnego dla problemu MAXkFSAT nie jest już tak proste, jak dla problemu MAXSAT. Załóżmy, że mamy n zmiennych x1,x2,,xn i m funkcji logicznych f1,f2,,fm, z których każda zależy od co najwyżej k zmiennych. Żeby dobrze zobrazować działanie algorytmu, wyobraźmy sobie pełne drzewo binarne o 2n liściach. Każdy węzeł wewnętrzny reprezentuje pewne częściowe wartościowanie zmiennych (rysunek Drzewo wartościowań).

Dla każdego węzła drzewa t i funkcji fi określamy funkcję:

p(t,fi)=liczba wartościowań rozszerzających t przy których fi daje wynik pozytywnyliczba wszystkich wartościowań rozszerzających t.

Łatwo zauważyć, że jeżeli węzły t0 i t1 są dziećmi t w drzewie wartościowań, to zachodzi:

p(t,fi)=12(p(t0,fi)+p(t1,fi)).

Rozważmy teraz funkcję P(t)=i=1mp(t,fi). Oczywistym wnioskiem z poprzedniej równości jest:

P(t)=12(P(t0)+P(t1)).

Zauważmy jeszcze, że obliczenia wartości P(t) dla konkretnego t można dokonać w czasie wielomianowym. Ponieważ każda z funkcji fi zależy tylko od k zmiennych, więc można dokonać wyczerpującego przeglądu wszystkich 2k wartościowań tych zmiennych, zliczając te, dla których fi daje wynik pozytywny i są rozszerzeniami wartościowania t. Można zatem w czasie wielomianowym zsumować wartości p(t,fi) dla wszystkich m funkcji fi.

Możemy już teraz przedstawić algorytm:

Algorytm 7.4 [Algorytm schodzący po drzewie wartościowań]


1. Ustaw zmienną t na korzeń r drzewa wartościowań.

2. Dopóki t nie będzie liściem drzewa wartościowań:

obliczaj wartość P(t0) i P(t1) dla dzieci węzła t

i ustaw t na to z dzieci, dla którego wartość P(ti) jest większa.

3. Podaj wartościowanie opisywane przez węzeł t jako wynik.

Twierdzenie 7.5

Algorytm schodzący po drzewie wartościowań jest algorytmem 12k-aproksymacyjnym dla problemu MAXkFSAT.

Dowód

Liczba funkcji dających wynik pozytywny przy wartościowaniu t znalezionym przez algorytm jest równa dokładnie P(t). Ponieważ węzeł t określa wartość każdej ze zmiennych, to p(t,fi) jest równe 1 dla funkcji dających wynik pozytywny, a 0 dla tych dających wynik negatywny.

Zauważmy, że P(t)P(r). Jest tak dlatego, że przy każdym zejściu w dół drzewa od węzła s jest spełnione P(s)=12(P(s0)+P(s1)), więc któraś z wartości P(s0), lub P(s1) jest większa lub równa P(s), a algorytm wybiera zejście w kierunku większej z nich. W związku z tym wartość funkcji P dla aktualnie przeglądanego węzła nigdy nie maleje.

Zatem liczba funkcji z wynikiem pozytywnym w rozwiązaniu znalezionym przez algorytm jest nie mniejsza niż [P(r)]. Ponieważ dla każdej funkcji, która może w ogóle dać wynik pozytywny, przy jakimkolwiek wartościowaniu zachodzi p(r,fi)12k, to liczba funkcji, które dają wynik pozytywny w rozwiązaniu optymalnym, jest ograniczona z góry przez P(r)12k. To dowodzi, że algorytm jest algorytmem 12k-aproksymacyjnym.

Ćwiczenie 7.6

Kodowanie MAXkFSAT w MAX3SAT.

Pokaż L-redukcję problemu MAXkFSAT do MAX3SAT.

Wskazówka
Rozwiązanie


Ćwiczenie 7.7

Lepsza aproksymacja MAXSAT.

Pokaż, że jeżeli wymagalibyśmy od instancji problemu MAXSAT, aby w każdej alternatywie występowało przynajmniej k literałów, to istnieje algorytm (112k)-aproksymacyjny dla takiego problemu.

Wskazówka
Rozwiązanie

Problemy MAXSNP-zupełne

Pokażemy teraz, że problem MAX3SAT jest problemem zupełnym w sensie L-redukcji w klasie MAXSNP. Jest to bardzo istotny fakt, bo oznacza, że pozytywne wyniki aproksymacjii tego elementarnego problemu przekładają się poprzez L-redukcje na wszystkie problemy z klasy MAXSNP. Jest też to fakt interesujący ze względu na to, że wcale nie jest oczywiste, iż problemy MAXSNP-zupełne muszą w ogóle istnieć.

Twierdzenie 8.1

MAX3SAT jest problemem zupełnym w sensie L-redukcji w klasie MAXSNP.

Dowód

Przypomnijmy, że klasa MAXSNP jest definiowana jako klasa problemów L-redukowalnych do problemów z MAXSNP0. Zatem wystarczy, że pokażemy, iż każdy problem z MAXSNP0 jest L-redukowalny do problemu MAX3SAT i skorzystamy z tego, że złożenie L-redukcji jest L-redukcją.

Rozważmy zatem problem A z klasy MAXSNP0 definiowany formułą:

maxS{(x1,x2,,xk):ϕ}.

Rozważymy teraz konkretną instancję problemu A z ustalonym uniwersum V i relacjami G1,G2,,Gm. Dla każdej krotki v=(v1,v2,,vk)Vk definiujemy formułę ϕv, która powstaje z ϕ przez podstawienie wartości v1,v2,,vk za zmienne x1,x2,,xk. Każdą w formuł ϕv możemy uprościć, zamieniając każde wystąpienie relacji G i symbolu = wartościami prawdy i fałszu, które w konkretnej instancji są ustalone. W wyniku otrzymujemy formułę ϕv, w której występują tylko symbole logiczne i relacja S.

Możemy teraz spojrzeć na rozwiązanie tej instancjii problemu A jak na ustalenie wartościowania formuł S(vi1,vi2,,vir), tak aby zmaksymalizować liczbę spełnionych formuł ϕv. Jeżeli któraś z formuł ϕv jest niespełnialna dla żadnego wartościowania, to już na tym etapie usuwamy ją z opisu problemu.

Właśnie opisaliśmy redukcję problemu A do problemu MAXlFSAT, gdzie jest |V|r zmiennych odpowiadających S(vi1,vi2,,vir) i |V|r funkcji logicznych odpowiadających formułom ϕv. Stała l zależy tylko od postaci formuły ϕ i należy ją ustalić równą liczbie wystąpień symbolu relacyjnego S w formule ϕ. Możemy teraz użyć redukcji MAXlFSAT do MAX3SAT.

Musimy teraz pokazać, że otrzymana w ten sposób redukcja jest L-redukcją. Na podstawie instancji x problemu A możemy zbudować R(x) instancję problemu MAX3SAT. Rozwiązanie S(s) możemy łatwo obliczyć, odczytując relację S z wartości zmiennych występujących w rozwiązaniu problemu R(x).

Musimy teraz skorzystać z pewnych własności problemu MAXlFSAT i jego redukcji do MAX3SAT.

Po pierwsze, każda formuła ϕv jest reprezentowana przez co najwyżej c klauzul, gdzie c zależy tylko od liczby bramek potrzebnych do wyrażenia formuły ϕ.

Po drugie, istnieje stała d taka, że dla m funkcji w problemie MAXlSAT istnieje wartościowanie, przy którym przynajmniej dm spośród funkcji ma wartość pozytywną. Skorzystamy z tego, że odrzuciliśmy funkcje, które stale przyjmują wartość negatywną. Stałą d równą 12l otrzymujemy z dowodu, że algorytm schodzący po drzewie wartościowań jest algorytmem 12l-aproksymacyjnym.

Po trzecie, zastosowana redukcja MAXlFSAT do MAX3SAT gwarantuje, że w rozwiązaniu optymalnym problemu R(x) wszystkie klauzule poza tymi przechowującymi wyniki funkcji są spełnione.

Te trzy fakty sprawiają, że opisana redukcja jest L-redukcją z parametrami α=cd(opt(x)dm, opt(R(x))cm) i β=1 (w rozwiązaniu optymalnym opt problemu R(x) liczba spełnionych alternatyw zmniejszona o liczbę alternatyw innych niż przechowujące wyniki funkcji wyznacza dokładnie liczbę krotek Vk, dla których relacja S zachodzi).

Ćwiczenie 8.2

Problemy z MAXSNP0 są aproksymowalne ze stałą.

Pokaż, że dla każdego problemu z klasy MAXSNP istnieje algorytm a-aproksymacyjny dla pewnej stałej.

Wskazówka
Rozwiązanie

Testy końcowe