Nächste Seite: Mustererkennung Aufwärts: Hauptseite Algorithmen Vorherige Seite: Graphen Inhalt
Unterabschnitte
Netzwerkflußproblem
Das Netzwerkflußproblem ist das Problem des maximalen Flusses von einem Startknoten zu einem Zielknoten. Hierbei können durch die Kanten Flüsse fließen, wobei die Inschrift einer jeden Kante angibt, wie hoch der Fluss in dieser Kante momentan ist und maximal sein darf.- Bei einem Knoten, der kein Start oder Zielknoten ist, gehen genausoviele Flüsse weg, wie reinkommen. Die Summe aller einkommenden Flüsse minus die Summe aller herausgehenden Flüsse ist also 0.
- Wir können das Flußdiagramm über die Kanten an jeder Stelle in zwei Stücke schneiden. Sei
die Menge der Knoten die auf der einen Seite dieses Schnittes liegen. Der Nettofluß ist definiert mit
- Für alle Schnitte gilt: Der Nettofluß ist für jeden Schnitt gleich.
- Die Kapazität ist der maximal Fluß, der über einen Schnitt geführt werden kann. Es gilt
- Es gilt: Der maximale Fluß über das gesamte Netzwerk ist die minimalste Kapazität, die durch einen Schnitt gehen kann:
Ford&Fulkerson-Algorithmus
Algorithmus
- Wir schreiben an jede Kante ein Wertepaar
. Zudem erzeugen wir für jede Kante eine Rückwärtskante, die zu Beginn mit
initialisiert wird.
- Wir suchen immer wieder einen zunehmenden Pfad in dem Netzwerk. Dies kann dadurch geschehen, daß wir eine Erreichbarkeitsanalyse (z.B. mit der Breitensuche gestartet mit dem Startknoten) auf dem Restgraphen durchführen, welches in der Laufzeit
geschehen kann.
- Wir erhöhen entlang des zunehmenden Pfades alle aktuellen Flußwerte um den gefundenen Flußwert des Pfades.
- Dies tun wir solange, bis kein zunehmender Pfad mehr gefunden werden kann. (d.h. der Schnitt mit dem geringsten Fluß (mincut) ist voll ausgelastet.)
Worst Case
Der Worst-Case ist gegeben, wenn eine Kante immer wieder vor und dann die Rückwärtskante wieder zurück gegangen werden muß. Folgendes Beispiel ist ein Worst Case bei dem
Optimierung
Die Laufzeit des Algorithmusses, wenn stets ein kürzester Pfad gewählt wird istBipartites Matching
Beim Bipartiten Matching geht es darum möglichst viele Verbindungen zwischen Knoten auf der einen Seiten und Knoten auf der anderen Seite herzustellen, wobei ein Knoten höchstens auf einer mitNächste Seite: Mustererkennung Aufwärts: Hauptseite Algorithmen Vorherige Seite: Graphen Inhalt