Goldberg-Tarjan-Algorithmus

Aus testwiki
Version vom 8. Mai 2024, 15:34 Uhr von imported>Robge (Typo im Namen korrigiert)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Der Goldberg-Tarjan-Algorithmus, auch Push-Relabel-Algorithmus genannt, ist ein Algorithmus aus der Graphentheorie zur Berechnung eines maximalen Flusses in einem Netzwerk. Er wurde von Andrew Goldberg und Robert Endre Tarjan entwickelt und 1988 publiziert.[1]

Der Algorithmus

Im Folgenden bezeichnet im Netzwerk (G,u,s,t) G den gerichteten Graphen, u:E(G)+ die Kapazitätsfunktion (wobei u(e) die Kapazität einer Kante e angibt), s den Knoten, von dem der Fluss startet, und t den Zielknoten des Flusses. V(G) bezeichnet die Knotenmenge des Graphen G, E(G) die Kantenmenge und δ+(v) die Menge der Kanten, die den Knoten v verlassen.

Der Algorithmus berechnet einen maximalen s-t-Fluss, indem er einen s-t-Präfluss f so lange modifiziert, bis er ein s-t-Fluss ist. Tritt dies ein, ist der erhaltene s-t-Fluss auch maximal. Der Algorithmus arbeitet des Weiteren mit einer Distanzmarkierung, d. h. mit einer Funktion ψ:V(G)0 mit ψ(s)=|V(G)|, ψ(t)=0 und für alle Kanten e=(v,w)Gf: ψ(v)ψ(w)+1. Eine Kante (v,w)E(Gf) des Residualgraphen Gf heißt erlaubt, wenn sie ψ(v)=ψ(w)+1 erfüllt.

Der Algorithmus arbeitet wie folgt:

  1. Setze für alle Kanten eδ+(s): f(e):=u(e), und für alle anderen Kanten e: f(e):=0.
  2. Setze ψ(s):=|V(G)| und für alle anderen Knoten v: ψ(v):=0.
  3. Solange es einen aktiven Knoten vV(G) gibt (d. h. einen Knoten vV(G){s,t}, auf dem mehr Fluss ankommt als abfließt), wähle so einen Knoten v und führe aus:
    Wenn im Residualgraphen Gf keine erlaubte Kante den Knoten v verlässt, setze ψ(v):=min{ψ(w)+1eE(Gf):e=(v,w)}
    Ansonsten augmentiere f entlang einer erlaubten Kante e, die v verlässt (d. h.: Falls eE(G) ist, setze f(e):=f(e)+min{uf(e),ex(v)}; andernfalls ist eE(Gf)E(G), und somit e=g Rückkante einer Kante gE(G), dann setze f(g):=f(g)min{uf(e),ex(v)}. Hierbei bezeichnen uf die Residualkapazitäten und ex(v) den Überschuss am Knoten v, also die Differenz des an v ankommenden und des abfließenden Flusses.).

Eine Modifikation des Flusses f in Schritt 3 wird auch „Push“ genannt, eine Modifikation der Distanzmarkierung ψ „Relabel“. Daher rührt der Name Push-Relabel-Algorithmus.

Am Ende ist f ein maximaler s-t-Fluss. Denn zu jedem Zeitpunkt ist der Knoten s die einzige Quelle und der Algorithmus hält erst an, wenn der Knoten t die einzige Senke ist. Da ψ stets eine Distanzmarkierung bleibt und damit die oben beschriebenen Eigenschaften erfüllt, ist gewährleistet, dass im Residualgraphen Gf der Knoten t niemals von der Quelle s aus erreichbar ist. Damit ist sichergestellt, dass der vom Algorithmus berechnete s-t-Fluss tatsächlich ein maximaler s-t-Fluss ist.

Laufzeit

So allgemein wie oben angegeben hat der Algorithmus eine Laufzeit von 𝒪(|V(G)|2 |E(G)|).

Wählt man in Schritt 3 des Algorithmus immer einen aktiven Knoten v, für den unter allen aktiven Knoten die Distanzmarkierung ψ maximalen Wert hat (also ein v mit ψ(v)=max{ψ(x)x ist aktiver Knoten}), lässt sich eine Laufzeit von 𝒪(|V(G)|2|E(G)|) beweisen. Bei der Implementierung erfordert dies jedoch, dass für jeden Wert i von 0 bis 2|V(G)|2 jeweils eine Liste aller aktiven Knoten v mit ψ(v)=i geführt wird (also für jeden Wert, den ψ theoretisch annehmen kann), zusätzlich muss das jeweils aktuelle Maximum von ψ auf der Menge der aktiven Knoten nachgehalten werden. Dies ist erforderlich, damit in jedem Durchlauf der Schleife ein aktiver Knoten v mit maximalen ψ(v) ohne Laufzeitverlust gewählt werden kann.

Mit ausgeklügelteren Implementierungen lassen sich auch Laufzeiten von

𝒪(|V(G)| |E(G)| log2+|E(G)||V(G)|log(|V(G)|)(|V(G)|))

und

𝒪(min{|E(G)|,|V(G)|23} |E(G)| log(|V(G)|2|E(G)|) log(umax))

erreichen[2]. Hierbei bezeichnet umax den maximalen Wert der Kapazitätsfunktion u.

Quellen

  • Dieter Jungnickel: Graphs, Networks and Algorithms, Springer (1998) ISBN 978-3-540-72779-8
  • Bernhard Korte, Jens Vygen: Kombinatorische Optimierung: Theorie und Algorithmen. Aus dem Englischen von Rabe von Randow. Springer-Verlag, Berlin Heidelberg 2008, ISBN 978-3-540-76918-7
  • Alexander Schrijver: Combinatorial Optimization: Polyhedra and Efficiency, Springer-Verlag, 2003, ISBN 3-540-44389-4

Einzelnachweise