Maximum Kardinalität Matching-Problem
Einfache Sprache
Problemstellung: Maximum Kardinalität Matching-Problem
Gegeben ein Ungerichteter Graph $G=(V,E)$ finde das Maximum Matching von $G$.
Algorithmus
Algorithmus für Bipartite Graphen
Folgender Algorithmus berechnet das maximum matching für einen Bipartiter Graph $G=(V,E)$. $\mathbin{\vartriangle}$ ist die Symmetrische Differenz.
1def max_matching_on_bipartit_graph(G):
2 """
3 Finds a maximum matching in a bipartit graph.
4
5 Args:
6 G (Graph): The bipartit Graph as a tuple, consisting of a set of vertices and a set of edges.
7
8 Returns:
9 set: A set containing vertecies that together are a maximum matching.
10 """
11 M = set()
12 while True:
13 P = find_aug_path(M, G)
14 if P == None:
15 break
16 else:
17 P = set(P) # Perhaps this is not needed.
18 M = symmetric_difference(M, P)
19 return M
Siehe Hier fürfind_aug_path
.
Wie findet man einen Augmentierender Kantenzug?
Augmentierender Kantenzug im Bipartiter Graph
Korrektheit
Sei $L$ die Menge aller Knoten die von einem unmatched Knoten in $A$ durch ein (gerichteten) Weg in $G'$ erreichbar sind.
Satz Korrektheit maximum matching Algorithmus
Wenn
max_matching_on_bipartit_graph
terminiert, dann ist $C^*:=(A\setminus L)\cup(B\cap L)$ ein Knotenüberdeckung und $|C^*|=|M^*|$, wobei $M^*$ das Endergebnis des Algorithmus ist (also ein matching).
Beweis
$\left[\mathrm{Z\kern-.4em\raise-0.6ex\hbox{Z}}\;C^*\text{ ist eine Knotenüberdeckung} \right]$ Wir nehmen an das $C^*$ keine Knotenüberdeckung ist. Dann existiert ein nicht abgedeckte Kante $e=\{a,b\}\in E$ mit $a\in A\cap L$ und $b\in B\setminus L$.
Wir machen jetzt eine Fallunterscheidung nach $e$:
Falls $e\in E\setminus M^*$: Dann geht $e$ von $A$ nach $B$ in $G'$. Das impliziert das $b$ von einem Knoten $a\in L$ durch $e$ erreicht werden kann. Daher ist $b\in L$ was der Annahme widerspricht.
Falls $e\in M^*$: Dann geht $e$ von $B$ nach $A$ in $G'$ und (nach der Definition von matching) alle anderen Kanten inzident zu $a$ sind nicht in $M^*$, gehen also von $A$ nach $B$ in $G'$. Nach der Definition von $L$ kann $a$ von einem unmatched Knoten in $A$ über einen Weg $P$ in $G'$ erreicht werden. Daraus folgt wieder das $b\in L$ ist, was der Annahme widerspricht.
$\left[\mathrm{Z\kern-.4em\raise-0.6ex\hbox{Z}}\;|C^*|=|M^*| \right]$ "$\leq$": Da jede Größe des Matchings eine untere Schranke für die Größe der minimale Knotenüberdeckung ist, folgt $|C^*|\leq|M^*|$ "$\geq$": Bemerke folgende Fakten:
- Kein Knoten aus $A\setminus L$ ist unmatched (nach Def. $L$).
- Kein Knoten aus $B\cap L$ ist unmatched, da dies ein Weg von einem unmatched Knoten in $A$ zu einem unmatched Knoten in $B$ impliziert, was wiederum eine Augmentierender Kantenzug wär.
- Es existiert keine Kante $e\in M^*$ zwischen $A\setminus L$ und $B\cap L$, da dies $a\in L$ implizieren würde.
Aus 1. und 2. folgt, dass eine Kante $e\in M^*$ für jeden Knoten $v\in C^*$ gibt. Aus 3. folgt, dass Kanten für jeden Knoten unterschiedlich sein müssen. Daraus folgt $|C^*|\geq|M^*|$.
Algorithmus für generelle Graphen
Wichtige Konzepte:
- Flower (Graphentheorie)
- Tutte-Berge Formel Dann kann mit folgendem Satz der Blossom algorithm