agt_exercise/übung_5/aufgabe_1.tex
2026-05-23 23:08:56 +02:00

54 lines
2 KiB
TeX

\section{Paarungen (Matchings) in Bäumen}
\begin{tasks}
\item
\label{1a}
Ein Baum ist ein kreisfreier, zusammenhängender Graph. Ein Baum besitzt ein
perfektes Matching genau dann, wenn die Anzahl der Knoten gerade ist und
jedes Blatt keine Geschwisterknoten hat.
Die Anzahl der Knoten muss gerade sein, da in einem perfekten Match\-ing jeder
Knoten mit einem anderen gematcht wird.
Jedes Blatt muss Einzelblatt sein, da der Elternknoten nur mit einem Blatt
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
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.
Die Laufzeit liegt in $\Oh(E)$, da jede Kante maximal einmal zum Matching hinzugefügt
und dann aus dem Baum entfernt wird.
\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{Rekursiv für die Kinder aufrufen} \\
$m \gets \emptyset$ \\
foreach $v \in Adj[r]$ do \+ \\
$m \gets m \cup \text{\alg{MatchaTee}{T}}$ \- \\
return $m$
\end{algorithmic}
\end{algorithm}
\points{5}
\item
\points{5}
\end{tasks}