diff --git a/übung_6/agt_übung_6.pdf b/übung_6/agt_übung_6.pdf index 684dac0..9f547ba 100644 Binary files a/übung_6/agt_übung_6.pdf and b/übung_6/agt_übung_6.pdf differ diff --git a/übung_6/aufgabe_2.tex b/übung_6/aufgabe_2.tex index ef0c3f1..3d5e438 100644 --- a/übung_6/aufgabe_2.tex +++ b/übung_6/aufgabe_2.tex @@ -18,6 +18,7 @@ \points{1} \end{tasks} +{ \newpage \KOMAoptions{mpinclude=false} \recalctypearea @@ -71,5 +72,4 @@ \caption{Cristofides' Algorithmus} \label{fig:christofides} \end{figure} -\KOMAoptions{mpinclude=true} -\recalctypearea +} diff --git a/übung_6/aufgabe_3.tex b/übung_6/aufgabe_3.tex index f13f25d..1a11ee7 100644 --- a/übung_6/aufgabe_3.tex +++ b/übung_6/aufgabe_3.tex @@ -1,61 +1,72 @@ \section{Matchings in allgemeinen Graphen} \begin{tasks} \item - - \begin{pseudocode} - M = $\emptyset$ - visited = Array von False der Größe $|V|$ // Markiert gematchte Knoten - - for e in E do - if nicht visited[u] und nicht visited[v] then - M = $M \cup \{e\}$ - visited[u] = True - visited[v] = True - return M - \end{pseudocode} +\begin{pseudocode} +Matchings($G = \tup(V, E)$) + $M = \emptyset$ + $visited =$ |Array von $False$ der Größe| $|V|$ // Markiert gematchte Knoten + + for $e$ in $E$ do + if $\neg visited[u] \wedge \neg visited[v]$ then + $M = M \cup \{e\}$ + $visited[u] = True$ + $visited[v] = True$ + return $M$ +\end{pseudocode} - Angenommen M wäre erweiterbar (d.h. es gibt eine Kante \{u,v\} mit u,v $\notin$ V(M)). Dann wurden sowohl u als auch v während des Algorithmus beim Durchlaufen der Kante \{u,v\} als frei angesehen und wäre somit der Menge M hinzugefügt worden. Das ist eine Widerspruch. \\\\ - \textbf{Laufzeit:} \\ - Initialisierung des Arrays: $\Oh(V)$\\ - Schleife: Jede Kante wird genau einmal betrachtet ($\Oh(V)$) und die Überprüfung und Markierung passieren in $\Oh(1)$. Also insgesamt $\Oh(E)$\\ + Angenommen $M$ wäre erweiterbar (d.h. es gibt eine Kante $\{u,v\}$ mit $u,v \notin V(M)$). Dann wurden sowohl $u$ als auch $v$ während des Algorithmus beim Durchlaufen der Kante $\{u,v\}$ als frei angesehen und wäre somit der Menge $M$ hinzugefügt worden. Das ist eine Widerspruch. + + \textbf{Laufzeit:} + + Initialisierung des Arrays: $\Oh(V)$ + + Schleife: Jede Kante wird genau einmal betrachtet ($\Oh(V)$) und die Überprüfung und Markierung passieren in $\Oh(1)$. Also insgesamt $\Oh(E)$ + Das ergibt eine Gesamtlaufzeit von $\Oh(V+E)$ - \points{3} \item - \points{2} + \item - - Sei M das vom Algorithmus berechnete maximale Matching und M* das optimale maximale Matching. \\ - Für jede Kante $e*=\{u,v\}\in$ M* gilt: mindestens einer der beiden Knoten $u$ oder $v$ muss über eine Kante aus M abgedeckt werden, sonst wäre der M nicht nicht-erweiterbar. \\ - Eine Kante aus M hat genau zwei Endknoten und kann daher höchstens zwei verschiedene Kanten aus M* ''blockieren''. Da alle Kanten in M* disjunt sind kann man daraus folgern: - $$ |M*|\leq 2\cdot |M|\quad \Rightarrow\quad |M|\geq \frac{1}{2}|M*|$$ + Sei $M$ das vom Algorithmus berechnete maximale Matching und $M^*$ das optimale maximale Matching. + + Für jede Kante $e^*=\{u,v\}\in M^*$ gilt: mindestens einer der beiden Knoten $u$ oder $v$ muss über eine Kante aus $M$ abgedeckt werden, sonst wäre der $M$ nicht nicht-erweiterbar. + + Eine Kante aus $M$ hat genau zwei Endknoten und kann daher höchstens zwei verschiedene Kanten aus $M^*$ ,,blockieren``. Da alle Kanten in $M^*$ disjunkt sind kann man daraus folgern: + \[ + \abs{M^*} \leq 2\cdot \abs{M} \implies \abs{M} \geq \frac{1}{2} \abs{M^*} + \] Somit ist der Algorithmus aus der Teilaufgabe a) eine 1/2 Approximation für ein optimales Matching. \points{3} \item Zielfunktion: - $$ \arg\min \sum_{e\in E} x_e \geq 1$$ + \[ + \arg\min \sum_{e\in E} x_e \geq 1 + \] Entscheidungsvariablen: für jede Kante $e\in E$: - $$x_e\in\{0,1\}\quad \forall e\in E$$ - Die Variable nimmt den Wert 1 an, wenn die Kante im Matching M ist und 0 falls sie das nicht ist.\\ + \[ + x_e\in\{0,1\}\quad \forall e\in E + \] + Die Variable nimmt den Wert 1 an, wenn die Kante im Matching M ist und 0 falls sie das nicht ist. + Nebenbedingungen: \begin{enumerate} - \item Matching: Jeder Knoten darf von maximal einer Matching-Kante berührt werden - $$\forall v\in V \colon \sum_{e\in \delta(v)}x_e\leq1$$ + \item + Matching: Jeder Knoten darf von maximal einer Matching-Kante berührt werden + \[ + \forall v\in V \colon \sum_{e\in \delta(v)}x_e\leq1 + \] $\delta(v)$ ist die Menge aller Kanten welche an $v$ anliegen \item Nicht-Erweiterbarkeit: Für jede Kante $\{u,v\}$ muss die Summe der Matching-Kanten an $u$ und $v$ mindestens 1 sein - $$ \forall \{u,v\}\in E \colon \sum_{e\in\delta(u)}x_e+\sum_{e'\in\delta(v)}x_e'\geq 1$$ + \[ + \forall \{u,v\} \in E \colon \sum_{e \in \delta(u)} x_e + \sum_{e' \in \delta(v)} x_e' \geq 1 + \] $\delta(v)$ ist die Menge aller Kanten welche an $v$ anliegen. Äquivalent für $\delta(u)$. \end{enumerate} - - \points{3} \item - \points{2} - - \end{tasks}