diff --git a/übung_5/agt_übung_5.pdf b/übung_5/agt_übung_5.pdf index d9498c3..cbf3b40 100644 Binary files a/übung_5/agt_übung_5.pdf and b/übung_5/agt_übung_5.pdf differ diff --git a/übung_5/aufgabe_1.tex b/übung_5/aufgabe_1.tex index 77ac72d..665e6d9 100644 --- a/übung_5/aufgabe_1.tex +++ b/übung_5/aufgabe_1.tex @@ -1,3 +1,5 @@ +\newcommand{\OPT}{\mathrm{OPT}} + \section{Paarungen (Matchings) in Bäumen} \begin{tasks} \item @@ -13,42 +15,68 @@ gematcht werden kann. Also ist ein perfektes Matching im Baum eindeutig, da jedes Blatt mit seinem - Elternknoten gematcht werden muss. Die Kante ist sicher im Matching enthalten - und kann aus dem Graphen entfernt werden. So entsteht ein neues Blatt, für das + Elternknoten gematcht werden muss. Diese Kante $uv$ ist sicher im Matching enthalten und alle zu $u$ oder $v$ inzidenten Kanten können aus dem Baum gelöscht werden. So entsteht ein neues Blatt, für das die selbe Regel gilt. \points{3} \item Der \autoref{alg:treematching} berechnet ein größtes Matching. - Der Algorithmus ist korrekt, da der Baum $T$ entweder eine gerade Anzahl an - Knoten hat, und somit ein perfektes Matching berechnet (Siehe \autoref{1a}) oder genau einen Knoten - zu wenig hat und somit das größte Matching um eins kleiner ist, als das perfekte - Matching des nächst größeren Baums. + Der Algorithmus ist korrekt, da der Baum $T$ entweder ein perfektes Matching + enthält und somit ein perfektes Matching berechnet (Siehe \autoref{1a}), + oder I dont fucking know. - Die Laufzeit liegt in $\Oh(E)$, da jede Kante maximal einmal zum Matching hinzugefügt - und dann aus dem Baum entfernt wird. + Die Laufzeit für \algt{Initialize} liegt in $\Oh(V)$, da sich der Baum in linearer Zeit augmentieren lässt und es $\abs{V} - 1$ viele Kanten gibt. + + Die Laufzeit für \algt{MatchaTeeRec} liegt in $\Oh(V)$. Der Algorithmus wird genau + einmal für jeden Knoten aufgerufen. Wenn eine Kante zum + Match\-ing hinzugefügt wird, werden die Knoten und Kanten aus dem Baum gelöscht + die nicht mehr zum Matching hinzugefügt werden können und somit + nicht mehr bearbeitet werden. + + Also liegt auch \algt{MatchaTee} in $\Oh(V)$. \begin{algorithm} \centering \caption{Größtes Matching in Bäumen} \label{alg:treematching} \begin{algorithmic} \alg{MatchaTee}{$T = \tup{V, E}$} \+ \\ - \com{Wurzeln} \\ - $r \gets V[1]$ \\ - \com{Wenn Knoten Blatt ist, dann die Kante zum Elternknoten zurückgeben.} \\ - if $deg(r) = 1$ then \+ \\ - \com{Die Kante aus dem Baum entfernen.} \\ - $E \gets E \setminus \set{\set{r, Adj[r]}}$ \\ - $V \gets V \setminus \set{r}$ \\ - return $\set{\set{r, Adj[r]}}$ \- \\ + \com{Den ungerichten Baum zu einem gerichteten Baum mit $parent$ und} \\ + \com{$children$ pro Knoten und einer Wurzel $root$ augmentieren.} \\ + \alg{Initialize}{$T$} \\ + return \alg{MatchaTeeRec}{$T$, $T.root$} \- \\ + \\ + \alg{MatchaTeeRec}{$T$, $r$} \+ \\ \com{Rekursiv für die Kinder aufrufen} \\ $m \gets \emptyset$ \\ - foreach $v \in Adj[r]$ do \+ \\ - $m \gets m \cup \text{\alg{MatchaTee}{T}}$ \- \\ + foreach $v \in r.children$ do \+ \\ + $m \gets m \cup \text{\alg{MatchaTeeRec}{T, v}}$ \- \\ + \com{Wenn Knoten Blatt ist, dann die Kante zum Elternknoten hinzufügen.} \\ + if $r \neq nil$ and $deg(r) = 1$ then \+ \\ + \com{Die Knoten und inzidente Kanten aus dem Baum entfernen.} \\ + $T \gets T \setminus \set{r.parent, r.parent.children}$ \\ + $m \gets m \cup \set{\set{r, r.parent}}$ \- \\ return $m$ \end{algorithmic} \end{algorithm} \points{5} \item + Wenn eine Kante $rv$ zu einem Matching hinzugefügt wird, kann keine zu $v$ + inzidente Kante hinzugefügt werden. Das müssen wir auch bei unserem dynamischen + Programm beachten. + \[ + \OPT(r) = \max_{v \in r.children} + \begin{cases} + rv + \sum_{i \in v.children} \OPT(i) + \sum_{j \in r.children \setminus v} \OPT(j) \\ + \sum_{k \in r.children} \OPT(k) + \end{cases} + \] + + Der Algorithmus hält sich an die Eigenschaften eines Matchings, also ist + er korrekt. + + Der Algorithmus probiert alle Kindknoten von $r$ aus. Geht man mit $r$ im Baum von + unten nach oben sind das also höchstens so viele Iterationen wie, Knoten im Baum + existieren (ohne die Blätter). Also läuft das Dynamische Programm in $\Oh(V)$. + \points{5} \end{tasks}