Ford-Fulkerson kann spärliche zeitliche Strömungen in der Größe der Strömung und der Anzahl der Knoten finden, wenn die Kanten eine Einheitskapazität haben.
Wie könnte ich einen spärlichen st-Fluss verwenden, um einen st-min-Zeitschnitt zu finden, der proportional zur Größe des Flusses und zur Anzahl meiner Knoten für den Fall des spärlichen / geringen Volumens des maximalen Flusses ist?
graph-algorithms
max-flow
max-flow-min-cut
Elliot JJ
quelle
quelle
Antworten:
Wenn Sie den Flow nicht per se verwenden, sondern den Ford-Fulkerson-Algorithmus (oder eine Version wie Edmonds-Karp) verwenden, können Sie sowohl den Max-Flow als auch den Min-Cut direkt als Ergebnis erhalten. Wenn Sie nach Erweiterungspfaden suchen, führen Sie eine Durchquerung durch, bei der Sie eine Art Warteschlange für noch nicht besuchte Knoten verwenden (in der Edmonds-Karp-Version verwenden Sie BFS, dh eine FIFO-Warteschlange). In der letzten Iteration können Sie von (dies ist schließlich das Beendigungskriterium). Zu diesem Zeitpunkt bildet die Menge der Knoten, die Sie erreicht haben, den Teil des Schnitts, während die Knoten, die Sie nicht erreicht haben, den bilden .t s s t
Die Blattknoten Ihres Traversalbaums bilden den „Rand“ des Teils, während die Knoten in Ihrer Traversal-Warteschlange den Rand des Teils bilden. Was Sie wollen, ist die Menge der Kanten vom Rand zum Rand. Dies kann auch während des Durchlaufs leicht beibehalten werden: Fügen Sie dem Schnitt bei der Untersuchung einfach eine Kante hinzu, die zu einem nicht besuchten Knoten führt, und entfernen Sie ihn, wenn er durchquert wird (damit sein Ziel besucht wird). Sobald Ford-Fulkerson fertig ist, haben Sie Ihren Min-Cut (oder besser gesagt einen von ihnen) genau dort. Die Laufzeit ist (asymptotisch) identisch mit Ford-Fulkerson (oder Edmonds-Karp oder einer anderen von Ihnen verwendeten Version), die Ihnen das geben sollte, wonach Sie gesucht haben.s t s t
quelle
Gibt es eine Kurzreferenz für die Definition eines spärlichen Flusses?
Im allgemeinen Fall ist es mit dem Max-Flow ziemlich einfach, den Min-Cut über den Max-Flow-Min-Cut-Satz zu bestimmen. Die Kanten, die vollständig gesättigt sind, bilden einen Schnittsatz. Wenn Sie also einen Scheitelpunkt für jede dieser Kanten auswählen, können Sie einen Min-Schnitt bilden. Trivialerweise ist dies im schlimmsten Fall O (m), und auch wenn man die Laufzeit ausgangsempfindlich macht, ist die Anzahl der Kanten im Fluss oder noch besser die Anzahl der gesättigten Kanten im Fluss immer höher gebunden an die Laufzeit des Algorithmus zum Ermitteln des Min-Cut aus dem Max-Flow. Wenn Sie also eine Modifikation haben, die diese spärlichen st-Flüsse in linearer Zeit in der Größe des Flusses findet, ändert das Finden des Min-Cut die Laufzeit des Algorithmus nicht asymptotisch.
quelle