61 lines
2.4 KiB
TeX
61 lines
2.4 KiB
TeX
\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}
|
|
|
|
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*|$$
|
|
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$$
|
|
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.\\
|
|
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$$
|
|
$\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$$
|
|
$\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}
|