Kolokwium z 2013, bonus z 2018 i zadania dodatkowe z ćwiczeń

This commit is contained in:
Kacper Donat 2018-01-29 11:19:55 +01:00
parent 8b47f59936
commit 40f70b363e
13 changed files with 750 additions and 25 deletions

View File

@ -56,13 +56,13 @@ Czyli z $\alpha$-redukcji utrzymalibyśmy następujące parametry: $W = \text{wy
\solution
Tak jak zwykle, zacznijmy od udowodnienia, że problem w istocie należy do klasy $\NP$. Potrzebujemy więc jakiegoś certyfikatu, który
mógłby potwierdzić, że odpowiedź na to pytanie jest poprawna - w tym wypadku oczywistym zdaje się być lista wierzchołków $V$ stanowiących to pokrycie.
Sprawdzenia czy ich suma ich wag faktycznie jest mniejsza niż $p$ jest do wykonania w czasie liniowym. Aby sprawdzić pokrycie faktycznie
Sprawdzenie czy suma ich wag faktycznie jest mniejsza niż $p$ jest do wykonania w czasie liniowym. Aby sprawdzić czy pokrycie faktycznie
pokrywa wszystkie krawędzie wystarczy przeiterować po wszystkich wierzchołkach usuwając z grafu krawędzie zawierające ten wierzchołek, co jest wykonywalne
w czasie $O(m \cdot n)$. Jeżeli po tych operacjach uzyskamy graf pusty - to odpowiedź była poprawna.
Nie będzie zaskoczeniem, że najbliższym problemem który możemy zredukowac do \problem{WPW} będzie problem \textit{Pokrycia Wierzchołkowego} (\problem{PW}).
Nie będzie zaskoczeniem, że najbliższym problemem, który możemy zredukować do \problem{WPW} będzie problem \textit{Pokrycia Wierzchołkowego} (\problem{PW}).
Problem \problem{WPW} jest w zasadzie uogólnionym problemem \problem{PW}. Na ogół redukcja problemów szczegółowych do uogólnionych jest dużo
łatwiejsza niż problemów ze sobą niepowiąznych bądź przypadku ogólnego do szczególnego.
łatwiejsza niż problemów ze sobą niepowiązanych bądź przypadku ogólnego do szczególnego.
\begin{figure}[H]
\centering
@ -88,7 +88,7 @@ Problem \problem{WPW} jest w zasadzie uogólnionym problemem \problem{PW}. Na og
Można powiedzieć, że - w pewnym sensie - w grafie nieważonym wszystkie wierzchołki są równie ważne, a w grafie ważonym niektóre są ważniejsze.
Biorąc pod uwagę to podejście aby uzyskać graf ważony z grafu nieważonego o podobnych właściwościach należy wszystkim wierzchołkom nadać te samą
wagę $w$. Przy takim podejsciu, jeżeli w grafie $G$ pokrycie stanowiło $n$ wierzchołków, to w grafie $G_W$ takie samo pokrycie będzie miało
wagę $w$. Przy takim podejściu, jeżeli w grafie $G$ pokrycie stanowiło $n$ wierzchołków, to w grafie $G_W$ takie samo pokrycie będzie miało
łączną wagę $p = n \cdot w$ a $n = \frac{p}{w}$. Dla uproszczenia możemy przyjąć, że $w = 1$ i wtedy uzyskamy $p = n$.
Przypisania wagi do wierzchołków możemy dokonać w czasie liniowym, wyliczenie $p$ jest w zasadzie darmowe. Ponieważ uzyskaliśmy, że dla tak skonstruowanego
@ -104,8 +104,8 @@ wyznaczania jego liczby chromatycznej i oszacuj jego złożonosć przy użyciu s
\solution
Przypomnijmy - graf planarny to graf, w którym nie istnieją przecinające się krawędzie. Naszym zadaniem jest narysować
taki graf planarny że ma 5 lub 6 wierzchołków oraz dodanie krawędzi niszczyłoby planarność. Najprostrzym podejściem jest
narysowanie graf pustego (tj. wierzchołków tak jakbyśmy chcieli rysować wielokąt foremny) i dorysowywać kolejno:
taki graf planarny że ma 5 lub 6 wierzchołków oraz dodanie krawędzi niszczyłoby planarność. Najprostszym podejściem jest
narysowanie grafu pustego (tj. wierzchołków tak jakbyśmy chcieli rysować wielokąt foremny) i dorysowywać kolejno:
\begin{enumerate}[a)]
\item Cykl łączący wszystkie wierzchołki
@ -116,15 +116,17 @@ narysowanie graf pustego (tj. wierzchołków tak jakbyśmy chcieli rysować wiel
\begin{figure}[H]
\centering
\input{gfx/mgp-5.tex}
\caption{Kolejne etapy rosyowania grafu planarengo o 5 wierzchołkach}
\caption{Kolejne etapy rysoowania grafu planarnego o 5 wierzchołkach}
\end{figure}
Analogicznie możemy postąpić dla grafu o 6 wierzchołkach, uzyskując:
\begin{figure}[H]
\centering
\input{gfx/mgp-6.tex}
\caption{Kolejne etapy rosyowania grafu planarengo o 6 wierzchołkach}
\caption{Kolejne etapy rysowania grafu planarnego o 6 wierzchołkach}
\end{figure}
Nie są to oczywiście jedyne możliwe (a na pewno nie najładniejsze) maksymalne grafy planarne,
jednak są one stosunkowo proste w narysowaniu i wymyśleniu.
\begin{shortcut}
Twierdzenie Kuratowskiego mówi nam, że graf jest planarny wtedy i tylko wtedy kiedy nie zawiera podgrafu $K_5$
@ -134,17 +136,280 @@ Analogicznie możemy postąpić dla grafu o 6 wierzchołkach, uzyskując:
\begin{figure}[H]
\centering
\input{gfx/k3-3.tex}
\caption{Przykładowy graf nieważony $G$}
\caption{Graf $K_{3,3}$}
\end{figure}
\end{column}%
\begin{column}{.5}%
\begin{figure}[H]
\centering
\input{gfx/k5.tex}
\caption{Przykładowy graf ważony $G_W$}
\caption{Graf $K_{5}$}
\end{figure}
\end{column}
Pasuje nam to idealnie do zadania, ponieważ $K_5$ ma 5 wierzchołków a $K_{3,3}$ 6.
Wystarczy zatem z $K_5$ usunąć krawędź, a z $K_{3,3}$ usunąć jedną krawędź i dodawac nowe póki jest planarny.
Wystarczy zatem z $K_5$ usunąć krawędź, a z $K_{3,3}$ usunąć jedną krawędź i dodawać nowe póki jest planarny.
\end{shortcut}
Graf jest eulerowski (czyli posiada cykl eulera - pozwalający przejść po wszystkich krawędziach dokładnie raz),
tylko jeżeli wszystkie wierzchołki są stopni parzystych. Jak widać w pierwszym grafie są 2 wierzchołki stopnia 3 a w drugim
grafie mamy 2 pary wierzchołków o stopniach nieparzystych - zatem żaden graf nie jest eulerowski - a co za tym idzie
potrzebują one 4 kolorów aby je pokolorować. Wiemy to z twierdzenia o 4 kolorach, zgodnie z którym każdy graf planarny
można pokolorować maksymalnie 4 kolorami ($\chi(G_P) \leq 4$).
Jak wiadomo minimalne kolorowanie grafów jest problemem \NP-trudnym, zatem trudno przedstawić prosty algorytm
który pozwoliłby poprawnie pokolorować taki graf na kartce. Osobiście proponowałbym zaczać kolorowanie
od wierzchołka o największym stopniu, nadać mu pierwszy kolor. W tym wypadku sytuacja jest dla nas
o tyle korzystna, że znamy ilość kolorów - możemy zatem łatwo zweryfikować czy pokolorowaliśmy graf poprawnie.
\begin{figure}[H]
\begin{column}{.5}%
\centering
\input{gfx/mgp-5c.tex}
\end{column}%
\begin{column}{.5}%
\centering
\input{gfx/mgp-6c.tex}
\end{column}
\caption{Kolorowanie grafów}
\end{figure}
Z poprzedniego zadania wiemy, że $\chi(G_{MGP}) = 1$ tylko kiedy graf jest grafem pustym, $\chi(G_{MGP}) = 2$ tylko gdy graf jest
dwudzielny. Z zadania wiemy, że $\chi(G_{MGP}) = 3$ tylko gdy graf jest planarny, a z twierdzenia o 4 kolorach wiemy, że
$\chi(G_{MGP}) \leq 4$. Możemy zatem ułożyc bardzo prosty algorym:
\begin{algorithm}[H]
\caption{Algorytm określający liczbę chromatyczną dla \textbf{MGP}}
\begin{algorithmic}[1]
\Require
\Statex $G$ - Maksymalny Graf Planarny
\Statex
\If {$m(G) = 0$} \Comment{Brak krawędzi - $\Theta(n^2)$}
\State \Return 1
\ElsIf {$G$ - dwudzielny} \Comment{DFS lub BFS $O(m+n)$}
\State \Return 2
\ElsIf {$G$ - eulerowski} \Comment{Sprawdzenie stopni wszystkich wierzchołków - $\Theta(n^2)$}
\State \Return 3
\Else
\State \Return 4 \Comment{Z twierdzenia o 4 kolorach}
\EndIf
\end{algorithmic}
\end{algorithm}
Złożoność $\Theta(n^2)$ wynika z tego, że graf jest zapisany w macierzy sąsiedztwa. Policzenie wszystkich krawędzi
wymaga przejścia po wszystkich komórkach w macierzy a tych jest $n^2$.
\taskend
\task{Problem \textit{Maximum Edge Coloring} $\problem{MEC}(G, k)$ zdefiniowany jest następująco:
,,Dane są: graf $G$ i liczba $k \in \mathbb{N}$; znaleźć spójny podgraf $G' \subset G$ zawierający największą możliwą liczbę krawędzi, który jest k-barwny krawędziowo.''}
\subtask{Podaj rozwiązanie problemu $\problem{MEC}(C_7, 2)$}
\subtask{Pokaż, że $\problem{MEC}(G, 2)$} jest \NP-trudny
\solution
Spróbujmy pokolorować krawędziowo graf $C_7$, aby tego dokonać wybierzmy sobie dowolną pierwszą krawędź i pokolorujmy ją
na dany kolor, oznaczmy go \#1. Krawędzi sąsiadujące musimy więc pokolorować na inny kolor - \#2. Przechodzimy do następnej
krawędzi (kierunek dowolny, ważne aby iść cały czas w tym samym), krawędź ta ma kolor \#2, więc następna musi być \#1.
Postępując w ten sposób na koniec uzyskamy poniższe (niepoprawne) kolorowanie krawędziowe grafu $C_7$.
\begin{figure}[H]
\centering
\input{gfx/mec-1.tex}
\end{figure}
Dla tej ostatniej krawędzi potrzebowalibyśmy jakiegoś koloru \#3 - ale to by znaczyło, że graf jest 3-barwny
krawędziowo co stałoby w sprzeczności z wymaganiami jakie postawiliśmy. Nie pozostaje nam więc nic innego jak usunąć
te niepasującą krawędź uzyskując w ten sposób ścieżkę o 6 krawędziach, ale 7 wierzchołkach czyli $P_7$.
\begin{figure}[H]
\centering
\input{gfx/mec-2.tex}
\caption{Rozwiązanie problemu $\problem{MEC}(C_7, 2) = P_7$}
\end{figure}
Poprawne pokolorowanie krawędzi wymaga aby wszystkie krawędzie współdzielące wierzchołek miały inny kolor, zatem
jasnym jest, że minimalną liczbą wymaganą do pokolorowania krawędziowo grafu $G$ jest $\Delta(G)$. Dodatkowo Wizing
udowodnił, że liczba ta nigdy nie będzie większa niż $\Delta(G) + 1$. Z pierwszego faktu oraz tego, że $G'$ musi być
spójny możemy wywnioskować, że dla problemu $\problem{MEC}(G, 2)$ jedynymi możliwymi stopniami wierzchołków są 1 i 2.
Czyli $G'$ jest ścieżką lub cyklem przechodzącymi przez wszystkie wierzchołki - czyli odpowiednio ścieżki hamiltona
bądź cyklu hamiltona. Znalezienie zarówno ścieżki jak i cyklu hamiltona jest problemem \NP-trudnym, zatem
$\problem{MEC}(G, 2)$ będący z nim tożsamy też jest \NP-trudny.
\task{Dany jest zbiór $n$ różnych liczb naturalnych $A = \{a_1, ..., a_n\}$. Wiadomo, że problem polegający na
sprawdzeniu ,,czy zbiór $A$ można podzielić na sumę dwóch rozłącznych zbiorów $B$ i $C$ (tzn. takich, że
$B \cup C = A$ i $B \cap C = \emptyset$) o równych sumach elementów'' jest \NPC. Czy pozostanie on \NPC czy też stanie
się wielomianowy przy następujących modyfikacjach?}
\subtask{$n$ jest podzielne przez $3$}
\subtask{$A$ to 33 kolejne wyrazy ciągu Fibonacciego}
\subtask{wszystkie liczby w $A$ są podzielne przez 3}
\subtask{sumy elementów zbiorów $B$ i $C$ nie muszą być równe, lecz mogą się różnić o co najwyżej 3.}
\subtask{sumy te muszą się różnić o więcej niż 3}
\subtask{rozpatrujemy 3 zbiory zamiast 2}
\solution
Na wstępie oznaczmy nasz problem przez $\Pi$, a kolejne problemy przez $\Pi_a$ itd. Do tego $A_a$ będzie stanowić zbiór
liczb dla modyfikacji a, a $n_a$ wielkość tego zbioru. Problem $\Pi$ to nic innego jak problem podziału zbioru.
Aby udowodnić że $\Pi_a \in \NPC$ wystarczy zredukować do niego problem $\Pi$, jedyne różnica to to, że w $\Pi_a$ liczba
elementów musi być wielokrotnością 3. Zatem dla każdego elementu w zbiorze $A$ w zbiorze $A_a$ tworzymy 3 elementy:
$a_i, 0, 0$ dzięki temu będziemy wiedzieli, że $n_a = 3n$ jest podzielna przez 3 a zera nie wpływają na sumę zatem
nie zmieniają istoty problemu. Co za tym idzie $\Pi_a \in \NPC$.
W $\Pi_b$ z góry znamy zbiór A oraz jego wielkość - problem zatem jest trywialny - $\Pi_b \in \problem{TRY}$
$\Pi_c$ wiemy, że wszystkie liczby są podzielne przez 3 czyli, dla każdego elementu $a_i$ należącego do $A$ istnieje taka
liczba $k_{a_i} \in \mathbb{Z}$, że $a_i = 3k_{a_i}$. Problem dotyczy znalezienia takich rozłącznych zbiorów $B$ i $C$,
że:
\begin{equation}
\sum_{b \in B} b = \sum_{c \in C} c
\end{equation}
ponieważ $B \subset A, C \subset A$ możemy zapisać
\begin{equation*}
\sum_{b \in B} 3k_b = \sum_{c \in C} 3k_c
\end{equation*}
\begin{equation*}
3\sum_{b \in B} k_b = 3\sum_{c \in C} k_c
\end{equation*}
\begin{equation*}
\sum_{b \in B} k_b = \sum_{c \in C} k_c
\end{equation*}
Czyli uzyskaliśmy problem analogiczny do $\Pi$. $\Pi_c \in \NPC$
Ponieważ wiemy, że zbiór $A$ składa się tylko z liczb naturalnych, to wiemy, że jeżeli sumy zbiorów $A$ i $B$ nie są
równe to różnią się o co najmniej 1. Jeżeli zatem przemnożymy wszystkie elementy zbioru $A$ przez 4, co zgodnie z
powyższym wnioskowaniem nie wpływa na problem to będziemy mieli pewność, że różnica ta wyniesie minimum 4. Co za tym
idzie odpowiadając na problem $\Pi$ będziemy w stanie uzyskać odpowiedź na $\Pi_a$. $\Pi_d \in \NPC$.
W zbiorze $A$ nie występują liczby ujemne, zatem wystarczy że $B = \{ \min A \}$ oraz $C = A - B$ i uzyskamy
największą możliwą różnicę między zbiorami $B$ i $C$ - wystarczy teraz sprawdzić, czy różnica ta jest większa niż 3.
Innym podejściem jest przyjęcie że $B = \emptyset$, a co za tym idzie suma elementów w nim wynosi 0. Z takiej definicji
wynika że $A = C$ zatem jeżeli tylko suma wszystkich elementów w $A$ jest większa niż 3 możemy utworzyć takie ,,zbiory''.
$\Pi_e \in \P$.
Rozpatraując problem na 3 zbiorach czyli - problem $\Pi_f$ - szukamy takich rozłącznych zbiorów $B, C, D \subset A$, że
\begin{equation}
\sum_{b \in B} b = \sum_{c \in C} c = \sum_{d \in D} d = \sigma_f
\end{equation}
Ponieważ zbiory są rozłączone:
\begin{equation*}
\sum_{b \in B} b + \sum_{c \in C} c + \sum_{d \in D} d = \sum_{a \in A} a = S_f \Rightarrow S_f = 3\sigma_f
\end{equation*}
W problemie $\Pi$ mieliśmy analogiczne zależności
\begin{equation*}
\sum_{b \in B} b = \sum_{c \in C} c = \sigma
\end{equation*}
\begin{equation*}
\sum_{b \in B} b + \sum_{c \in C} c = \sum_{a \in A} a = S \Rightarrow S = 2\sigma
\end{equation*}
Nawet nie znając dokładnie zbiorów $A$ i $B$ wiemy, że ich sumy muszą wynosić $\sigma = \frac{S}{2}$. W wypadku problemu $\Pi_f$
sumy muszą wynosić $\sigma_f = \frac{S_f}{3}$. Stąd aby przeprowadzić $\alpha$-redukcję problemu $\Pi$ do $\Pi_f$ do
zbioru $A$ wystarczy dodać 1 element wynoszący $\frac{S}{2}$. $\Pi_f \in \NPC$.
Z definicji wszystkie problemy \NP da się zredukować do \NPC. Dodatkowo wiemy, że
$\problem{TRY} \subseteq \P \subseteq \NP$. Stąd możemy naszkicować graf relacji $\alpha$ dla problemów.
\begin{figure}[H]
\centering
\input{gfx/ss-redukcje.tex}
\caption{Graf relacji redukcji $\alpha$ między modyfikacjami problemu $\Pi$}
\end{figure}
\taskend
\task{Problem \textit{Maksymalizacji Liczby Zapamiętanych Programów} (\problem{MLZP}) określony jest następująco:
,,Dany jest zbiór $n$ programów o długościach $I_1, I_2, ..., I_n$ i 2 dyskietki o pojemności $L$ każda. Znaleźć
upakowanie jak największej liczby programów na tych dyskietkach''. Jak wiadomo, algorytm \textit{Shortest-First}
(\problem{SF}) dla problemu \problem{MLZP} myli się o co najwyżej program i polega na tym, że dyskietki zapełniamy
w kolejności od najkrótszego do najdłuższego programu. Pokaż, że:}
\subtask {\problem{SF} jest $\frac{4}{3}$-aproksymacyjny}
\subtask {dla \problem{MLZP} nie istnieje schemat FPTAS, chyba że $\P = \NP$}
\solution
Problem \problem{MLZP}, zgodnie z tytułem, jest problemem maksymalizacyjnym. Zatem wiemy, że $A_{opt} \geq A$, gdzie
$A_{opt}$ to odpowiedź optymalna, a $A$ to odpowiedź naszego algorytmu. Dodatkowo wiemy, że $A, A_{opt} \in \mathbb{N}$
oraz, że algorytm \problem{SF} jest $1$-absolutnie aproksymacyjny czyli:
\begin{equation}
|A_{opt} - A| \leq 1 \overset{maksymalizacyjny}{\implies} A_{opt} - A \leq 1 \implies A \geq A_{opt} - 1
\end{equation}
z tych 2 faktów
wiemy, że A jest zawarta między dwiema kolejnymi liczbami naturalnymi począwszy od $A_{opt} - 1$:
\begin{equation*}
A, A_{opt} \in \mathbb N \land A_{opt} \geq A \geq A_{opt} - 1 \Rightarrow A = A_{opt} \lor A = A_{opt} - 1
\end{equation*}
Dodatkowo zauważamy, że jeżeli jest 1 program to algorytm zawsze zwróci wynik dokładny - zmieścił się na dyskietce
albo nie. Dla 2 programów podobnie. Dla 3 natomiast, nie jest to już takie oczywiste, dla ułatwienia
późniejszego zapisu uznajmy, że programy są posortowane rosnąco, tj
\begin{equation}\label{eqn:2011.6:assumption}
I_1 \leq I_2 \leq I_3
\end{equation}
Postarajmy się więc znaleźć kontrprzykład - bądź udowodnić, że nie może on istnieć. Ponieważ liczba programów wynosi
zaledwie 3 możemy bez problemu rozważyć wszystkie możliwe kombinacje programów. Wiemy, że na pierwszej dyskietce na
pewno znajdzie sie najmniejszy program o rozmiarze $I_1$ , jeżeli $I_1 + I_2 > L$ to program $I_2$ zostanie umieszczony
na drugiej dyskietce i na pewno nie starczy już miejsca na 3 program (zgodnie z \eqref{eqn:2011.6:assumption}
$I_1 + I_2 > L \Rightarrow I_2 + I_3 > L$). Ponieważ tym bardziej $I_1 + I_3 > I_1 + I_2$ to wiemy, że nie może
istnieć lepsze ułożenie - wynik zatem jest dokładny. Jeżeli programy 1 i 2 mieszczą się na jednej dyskietce to tak jak
w przypadku posiadania jednego programu - algorym zwróci 2 tylko jeżeli program nie mieści się na dyskietce - zatem nie
istnieje kontrprzykład a algorytm \problem{SF} rozwiązuje problem \problem{MLZP} dokładnie.
Dla 4 dyskietek postarajmy się znaleźć kontrprzykład. Podobnie jak poprzednio uznajmy, że programy są indeksowane
rosnąco. Potrzebujemy takich danych, dla których algorytm zwróci 3 a odpowiedź optymalna wyniesie 4. Ponieważ
algorytm bierze liczby w kolejności rosnącej zróbmy tak, że dyskietkę możemy wypełnić najmniejszym i największym
programem: $L = I_1 + I_4$ a drugą programami środkowymi: $I_2 + I_3 \leq L$. Z naszej definicji wynika, że \problem{SF}
będzie próbował wrzucić jak najwięcej programów na pierwszą dyskietkę biorąc po kolei najmniejsze programy. Nie dopuśćmy
do wrzucenia 3 programów na dyskietkę pierwszą dobierając rozmiar $I_2$ i $I_3$ tak, że $I_1 + I_2 + I_3 > L$.
Ponieważ $I_3 > I_1$ a $I_1 + I_4 = L$ to na pewno $I_3 + I_4$ (czyli dwa pozostałe programy) nie zmieszczą się razem
na jednej dyskietce. W ten sposób minimalne ułożenie to $\{\{I_1, I_4\}, \{I_2, I_3\}\}$ a \problem{SF} znajdize tylko
$\set{\set{I_1, I_2}, \set{I_3}}$. Przykładowe rozmiary programów dla $L = 5$ to $\set{1, 2, 3, 4}$.
Zatem dla $n = 4$ algorytm ten daje wynik $\frac{4}{3}$-przybliżony, a w ogólności dla $n$ - $\frac{n+1}{n}$-przybliżony.
Ponieważ $\frac{x+1}{x}$ jest funkcją ściśle malejącą dla $x > 3$ to $\frac{4}{3}$ jest największą możliwą jej
wartością. Co za tym idzie algorytm ten jest $\frac{4}{3}$-aproksymacyjny.
Przed udowodnieniem, że schemat redukcji wielomianowej nie może istnieć udowodnijmy, że problem jest \NP-trudny,
ponieważ w zasadzie nie zostało to nigdzie podane wprost.
Aby udowodnić że dany problem optymalizacyjny jest \NP-trudny należy udowodnić, że w wersji decyzyjnej ten problem byłby
\NPC. Wersja decyzyjna może brzmieć następująco: ,,Czy na 2 dyskietkach o pojemności $L$ da się zapisać $k$ programów o
wielkościach $I_1, I_2, ..., I_n$?''. Mając do dyspozycji zbiór liczb i 2 pojemniki powinniśmy powiązać ten problem z
problemem \textit{Podziału Zbioru} (\problem{PZ}). Spróbujmy przeprowadzić $\alpha$-redukcję tego problemu do \problem{MLZP}.
\begin{figure}[H]
\centering
\input{gfx/pz-mlzp.tex}
\caption{Schemat $\alpha$-redukcji z \problem{PZ} do \problem{MLPZ}}
\end{figure}
W jednym z poprzednich zadań pokazaliśmy, że jeżeli istnieje taki podział zbioru $I$ to suma jednego podzbioru musi być
równa $\frac{1}{2}\sum_{i \in I}i$ a dwa powstałe podzbiory muszą zawierać wszystkie elementy zbioru $I$. W takim razie
rozdzielamy wszystkie elementy (których jest $k = |I|$) zbioru $I$ do dwóch ,,pojemników'' o wielkościach
$L = \frac{1}{2}\sum_{i \in I}i$. Ponieważ przedstawiając problem z innej perspektywy otrzymaliśmy problem tożsamy z
\problem{MLZP}, to nie ma potrzeby dokładniejszego dowodzenia poprawności przeprowadzonej redukcji - zatem
\problem{PZ}$\ \alpha\ \mathtt{MLZP_d}$, czyli \problem{MLZP} jest \NP-trudny.
Tak jak poprzednio aby udowodnić, że schemat (F)PTAS może istnieć dla tego algorytmu tylko gdy $\P = \NP$ wystarczy
udowodnić, że dla każdych danych wejściowych istnieje taki $\varepsilon$, że przybliżenie daje nam dokładny wynik. Ponieważ
problem jest maksymalizacyjny otrzymamy:
\begin{equation}\label{eqn:2011:6:fptas}
\frac {A_{opt}}{A} \leq 1 + \varepsilon \land A \leq A_{opt} \iff A \leq A_{opt} \leq A + \varepsilon A
\end{equation}
Ponieważ $A, A_{opt} \in \mathbb N$ to pod warunkiem, że $A\varepsilon < 1$ nierówność \eqref{eqn:2011:6:fptas}
zredukuje się do równania $A = A_{opt}$, czyli uzyskamy wynik dokładny w czasie wielomianowym. Oczywistym jest,
że odpowiedź na problem nie może być większa niż $n$ - mając 4 programy nie możemy zapisać ich 8, brakłoby
nam programów. Stąd otrzymujemy
\begin{equation*}
A \leq n \iff \frac{1}{n}A \leq 1
\end{equation*}
Czyli jeżeli tylko $\varepsilon < \frac{1}{n}$ to otrzymany wynik będzie wynikiem dokładnym uzyskanym w czasie
wielomianowym (zgodnie z definicją schamatu (F)PTAS) czyli rozwiązalibyśmy problem \NPC w czasie wielomianowym
co implikowałoby, że $\P = \NP$.
\taskend

View File

@ -3,7 +3,7 @@
\task{Alicja i Bogdan wybrali się na zakupy. Przy kasie okazało się, że muszą zapłacić równo 100 zł, a kasa nie zwraca reszty. W portfelu mają: $a_1$ monet 1-złotowych, $a_2$ monet 2-złotowych i analogicznie dla nominałów 5, 10, 20, 50, gdzie $a_i \geq 0$. Zastanawiają się, czy z posiadanych monet mogą uzbierać dokładnie 100 zł.}
\subtask{Spróbuj zaprojektować algorytm wielomianowy dla tego problemu decyzyjnego}
\subtask{Jeśli nie potrafisz, to spróbuj udowodnić jego NP-zupełność}
\subtask{Jeśli nie potrafisz, to spróbuj udowodnić jego \NP-zupełność}
\solution
Przy rozwiązywaniu tego zadania, jedną z pierwszych myśli może być, że jest to problem zbliżony
@ -71,10 +71,10 @@ grafu $G$ z definicji $n = 100$ możemy powiedzieć, że operacja ta dla każdeg
stałym, czyli $O(1)$ - obie odpowiedzi będą poprawne.
\taskend
\task{\textit{OGRANICZONY PROBLEM KLIKI} - \texttt{OPK} - zdefiniowany jest następująco: ``Dany jest graf $G$ i liczby
\task{\textit{OGRANICZONY PROBLEM KLIKI} - \problem{OPK} - zdefiniowany jest następująco: ``Dany jest graf $G$ i liczby
naturalne $a$, $b$ takie, że $a \leq b$, czy w $G$ istnieje klika o rozmiarze $r$ taka, że $a \leq r \leq b$?,,. Pokaż, że:}
\subtask{$\mathtt{OPK} \in \mathtt{NP}$}
\subtask{$\mathtt{OPK} \in \mathtt{NPC}$}
\subtask{$\problem{OPK} \in \problem{NP}$}
\subtask{$\problem{OPK} \in \problem{NPC}$}
\solution
Aby udowodnić, że dany problem należy do klasy \NP należy zrobić jedną z dwóch rzeczy - przedstawić niedeterministyczny
@ -213,8 +213,8 @@ który generuje digraf acykliczny. Problem ten ma prosty algorym 2-aproksymacyjn
\subtask{udowodnij 2-aproksymowalność tego algorytmu}
\subtask{udowodnij nie wprost, że jeżeli $\mathtt{P} \neq \mathtt{NP}$ to dla \problem{MAS} nie ma schamatu FPTAS}
\\
\ctip{Zakładamy, że digraf $D$ dany jest w postaci macierzy sąsiedztwa $A$}
\ctip{Jaki digraf definiuje górna/dolna macierz trójkątna macierzy $A$?}
\tip{Zakładamy, że digraf $D$ dany jest w postaci macierzy sąsiedztwa $A$}
\tip{Jaki digraf definiuje górna/dolna macierz trójkątna macierzy $A$?}
\solution
Na wstępie - zadanie słabo opisuje problem i więcej informacji można wyciągnąć z nazwy problemu po angielsku niż jego opisu.

52
2018.01.25.tex Normal file
View File

@ -0,0 +1,52 @@
%! TEX root = main.tex
\section{25.01.2018 kolokwium \#2}
\task Rozważ problem wyznaczania wartości indeksu chromatycznego $n$-wierzchołkowego grafu $G$, czyli $\chi'(G)$.
Uzasadnij prawdziwość lub fałszywość następujących twierdzeń dotyczących tego problemu.
\subtask Istnieje algorytm 1-absolutnie aproksymacyjny o złożoności $O(n)$ \label{task:2018:1}
\subtask Istnieje algorytm $\frac{3}{2}$-względnie aproksymacyjny
\subtask Istnieje algorytm $\frac{4}{3}$-względnie aproksymacyjny
\subtask Istnieje algorytm $\frac{5}{4}$-względnie aproksymacyjny
\subtask Istnieje schemat aproksymacyjny o złożoności niewielomianowej
\subtask Istnieje całkowicie wielomianowy schemat aproksymacyjny
\task Problem istnienia cyklu Hamiltona w grafie $G$ należy do klasy \NP. Udowodnij ten fakt.
\task Wypełnij poniższą tabelę wpisując do niej \textbf{TAK}, \textbf{NIE}, \textbf{NW} (Nie Wiadomo).
\begin{table}[H]
\centering
\begin{tabular}{rl|c|c}
& klasa & Weryfikowalne & Rozwiązywalne \\\hline
\subtask & \P & & \\
\subtask & \NP & & \\
\subtask & \NPC & & \\
\subtask & \NP-trudne & & \\
\end{tabular}
\end{table}
\note{W niektórych wypadkach więcej niż jedna odpowiedź jest poprawna}
\task Algorytm \textit{Largest First} (\problem{LF}) dla kolorowania wierzchołków grafu maluje je zachłannie
poczynając od wierzchołka o najwyższym stopniu i kończąc na weierzchołku o najniższym stopniu.
\subtask Oszacuj złożoność obliczeniową algorytmu \problem{LF} jako funnkcję $n$ za pomocą symbolu $\Theta$
\subtask Udowodnij, że \problem{LF} optymalnie koloruje cykle $C_4$ i $C_5$ ale suboptymalnie $C_6$
\subtask Wykonaj algorytm \problem{LF} na załączonym grafie
\subtask Udowodnij, że algorytm \problem{LF} nie jest aproksymacyjny, tj. nie istnieje stałą $c$ taka, że $\mathtt{LF}(G) \leq c \cdot \chi(G)$
\subtask Udowodnij, że \problem{LF} jest $k$-bezwzględnie aproksymacyjny i $l$-wzzględnie aproksymacyjny w odniesieniu
do grafów kubicznych tj. ustal wartości k i l
\task \textit{Kolorowanie Kosztowe} (\problem{KK}) polega na tym, że kolory mają swoje koszty
$c_1 \leq c_2 \leq \ldots \leq c_n$ i za każdym razem, gdy kolorujemy kolejny wierzchołek, przydzielamy mu koszt tego
koloru. Problem polaga na tym, by tak pokolrowoać graf aby sumaryczny koszt kolorowania $\text{skk}(G)$ wszystkich
wierzchołków był jak najmniejszy. Udowodnij, że nawet jeżeli $c_1 = c_2 = \ldots = c_k \leq c_{k+1}$ to problem ten
jest \NP-trudny.
\task Alicja jest częstym klientem sklepu \textit{SuperShop} i uzbierała 5 kuponów rabatowych o różnych wartościach
zniżek. Ma zapisane na liście zakupowej $n$ produktów, które chce dzisiaj kupić oraz ich ceny. Chce pójść dzisiaj do
sklepu bez gotówki i kupić wybrane produkty używajac tylko kuponów. Nie chce natomiast zmarnować żadnego kuponu, czyli
używa tylko tych, których wartość zostanie w pełni wykorzystana. Zastnawia się czy istnieje zestaw produktów i
odpowiednia kombinacja kuponów, by mogła pójść na zakupy i kupić cokolwiek?
\note{Wszystkie kwoty są zaokrąglane do pełnych złotówek}
\subtask Spróbuj ułożyć algorytm wielomianowy, który rozwiązuje ten problem
\subtask Jeśli nie potrafisz, udowodnij jego \NP-zupełność

277
2018.bonus.tex Normal file
View File

@ -0,0 +1,277 @@
\section{bonus - zadania z ćwiczeń}
\task{Jesteś na księżycu! Możesz wysłać tylko 5 symboli, jako komunikat o tym co właśnie odkryłeś. Przy założeniu, że
w problem $\Pi \in \NP$ przekaż wiadomość, mówiącą, że:}
\subtask{Złożoność dowolnego algorytmu deterministycznego rozwiązującego problem $\Pi$ jest $\Omega(2^n)$}
\subtask{$\Pi$ da się rozwiązać algorytmem deterministycznym w czasie $o(P)$}
\subtask{$\Pi \in \NPC$ i istnieje deterministyczny algorytm wielomianowy rozwiązujący ten problem.}
\subtask{\alphareduction{\problem{3SAT}}{$\Pi$}}
\subtask{\alphareduction{$\Pi$}{\problem{3SAT}}}
\solution
Wiemy, że nasz problem $\Pi \in \NP$ istnieje więc niedeterministyczny algorytm wielomianowy, który jest w stanie
go rozwiązać. Mamy pewność, że złożoność dowolnego algorytmu \textbf{deterministycznego} jest $\Omega(2^n)$ czyli
ograniczona przez funkcję wykładniczą z dołu. Ponieważ każda funkcja wykładnicza o podstawie większej niż 1
rośnie szybciej niż dowolna funkcja wielomianowa wiemy, że na pewno nie ma \textbf{deterministycznego} algorytmu
rozwiązującego nasz problem $\Pi$ w czasie wielomianowym co znaczyłoby, że $\Pi \not \in \P$. Łącząc to z założeniem
otrzymalibyśmy, że problem $\Pi$ jest w \NP a nie jest w \P, czyli:
\begin{center}
$\mathtt{P \neq NP}$ - 4 symbole
\end{center}
Jeżeli natomiast $\Pi$ da się rozwiązać algorytmem deterministycznym w czasie $o(P)$, gdzie $P$ to jakiś wielomian
to z definicji klasy \P
\begin{center}
$\Pi \in \P$ - 3 symbole
\end{center}
Jeżeli $\Pi \in \NPC$ to wiemy, że każdy problem z klasy \NP możemy sprowadzić do tego problemu w czasie wielomianowym.
Jeżeli dodatkowo potrafilibyśmy rozwiązać $\Pi$ w czasie wielomianowym to łączny potrzebny czas na rozwiązanie
dowolnego problemu \NP byłby sumą dwóch wielomianów - redukcji oraz rozwiązania $\Pi$ - czyli również wielomianem, a to
znaczyłoby że
\begin{center}
$\NP = \P$ - 4 symbole
\end{center}
Problem \problem{3SAT} jest problemem \NPC, zatem jeżeli możemy wszystko $\alpha$-redukowac do \problem{3SAT} a
\problem{3SAT} możemy $\alpha$-redukować do $\Pi$ to na podstawie przechodniości relacji $\alpha$-redukcji do $\Pi$
możemy zredukować wszystko, czyli
\begin{center}
$\Pi \in \NPC$ - 5 symboli
\end{center}
W ostatnim wypadku odkryliśmy, że da się zredukować problem $\Pi \in \NP$ do problemu, do którego da się zredukować
wszystkie problemy $\NP$ (zgodnie z definicją klasy \NPC). W takim wypadku lepiej nie wysyłajmy nic.
\begin{center}
0 symboli
\end{center}
\taskend
\task Podaj status problemów (tj. czy są \P czy \NP-trudne) optymalizacyjnych podanych poniżej w podziałem na ich wersje maksymalizacyjne oraz wersje
minimalizacyjne.
\subtask Kolorowanie wierzchołków w grafie
\subtask Znalezienie $k$-tego największego/najmniejszego elementu
\subtask Problem komiwojażera
\subtask Drzewo spinające
\subtask Największa/najmniejsza droga w grafie
\subtask Klika w grafie planarnym
\solution
Biorąc pod uwagę, że jedynym wymaganiem kolorowania wierzchołków w grafie jest to, żeby 2 sąsiednie wierzchołki nie
miały tego samego koloru to wersja maksymalizacyjna problemu jest problemem wielomianowym - wystarczy każdy
wierzchołek pokolorować na inny kolor, co da nam maksymalną możliwą liczbę kolorów. Wersja decyzyjna problemu
kolorowania wierzchołków jest natomiast problemem \NPC zatem optymalizacyjnie jest to problem \NP-trudny.
Znalezienie $k$-tego najmniejszego bądź największego elementu jest zadaniem prostym pod warunkiem, że nasz zbiór jest
posortowany. Wiadomo, że sortowanie jest problemem $O(n\log n)$ zatem problem ten jest wielomianowy.
Problem komiwojażera bez względu na to czy jest minimalizacyjny czy maksymalizacyjny wymaga znalezienia cyklu hamiltona
w danym grafie - co jest zadaniem trudnym obliczeniowo - problem szukania cyklu hamiltona jest \NPC. Dodatkowo
musimy znaleźć cykl o największej bądź najmniejszej możliwie sumie wag - to znaczy, że problem ten musi być \NP-trudny.
Problem minimalnego drzewa spinającego można rozwiązać algorytmem kruskala. Jeżeli zastąpimy wybieranie minimalnej
krawędzi wybieraniem krawędzi maksymalnej to otrzymamy algorytm szukający maksymalnego drzewa spinającego. Kruskal jest
algorytmem wielomianowym, zatem cały problem jest w klasie \P.
Znalezienie najkrótszej drogi w grafie jest bardzo proste, wystarczy wziąć dowolną krawędź - nie da się zrobić ścieżki
krótszej niż 1. Szukanie najdłuższej ścieżki już takie proste nie jest. W grafie jest $n$ wierzchołków, maksymalna
droga jaką możemy stworzyć bez tworzenia cyklu to droga $n$ wierzchołkowa, zawierająca $n-1$ krawędzi. Ścieżka, która
przechodzi przez dokładnie wszystkie wierzchołki jest ścieżką hamiltona, a problem ścieżki hamiltona jest problemem \NPC.
Zatem zakładając, że rozpatrujemy wersję decyzyjną tego problemu zdefiniowaną następująco: ,,W grafie $G$ istnieje
ścieżka długości $l$'' to dość łatwo możemy przeprowadzić $\alpha$-redukcję problemu ścieżki hamiltona do problemu
drogi w grafie - graf pozostaje bez zmian, natomiast za długość ścieżki przyjmujemy liczbę wierzchołków w grafie.
Wersja decyzyjna jest zatem \NPC, a co za tym idzie problem w wersji maksymalizacyjnej jest \NP-trudny.
Z twierdzenia kuratowskiego wiemy, że żaden graf nie może zawierać kliki $K_5$, zatem najwiekszą kliką w planarnym
grafie jest klika $K_4$. Jesteśmy w stanie sprawdzić istnienie $K_4, K_3$ w grafie w czasie wielomianowym. Przypadki
$K_1$ i $K_2$ są jeszcze łatwiejsze ponieważ klika $K_1$ to nic innego jak wierzchołek, a $K_2$ to krawędź. Stąd też
wiemy, że wersja minimalizacyjna jest \P.
\begin{table}[H]
\centering
\begin{tabular}{r|cccccc}
problem & a & b & c & d & e & f \\ \hline
$\min$ & \NP-trudny & \P & \NP-trudny & \P & \P & \P \\
$\max$ & \P & \P & \NP-trudny & \P & \NP-trudny & \P
\end{tabular}
\caption{Podsumowanie statusów problemów z zadania}
\end{table}
\taskend
\task Masz dany graf $G$ oraz liczbę $k$. Czy graf $G$ zawiera klikę o rozmiarze $k$? Do pomocy masz czarną skrzynkę.
Możesz do niej włożyć tylko graf $G$ posiadający gwiazdę spinającą oraz liczbę $p$ będącą progiem. Skrzynka odpowie na
pytanie - ,,Czy w danym grafie istnieje klika o rozmiarze $k \geq p$?''. Jeżeli graf nie ma gwiazdy spinającej to
skrzynka milczy.
\tip{Gwiazda spinająca to inaczej wierzchołek połączony ze wszystkimi innymi wierzchołkami.}
\solution
Przypomnijmy że klika to graf pełny, czyli inaczej taki graf, w którym każdy wierzchołek jest połączony z każdym innym.
Co za tym idzie, aby zwiększyć klikę o 1 należy dodać nowy wierzchołek, który jest połączony ze wszystkimi innymi
już istniejącymi wierzchołkami.
Dodanie do grafu gwiazdy spinającej z definicji dodaje wierzchołek połączony ze wszystkimi innymi wierzchołkami.
\begin{figure}[H]
\centering
\begin{subfigure}[b]{.5\linewidth}
\centering
\input{gfx/gwiazda-spinajaca.tex}
\caption{Graf $G$}
\label{fig:2018:3:G}
\end{subfigure}%
\begin{subfigure}[b]{.5\linewidth}
\centering
\input{gfx/gwiazda-spinajaca-2.tex}
\caption{Graf $H$}
\label{fig:2018:3:H}
\end{subfigure}%
\caption{Graf $H$ powstaje przez dodanie gwiazdy spinającej do grafu $G$}
\end{figure}
Zauważmy, że w grafie \ref{fig:2018:3:G} istnieje klika $K_4$ składająca się z wierzchołków $(1, 2, 6, 5)$. Ponieważ dodaliśmy gwiazdę
spinajacą klika razem z dodanym wierzchołkiem stanowi klikę $K_5$. Wiemy zatem, że po dodaniu do grafu gwiazdy spinającej
wszystkie kliki ,,awansują'' w rozmiarze o 1. Zatem aby sprawdzić czy w grafie przed dodaniem gwiazdy istnieje klika o
rozmiarze $n$ wystarczy sprawdzić czy w grafie $H$, istnieje klika o rozmiarze $p = n+1$.
Skrzynka odpowiada nam na pytanie czy w grafie istnieje klika $k \geq p$, jednak pamiętajmy, że zgodnie z powyższym
rozumowaniem mniejsze kliki są podgrafami klik większych, zatem nawet jeżeli skrzynka znajdzie podgraf $K_{10}$ a my
szukamy ledwo $K_5$ to i tak wiemy, że $K_5$ istnieje w $K_{10}$.
\taskend
\task Kierownik zmiany ma pod opieką $m = 4$ identycznych obrabiarek i $n$ różnych elementów do obrobienia. Na swoim
komputerze posiada PTAS o złożoności $O(n\log^{1/\varepsilon} n + m^m)$. Praca zaczyna się o 7:00 a o 15:00 jest mecz,
który chce obejrzeć. Wiemy, że optymalny czas pracy wynosi 6h, jaką złożoność będzie miał algorytm, który pozwoli
kierownikowi obejrzeć mecz?
\solution
Problem ten jest problemem minimalizacyjnym oraz wiemy, że $A_{opt} = 6$. Aby zdążyć obejrzeć mecz musimy skończyć
pracę o 15:00, zatem wystarczy że algorytm przydzieli pracę tak, aby wszystkie elementy zostały obrobione w czasie
8 godzin skąd $A = 8$.
\begin{equation*}
\frac{A}{A_{opt}} \leq 1 + \varepsilon \iff A \leq A_{opt} + \varepsilon A_{opt}
\end{equation*}
Ponieważ nie chcemy męczyć naszego komputera, a dokładne obliczenia są coraz cięższe wystarczy że rozpatrzymy przypadek
rozwiązujący problem dla dokładnie 8 godzin:
\begin{equation}
A = A_{opt} + \varepsilon A_{opt}
\end{equation}
Ponieważ znamy zarówno $A$ jak i $A_{opt}$ z łatwością możemy wyznaczyć $\varepsilon$
\begin{equation*}
8 = 6 + 6\varepsilon \iff 2 = 6\varepsilon \iff \varepsilon = \frac{1}{3}
\end{equation*}
W taki sposób otrzymujemy złożoność $O(n\log^3 n + m^m)$, ponieważ $m$ jest stałe możemy pominąć je w obliczaniu
złożoności uzyskując ostatecznie $O(n\log^3 n)$.
\taskend
\task Na płaszczyźnie znajduje się n punktów, chcemy znelźć ich średnicę, czyli największą odległość pomiędzy dwoma z nich.
Następujący algorytm rozwiązuje ten problem w sposób 2-przybliżony. Udowodnij ten fakt.
\begin{column}{.6}
\begin{algorithm}[H]
\caption{Prosty algorytm do liczenia średnicy}
\begin{algorithmic}[1]
\For{i = 2,...,n}
\State $d_{1,i} \gets $ odległość z punktu $1$ do $i$
\EndFor
\State \Return $\max \set{d_{1,2}, ..., d_{i,n}}$
\end{algorithmic}
\end{algorithm}
\end{column}
\begin{column}{.4}
\begin{figure}[H]
\centering
\begin{tikzpicture}[every node/.style={above}]
\draw (0, 0) node {1} -- (4, 0) node {2};
\draw (1, 1) node {3} -- (3, 2) node {4};
\end{tikzpicture}
\caption{przykładowe punkty}
\end{figure}
\end{column}
\solution
Aby rozwiązać ten problem najpierw spróbujmy rozważyc jego uporoszczoną wersję - w jednym wymiarze. W tym wypadku
rozwiązanie problemu zawsze będzie dość proste - średnica będzie między punktem wysuniętym najbardziej na lewo i punktem
najbardziej wysuniętym na prawo. Najprawdopodobniej jednak nasz punkt $1$ będzie znajdował się gdzieś między nimi.
\begin{figure}[H]
\centering
\begin{tikzpicture}[every node/.style={above}]
\draw[*-*] (0, 0) node {$\alpha$} -- (2, 0) node {1};
\draw[-*] (2, 0) -- (5, 0) node {$\Omega$};
\end{tikzpicture}
\end{figure}
Na całą resztę zadania przyjmijmy, że punkty tworzące średnice nazwiemy $\alpha$ i $\Omega$, przy czym żaden z tych
punktów nie jest punktem $1$. Na powyższym rysunku, dość wyraźnie widać zależność
\begin{equation*}
d_{\alpha,1} + d_{1,\Omega} = d_{\alpha,\Omega}
\end{equation*}
Ponieważ z par punktów $\alpha, 1$ i $1, \Omega$ zawsze wybieramy tę, między którymi jest większa odległość, możemy mieć
pewność że $d_{\alpha,\Omega} \leq 2\cdot d$, gdzie $d$ to wybrana przez nas średnica. $d_{\alpha,\Omega} = 2d$ gdy
punkt 1 znajduje się idealnie po środku.
\begin{figure}[H]
\centering
\begin{tikzpicture}[every node/.style={circle, fill, inner sep=1.5pt}]
\coordinate (a) at (0,0);
\coordinate (b) at (2,1);
\coordinate (1') at (2, 0);
\coordinate (c) at (5,0);
\node[label={above:$\alpha$}] at (a) {};
\node[label={above:$1$}] at (b) {};
\node[label={below:$1'$}] at (1') {};
\node[label={above:$\Omega$}] at (c) {};
\draw[densely dotted] (a) -- (b) -- (c);
\draw[dashed] (b) -- (1');
\draw[thick] (a) -- (c);
\end{tikzpicture}
\end{figure}
Z poprzednich rozważań wiemy, że w wypadku punktu oznaczonego teraz jako $1'$ algorytm może pomylić się maksymalnie
2-krotność swojej odpowiedzi. Odległość pomiędzy punktem 1 a jednym z punktów średnicy jest teraz na pewno większa
niż w wypadku $1'$ a co za tym idzie odpowiedź będzie bliższa tej poprawnej, czyli najgorszym wypadkiem wciąż pozostaje
pomyłka o 2-krotność odpowiedzi optymalnej, czyli algorytm jest 2-aproksymacyjny.
\taskend
\task Które ze zdań o powyższym problemie są prawdziwe?
\subtask Problem ten jest wielomianowy?
\subtask Problem ten jest \NPC
\subtask Problem ten jest \NP-trudny
\subtask Istnieje algorytm wielomianowy, który jest 1.5-aproksymacyjny
\subtask Istnieje algorytm wielomianowy, który jest 2.5-aproksymacyjny
\subtask Istnieje algorytm wielomianowy, który jest 2-absolutnie aproksymacyjny
\subtask Nie istnieje schemat PTAS
\solution
Aby znaleźć największą odległość między parami punktów na płaszczyźnie wystarczy sprawdzić wszystkie możliwe pary,
których jest ${n \choose 2} = O(n^2)$, algorytm zatem jest wielomianowy, czyli należy do klasy \P. Co za tym
idzie nie może być problemem \NPC a tym bardziej \NP-trudnym. Warto jednak zaznaczyć, że gdyby pytanie dotyczyło
tego czy problem ten jest \NP to odpowiedź byłaby twierdząca ponieważ $\P \subseteq \NP$.
Ponieważ problem jest wielomianowy, wszystkie aproksymacje są możliwe - chcąc uzyskać algorytm $x$-aproksymacyjny wystarczy,
że przemnożymy wynik dokładny przez $x$ - jest to operacją wielomianową ponieważ znalezienie wyniku dokładnego jest
wielomianowe a mnożenie tym bardziej. Tak samo możemy postąpić z absolutną aproksymacją - wystarczy dodać bądź odjąć $x$.
Zgodnie z powyższym, możemy uzyskać dowolnie dobre przybliżenie jakie chcemy czyli schemat PTAS powinien istnieć.
\textit{Za to stwierdzenie nie dam sobie głowy uciąć, słabo mieliśmy to omówione i nie wiem czy na pewno ma to sens.}
Odpowiedzi zatem klarują się następująco:
\begin{table}[H]
\centering
\begin{tabular}{l|l}
Problem ten jest wielomianowy? & \textbf{TAK} \\
Problem ten jest \NPC & \textbf{NIE} \\
Problem ten jest \NP-trudny & \textbf{NIE} \\
Istnieje algorytm wielomianowy, który jest 1.5-aproksymacyjny & \textbf{TAK} \\
Istnieje algorytm wielomianowy, który jest 2.5-aproksymacyjny & \textbf{TAK} \\
Istnieje algorytm wielomianowy, który jest 2-absolutnie aproksymacyjny & \textbf{TAK} \\
Nie istnieje schemat PTAS & \textbf{NIE} \\
\end{tabular}
\end{table}

View File

@ -0,0 +1,12 @@
\begin{tikzpicture}
\foreach \pos [count=\xi] in { (1, 3), (2.5,4), (0, 2), (3, 2), (-1, 5), (1, 6), (-1.5, 3) }
\node[vertex] (v-\xi) at \pos {$\xi$};
\foreach \v/\u in {1/2,1/6,1/5,2/5,2/6,5/6}
\draw[thick] (v-\v) -- (v-\u);
\foreach \u in {1,...,6} \draw[red, thick] (v-7) -- (v-\u);
\foreach \v/\u in {1/4,3/4,3/5,2/4}
\draw (v-\v) -- (v-\u);
\end{tikzpicture}

11
gfx/gwiazda-spinajaca.tex Normal file
View File

@ -0,0 +1,11 @@
\begin{tikzpicture}
\foreach \pos [count=\xi] in { (1, 3), (2.5,4), (0, 2), (3, 2), (-1, 5), (1, 6) }
\node[vertex] (v-\xi) at \pos {$\xi$};
\foreach \v/\u in {1/2,1/6,1/5,2/5,2/6,5/6}
\draw[thick] (v-\v) -- (v-\u);
\foreach \v/\u in {1/4,3/4,3/5,2/4}
\draw (v-\v) -- (v-\u);
\end{tikzpicture}

10
gfx/mec-1.tex Normal file
View File

@ -0,0 +1,10 @@
\def\n{7}
\def\radius{2cm}
\begin{tikzpicture}
\foreach \i in {1,...,\n}
\node[draw, small vertex] (v-\i) at ({-360/\n * (\i+3)}:\radius) {};
\foreach \u/\v/\color in {1/2/red,2/3/blue,3/4/red,4/5/blue,5/6/red,6/7/blue,7/1/red}
\draw[thick, draw=\color] (v-\u) -- (v-\v);
\end{tikzpicture}

10
gfx/mec-2.tex Normal file
View File

@ -0,0 +1,10 @@
\def\n{7}
\def\radius{2cm}
\begin{tikzpicture}
\foreach \i in {1,...,\n}
\node[draw, small vertex] (v-\i) at ({-360/\n * (\i+3)}:\radius) {};
\foreach \u/\v/\color in {1/2/red,2/3/blue,3/4/red,4/5/blue,5/6/red,6/7/blue}
\draw[thick, draw=\color] (v-\u) -- (v-\v);
\end{tikzpicture}

12
gfx/mgp-5c.tex Normal file
View File

@ -0,0 +1,12 @@
\def\n{5}
\def\radius{2cm}
\begin{tikzpicture}[scale=.8]
\foreach \i/\color in {1/red,2/blue,3/red,4/orange,5/teal}
\node[draw, small vertex, draw=\color, thick] (v-\i) at ({-360/\n * (\i)}:\radius) {};
\foreach \u/\v in {1/2,2/3,3/4,4/5,5/1} \draw[-] (v-\u) edge (v-\v);
\foreach \u/\v in {1/4,4/2} \draw[-] (v-\u) edge (v-\v);
\foreach \u/\v in {3/5,5/2} \draw[-] (v-\u) edge[bend left=60, out looseness=2.3] (v-\v);
\end{tikzpicture}

14
gfx/mgp-6c.tex Normal file
View File

@ -0,0 +1,14 @@
\def\n{6}
\def\radius{2cm}
\begin{tikzpicture}[scale=.8]
\foreach \i/\color in {1/red,2/teal,3/blue,4/orange,5/teal,6/orange}
\node[draw, small vertex,draw=\color, thick] (v-\i) at ({-360/\n * (\i)}:\radius) {};
\foreach \u/\v in {1/2,2/3,3/4,4/5,5/6,6/1} \draw[-] (v-\u) edge (v-\v);
\foreach \u/\v in {2/6,6/3,3/5} \draw[-] (v-\u) edge (v-\v);
\draw[-] (v-1) edge[bend left=60, out looseness=2.3] (v-3);
\draw[-] (v-1) edge[bend right=100, out looseness=4] (v-4);
\draw[-] (v-1) edge[bend right=60, out looseness=2.3] (v-5);
\end{tikzpicture}

19
gfx/pz-mlzp.tex Normal file
View File

@ -0,0 +1,19 @@
\begin{tikzpicture}[auto, node distance=2cm]
\node[problem] (pz) {\problem{PZ}};
\node[solution, right of=pz] (r-pz) {T/N};
\node[left of=pz] (i-pz) {$A$};
\node[problem, below of=pz] (mlzp) {\problem{$MLZP_d$}};
\node[solution, right of=mlzp] (r-mlzp) {T/N};
\node[left of=mlzp] (i-mlzp) {$k, L, I$};
\draw[->, alpha, left] (i-pz) -- node[right] {$f$} (i-mlzp);
\draw[->] (pz) -- (r-pz);
\draw[->] (mlzp) -- (r-mlzp);
\draw[->] (i-pz) -- (pz);
\draw[->] (i-mlzp) -- (mlzp);
\draw[Implies-Implies, double distance=2pt] (r-pz) -- (r-mlzp);
\end{tikzpicture}

15
gfx/ss-redukcje.tex Normal file
View File

@ -0,0 +1,15 @@
\def\n{6}
\def\radius{2cm}
\begin{tikzpicture}[NPC/.style = {color=white, draw, fill=black}, P/.style = {draw=black}]
\foreach \i/\kind [count=\xi] in {a/NPC,b/P,c/NPC,d/NPC,e/P,f/NPC}
\node[\kind, circle] (\i) at ({-360/\n * (\xi)}:\radius) {$\Pi_\i$};
\foreach \u/\v in {a/c,a/d,a/f,c/d,c/f,d/f,b/c,b/d,b/e,b/f,e/f,f/a,f/c,f/d,d/c,d/a,c/a,e/b,b/a,e/d,e/c,e/a}
\draw[->] (\u) edge[bend right=10] (\v);
\foreach \u/\v in {}
\draw[->] (\u) edge[bend right=10] (\v);
\node[NPC, circle, label={right:Problem \NPC}] at (4, .5) {$\Pi$};
\node[P, circle, label={right:Problem \P}] at (4, -.5) {$\Pi$};
\end{tikzpicture}

View File

@ -20,6 +20,10 @@
\usepackage{alphalph}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{wrapfig}
\usepackage[polish]{babel}
\usepackage{braket}
\usepackage{subcaption}
\DeclarePairedDelimiter\ceil{\lceil}{\rceil}
\DeclarePairedDelimiter\floor{\lfloor}{\rfloor}
@ -46,30 +50,54 @@
\newcounter{task}[section]
\newcounter{subtask}[task]
\newcounter{tip}[task]
\newcounter{note}[task]
\let\oldthetask\thetask
\let\oldthesubtask\thesubtask
\renewcommand{\thesubtask}{\alph{subtask}}
\renewcommand{\thetask}{\thesection.\oldthetask}
\renewcommand{\thetip}{\#\arabic{tip}}
\renewcommand{\thenote}{\#\arabic{note}}
\makeatletter
\newcommand{\note@nostar}[1]{\refstepcounter{note}\par\noindent\textbf{Uwaga \thenote:} #1\par}
\newcommand{\note@star}[1]{\par\noindent\textbf{Uwaga:} #1\par}
\newcommand{\note}{\@ifstar\note@star\note@nostar}
\newcommand{\tip@nostar}[1]{\refstepcounter{tip}\par\noindent\textit{Wskazówka \thetip:} #1\par}
\newcommand{\tip@star}[1]{\par\noindent\textit{Wskazówka:} #1\par}
\newcommand{\tip}{\@ifstar\tip@star\tip@nostar}
\makeatother
\newcommand{\NP}{\texttt{NP}\xspace}
\newcommand{\NPC}{\texttt{NPC}\xspace}
\newcommand{\NPI}{\texttt{NPI}\xspace}
\renewcommand{\P}{\texttt{P}\xspace}
\newcommand{\problem}[1]{\texttt{#1}}
\newcommand{\problem}[1]{{\tt #1}}
\newcommand{\taskend}{\par\vspace{.1cm}\hfill$\square$\vspace{.4cm}\par}
\newcommand{\task}{\vspace{.25cm}\refstepcounter{task} \noindent\par\texttt{Zadanie \thesection.\thetask.\hspace{.1cm}}}
\newcommand{\task}{\vspace{.25cm}\refstepcounter{task} \noindent\par\texttt{Zadanie \thetask.\hspace{.25cm}}}
\newcommand{\subtask}[1][]{\refstepcounter{subtask}\par\noindent\hspace{.3cm}\thesubtask#1)\ }
\newcommand{\solution}{\par\vspace{.5cm}\noindent\textbf{Proponowane rozwiązanie:}\par}
\newcommand{\tip}[1]{\par\noindent\textit{Wskazówka:} #1\par}
\newcommand{\ctip}[1]{\refstepcounter{tip}\par\noindent\textit{Wskazówka \#\thetip:} #1\par}
\newcommand{\alphareduction}[2]{#1\ $\alpha$\ #2}
\newenvironment{shortcut}{\vspace{.4cm}\noindent\textbf{Na skróty:}\vspace{2mm}\hline\vspace{.4cm}}{\vspace{.4cm}\hline\vspace{.4cm}}
\newenvironment{column}[1]{\begin{minipage}{#1\linewidth}}{\end{minipage}\vspace{.5\baselineskip}}
\newenvironment{shortcut}
{\vspace{\baselineskip}\hbox{\textbf{Na skróty:}}\nointerlineskip\kern3pt\noindent\hrulefill\par\vspace{.5\baselineskip}}
{\par\noindent\hrulefill\par\vspace{.5\baselineskip}}
\newenvironment{column}[1]{\noindent\begin{minipage}{#1\linewidth}}{\end{minipage}\vspace{.5\baselineskip}}
\floatname{algorithm}{Program}
% \setlength{\parskip}{.5em}
\begin{document}
\input{./2013.01.26.tex}
\input{./2011.01.18.tex}
\input{2013.01.26.tex}
\input{2011.01.18.tex}
\input{2018.bonus.tex}
\input{2018.01.25.tex}
\end{document}