Der maximale s-t Fluss hat den Wert 6
Eine typische Anwendung von Graphen ist, sie zur Modellierung von Transportnetzwerken wie beispielsweise Pipelines, Stromtrassen oder Datennetzwerken zu verwenden. Häufig ist es dabei nötig, die Kanten der Netzwerke mit Kapazitäten auszustatten, welche die maximale Menge der darüber transportierbaren Ressource angeben.
Eine interessante Eigenschaft von diesen Netzwerken ist nun die maximale Menge der von einem Punkt zu einem anderen Punkt transportierbaren Ressource. Dies wird das Max-Flow Problem genannt.
Knoten | |
S/T Knoten | |
Kante mit Kapazität 10 und Fluss 7. | |
Kante im Residualgraphen. | |
Kante auf augmentierendem Pfad. |
Klicke auf einen Knoten, um ihn als Quelle/Startknoten s auszuwählen
Klicke auf einen Knoten, um ihn als Senke/Zielknoten t auszuwählen
Der Algorithmus beginnt nun. Klicke auf Nächster Schritt, um ihn zu starten
Setze den Fluss f(e) = 0 für alle Kanten des Graphen.
Die Hauptschleife sucht wiederholt nach einem augmentierenden Pfad und erhöht entlang von ihm den Fluss, um so den Gesamtfluss zu vergrößern.
Wir betrachten nun den Residualgraphen des aktuellen Flusses. Der Algorithmus sucht einen Pfad, welcher s und t verbindet. Solch ein Pfad wird augmentierender Pfad genannt.
Check if the search is finished. Either finish by expanding t expanded, run out of nodes, or continue expaning.
Pick the next node from the queue to expand and mark the neighbours. Unvisited neighbours are added to the expansion list.
Clear the path and start reconstructing from t.
Der Fluss wird entlang des augmentierenden Pfades so lange erhöht, bis die Kapazitätsgrenze einer Kante auf dem Pfad erreicht ist (d.h. sie ist saturiert).
Der Algorithmus hat einen maximalen Fluss mit folgendem Wert berechnet:
s ← wähle(v)
t ← wähle(v)
BEGIN
(* Initialisere Fluss *)
FOR { e ∈ E } DO
f(e) ← 0
(* Hauptschleife *)
WHILE augm. Pfad könnte existieren DO
Pfad ← FINDE_PFAD(s,t)
Anpassung ← min(e ∈ Pfad)
FOR {e ∈ Pfad}
flow(e) ← flow(e) + Anpassung
END
Pfad | Anpassung |
---|---|
{} | 0 |
Du kannst die Anwendung in einem anderen Browserfenster öffnen, um parallel einen anderen Tab zu lesen.