diff --git a/Berechenbarkeits-KomplexTh/Berechenbarkeits-KomplexTh.tex b/Berechenbarkeits-KomplexTh/Berechenbarkeits-KomplexTh.tex index 5797351..3ca4e33 100644 --- a/Berechenbarkeits-KomplexTh/Berechenbarkeits-KomplexTh.tex +++ b/Berechenbarkeits-KomplexTh/Berechenbarkeits-KomplexTh.tex @@ -7,6 +7,7 @@ \usepackage{multicol} \usepackage{framed} \usepackage{enumerate} +\usepackage{wrapfig} %\usepackage{booktabs} %\usepackage{pstricks} %\usepackage{pst-node} @@ -55,6 +56,7 @@ \newcommand{\bew}[1][]{\textcolor{greenblue}{\textbf{Beweis}}#1:} \newcommand{\bsp}{\textcolor{lightgreen}{\textbf{Bsp.: }}} \newcommand{\beh}{\textcolor{lightblue}{\textbf{Beh.:}}} +\newcommand{\lemma}{\textbf{Lemma:}} \newcommand{\rrfloor}{\right\rfloor} \newcommand{\llfloor}{\left\lfloor} @@ -873,7 +875,7 @@ \(M_B\) nichtdeterministisch \(\Rightarrow M_A \) nichtdeterministisch. Zeit bleibt unverändert. \defin \(A,B\) heißen (\underline{polynomiell}) \underline{äquivalent}, schreibe \( A \equiv^P B\), falls \(A\le^P B\) und \(B\le^P A\).\\ - \underline{Lemma}: \(\equiv^P\) ist Äquivalentzrelation.\\ + \lemma \(\equiv^P\) ist Äquivalentzrelation.\\ \bew (R) \(A \equiv^P A\), da \(A\le^P A\) mittels \(f(x)=x\).\\ (S) \( A \equiv^P V \Rightarrow B \equiv^P A \) \(\Box\)\\ (T) \( A\le^P B\) und \(B \le^P C \Rightarrow A\le^P C \) @@ -956,7 +958,7 @@ Dann gilt:\\ zu jeder akzeptierenden Rechnung von \(M(x)\) gibt es eine zugehörige Belegung der Variablen von \(F_x\), die \(F_x\) erfüllt, und umgekehrt. - Es gilt also: \(M(x)\) hat gleichviele akzeptierende Rechnungen wie \(F_x\) erfüllende Belegungen.\\ + Es gilt also: \(M(x)\) hat gleich viele akzeptierende Rechnungen wie \(F_x\) erfüllende Belegungen.\\ Insbesondere gilt also:\\ \spa \( x\in L(M) \Leftrightarrow F_x \in SAT \quad \Box\) @@ -1396,5 +1398,230 @@ \item Ordne Job $i$ dem Prozessor zu, der aktuell die kleinste Ladung hat. \end{itemize} - Sei $T$ die maximale Laufzeit, + Sei $T$ die maximale Laufzeit bei der Greedy-Strategie und sei $T^*$ die Laufzeit bei der optimalen Lösung.\\ + Für $T$ gilt: + \begin{enumerate}[1)] + \item $T^* \ge \frac1m \sum\limits_{i=1}^{n} t_i $ + \item $T^* \ge \underset{i}{\text{max }} t_i$ + \end{enumerate} + + Für $T$ gilt: + \begin{addmargin}[1cm]{0cm} + Nach Ausführung von Greedy habe Prozess $i$ Ladung $T_i$.\\ + Sei $i_0$ ein Prozessor mit $T_{i_0} = T$.\\ + Sei Job $j$ der letzte Job, der Prozess $i_0$ zugewiesen wurde.\\ + D.\,h. alle anderen Prozessoren haben zu diesem Zeitpunkt bereits eine größere Ladung. Es gilt also $T_i \ge T_{i_0} - t_j \forall i $\\ + $\Rightarrow \underbrace{\sum\limits_{i=1}^n T_i}_{=\sum\limits_{i=1}^n ti} \ge m ( \underbrace{T_{i_0}}_{=T} - t_j ) $\\ + $\Rightarrow \sum\limits_{i=1}^m T_i \ge m ( T-T_j)$\\ + $\Rightarrow \frac1m \sum\limits_{i=1}^{m} t_i \ge T-t_j $\\ + $\Rightarrow T \le \underbrace{\frac1m \sum\limits_{i=1}^{m} t_i}_{\le T^*} + \underbrace{t_j}_{\le T^*} $\\ + $\Rightarrow$ \fbox{$T \le 2 T^*$} + \end{addmargin} + + \bsp $t_i = 1, i=1,…,n-1$\\ + $t_n = m$\\ + \includegraphics{bilder/mps.eps}\\ + wähle $n = m (m-a) +1$\\ + $T = 2m-1$\\ + $T^* = m$ + + Greedy-Sortiert: + \begin{itemize} + \item sortiere Jobs, so dass\\ + $t_1 \ge t_2 \ge … \ge t_n$ + \item dann wie Greedy + \end{itemize} + \lemma $ 2t_{m+1} \le T^* $\\ + \bew Betrachte Jobs $1,…,m+1$\\ + Nach Schubfachschluss hat ein Prozessor $\ge 2$ Jobs (bei optimaler Lösung), d.\,h. Laufzeit $\ge \underbrace{t_i}_{\ge t_{m+1}} + \underbrace{t_j}_{\ge t_{m+1}}$ + + Gleiche Überlegung wie oben:\\ + \begin{addmargin}[1cm]{0cm} + Prozessor $i_0$ mit maximaler Ladung $T$.\\ + Prozessor $i_o$ habe $\ge2$ Jobs.\\ + (Hätte Prozessor $i_0$ nur einen Job, dann ist $T=t_j=T^*$)\\ + Es ist $j\ge m+1$, also $t_j \le t_{m+1}$, wobei Job $j$ wieder der letzte Job ist, der Prozessor $i_0$ zugewiesen wurde. + \end{addmargin} + + Abschätzung von vorher:\\ + $ T \le \underbrace{\frac1m \sum\limits_{i=1}^{n} t_i}_{\le T^*} + \underbrace{t_j}_{\le t_{m+1} \le \frac{T^*}{2}} $ + + \subsection{Vortex Cover} + + % TODO VL vom 11.1.12 vervollständigen + \includegraphics{bilder/vertex_cover.eps} + Greedy: + \begin{itemize} + \item wähle Knoten $v$ mit maximalem Grad + \item entferne $v$ (mit seinen Kanten) + \item wiederhole + \end{itemize} + + \bsp\\ + \includegraphics{bilder/vertex_cover_2.eps} + \begin{align*} + deg(a_i) &= 1\\ + deg(b_i) &= (n-2) +1 = n-1\\ + deg(c_i) &= n + \end{align*} + Greedy wählt $c_1,c_2,…,c_{n-2}$, $a_1,a_2,…,a_n$, insgesamt als $2n-2$ Knoten.\\ + Optimal wäre $b_1,…,b_n$ zu nehmen, also n Knoten. + + \bsp\\ + \includegraphics{bilder/vertex_cover_3.eps} + \begin{align*} + N &= \sum\limits_{i=2}^{n} \lfloor \frac n i \rfloor\\ + &\ge \sum\limits_{i=2}^{n} (\frac n i -1 )\\ + &= \sum\limits_{i=2}^{n} \frac n i - (n-1)\\ + &= n * \underbrace{ \sum\limits_{i=2}^{n} \frac1i}_{\ge \ln -1} -(n-1) + \end{align*} + + $\big[$ Harmonische Reihe $\ln n \le \sum\limits_{i=1}^{n} \le \ln n +1 \big]$\\ + $\Rightarrow N\ge n(\ln n-1) -n+1$\\ + $= n \ln n - 2n+1$\\ + greedy nimmt $c_N,c_{N-1},…,1$, $a_1,…,a_n$, also $N+n$ Knoten.\\ + Verhältnis: $ \frac{N+n}{2} = \frac{n \ln n - n +1}{n} = \ln n -1 +\frac 1n $\\ + D.\,h. die Strategie kann beliebig schlecht werden. + + \includegraphics{bilder/vortex_cover_4.eps} + + \begin{enumerate}[1)] + \item $C\leftarrow \emptyset$ + \item wähle beliebige Kante $(u,v)$ + \item $C \leftarrow C \cup \{ u,v\}$ + \item $G \leftarrow G - u,v$ + \item wiederhole bis $G$ leer ist (2-4). + \end{enumerate} + + Da eine vertex cover \underline{jede} Kante abdecken muss, ist auch in einer optimalen Lösung mindestens einer der beiden Endpunkte $u$ oder $v$ enthalten. + \[ \underbrace{|C|}_{\text{vc. vom Approx Alg.}} \le 2 \underbrace{|C^*|}_{\text{optimale Lösung}} \] + + Besser: mit Approx Faktor $2-\frac{2}{\sqrt{u}}$ für eine Konstante $c$. + + \subsection{Traveling Salesman Problem} + + \subsubsection{Nearest Neighbor (NN)} + + gehe immer zum nächstliegenden noch nicht besuchten Punkt.\\ + \includegraphics{bilder/tsp_nn.eps} + + Metrik: $d$ erfüllt die Dreiecksungleichung\\ + \includegraphics{bilder/tsp_dreieck.eps}\\ + $ d(x,y) \le d(x,z) + d(z,y) $ + + \includegraphics{bilder/tsp_nn_2.eps}\\ + Allgemein: + \begin{align*} + T &= \text{NN-Lösung}\\ + T^* &= \text{optimale Lösung}\\ + |T| &\le \log_n |T|^* + \end{align*} + (TSP mit $\triangle$-Ungleichung) + + \subsubsection{Nearest Insertion} + + bilde Kreis und füge Knoten ein + \begin{itemize} + \item Start mit 3 (beliebigen) Knoten und verbinde zu Dreieck. + \item wähle Knoten $v$ der noch nicht Besucht ist und füge $v$ in den Kreis ein. + \end{itemize} + + Auswahl von $v$:\\ + \includegraphics{bilder/tsp_ni.eps} + + wähle $v$ mit minimalem Abstand zum Kreis: + \[ d(c,v) = min d(u,v) \quad u \in V\] + füge $v$ so ein, dass sich der Kreis möglichst wenig verlängert. D.\,h. wähle Nachbar $w$ von $v$ so, dass + \[ Cost(v) = d(u,v) + d(v,w) - d(u,w) \] + minimal ist. + + Noch $\triangle$-Ungleichung ist + \begin{align*} + d(v,w) \le d(u,v) + d(u,w)\\ + \Rightarrow d(v,w) - d(u,w) \le d(u,v)\\ + \Rightarrow cost(v) \le 2*d(u,v) + \end{align*} + + \begin{itemize} + \item Wiederhole Insertion-Schritt bis alle Knoten im Kreis sind. + \end{itemize} + + \beh Sei $C$ der Kreis der durch NI berechnet wird und $C^*$ eine optimale TSP-Tour.\\ + Dann ist $d(C) \le 2 * d(C^*) $\\ + $ d(C) = \sum\limits_{(u,v) \in C} d(u,v) $ + + \bew Vergleich mit der Berechnung aufspannender Bäume, wähle jeweils Knoten $v$ der am nächsten zum aktuellen Baum liegt.\\ + NI wählt ebenfalls diesen Knoten $v$ aus.\\ + \includegraphics{bilder/tsp_ni_bew.eps} + + Aufspannender Baum T vergrößert sich um $d(u,v)$, Kreis vergrößert sich um $cost(v) \le d(u,v)$.\\ + \( \Rightarrow \) am ende gilt: $ d(c) \le 2 * d(T) $ + + Sei $C^*$ Kreis minimaler Länge ( = opt. TSP-Tour ).\\ + \includegraphics{bilder/tsp_ni_bew2.eps}\\ + Lasse irgendeine Kante weg. Dann entsteht ein Baum $T'$, ein aufspannender Baum. Folglich ist $d(T) \le d(T')$, da $T$ minimal ist.\\ + Außerdem ist $d(T') < d(C^*)$\\ + $\Rightarrow d(T) \le d(C^*)$\\ + $\Rightarrow d(C) \le 2 * d(T) \le 2*d(C^*)$\\ + $\Rightarrow $ \fbox{$d(C) \le 2*d(C^*)$} $\Box$ + + Varianten: + \begin{itemize} + \item Farthest Insertion (FI) + \item Random Insertion (RI) + \end{itemize} + + \subsubsection{Christofides} + + \begin{enumerate}[1)] + \item Konstruiere minimal aufspannenden Baum $T$.\\ + Dann ist $d(T) \le d(C^*)$\\ + \includegraphics{bilder/tsp_christofides.eps} + \item verdopple alle Kanten + \item Konstruiere Euler-Tour $E$ (mittels DFS)\\ + $D(E) = 2*d(T) $ + \item Konstruiere daraus TSP-Tour durch Abkürzungen\\ + \includegraphics{bilder/tsp_christofides_2.eps} + \end{enumerate} + + \underline{Verbesserung} + + \includegraphics{bilder/tsp_christofides_adv.eps}\\ + Erweitere T um Kanten, so das jeder Knoten geraden Grad hat. + + Betrachte $U=$ Knoten mit ungeradem Grad in $T$ + + \lemma $|u|$ ist gerade\\ + \bew $ \sum\limits_{v\in V} grad(v) = 2m $ ($m$ = Anzahl Kanten), da in der Summe jede Kante zweimal gezählt wird.\\ + \(\Rightarrow \underbrace{2m}_{\text{gerade}} = \sum\limits_{u\in U} grad(u) + \underbrace{\sum\limits_{v \in V-U} grad(v)}_{\text{gerade}} \)\\ + \(\Rightarrow \sum\limits_{u\in U} grad(u) \) ist gerade\\ + \(\Rightarrow |n|\) gerade + + Verbinde Knoten in $U$ paarweise, so dass die Summe der hinzugefügten Kanten möglichst klein ist. + + Matching auf $U$.\\ + \begin{wrapfigure}{l}{2cm} + \includegraphics{bilder/tsp_christofides_adv_matching.eps} + \end{wrapfigure} + Perfect Matching $M$ ist eine Menge von Kanten, so dass jeder Knoten zu genau einer Kante aus $M$ gehört.\\ + Es gibt effiziente Verfahren zu Berechnung von minimalem perfect Matching. + + Dann weiter wie vorher: konstruiere Eulertour $E$ und daraus TSP-Tour $C$.\\ + Es gilt: $d(E) = d(T) + d(M) \ge d(C)$ + + \includegraphics{bilder/tsp_christofides_adv_kreis.eps} + + Nehme jede zweite Kante\\ + \(\Rightarrow\) perfect Matching $M_1$\\ + Rest ist ebenfalls perfect Matching $M_2$ + \begin{align*} + \Rightarrow d(C^*) &= d(M_1) + d(M_2)\\ + &\ge d(M) + d(M)\\ + &= 2 * d(M)\\ + \Rightarrow d(M) &= \frac12 * d(C^*)\\ + \Rightarrow d(C) &\le d(T) + d(M)\\ + &\le d(C^*) + \frac * d(C^*)\\ + &= \frac32 d(C^*) + \end{align*} + \end{document} diff --git a/Berechenbarkeits-KomplexTh/Makefile b/Berechenbarkeits-KomplexTh/Makefile index 0474773..563f025 100644 --- a/Berechenbarkeits-KomplexTh/Makefile +++ b/Berechenbarkeits-KomplexTh/Makefile @@ -1,3 +1,3 @@ -Berechenbarkeits-KomplexTh.pdf: Berechenbarkeits-KomplexTh.tex bilder/*.xml - for FILE in $(find bilder/ -iname '*.xml') ; do ipetoipe -eps -runlatex ${FILE} ${FILE%.xml}.eps ; done +Berechenbarkeits-KomplexTh: Berechenbarkeits-KomplexTh.tex + cd bilder && make pdflatex Berechenbarkeits-KomplexTh.tex