Matching in bipartiten Graphen: Der Hopcroft-Karp-Algorithmus Technische Universität München
Bipartiter Graph

Wie groß ist das maximale Matching?

Bipartites Matching

Eine mögliche Anwendung für das bipartite Matching-Problem ist die Zuordnung von Studenten und Arbeitsstellen. Das Problem wird mittels eines bipartiten Graphen modelliert. Die Studenten und Arbeitsstellen werden durch zwei Knotenmengen dargestellt. Die Kanten repräsentieren mögliche Zuordnungen bzw. Qualifikationen. Das Ziel ist, möglichst viele passende Zuordnungen zu finden, wobei die Studenten nur eine Stelle annehmen können und die Stellen nur einmal vergeben wird.

Sei ein ungerichteter Graph \( G=(V,E)\) gegeben. Eine Teilmenge \(M \subseteq E\) heißt Matching, falls keine zwei Kanten aus M einen Knoten gemeinsam haben. Ein Matching M heißt maximal, falls die Kardinalität von M maximal unter allen möglichen Matchings ist. In vielen Anwendungen müssen häufig Elemente aus verschiedenen Klassen kombiniert werden. Wenn genau zwei Klassen existieren, so nennt man dieses Problem Bipartites Matching.

Hier wird der Hopcroft-Karp-Algorithmus veranschaulicht, der das Problem der maximalen Matchings auf bipartiten Graphen löst.

Was möchtest du zuerst tun?

SVG Download

Legende

Knoten Knoten
Knoten Kante

Legende

Auf welchem Graph soll der Algorithmus ausgeführt werden?

Nimm ein fertiges Beispiel!

Ändere den Graphen nach deinen Vorstellungen:

  • Der Graph besteht aus zwei Knotenmengen und Kanten zwischen diesen Knotenmengen.
  • Um einen Knoten in einer Knotenmenge zu erstellen, mache einen Doppelklick in der Nähe dieser Knotenmenge. Es können maximal 8 Knoten in je einer Knotenmenge erstellt werden.
  • Um eine Kante zu erstellen, klicke zunächst auf den Ausgangsknoten und dann auf den Zielknoten.
  • Du kannst nur Kanten zwischen verschiedenen Knotenmengen einfügen.
  • Ein Rechtsklick löscht Kanten und Knoten.

Lade den veränderten Graphen herunter:

Download

Lade einen existierenden Graphen hoch:

Ein

trat auf beim Lesen der Datei:

Fehlerbeschreibung:

                    

Was nun?

SVG Download

Legende

MatchedNode gematchter Knoten
Knoten Matching-Kante

Legende

Status des Algorithmus

BEGIN

M := ∅

REPEAT

l := Länge des kürzesten

Augmentationsweges

Ρ := {P1,...,Pk} inklusions-maximale

Menge knotendisjunkter

Augmentationswege der Länge l

M := M ⊕ (P1 ∪ P2 ∪ ... ∪ Pk)

UNTIL Ρ = ∅

RETURN M

END

Beim Wechsel des Tabs wird der Algorithmus abgebrochen.

Du kannst die Anwendung in einem anderen Browserfenster öffnen, um parallel einen anderen Tab zu lesen.

SVG Download

Legende

<
MatchedNode gematchter Knoten
Knoten Matching-Kante

Legende

Prüfe dein Wissen: Wie würde der Algorithmus entscheiden?

BEGIN

M := ∅

REPEAT

l := Länge des kürzesten

Augmentationsweges

Ρ := {P1,...,Pk} inklusions-maximale

Menge knotendisjunkter

Augmentationswege der Länge l

M := M ⊕ (P1 ∪ P2 ∪ ... ∪ Pk)

UNTIL Ρ = ∅

RETURN M

END

In diesem Teil kannst du dein Wissen testen: Wie würde der Algorithmus entscheiden?

Der Algorithmus wird normal ausgeführt, stoppt aber an einigen Stellen. Du musst dann vorhersagen, wie der Algorithmus entscheiden würde.

Tipp: Vorher nochmals die Beschreibung des Algorithmus durchlesen.

Beim Wechsel des Tabs wird die Aufgabe abgebrochen.

Du kannst die Anwendung in einem anderen Browserfenster öffnen, um parallel einen anderen Tab zu lesen.

SVG Download

Legende

Knoten gematchter Knoten.
Knoten Matching-Kante.

Legende

Versuche die Augmentationswege selbst zu finden

Versuche die Augmentationswege selbst zu finden.

Der Hopcroft-Karp-Algorithmus nutzt Augmentationswege, um ein maximales Matching zu finden. In dieser Aufgabe kannst du selbst mit Augmentationswegen experimentieren.

Der Algorithmus stoppt an einigen Stellen, an denen du einen Augmentationsweg einzeichnen musst. Dabei ist es nicht notwendig den kürzesten Augmentationsweg einzuzeichnen. Du kannst selbst entscheiden, welchen Augmentationsweg du nutzen möchtest.

Beim Wechsel des Tabs wird die Aufgabe abgebrochen.

Du kannst die Anwendung in einem anderen Browserfenster öffnen, um parallel einen anderen Tab zu lesen.