Algorithmus von Hopcroft und Karp

ein Algorithmus zum Finden einer größten Paarung eines Graphen
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 21. September 2006 um 13:39 Uhr durch HeikoTheissen (Diskussion | Beiträge) (Datierung laut http://www.ti.ethz.ch/as/teaching/ss05/graph_algo/skript.pdf). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Der Algorithmus von Hopcroft und Karp (1973 von John E. Hopcroft und Richard M. Karp entwickelt) dient in der Graphentheorie zur Bestimmung einer größten Paarung in einem bipartiten Graphen.

Augmentierende Pfade

Ist zu einem bipartiten Graphen   eine Paarung   gegeben, so betrachten wir zusammenhängende Teilgraphen, die keinen Kreis enthalten (sog. Bäume) und die bestehen aus

(a) einem ungepaarten Knoten als Wurzel und
(b) gepaarten Knoten, die sich von der Wurzel aus innerhalb des Baumes erreichen lassen auf alternierenden Pfaden gerader Kantenzahl (alternierend heißt, dass die Kanten des Pfades abwechselnd zu   gehören und nicht zu   gehören).

Eine Vereinigung solcher Bäume, die keine gemeinsamen Knoten haben, heißt Wald. Die Knoten, bei denen die Pfade eines Baumes enden, heißen Blätter.

Wenn Blätter   und   aus zwei verschiedenen Bäumen innerhalb eines Waldes durch die Kante   verbunden sind, so kann diese Kante nicht zu   gehören, denn die Blätter sind ja schon durch eine andere Kante innerhalb des Baumes gepaart (es sei denn, der Baum besteht nur aus der Wurzel, die sowieso ungepaart ist). Der Pfad mit Kantenmenge   von der Wurzel des einen Baumes über   zur Wurzel des anderen Baumes ist dann ein alternierender Pfad mit ungepaartem Anfangs- und Endpunkt. Ein solcher Pfad wird  -augmentierender Pfad genannt, denn   ist eine Paarung, die eine Kante mehr enthält als  . Wenn es keine zwei solchen Blätter gibt und der Wald auch nicht mehr unter Einhaltung der o.g. Eigenschaften (a) und (b) vergrößert werden kann, heißt er ein ungarischer Wald.

Umgekehrt gilt, dass eine Paarung  , die mehr Kanten enthält als  , einen Teilgraph mit Kantenmenge   ergibt, in dem alle Pfade zwischen   und   alternieren, und von denen mindestens   Pfade  -augmentierend ohne gemeinsame Knoten sein müssen.   ist also genau dann eine größte Paarung, wenn es keinen  -augmentierenden Pfad gibt.

Algorithmus

Der folgende Algorithmus konstruiert einen Wald mit Eigenschaften (a) und (b), der

  • entweder ein ungarischer Wald ist
  • oder einen  -augmentierenden Pfad liefert.
  1. Beginne mit dem Wald, der alle ungepaarten Knoten als Wurzeln enthält, aber keine Kanten.
  2. Suche eine Kante von einem Knoten   des Waldes mit geradem Abstand von seiner Wurzel zu einem Knoten  , der nicht zum Wald gehört oder geraden Abstand von seiner Wurzel hat. Falls es keinen solchen Knoten mehr gibt, ist der Wald ein ungarischer Wald; beende den Algorithmus.
  3. Falls   geraden Abstand von seiner Wurzel hat, gibt es einen Pfad gerader Länge von einem ungepaarten Knoten   nach  ; gib den  -augmentierenden Pfad von   über   nach   zurück und beende den Algorithmus.
  4. Falls   nicht zum Wald gehört, ist   gepaart, etwa  ; füge die Knoten   und   sowie die Kanten   und   zum Wald hinzu und gehe zurück zu Schritt 2.
 
Ermittlung augmentierender Pfade

Im Fall, dass der Algorithmus in Schritt 3 mit einem  -augmentierenden Pfad   endet, wird   durch   ersetzt und der Algorithmus erneut durchgeführt. Der Fall, dass der Algorithmus in Schritt 2 mit einem ungarischen Wald endet (wobei dann   eine größte Paarung ist), muss nach spätestens   Durchläufen des Algorithmus eintreten, weil die Paarung im anderen Fall jeweils um zwei Knoten vergrößert wird. Die Laufzeit bei einmaliger Durchführung des Algorithmus ist proportional zur Kantenzahl  , die Gesamtlaufzeit bei mehrmaliger Durchführung also proportional zum Produkt aus Kanten- und Knotenzahl.

Beispiel

Im rechts abgebildeten Beispiel ist   und  . Die animierte Fassung dieser Grafik stellt die wiederholte Ausführung dieses Algorithmus dar, wobei fünfmal ein augmentierender Pfad und dann ein ungarischer Wald ermittelt wird.

Gleichzeitige Augmentierung mehrerer Pfade

Die Gesamtlaufzeit des Algorithmus kann verringert werden, wenn mehrere  -augmentierende Pfade gleichzeitig betrachtet werden. Es sei   die Länge des kürzesten  -augmentierenden Pfades. Wir betrachten  -augmentierende Pfade   der Länge  , die keine Knoten gemeinsam haben, und denen sich kein weiterer  -augmentierender Pfad der Länge   hinzufügen lässt, der mit ihnen keine Knoten gemeinsam hat. Dann lässt sich zeigen, dass

 

Der o.g. Algorithmus kann so erweitert werden, dass er nicht nur einen augmentierenden Pfad zurückgibt, sondern eine Menge augmentierender Pfade wie gerade betrachtet. Dazu müssen Schritt 2 und 3 als Breitensuche durchgeführt werden, wobei die konstruierten Pfade im Wald erst dann verlängert werden, wenn keine neuen Pfade der bisherigen Länge mehr zu finden sind. Sobald ein Pfad zu einem ungepaarten Knoten führt (also ein augmentierender Pfad ist), brauchen keine Pfade noch größerer Länge mehr betrachtet zu werden.

Ist   eine größte Paarung und  , so liefert der so erweiterte Algorithmus nach   Durchläufen eine Paarung   mit   und   knotendisjunkte  -augmentierende Pfade, deren Länge mindestens   ist. Weil keiner der   Knoten in zweien dieser Pfade enthalten ist, muss   sein, also muss die größte Paarung nach spätestens weiteren   Durchläufen erreicht sein. Die Gesamtlaufzeit des Algorithmus von Hopcroft und Karp ist demnach proportional zum Produkt aus Kantenzahl und Quadratwurzel der Knotenzahl.

Literatur

  • Hubertus Th. Jongen: Optimierung B. Skript zur Vorlesung, Aachen: Verlag der Augustinus-Buchhandlung, ISBN 3-925038-19-1