%! 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}