|
|
Lexikon auf Ihrer Homepage |
|
Lexikon als Lesezeichen hinzufügen |
Der Goldberg-Tarjan-Algorithmus, auch Push-Relabel-Algorithmus genannt, ist ein Algorithmus aus der Graphentheorie zur Berechnung eines maximalen s-t-Flusses in einem Netzwerk. Er wurde von Andrew Goldberg und Robert Endre Tarjan entwickelt und 1988 publiziert.
Im Folgenden bezeichnet im Netzwerk <math>(G, u, s, t)</math> <math>G</math> den gerichteten Graphen, <math>u: E(G) \rightarrow \mathbb{R}_+</math> die Kapazitätsfunktion (wobei <math>u(e)</math> die Kapazität einer Kante <math>e</math> angibt), <math>s</math> den Knoten, von dem der Fluss startet, und <math>t</math> den Zielknoten des Flusses. <math>V(G)</math> bezeichnet die Knotenmenge des Graphen <math>G</math>, <math>E(G)</math> die Kantenmenge und <math>\delta^+(v)</math> die Menge der Kanten, die den Knoten <math>v</math> verlassen.
Der Algorithmus berechnet einen maximalen s-t-Fluss, indem er einen Fluss <math>f</math> 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 <math>\psi: V(G) \rightarrow \mathbb{N}_0</math> mit <math>\psi(s)=|V(G)|</math>, <math>\psi(t)=0</math> und für alle Kanten <math>e=(v,w)\in G_f: \ \psi(v) \leq \psi(w) +1</math>. Eine Kante <math>(v, w) \in E(G_f)</math> des Residualgraphen <math>G_f</math> heißt erlaubt, wenn sie <math>\psi(v) = \psi(w) +1</math> erfüllt.
Der Algorithmus arbeitet wie folgt:
Eine Modifikation des Flusses <math>f</math> in Schritt 3 wird auch „Push“ genannt, eine Modifikation der Distanzmarkierung <math>\psi</math> „Relabel“. Daher rührt der Name Push-Relabel-Algorithmus.
Am Ende ist <math>f</math> ein maximaler s-t-Fluss. Denn zu jedem Zeitpunkt ist der Knoten <math>s</math> die einzige Quelle und der Algorithmus hält erst an, wenn der Knoten <math>t</math> die einzige Senke ist. Da <math>\psi</math> stets eine Distanzmarkierung bleibt und damit die oben beschriebenen Eigenschaften erfüllt, ist gewährleistet, dass im Residualgraphen <math>G_f</math> der Knoten <math>t</math> niemals von der Quelle <math>s</math> aus erreichbar ist. Damit ist sichergestellt, dass der vom Algorithmus berechnete s-t-Fluss tatsächlich ein maximaler s-t-Fluss ist.
So allgemein wie oben angegeben hat der Algorithmus eine Laufzeit von <math>\mathcal{O}(|V(G)|^2 \ |E(G)|)</math>.
Wählt man in Schritt 3 des Algorithmus immer einen aktiven Knoten <math>v</math>, für den unter allen aktiven Knoten die Distanzmarkierung <math>\psi</math> maximalen Wert hat (also ein <math>v</math> mit <math>\psi(v)=\max\{\psi(x) \mid x \text{ ist aktiver Knoten}\}</math>), lässt sich eine Laufzeit von <math>\mathcal{O}(|V(G)|^2 \sqrt{|E(G)|})</math> beweisen. Bei der Implementierung erfordert dies jedoch, dass für jeden Wert <math>i</math> von <math>0</math> bis <math>2\mathopen|V(G)\mathclose|-2</math> jeweils eine Liste aller aktiven Knoten <math>v</math> mit <math>\psi(v)=i</math> geführt wird (also für jeden Wert, den <math>\psi</math> theoretisch annehmen kann), zusätzlich muss das jeweils aktuelle Maximum von <math>\psi</math> auf der Menge der aktiven Knoten nachgehalten werden. Dies ist erforderlich, damit in jedem Durchlauf der Schleife ein aktiver Knoten <math>v</math> mit maximalen <math>\psi(v)</math> ohne Laufzeitverlust gewählt werden kann.
Mit ausgeklügelteren Implementierungen lassen sich auch Laufzeiten von
und
erreichen. Hierbei bezeichnet <math>u_{\max}</math> den maximalen Wert der Kapazitätsfunktion <math>u</math>.