Interaktives Graphentheorie-Lernen
Interaktives Graphentheorie-Lernen
Guest User
Using app without sign in
Rechner für maximalen Fluss
Findet maximalen Fluss von Quelle zu Senke im Flussnetzwerk
Wählen Sie einen Algorithmus und generieren Sie Schritte, um die Visualisierung zu beginnen
Das Maximalflussproblem fragt, wie viel Material von einer Quelle zu einer Senke durch ein Netz geschickt werden kann, in dem jede Kante eine Kapazität hat. Es ist eines der vielseitigsten Modelle der kombinatorischen Optimierung, und nach dem Max-Flow-Min-Cut-Satz entspricht sein Wert der Kapazität des kleinsten Schnitts, der Quelle von Senke trennt.
Die Methode von Ford-Fulkerson findet wiederholt einen augmentierenden Pfad von der Quelle zur Senke im Residualgraphen, einer Buchführungsstruktur, die Restkapazität erfasst und das Zurücknehmen von Fluss erlaubt. Fluss entlang augmentierender Pfade zu schicken, bis keiner mehr bleibt, ergibt einen Maximalfluss. Die Verfeinerung von Edmonds-Karp augmentiert stets entlang eines per BFS gefundenen kürzesten Pfades und garantiert O(V E hoch 2); der Algorithmus von Dinic verbessert dies weiter mit Niveaugraphen und blockierenden Flüssen.
Maximalfluss modelliert Durchsatz von Rohrleitungen und Verkehr, bipartites Matching zur Aufgabenzuteilung, die Einsatzplanung von Flugpersonal, Bildsegmentierung im maschinellen Sehen, Baseball-Ausscheidung und Projektauswahl. Es ist das klassische fortgeschrittene Graphthema im Wettbewerbsprogrammieren und in Senior-Interviews.
Alle Maximalfluss-Algorithmen dieser Familie sind dieselbe Schleife: finde einen Weg von der Quelle zur Senke mit freier Kapazität, schiebe so viel wie möglich, wiederhole. Sie unterscheiden sich nur darin, wie sie diesen Weg wählen.
MaxFluss(graph, s, t):
fluss = 0
Residualgraph bauen: cap(u,v) vorwärts, 0 rückwärts
solange es im Residualgraph einen augmentierenden
Pfad P von s nach t gibt:
engpass = kleinste Restkapazität entlang P
für jede Kante (u, v) in P:
residual[u][v] -= engpass
residual[v][u] += engpass // Rücknahmekante
fluss += engpass
gib fluss zurück
// Ford-Fulkerson: findet P per DFS (beliebiger Pfad)
// Edmonds-Karp: findet P per BFS (kürzester Pfad)Die rückwärts gerichtete Residualkante ist der Teil, der falsch aussieht und tatsächlich unverzichtbar ist. Sie erlaubt es einem späteren augmentierenden Pfad, zuvor geschobenen Fluss zurückzunehmen, sodass der Algorithmus eine schlechte frühe Wahl ohne Backtracking wieder verlässt. Ohne diese Rücknahmekanten bleibt die gierige Schleife bei einem suboptimalen Fluss stecken.
Führe Edmonds-Karp auf dem Standardbeispiel aus, bei dem eine gierige erste Wahl später zurückgenommen werden muss.
Beispielgraph: Gerichtete Kapazitäten: S nach A (10), S nach B (10), A nach B (2), A nach T (4), B nach T (9).
Der maximale Fluss beträgt 13, und der minimale Schnitt ist das Kantenpaar A-T und B-T mit Gesamtkapazität 13. Dass beide Zahlen gleich sind, ist kein Zufall: das ist der Max-Flow-Min-Cut-Satz.
Zeit: O(V·E^2) mit Edmonds-Karp · Speicher: O(V + E)
Ford-Fulkerson mit beliebiger Pfadwahl läuft in O(E mal Maximalfluss), denn jede Augmentierung fügt mindestens eine Einheit hinzu, während die Pfadsuche O(E) kostet. Das ist pseudopolynomiell und wirklich schlecht: bei Kapazitäten in Milliardenhöhe kann es Milliarden Augmentierungen brauchen, und bei irrationalen Kapazitäten terminiert es womöglich gar nicht. Edmonds-Karp behebt das, indem stets der kürzeste augmentierende Pfad per BFS gewählt wird. Die Distanz von der Quelle zur Senke sinkt nie, und jede Kante kann höchstens V/2 mal Engpass sein, was die Zahl der Augmentierungen auf O(VE) und den Gesamtaufwand auf O(V mal E hoch 2) begrenzt. Dinic bündelt Augmentierungen in Phasen über einen Niveaugraphen und verbessert das auf O(V hoch 2 mal E), bei Einheitskapazitäten auf O(E mal Wurzel aus V).
Die Wahl hängt vor allem von der Größenordnung der Kapazitäten und der Graphgröße ab.
| Alternative | Vorzuziehen, wenn | Kosten |
|---|---|---|
| Edmonds-Karp | Die Voreinstellung. Die BFS-Pfadwahl macht die Schranke unabhängig von den Kapazitätswerten. | O(V·E^2) |
| Dinic | Größere Graphen. Niveaugraphen und blockierende Flüsse machen ihn in der Praxis deutlich schneller. | O(V^2·E) |
| Push-Relabel | Sehr große, dichte Graphen, bei denen das beste asymptotische Verhalten zählt. | O(V^3) |
| Hopcroft-Karp | Das Problem ist eigentlich bipartites Matching, ein Sonderfall des Maximalflusses mit Einheitskapazität. | O(E·sqrt(V)) |
| Minimaler Schnitt | Du willst die Engpasskanten statt des Durchsatzes. Dieselbe Rechnung, anders gelesen. | wie Maximalfluss |
Den ganzen Artikel lesen: Network Flow: Max-Flow and Min-Cut
Verwandte Algorithmen: Minimaler Schnitt, Bipartit-Prüfung, Breitensuche