Kolokwium z 2013, bonus z 2018 i zadania dodatkowe z ćwiczeń
This commit is contained in:
parent
8b47f59936
commit
40f70b363e
287
2011.01.18.tex
287
2011.01.18.tex
@ -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
|
||||
|
@ -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
52
2018.01.25.tex
Normal 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
277
2018.bonus.tex
Normal 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}
|
12
gfx/gwiazda-spinajaca-2.tex
Normal file
12
gfx/gwiazda-spinajaca-2.tex
Normal 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
11
gfx/gwiazda-spinajaca.tex
Normal 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
10
gfx/mec-1.tex
Normal 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
10
gfx/mec-2.tex
Normal 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
12
gfx/mgp-5c.tex
Normal 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
14
gfx/mgp-6c.tex
Normal 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
19
gfx/pz-mlzp.tex
Normal 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
15
gfx/ss-redukcje.tex
Normal 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}
|
44
main.tex
44
main.tex
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user