%! TEX root = main.tex

\section{18.01.2011 kolokwium \#2}

\task{
    \textit{Problem Optymalnego Rozkroju} (\problem{POR}) zdefiniowany jest następująco ,,Dany jest arkusz blachy o wymiarach 
    $d \times sz$ oraz różne wielokąty wypukłe, które należy wykroić z tego arkusza. Czy można wybrać podzbiór 
    tych wielokątów i tak zaplanowac to wykrajanie aby odpady blachy były zerowe?'' W oparciu o problem \textit{Sumy Podzbioru} (\problem{SP})
    udowodnij, że $\problem{POR} \in \NPC$
}

\solution
Tak jak w poprzednio, aby udowodnić, że problem należy do klasy \NP, powinniśmy sprawdzić czy jesteśmy w stanie sprawdzić poprawność rozwiązania
w czasie wielomianowym. Jeżeli za certyfikat przyjmiemy wielokąty w postaciu listy punktów i krawędzi to sprawdzenia można dokonać 
w czasie wielomianowym - wystarczy sprawdzić, że żaden wierzchołek nie znajduje się w żadnym innym wielokącie a suma pól wielokątów
jest równa $sz \times d$. Obie te operacje są wykonywalne w czasie wielomianowym.

W zadaniu excplicite zostało podane, że musimy zredukować problem \textit{Sumy Podzbioru} do naszego problemu \problem{POR}, i faktycznie wybór ten jest nieprzypadkowy. 
Na wstępie przypomnijmy: problem \textit{Sumy Podzbioru} to pytanie ,,Czy w danym (multi)zbiorze $A$ istnieje podzbiór $B$ ($B \subseteq A$) taki, że suma elementów $B$ jest równa $n$?''.
Naszkicujmy schemat $\alpha$-redukcji dla tego problemu.

\begin{figure}[H]
    \centering
    \input{gfx/sp-por.tex}
    \caption{Schemat $\alpha$-redukcji z \problem{SP} do \problem{POR}, gdzie $W$ to zbiór wielokątów.}
\end{figure}

Wyobraźmy sobie problem \problem{SP} jako problem \problem{POR} tylko w jednym wymiarze - mamy odcinki różnej długości, 
pytanie brzmi czy jesteśmy z nich w stanie skonstruować odcinek o długości dokładnie $l$?

\begin{figure}[H]
    \centering
    \input{gfx/por-1.tex}
    \caption{W tym wypadku multizbiór $A = \{ 1, 3, 2, 5, 4, 2, 1 \}$, a poszukiwana długość $n = 6$}
\end{figure}

Podejście takie powinno być dość intuicyjne i proste do wyprowadzenia. Aby przelożyć problem na 2 wymiary wystarczy, że 
rozpatrzymy prostokąty o stałej szerokości równej szerokości blachy, i zmiennej długości.

\begin{figure}[H]
    \centering
    \input{gfx/por-2.tex}
    \caption{Ten sam multizbiór przedstawiony w formie problemu w 2 wymiarach.}
\end{figure}

Dla uproszeczenia, załóżmy że nasza długość $d = 1$, w takim wypadadku aby przekstałcić zbiór $A$ musimy utworzyć prostokąty o wymiarach $a_1 \times 1$, $a_2 \times 1$, itd.
Czyli z $\alpha$-redukcji utrzymalibyśmy następujące parametry: $W = \text{wygenerowane prostokąty}$, $sz = n$, $d = 1$. Jak dowiedliśmy powyżej, takie przekształcenie zachowuje problem.
\taskend

\task{
    Problem \textit{Ważonego Pokrycia Wierzchołkowego} (\problem{WPW}) zdefiniowany jest następująco: ,,Dany jest graf $G_w$ z obciążonymi 
    wierzchołkami (tj. wierzchołki mają wagi) oraz próg $p$; czy w $G_w$ istnieje pokrycie wierzchołkowe o łącznej wadze $\leq p$.
    Udowodnij, że $\problem{WPW} \in \NPC$
}

\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 
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}). 
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. 

\begin{figure}[H]
    \centering
    \input{gfx/pw-wpw.tex}
    \caption{Schemat $\alpha$-redukcji z problemu \problem{PW} do \problem{WPW}}
\end{figure}

\begin{minipage}{.5\linewidth}%
    \begin{figure}[H]
        \centering
        \input{gfx/wpw-1.tex}
        \caption{Przykładowy graf nieważony $G$}
    \end{figure}
\end{minipage}%
\begin{minipage}{.5\linewidth}%
    \begin{figure}[H]
        \centering
        \input{gfx/wpw-2.tex}
        \caption{Przykładowy graf ważony $G_W$}
    \end{figure}
\end{minipage}
\\\\

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 
łą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
grafu $p = n$ mamy pewność, że taka $\alpha$-redukcja zachowuje problem.
\taskend

\task{Graf planarny jest maksymalny, gdy dodanie jakiejkolwiek krawędzi łączącej niesąsiednie wierzchołki psuje jego 
planarność. \textit{Maksymalny Graf Planarny} (\textbf{MGP}) jest 3-barwny wtedy, gdy jest eulerowski.}
\subtask{Narysuj \textbf{MGP} o 5 wierzchołkach i pokoloruj go optymalnie.}
\subtask{Narysuj \textbf{MGP} o 6 wierzchołkach i pokoloruj go optymalnie.}
\subtask{Przyjmując, że \textbf{MGP} dany jest w postaci macierzy sąsiedztwa wierzchołków, naszkicuj algorytm dla 
wyznaczania jego liczby chromatycznej i oszacuj jego złożonosć przy użyciu symbolu $\Theta$}

\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:

\begin{enumerate}[a)]
    \item Cykl łączący wszystkie wierzchołki
    \item W środku powstałego wielokąta łączymy niepołączone wierzchołki "zygzakiem"
    \item Pozostałe wierzchołki łączymy na zewnątrz.
\end{enumerate}

\begin{figure}[H]
    \centering
    \input{gfx/mgp-5.tex}
    \caption{Kolejne etapy rosyowania grafu planarengo 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}
\end{figure}

\begin{shortcut}
    Twierdzenie Kuratowskiego mówi nam, że graf jest planarny wtedy i tylko wtedy kiedy nie zawiera podgrafu $K_5$ 
    i $K_{3,3}$ (dwudzielnego 3 na 3). 
    
    \begin{column}{.5}%
        \begin{figure}[H]
            \centering
            \input{gfx/k3-3.tex}
            \caption{Przykładowy graf nieważony $G$}
        \end{figure}
    \end{column}%
    \begin{column}{.5}%
        \begin{figure}[H]
            \centering
            \input{gfx/k5.tex}
            \caption{Przykładowy graf ważony $G_W$}
        \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.
\end{shortcut}
