Algorithmische Graphentheorie Sommersemester 2015 3. Vorlesung Flussalgorithmen Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I 1 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert. 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die – den Fluss erhält – zulässig ist – maximal ist 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist – maximal ist 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist, d.h. für jede Kante e garantiert: 0 ≤ f (e ) ≤ c (e ), – maximal ist 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist, d.h. für jede Kante e garantiert: 0 ≤ f (e ) ≤ c (e ), – maximal ist, d.h. unter allen zulässigen s -t -Flüssen |f | = Nettozuflussf (t ) maximiert. 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die Variable – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist, d.h. für jede Kante e garantiert: 0 ≤ f (e ) ≤ c (e ), – maximal ist, d.h. unter allen zulässigen s -t -Flüssen |f | = Nettozuflussf (t ) maximiert. 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die Variable – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist, d.h. für jede Kante e garantiert: Konstante 0 ≤ f (e ) ≤ c (e ), – maximal ist, d.h. unter allen zulässigen s -t -Flüssen |f | = Nettozuflussf (t ) maximiert. 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die Variable – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist, d.h. für jede Kante e garantiert: Konstante 0 ≤ f (e ) ≤ c (e ), |V | − 2 + |E | lineare Beschränkungen! – maximal ist, d.h. unter allen zulässigen s -t -Flüssen |f | = Nettozuflussf (t ) maximiert. 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die Variable – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist, d.h. für jede Kante e garantiert: Konstante 0 ≤ f (e ) ≤ c (e ), |V | − 2 + |E | lineare Beschränkungen! – maximal ist, d.h. unter allen zulässigen s -t -Flüssen |f | = Nettozuflussf (t ) maximiert. 2 Erinnerung Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die Variable – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist, d.h. für jede Kante e garantiert: Konstante 0 ≤ f (e ) ≤ c (e ), |V | − 2 + |E | lineare Beschränkungen! – maximal ist, d.h. unter allen zulässigen s -t -Flüssen |f | = Nettozuflussf (t ) maximiert. lineare 2 Zielfunktion! Erinnerung Oh my God – it’s an LP! Gegeben ein gerichteter Graph G = (V , E ) mit s , t ∈ V und Kantenkapazitäten c : E → R>0 . Geben Sie eine Methode an, die einen maximalen s -t -Fluss f konstruiert., also eine Funktion f : E → R≥0 , die Variable – den Fluss erhält, d.h. für jeden Knoten v ∈ / {s , t } sicherstellt: X X Nettozuflussf (v ) = f (uv ) − f (v w ) = 0, {u ∈V |uv ∈E } {w ∈V |v w ∈E } – zulässig ist, d.h. für jede Kante e garantiert: Konstante 0 ≤ f (e ) ≤ c (e ), |V | − 2 + |E | lineare Beschränkungen! – maximal ist, d.h. unter allen zulässigen s -t -Flüssen |f | = Nettozuflussf (t ) maximiert. lineare 2 Zielfunktion! Future Work Kann man maximale Flüsse (= Spezialfall eines LPs) auch mit maßgeschneiderten kombinatorischen Algorithmen berechnen? Hoffnung: Das könnte schneller gehen – und strukturelle Einsichten liefern. 3 Future Work Today’s Kann man maximale Flüsse (= Spezialfall eines LPs) auch mit maßgeschneiderten kombinatorischen Algorithmen berechnen? Hoffnung: Das könnte schneller gehen – und strukturelle Einsichten liefern. 3 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S T s t 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S T s t 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S T s t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S T s S t T s t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S T s t S T s t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } {uv ∈ E | u ∈ T , v ∈ S } = Rein(S ) 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S T s t S T s t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } {uv ∈ E | u ∈ T , v ∈ S } = Rein(S ) Zuflussf (S ) = f (Rein(S )) 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S S T s T s t t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } {uv ∈ E | u ∈ T , v ∈ S } = Rein(S ) Zuflussf (S ) = f (Rein(S )) = P e ∈Rein(S ) f (e ) 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S S T s T s t t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } {uv ∈ E | u ∈ T , v ∈ S } = Rein(S ) Zuflussf (S ) = f (Rein(S )) = Abflussf (S ) = f (Raus(S )) P e ∈Rein(S ) f (e ) 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S S T s T s t t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } {uv ∈ E | u ∈ T , v ∈ S } = Rein(S ) Zuflussf (S ) = f (Rein(S )) = P Abflussf (S ) = f (Raus(S )) = P e ∈Rein(S ) f (e ) e ∈Raus(S ) f (e ) 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S T s S T s t t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } {uv ∈ E | u ∈ T , v ∈ S } = Rein(S ) Zuflussf (S ) = f (Rein(S )) minus Abflussf (S ) = f (Raus(S )) 4 Nichts ist praktischer als eine gute Theorie Def. Sei G = (V , E ) ein gerichteter Graph, s , t ∈ V . Eine Zerlegung (S , T ) von V ist ein s -t -Schnitt, falls s ∈ S , t ∈ T . S S T s T s t t Raus(S ) = {uv ∈ E | u ∈ S , v ∈ T } {uv ∈ E | u ∈ T , v ∈ S } = Rein(S ) Zuflussf (S ) = f (Rein(S )) minus Abflussf (S ) = f (Raus(S )) ) =: Nettozuflussf (S ) 4 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E T s t S T s t 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E T s t S T s t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E T s t S T s t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E T s t S T s t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E T s t S T s t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S Nettozuflf (v ) = 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S Nettozuflf (v ) = P v ∈S (Zuflussf (v ) − Abflussf (v )) 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S Nettozuflf (v ) = P = P v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S Nettozuflf (v ) = P = P v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) = 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S u Nettozuflf (v ) = P = P v v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) = 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S Nettozuflf (v ) = P = P +f u v v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) = 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S u Nettozuflf (v ) = P = P +f −f v v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) = 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S u Nettozuflf (v ) = P = P +f −f v v v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) = 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S u +f Nettozuflf (v ) = P = P +f −f v v v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) = 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S u +f Nettozuflf (v ) = P = P +f −f v v v v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) = 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S u +f Nettozuflf (v ) = P = P +f −f v v v v ∈S v ∈S (Zuflussf (v ) − Abflussf (v )) P P e =uv f (e ) − e =v w f (e ) = −f 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S u +f (Zuflussf (v ) − Abflussf (v )) P P P = v ∈S e =uv f (e ) − e =v w f (e ) X X f (e ) − f (e ) = Nettozuflf (v ) = +f −f v v v P −f v ∈S e ∈Rein(S ) e ∈Raus(S ) 5 Nettozuflüsse von Schnitten und Knoten Zur Erinnerung: Nettozuflussf (S ) := f (Rein(S )) − f (Raus(S )) Raus(S ) ⊆ E S Rein(S ) ⊆ E S T s T s t t ⊆ V und f : E → R. Dann: Lem.1 Sei G = (V , E ) Graph, S P Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Beweis. P v ∈S S u +f (Zuflussf (v ) − Abflussf (v )) P P P = v ∈S e =uv f (e ) − e =v w f (e ) X X f (e ) − f (e ) = Nettozuflf (S ) = Nettozuflf (v ) = +f −f v v v P −f v ∈S e ∈Rein(S ) e ∈Raus(S ) 5 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). 6 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) 6 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) 6 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) Beweis. |f | =Def. 6 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) Beweis. |f | =Def. Nettozuflussf (t ) P = v ∈T Nettozuflussf (v ) 6 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) Beweis. |f | =Def. Nettozuflussf (t ) P = v ∈T Nettozuflussf (v ) da Nettozuflussf (v ) = 0 für alle v 6= s , t 6 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) Beweis. |f | =Def. Nettozuflussf (t ) P = v ∈T Nettozuflussf (v ) da Nettozuflussf (v ) = 0 für alle v 6= s , t = 6 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) Beweis. |f | =Def. Nettozuflussf (t ) P = v ∈T Nettozuflussf (v ) da Nettozuflussf (v ) = 0 für alle v 6= s , t = 6 Noch mehr Schnitte ⊆ V und f : E → R. Dann: Lemma1 . Sei G = (V , E ) Graph, SP Nettozuflussf (S ) = v ∈S Nettozuflussf (v ). Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) Beweis. |f | =Def. Nettozuflussf (t ) P = v ∈T Nettozuflussf (v ) da Nettozuflussf (v ) = 0 für alle v 6= s , t = Nettozuflussf (T ) 6 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = Nettoabflussf (S ) 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = Nettoabflussf (S ) = 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) ≤ c (Raus(S )) 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) ≤ c (Raus(S )) = 12 12/ v1 v3 10/ 20 8/ 16 3/ 9 s t 1/ 7 4/ 4 5/ 13 v 2 4/14 v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). Beweis. |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) ≤ c (Raus(S )) = c (S ) 12 12/ v1 v3 10/ 20 8/ 16 3/ 9 s t 1/ 7 4/ 4 5/ 13 v 2 4/14 v4 3/4 7 Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) ≤ c (Raus(S )) = c (S ) 12 12/ v1 v3 10/ 20 Speziell: 8/ 16 3/ 9 s t 1/ 7 4/ 4 maxf |f | ≤ minS c (S ) 5/ 13 v v4 3/4 2 4/14 7 Beweis. Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) ≤ c (Raus(S )) = c (S ) 12 12/ v1 v3 10/ 20 Speziell: 8/ 16 Korollar. 3/ 9 |f | = c (S ) s t 1/ 7 4/ 4 maxf |f | ≤ ⇓ minS c (S ) 5/ 13 v v4 3/4 2 4/14 7 Beweis. Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) ≤ c (Raus(S )) = c (S ) 12 12/ v1 v3 10/ 20 Speziell: 8/ 16 Korollar. 3/ 9 |f | = c (S ) s t 1/ 7 4/ 4 maxf |f | ≤ ⇓ minS c (S ) f maximal, 5/ 13 v 4 3/ v 2 4 4/14 7 Beweis. Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) ≤ c (Raus(S )) = c (S ) 12 12/ v1 v3 10/ 20 Speziell: 8/ 16 Korollar. 3/ 9 |f | = c (S ) s t 1/ 7 4/ 4 maxf |f | ≤ ⇓ minS c (S ) f maximal, 5/ 13 v 4 3/ v 2 4 c (S ) min.7 4/14 Beweis. Kapazität von Schnitten Lemma2 . G Graph, s , t ∈ V , f s -t -Fluss, (S ,T ) s -t -Schnitt. Dann gilt |f | = Nettozuflussf (T ) =: Nettoabflussf (S ). Def. G Graph mit Kap. c : E → R>0 , (S ,T ) s -t -Schnitt. Dann ist c (S ) := c (Raus(S )) die Kapazität von (S ,T ). Lemma3 . f zuläss. s -t -Fluss, (S ,T ) s -t -Schnitt ⇒ |f | ≤ c (S ). |f | = Nettoabflussf (S ) = f (Raus(S )) − f (Rein(S )) ≤ f (Raus(S )) ≤ c (Raus(S )) = c (S ) 12 12/ v1 v3 10/ 20 Speziell: 8/ 16 Korollar. 3/ 9 |f | = c (S ) s t 1/ 7 4/ 4 maxf |f | ≤ ⇓ minS c (S ) f maximal, ! 5/ 13 v 4 3/ v 2 4 c (S ) min.7 !! 4/14 Beweis. Residualnetz Beob. 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 8 Residualnetz Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Beob. 8/ 16 s v1 12/ 12 v3 4/ 4 5/ 13 v 2 3/ 9 4/14 10/ 20 1/ 7 t v4 3/4 8 Residualnetz Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Beob. 8/ 16 s v1 12/ 12 v3 4/ 4 3/ 9 10/ 20 1/ 7 5/ 13 v 3/4 v 2 4 6 4 4/14 5 t 8 Residualnetz Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Beob. 8/ 16 s v1 12/ 12 v3 4/ 4 3/ 9 10/ 20 1/ 7 5/ 13 v 3/4 v 2 4 6 4 4/14 5 t 8 Residualnetz Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Beob. 8/ 16 s v1 12/ 12 v3 4/ 4 3/ 9 10/ 20 1/ 7 5/ 13 v 3/4 v 2 4 6 4 4/14 5 t 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. v1 12/ 12 v3 16 10/ 20 8/ 16 3/ 9 s 71/ 7 t 4/ 4 5/ 13 v 3/4 v 2 4 6 4 4/14 12 11 5 8 Residualnetz Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Beob. 8/ 16 s v1 12/ 12 v3 4/ 4 12/ 13 v 2 3/ 9 11/14 16/ 20 7/ 7 t v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. 8/ 16 s v1 12/ 12 v3 4/ 4 12/ 13 v 2 3/ 9 11/14 16/ 20 7/ 7 t v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. 9 v1 12/ 12 v3 17 16/ 20 8/ 16 23/ 9 s 3 4/ 4 t 7/ 7 12/ 13 v 2 11/14 v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) −e := v u falls f (e ) > 0 9 v1 12/ 12 v3 17 16/ 20 8/ 16 23/ 9 s 3 4/ 4 t 7/ 7 12/ 13 v 2 11/14 v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 9 v1 12/ 12 v3 17 16/ 20 8/ 16 23/ 9 s 3 4/ 4 t 7/ 7 12/ 13 v 2 11/14 v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) 9 v1 12/ 12 v3 17 16/ 20 8/ 16 23/ 9 s 3 4/ 4 t 7/ 7 12/ 13 v 2 11/14 v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) 9 v1 12/ 12 v3 17 16/ 20 8/ 16 23/ 9 s 3 4/ 4 t 7/ 7 12/ 13 v 2 11/14 v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Residualkapazitäten Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) 9 v1 12/ 12 v3 17 16/ 20 8/ 16 23/ 9 s 3 4/ 4 t 7/ 7 12/ 13 v 2 11/14 v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Residualkapazitäten Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) v1 12/ 12 v3 16/ 20 8/ 16 3/ 9 s t 7/ 7 4/ 4 12/ 13 v 2 11/14 v4 4/4 8 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Residualkapazitäten Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) v1 12/ 12 v3 v1 v3 16/ 20 8/ 16 3/ 9 s s t t 7/ 7 4/ 4 12/ 13 v 2 11/14 v4 4/4 G v2 v4 G8f Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Residualkapazitäten Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) v1 12/ 12 v3 v1 v3 16/ 20 8/ 16 3/ 9 s s t t 7/ 7 4/ 4 12/ 13 v 2 11/14 v4 4/4 G v2 v4 G8f Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Residualkapazitäten Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) v1 12/ 12 v3 v1 v3 8 16/ 20 8/ 16 3/ 9 s s t t 7/ 7 4/ 4 12/ 13 v 2 11/14 v4 4/4 G v2 v4 G8f Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Residualkapazitäten Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) v1 12/ 12 v3 v1 v3 8 16/ 20 8/ 16 3/ 9 s s t t 7/ 7 4/ 4 12/ 13 v 2 11/14 v4 4/4 G v2 v4 G8f Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Residualkapazitäten Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) v1 12/ 12 v3 v1 v3 8 16/ 20 8/ 16 3/ 9 8 s s t t 7/ 7 4/ 4 12/ 13 v 2 11/14 v4 4/4 G v2 v4 G8f Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Residualkapazitäten Def. Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) v1 12/ 12 v3 v1 v3 8 16/ 20 8/ 16 3/ 9 8 s s t t 7/ 7 4/ 4 12/ 13 v 2 11/14 v4 4/4 G v2 v4 G8f Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Residualkapazitäten Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) v1 12/ 12 v3 v1 v3 8 16/ 20 8/ 16 3/ 9 8 s s t t 7/ 7 4/ 4 1 12/ 13 v 12 v2 v4 4/4 v4 2 11/14 G8f G Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Residualkapazitäten Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) 12 v3 v1 12/ 12 v3 v1 8 16/ 20 8/ 16 3/ 9 8 s s t t 7 4 7/ 7 4/ 4 1 4 12/ 13 v 4 4/ 12 v2 v4 v4 2 11/14 G8f G Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Residualkapazitäten Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) 12 v3 v1 12/ 12 v3 v1 4 8 16/ 20 8/ 16 6 3/ 9 8 s s t 7 16 t 4 7/ 7 4/ 4 3 1 4 3 12/ 13 v 4 4/ 12 v2 v4 v4 2 11/14 G8f G 11 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Residualkapazitäten Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) 12 v3 v1 12/ 12 v3 v1 4 8 16/ 20 8/ 16 6 3/ 9 8 s s t 7 16 t 4 7/ 7 4/ 4 3 1 4 3 12/ 13 v 4 4/ 12 v2 v4 v4 2 11/14 G8f G 11 Residualnetz Beob. Falls es einen s -t -Weg gibt, bei dem auf keiner Kante die Kapazität ausgeschöpft ist, können wir f vergrößern. Aber: Falls es keinen solchen s -t -Weg gibt, so ist f nicht unbedingt maximal. Def. Residualkapazitäten Der Residualgraph Gf = (V , Ef ) enthält für jede Kante e = uv von G = (V , E ) die Kante(n) +e := uv falls f (e ) < c (e ) mit cf (+e ) := c (e ) − f (e ) −e := v u falls f (e ) > 0 mit cf (−e ) := f (e ) 12 v3 v1 12/ 12 v3 v1 4 8 16/ 20 8/ 16 6 3/ 9 8 s s t 7 16 t 4 7/ 7 4/ 4 3 1 4 3 12/ 13 v 4 4/ 12 v2 v4 v4 2 11/14 G8f G 11 Flussvergrößernde Wege Ein s -t -Weg W in Gf heißt flussvergrößernder Weg für f . Def. 8/ 16 s v1 12/ 12 v3 4/ 4 12/ 13 v 2 3/ 9 11/14 t 7/ 7 v4 8 16/ 20 4/4 G v1 8 4 1 s 12 v2 12 6 3 3 11 v3 7 v4 4 16 t 4 G9f Flussvergrößernde Wege Ein s -t -Weg W in Gf heißt flussvergrößernder Weg für f . Die Residualkapazität von W ist ∆W := mine ∈W cf (e ), Def. 8/ 16 s v1 12/ 12 v3 4/ 4 12/ 13 v 2 3/ 9 11/14 t 7/ 7 v4 8 16/ 20 4/4 G v1 8 4 1 s 12 v2 12 6 3 3 11 v3 7 v4 4 16 t 4 G9f Flussvergrößernde Wege Ein s -t -Weg W in Gf heißt flussvergrößernder Weg für f . Die Residualkapazität von W ist ∆W := mine ∈W cf (e ), Def. 8/ 16 s v1 12/ 12 v3 4/ 4 12/ 13 v 2 3/ 9 11/14 t 7/ 7 v4 8 16/ 20 4/4 G v1 8 4 1 s 12 v2 12 6 3 3 11 v3 7 v4 4 16 t 4 G9f Flussvergrößernde Wege Def. Ein s -t -Weg W in Gf heißt flussvergrößernder Weg für f . Die Residualkapazität von W ist ∆W := mine ∈W cf (e ), Satz. (vom flussvergrößernden Weg ). Ein zulässiger s -t -Fluss f in G ist maximal ⇔ es gibt keinen flussvergrößernden Weg in Gf . 8/ 16 s v1 12/ 12 v3 4/ 4 12/ 13 v 2 3/ 9 11/14 t 7/ 7 v4 8 16/ 20 4/4 G v1 8 4 1 s 12 v2 12 6 3 3 11 v3 7 v4 4 16 t 4 G9f Das Max-Flow-Min-Cut-Theorem Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt 10 Das Max-Flow-Min-Cut-Theorem Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt d.h. der Wert eines maximalen Flusses ist gleich der Kapazität eines minimalen s -t -Schnittes. 10 Das Max-Flow-Min-Cut-Theorem Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt d.h. der Wert eines maximalen Flusses ist gleich der Kapazität eines minimalen s -t -Schnittes. Zur Erinnerung: Korollar. |f | = c (S ) ⇓ f maximal, ! c (S ) min. !! 10 Das Max-Flow-Min-Cut-Theorem Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt d.h. der Wert eines maximalen Flusses ist gleich der Kapazität eines minimalen s -t -Schnittes. Zur Erinnerung: Lester Randolph Ford, Jr. (*1927) Delbert R. Fulkerson (1924–76) Korollar. |f | = c (S ) ⇓ f maximal, ! c (S ) min. !! 10 Das Max-Flow-Min-Cut-Theorem Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt d.h. der Wert eines maximalen Flusses ist gleich der Kapazität eines minimalen s -t -Schnittes. [Ford & Fulkerson, 1956] [Elias, Feinstein, Shannon 1956] [Kotzig ’56] Zur Erinnerung: Lester Randolph Ford, Jr. (*1927) Delbert R. Fulkerson (1924–76) Korollar. |f | = c (S ) ⇓ f maximal, ! c (S ) min. !! 10 Das Max-Flow-Min-Cut-Theorem Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt d.h. der Wert eines maximalen Flusses ist gleich der Kapazität eines minimalen s -t -Schnittes. [Ford & Fulkerson, 1956] [Elias, Feinstein, Shannon 1956] [Kotzig ’56] Satz. Zur Erinnerung: Lester Randolph Ford, Jr. (*1927) Delbert R. Fulkerson (1924–76) Korollar. |f | = c (S ) ⇓ f maximal, ! c (S ) min. !! (vom flussvergrößernden Weg ). Ein zulässiger s -t -Fluss f in G ist maximal ⇔ es gibt keinen flussvergrößernden Weg in Gf . 10 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar ⇒ ist s -t -Schnitt 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) Nun sei e = uv ∈ Rein(S ) 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ Nun sei e = uv ∈ Rein(S ) 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ) Nun sei e = uv ∈ Rein(S ) 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar Nun sei e = uv ∈ Rein(S ) 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ Nun sei e = uv ∈ Rein(S ) 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) ⇒ f (e ) = 0 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) ⇒ f (e ) = 0 ⇒ f (Rein(S )) = 0 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) ⇒ f (e ) = 0 ⇒ f (Rein(S )) = 0 Also: 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) ⇒ f (e ) = 0 ⇒ f (Rein(S )) = 0 c (Raus(S )) = f (Raus(S ) − f (Rein(S )) Also: c (S ) = Def. 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) ⇒ f (e ) = 0 ⇒ f (Rein(S )) = 0 c (Raus(S )) = f (Raus(S ) − f (Rein(S )) Also: c (S ) = Def. = Nettoabflussf (S ) 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) ⇒ f (e ) = 0 ⇒ f (Rein(S )) = 0 c (Raus(S )) = f (Raus(S ) − f (Rein(S )) Also: c (S ) = Def. = Nettoabflussf (S ) = |f | 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) ⇒ f (e ) = 0 ⇒ f (Rein(S )) = 0 c (Raus(S )) = f (Raus(S ) − f (Rein(S )) Also: c (S ) = Def. ⇒ = Nettoabflussf (S ) = |f | Korr. 11 Satz. In einem ger. Graphen G mit Kap. c : E → R>0 gilt: max f zulässiger s -t -Fluss |f | = min c(S) (S,T ) s -t -Schnitt Beweis. Sei f ein maximaler Fluss. ⇒ es gibt keinen flussvergrößernden Weg ⇒ in Gf ist t von s aus nicht erreichbar S = {v | v von s erreichbar} ⇒ ist s -t -Schnitt T = {v | v von s nicht erreichbar} Sei e = uv ∈ Raus(S ) ⇒ f (e ) = c (e ), sonst wäre v von s in Gf erreichbar ⇒ f (Raus(S )) = c (Raus(S )) Nun sei e = uv ∈ Rein(S ) ⇒ f (e ) = 0 ⇒ f (Rein(S )) = 0 c (Raus(S )) = f (Raus(S ) − f (Rein(S )) Also: c (S ) = Def. ⇒ c (S ) minimal = Nettoabflussf (S ) = |f | Korr. 11 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f 12-1 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f 12-2 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f 12-3 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f } Rückgabe eines max. Flusses 12-4 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f } Rückgabe eines max. Flusses 12-5 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do Schreiben Ihren eigenen if uv ∈Sie E then Code, der beifuvAbbruch fuv = + ∆W der while-Schleife in f einen else maximalen fv u =Fluss fv u −liefert. ∆W return f } Rückgabe eines max. Flusses 12-6 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) } Residualkapazität von W foreach uv ∈ W do Schreiben Ihren eigenen if uv ∈Sie E then Code, der beifuvAbbruch fuv = + ∆W der while-Schleife in f einen else maximalen fv u =Fluss fv u −liefert. ∆W return f } Rückgabe eines max. Flusses 12-7 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) } Residualkapazität von W foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f } Rückgabe eines max. Flusses 12-8 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) } Residualkapazität von W foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W Flussvergrößerung entlang W else fv u = fv u − ∆W return f } Rückgabe eines max. Flusses 12-9 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) } Residualkapazität von W foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W Flussvergrößerung entlang W else fv u = fv u − ∆W return f } Rückgabe eines max. Flusses Korrektheit? 12-10 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) o foreach uv ∈ E do Initialisierung mit Null-Fluss fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) } Residualkapazität von W foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W Flussvergrößerung entlang W else fv u = fv u − ∆W return f } Rückgabe eines max. Flusses Korrektheit? Folgt aus Satz vom flussvergrößernden Weg. 12-11 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f Korrektheit? Folgt aus Satz vom flussvergrößernden Weg. Laufzeit? 12-12 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 3. R>0 : Korrektheit? 12-13 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 3. R>0 : Korrektheit? 12-14 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 3. R>0 : Korrektheit? 12-15 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 3. R>0 : Korrektheit? 12-16 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen ∆W = minuv ∈W cf (uv ) – Breitensuche – Tiefensuche foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 3. R>0 : Korrektheit? 12-17 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W return f Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 3. R>0 : Korrektheit? 12-18 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W else fv u = fv u − ∆W return f Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 3. R>0 : Korrektheit? 12-19 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W – in jedem Durchlauf wird else f um ≥ 1 vergrößert fv u = fv u − ∆W return f Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 3. R>0 : Korrektheit? 12-20 Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W – in jedem Durchlauf wird else f um ≥ 1 vergrößert fv u = fv u − ∆W – max. |f ? | Durchläufe, return f wobei f ? ein max. Fluss Korrektheit? Laufzeit? 1. c : E → N: Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 12-21 3. R>0 : Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W – in jedem Durchlauf wird else f um ≥ 1 vergrößert fv u = fv u − ∆W – max. |f ? | Durchläufe, return f wobei f ? ein max. Fluss Korrektheit? Laufzeit? 1. c : E → N: O (|f ? | · E ) Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 12-22 3. R>0 : Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W – in jedem Durchlauf wird else f um ≥ 1 vergrößert fv u = fv u − ∆W – max. |f ? | Durchläufe, return f wobei f ? ein max. Fluss Korrektheit? Laufzeit? 1. c : E → N: O (|f ? | · E ) Folgt aus Satz vom Q>0 : 2. flussvergrößernden Weg. 12-23 3. R>0 : Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W – in jedem Durchlauf wird else f um ≥ 1 vergrößert fv u = fv u − ∆W – max. |f ? | Durchläufe, return f wobei f ? ein max. Fluss Korrektheit? Laufzeit? 1. c : E → N: O (|f ? | · E ) Folgt aus Satz vom Q>0 : erweitern... 2. flussvergrößernden Weg. 12-24 3. R>0 : Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W – in jedem Durchlauf wird else f um ≥ 1 vergrößert fv u = fv u − ∆W – max. |f ? | Durchläufe, return f wobei f ? ein max. Fluss Korrektheit? Laufzeit? 1. c : E → N: O (|f ? | · E ) Folgt aus Satz vom Q>0 : erweitern... 2. flussvergrößernden Weg. 12-25 3. R>0 : Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W – in jedem Durchlauf wird else f um ≥ 1 vergrößert fv u = fv u − ∆W – max. |f ? | Durchläufe, return f wobei f ? ein max. Fluss Korrektheit? Laufzeit? 1. c : E → N: O (|f ? | · E ) Folgt aus Satz vom Q>0 : erweitern... 2. flussvergrößernden Weg. 12-26 3. R>0 : problematisch! Der Algorithmus von Ford & Fulkerson FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg W do Berechnung von s -t -Wegen o ∆W = minuv ∈W cf (uv ) – Breitensuche O (E ) Zeit – Tiefensuche foreach uv ∈ W do if uv ∈ E then Anz. Schleifendurchläufe fuv = fuv + ∆W – in jedem Durchlauf wird else f um ≥ 1 vergrößert fv u = fv u − ∆W – max. |f ? | Durchläufe, return f wobei f ? ein max. Fluss Korrektheit? Laufzeit? 1. c : E → N: O (|f ? | · E ) Folgt aus Satz vom Q>0 : erweitern... 2. flussvergrößernden Weg. 12-27 3. R>0 : problematisch! Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 13 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 Gf 000 u 0 1 s 100 t 1 100 0 v 0 0 0 1 13 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 Gf 000 u 0 1 s 100 t 1 100 0 v 0 0 0 1 13 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 Gf 000 u 0 1 s 100 t 1 100 0 v 0 0 0 1 u 0/ 0 100 0 0 0 1/1 s 1/1 t 0/1 0 000 0 0 v 1/1 13 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 u 0/ 0 100 0 0 0 1/1 s 1/1 t 0/1 0 000 0 0 v 1/1 Gf 000 u 0 1 s 100 t 1 100 0 v u 9 99 1 1 s 100 0 v 0 0 0 1 100 0 t 1 999 13 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 u 0/ 0 100 0 0 0 1/1 s 1/1 t 0/1 0 000 0 0 v 1/1 Gf 000 u 0 1 s 100 t 1 100 0 v u 9 99 1 1 s 100 0 v 0 0 0 1 100 0 t 1 999 13 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 u 0/ 0 100 0 0 0 1/1 s 1/1 t 0/1 0 000 0 0 v 1/1 u 1/ 0 100 0 0 0 1/1 s 0/1 t 1/1 0 000 0 0 v 1/1 Gf 000 u 0 1 s 100 t 1 100 0 v u 9 99 1 1 s 100 0 v 0 0 0 1 100 0 t 1 999 13 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 Gf 000 u 0 1 s 100 t 1 100 0 v u 0/ 0 100 0 0 0 1/1 s 1/1 t 0/1 0 000 0 0 v 1/1 u 9 99 1 1 s 100 0 v u 1/ 0 100 0 0 0 1/1 s 0/1 t 1/1 0 000 0 0 v 1/1 ... 0 0 0 1 100 0 t 1 999 13 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 Gf 000 u 0 1 s 100 t 1 100 0 v u 0/ 0 100 0 0 0 1/1 s 1/1 t 0/1 0 000 0 0 v 1/1 u 9 99 1 1 s 100 0 v u 1/ 0 100 0 0 0 1/1 s 0/1 t 1/1 0 000 0 0 v 1/1 ... 0 0 0 1 100 0 t 1 999 Laufzeit ∈ Ω (|f ? | · E ) 13 Der Algorithmus von Edmonds & Karp return f Richard M. Karp *1935 Boston, MA Jack R. Edmonds *1934 FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg do W = s -t -Weg in Gf ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W 14 Der Algorithmus von Edmonds & Karp return f Richard M. Karp *1935 Boston, MA Jack R. Edmonds *1934 EdmondsKarp FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg do W = s -t -Weg in Gf ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W 14 Der Algorithmus von Edmonds & Karp return f Richard M. Karp *1935 Boston, MA Jack R. Edmonds *1934 EdmondsKarp FordFulkerson(DirectedGraph G = (V , E ; c ), Vertex s , Vertex t ) foreach uv ∈ E do fuv = 0 while Gf enthält s -t -Weg do W = kürzester s -t -Weg in Gf ∆W = minuv ∈W cf (uv ) foreach uv ∈ W do if uv ∈ E then fuv = fuv + ∆W else fv u = fv u − ∆W 14 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 15 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 Gf 000 u 0 1 s 100 t 1 100 0 v 0 0 0 1 15 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 Gf 000 u 0 1 s 100 t 1 100 0 v 0 0 0 1 15 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 v 000 u 0 1 s 100 t 1 100 0 v 0 0 0 1 0 t 0 0 Gf 0 15 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 0 v 0 000 u s 100 0 1 t 1 100 0 0 v 000 u s 0 0 0 1 100 0 1 t 0 Gf t 1 100 0 v 0 0 0 1 15 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 0 v 0 000 u s 100 0 1 t 1 100 0 0 v 000 u s 0 0 0 1 100 0 1 t 0 Gf t 1 100 0 v 0 0 0 1 15 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v t 1 100 0 v 000 u s 0 0 0 1 100 0 t 1 100 0 0 v 0 0 0 1 0 0 100 s 100 0 1 t 100 000 u 1 0 0 0 Gf t 0 0 0 1 15 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v 0 v 000 u s 0 0 0 1 100 0 0 v 000 u t s 0 0 0 1 100 0 1 t 0 0 0 1 1 100 0 t 1 100 0 0 100 s 100 0 1 t 100 000 u 1 0 0 0 Gf t 1 100 0 v 0 0 0 1 15 Beispiel G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v 0 v 000 u s 0 0 0 1 100 0 0 v 000 u t s 1 100 0 0 0 0 1 100 0 1 t 0 0 0 1 1 100 0 t 1 100 0 0 100 s 100 0 1 t 100 000 u 1 0 0 0 Gf v t 0 0 0 1 15 FERTIG! Beispiel Abstand von s = ? G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v 0 v 000 u s 0 0 0 1 100 0 0 v 000 u t s 1 100 0 0 0 0 1 100 0 1 t 0 0 0 1 1 100 0 t 1 100 0 0 100 s 100 0 1 t 100 000 u 1 0 0 0 Gf v t 0 0 0 1 15 FERTIG! Beispiel Abstand von s = 1 G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v 0 v 000 u s 0 0 0 1 100 0 0 v 000 u t s 1 100 0 0 0 0 1 100 0 1 t 0 0 0 1 1 100 0 t 1 100 0 0 100 s 100 0 1 t 100 000 u 1 0 0 0 Gf v t 0 0 0 1 15 FERTIG! Beispiel Abstand von s = 1 G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v 0 s v u 0 0 0 1 Abstand = 100 0 0 v 000 u t s 1 100 0 0 0 0 1 100 0 1 t t 1 100 0 0 0 1 0 1 0 100 1 100 0 0 100 s 000 t 100 000 u 1 0 0 0 Gf v t 0 0 0 1 15 FERTIG! Beispiel Abstand von s = 1 G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v 0 s v u 0 0 0 1 Abstand = 3 100 0 0 v 000 u t s 1 100 0 0 0 0 1 100 0 1 t t 1 100 0 0 0 1 0 1 0 100 1 100 0 0 100 s 000 t 100 000 u 1 0 0 0 Gf v t 0 0 0 1 15 FERTIG! Beispiel Abstand von s = 1 G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v 100 0 s 0 0 0 1 v u 0 0 0 1 Abstand = 3 100 0 t 1 0 t t 1 100 0 100 0 1 0 0 100 s 000 t 100 000 u 1 0 0 0 Gf v 0 0 0 1 Abstand = u 100 0 0 0 10 s t 1 100 0 0 0 0 v 1 15 FERTIG! Beispiel Abstand von s = 1 G u 0 / 0 100 0 0 0 0/1 s 0/1 t 0/1 0 000 0 0 v 0/1 0 0 0 1 s u 100 1 v 000 s u 0 v 100 0 s 0 0 0 1 v u 0 0 0 1 Abstand = 3 100 0 t 1 0 t t 1 100 0 100 0 1 0 0 100 s 000 t 100 000 u 1 0 0 0 Gf v 0 0 0 1 Abstand = ∞ u 100 0 0 0 10 s t 1 100 0 0 0 0 v 1 15 FERTIG! Kürzeste Wege machen effiziente Algorithmen! Def. Sei δf (u , v ) die Länge (= Anz. Kanten) eines kürzesten u -v -Wegs in Gf . 16 Kürzeste Wege machen effiziente Algorithmen! Def. Sei δf (u , v ) die Länge (= Anz. Kanten) eines kürzesten u -v -Wegs in Gf . Lemma. Während EdmondsKarp(G , s , t ) gilt für jeden Knoten v ∈ V , dass δf (s , v ) mit jeder Flussvergrößerung monoton zunimmt. 16 Kürzeste Wege machen effiziente Algorithmen! Def. Sei δf (u , v ) die Länge (= Anz. Kanten) eines kürzesten u -v -Wegs in Gf . Lemma. Während EdmondsKarp(G , s , t ) gilt für jeden Knoten v ∈ V , dass δf (s , v ) mit jeder Flussvergrößerung monoton zunimmt. Beweis. 16 Kürzeste Wege machen effiziente Algorithmen! Def. Sei δf (u , v ) die Länge (= Anz. Kanten) eines kürzesten u -v -Wegs in Gf . Lemma. Während EdmondsKarp(G , s , t ) gilt für jeden Knoten v ∈ V , dass δf (s , v ) mit jeder Flussvergrößerung monoton zunimmt. Beweis. Annahme: es gibt einen Knoten v derart, dass δ(s , v ) bei einer Flussvergrößerung abnimmt. 16 Kürzeste Wege machen effiziente Algorithmen! Def. Sei δf (u , v ) die Länge (= Anz. Kanten) eines kürzesten u -v -Wegs in Gf . Lemma. Während EdmondsKarp(G , s , t ) gilt für jeden Knoten v ∈ V , dass δf (s , v ) mit jeder Flussvergrößerung monoton zunimmt. Beweis. Annahme: es gibt einen Knoten v derart, dass δ(s , v ) bei einer Flussvergrößerung abnimmt. Seien f und f 0 die Flüsse vor bzw. nach der Vergrößerung. 16 Kürzeste Wege machen effiziente Algorithmen! Def. Sei δf (u , v ) die Länge (= Anz. Kanten) eines kürzesten u -v -Wegs in Gf . Lemma. Während EdmondsKarp(G , s , t ) gilt für jeden Knoten v ∈ V , dass δf (s , v ) mit jeder Flussvergrößerung monoton zunimmt. Beweis. Annahme: es gibt einen Knoten v derart, dass δ(s , v ) bei einer Flussvergrößerung abnimmt. Seien f und f 0 die Flüsse vor bzw. nach der Vergrößerung. Ab jetzt sei v ein Knoten mit minimalem Wert von δf 0 (s , v ) und δf 0 (s , v ) < δf (s , v ). 16 Kürzeste Wege machen effiziente Algorithmen! Def. Sei δf (u , v ) die Länge (= Anz. Kanten) eines kürzesten u -v -Wegs in Gf . Lemma. Während EdmondsKarp(G , s , t ) gilt für jeden Knoten v ∈ V , dass δf (s , v ) mit jeder Flussvergrößerung monoton zunimmt. Beweis. Annahme: es gibt einen Knoten v derart, dass δ(s , v ) bei einer Flussvergrößerung abnimmt. Seien f und f 0 die Flüsse vor bzw. nach der Vergrößerung. kleinster Schurke“ ” Ab jetzt sei v ein Knoten mit minimalem Wert von δf 0 (s , v ) und δf 0 (s , v ) < δf (s , v ). 16 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) u ist kein Schurke; Abstand nimmt nicht ab. 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. u ist kein Schurke; Abstand nimmt nicht ab. uv 6∈ Ef 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. u ist kein Schurke; Abstand nimmt nicht ab. uv 6∈ Ef Beweis. 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. u ist kein Schurke; Abstand nimmt nicht ab. uv 6∈ Ef Beweis. Angenommen uv ∈ Ef . 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. u ist kein Schurke; Abstand nimmt nicht ab. uv 6∈ Ef Beweis. Angenommen uv ∈ Ef . ⇒ 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. u ist kein Schurke; Abstand nimmt nicht ab. uv 6∈ Ef Beweis. Angenommen uv ∈ Ef . ⇒ δf (s , v ) ≤ δf (s , u ) + 1 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. uv 6∈ Ef u ist kein Schurke; Abstand nimmt nicht ab. Eig. kürzester Wege Beweis. Angenommen uv ∈ Ef . ⇒ δf (s , v ) ≤ δf (s , u ) + 1 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. uv 6∈ Ef u ist kein Schurke; Abstand nimmt nicht ab. Eig. kürzester Wege Beweis. Angenommen uv ∈ Ef . ⇒ δf (s , v ) ≤ δf (s , u ) + 1 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. uv 6∈ Ef u ist kein Schurke; Abstand nimmt nicht ab. Eig. kürzester Wege Beweis. Angenommen uv ∈ Ef . ⇒ δf (s , v ) ≤ δf (s , u ) + 1 ≤ δf 0 (s , u ) + 1 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. uv 6∈ Ef u ist kein Schurke; Abstand nimmt nicht ab. Eig. kürzester Wege Beweis. Angenommen uv ∈ Ef . ⇒ δf (s , v ) ≤ δf (s , u ) + 1 ≤ δf 0 (s , u ) + 1 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. uv 6∈ Ef u ist kein Schurke; Abstand nimmt nicht ab. Eig. kürzester Wege Beweis. Angenommen uv ∈ Ef . ⇒ δf (s , v ) ≤ δf (s , u ) + 1 ≤ δf 0 (s , u ) + 1 = δf 0 (s , v ) 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. uv 6∈ Ef u ist kein Schurke; Abstand nimmt nicht ab. Eig. kürzester Wege Beweis. Angenommen uv ∈ Ef . ⇒ δf (s , v ) ≤ δf (s , u ) + 1 ≤ δf 0 (s , u ) + 1 = δf 0 (s , v ) Widerspruch zur Annahme, dass δf 0 (s , v ) < δf (s , v ). 17 Fortsetzung Beweis Sei W ein kürzester s -v -Weg in Gf 0 . Sei u der letzte Knoten vor v auf W . ⇒ uv ∈ Ef 0 und δf 0 (s , v ) = δf 0 (s , u ) + 1. Nach Wahl von v gilt: δf 0 (s , u ) ≥ δf (s , u ) Beh. uv 6∈ Ef u ist kein Schurke; Abstand nimmt nicht ab. Eig. kürzester Wege Beweis. Angenommen uv ∈ Ef . ⇒ δf (s , v ) ≤ δf (s , u ) + 1 ≤ δf 0 (s , u ) + 1 = δf 0 (s , v ) Widerspruch zur Annahme, dass δf 0 (s , v ) < δf (s , v ). Aber was kann uv 6∈ Ef und uv ∈ Ef 0 erklären?? 17 Fortsetzung II 1. Fall: uv ∈ E 2. Fall: v u ∈ E 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet 2. Fall: v u ∈ E 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). 2. Fall: v u ∈ E 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet 2. Fall: v u ∈ E 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). 2. Fall: v u ∈ E 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. ⇒ δf (s , v ) = 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. ⇒ δf (s , v ) = δf (s , u ) − 1 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. [u kein Schurke] ⇒ δf (s , v ) = δf (s , u ) − 1 ≤ 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. [u kein Schurke] ⇒ δf (s , v ) = δf (s , u ) − 1 ≤ δf 0 (s , u ) − 1 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. [u kein Schurke] [u liegt auf W vor v ] ⇒ δf (s , v ) = δf (s , u ) − 1 ≤ δf 0 (s , u ) − 1 = 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. [u kein Schurke] [u liegt auf W vor v ] ⇒ δf (s , v ) = δf (s , u ) − 1 ≤ δf 0 (s , u ) − 1 = δf 0 (s , v ) − 2 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. [u kein Schurke] [u liegt auf W vor v ] ⇒ δf (s , v ) = δf (s , u ) − 1 ≤ δf 0 (s , u ) − 1 = δf 0 (s , v ) − 2 < 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. [u kein Schurke] [u liegt auf W vor v ] ⇒ δf (s , v ) = δf (s , u ) − 1 ≤ δf 0 (s , u ) − 1 = δf 0 (s , v ) − 2 < δf 0 (s , v ). 18 Fortsetzung II 1. Fall: uv ∈ E uv 6∈ Ef bedeutet f (uv ) = c (uv ). uv ∈ Ef 0 bedeutet f 0 (uv ) < c (uv ). Flussvergrößerung entlang v u ∈ Ef 2. Fall: v u ∈ E uv 6∈ Ef bedeutet f (v u ) = 0. uv ∈ Ef 0 bedeutet f 0 (v u ) > 0. Flussvergrößerung entlang v u ∈ Ef Der Fluss wird in beiden Fällen entlang v u vergrößert. Da EdmondsKarp entlang kürzester Wege vergrößert, muss v Vorgänger von u auf einem kürzesten s -u -Weg in Gf sein. [u kein Schurke] [u liegt auf W vor v ] ⇒ δf (s , v ) = δf (s , u ) − 1 ≤ δf 0 (s , u ) − 1 = δf 0 (s , v ) − 2 < δf 0 (s , v ). Widerspr. zur Ann. δf 0 (s , v ) < δf (s , v ). 18 Anzahl Flusserhöhungen & Laufzeit Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. 19 Anzahl Flusserhöhungen & Laufzeit Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Korollar. Der Edmonds-Karp-Algorithmus läuft in O (V E 2 ) Zeit. 19 Anzahl Flusserhöhungen & Laufzeit Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Korollar. Der Edmonds-Karp-Algorithmus läuft in O (V E 2 ) Zeit. Beweis. Jede der O (V E ) Flussvergrößerungen benötigt O (E ) Zeit bei Anwendung von Breitensuche. 19 Beweis (Satz) Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Algorithmus vergrößere entlang kürzestem s -t -Weg W in Gf . 20 Beweis (Satz) Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Algorithmus vergrößere entlang kürzestem s -t -Weg W in Gf . Kante uv auf W heißt kritisch in Gf , wenn cf (uv ) = ∆W . 20 Beweis (Satz) Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Algorithmus vergrößere entlang kürzestem s -t -Weg W in Gf . Kante uv auf W heißt kritisch in Gf , wenn cf (uv ) = ∆W . Zeige: Jede Kante kann höchstens O (V ) mal kritisch sein. 20 Beweis (Satz) Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Algorithmus vergrößere entlang kürzestem s -t -Weg W in Gf . Kante uv auf W heißt kritisch in Gf , wenn cf (uv ) = ∆W . Zeige: Jede Kante kann höchstens O (V ) mal kritisch sein. δf (s , v ) = δf (s , u ) + 1, da uv auf kürzestem Weg W in Gf . 20 Beweis (Satz) Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Algorithmus vergrößere entlang kürzestem s -t -Weg W in Gf . Kante uv auf W heißt kritisch in Gf , wenn cf (uv ) = ∆W . Zeige: Jede Kante kann höchstens O (V ) mal kritisch sein. δf (s , v ) = δf (s , u ) + 1, da uv auf kürzestem Weg W in Gf . Nach Flussvergrößerung entlang W verschwindet uv aus Gf . 20 Beweis (Satz) Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Algorithmus vergrößere entlang kürzestem s -t -Weg W in Gf . Kante uv auf W heißt kritisch in Gf , wenn cf (uv ) = ∆W . Zeige: Jede Kante kann höchstens O (V ) mal kritisch sein. δf (s , v ) = δf (s , u ) + 1, da uv auf kürzestem Weg W in Gf . Nach Flussvergrößerung entlang W verschwindet uv aus Gf . Die Kante uv erscheint erst wieder im Residualgraph, nachdem Fluss entlang v u vergrößert wurde ⇒ v u ∈ Ef 0 20 Beweis (Satz) Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Algorithmus vergrößere entlang kürzestem s -t -Weg W in Gf . Kante uv auf W heißt kritisch in Gf , wenn cf (uv ) = ∆W . Zeige: Jede Kante kann höchstens O (V ) mal kritisch sein. δf (s , v ) = δf (s , u ) + 1, da uv auf kürzestem Weg W in Gf . Nach Flussvergrößerung entlang W verschwindet uv aus Gf . Die Kante uv erscheint erst wieder im Residualgraph, nachdem Fluss entlang v u vergrößert wurde ⇒ v u ∈ Ef 0 20 Fortsetzung Beweis Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Da v u auf kürzestem flussvergrößerndem Weg in Gf 0 liegt, gilt δf 0 (s , u ) = δf 0 (s , v ) + 1 ≥ δf (s , v ) + 1 = δf (s , u ) + 2 21 Fortsetzung Beweis Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Da v u auf kürzestem flussvergrößerndem Weg in Gf 0 liegt, gilt δf 0 (s , u ) = δf 0 (s , v ) + 1 voriges Lemma ≥ δf (s , v ) + 1 = δf (s , u ) + 2 21 Fortsetzung Beweis Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Da v u auf kürzestem flussvergrößerndem Weg in Gf 0 liegt, gilt δf 0 (s , u ) = δf 0 (s , v ) + 1 uv auf W in Gf ≥ δf (s , v ) + 1 voriges Lemma = δf (s , u ) + 2 21 Fortsetzung Beweis Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Da v u auf kürzestem flussvergrößerndem Weg in Gf 0 liegt, gilt δf 0 (s , u ) = δf 0 (s , v ) + 1 uv auf W in Gf ≥ δf (s , v ) + 1 voriges Lemma = δf (s , u ) + 2 Also gilt δf (s , u ) ≤ |V | − 2, solange δf (s , u ) < +∞. 21 Fortsetzung Beweis Satz. EdmondsKarp(G , s , t ) führt O (V E ) Flussvergrößerungen durch. Beweis. Da v u auf kürzestem flussvergrößerndem Weg in Gf 0 liegt, gilt δf 0 (s , u ) = δf 0 (s , v ) + 1 uv auf W in Gf ≥ δf (s , v ) + 1 voriges Lemma = δf (s , u ) + 2 Also gilt δf (s , u ) ≤ |V | − 2, solange δf (s , u ) < +∞. ⇒ Die Kante uv kann nur O (V ) mal kritisch sein. 21 Kurze Geschichte der Berechnung max. Flüsse Methode Laufzeit O (·) Autoren Allgemeine gerichtete Graphen shortest resid. s -t path V E 2 Edmonds & Karp ’56 push relabel V 2E Goldberg ’87 relabel to front V3 Goldberg & Tarjan ’88 V E log(V 2 /E + 2) —”— blocking flow min(V 2/3 , E 1/2 ) · E · Goldberg &P Rao ’98 · log(V 2 /E + 2) · log C , wobei C = e ∈E c (e ) new VE Orlin ’13 shortest path in dual s-t-planare Graphen V Planare Graphen leftmost resid. s -t path V log V V log V + vertex capacities Hassin ’81 + Henzinger et al. ’97 Borradaile & Klein ’06 Kaplan & Nussbaum ’09 22 Kurze Geschichte der Berechnung max. Flüsse Methode Laufzeit O (·) Autoren Allgemeine gerichtete Graphen shortest resid. s -t path V E 2 Edmonds & Karp ’56 push relabel V 2E Goldberg ’87 relabel to front V3 Goldberg & Tarjan ’88 V E log(V 2 /E + 2) —”— blocking flow min(V 2/3 , E 1/2 ) · E · Goldberg &P Rao ’98 · log(V 2 /E + 2) · log C , wobei C = e ∈E c (e ) new VE Orlin ’13 shortest path in dual s-t-planare Graphen V Planare Graphen leftmost resid. s -t path V log V V log V + vertex capacities Hassin ’81 + Henzinger et al. ’97 Borradaile & Klein ’06 Kaplan & Nussbaum ’09 22 Kurze Geschichte der Berechnung max. Flüsse Methode Laufzeit O (·) Autoren Allgemeine gerichtete Graphen shortest resid. s -t path V E 2 Edmonds & Karp ’56 push relabel V 2E Goldberg ’87 relabel to front V3 Goldberg & Tarjan ’88 V E log(V 2 /E + 2) —”— blocking flow min(V 2/3 , E 1/2 ) · E · Goldberg &P Rao ’98 · log(V 2 /E + 2) · log C , wobei C = e ∈E c (e ) new VE Orlin ’13 shortest path in dual s-t-planare Graphen V Planare Graphen leftmost resid. s -t path V log V V log V + vertex capacities Hassin ’81 + Henzinger et al. ’97 Borradaile & Klein ’06 Kaplan & Nussbaum ’09 22 Kurze Geschichte der Berechnung max. Flüsse Methode Laufzeit O (·) Autoren Allgemeine gerichtete Graphen shortest resid. s -t path V E 2 Edmonds & Karp ’56 push relabel V 2E Goldberg ’87 relabel to front V3 Goldberg & Tarjan ’88 V E log(V 2 /E + 2) —”— blocking flow min(V 2/3 , E 1/2 ) · E · Goldberg &P Rao ’98 · log(V 2 /E + 2) · log C , wobei C = e ∈E c (e ) new VE Orlin ’13 shortest path in dual s-t-planare Graphen V Planare Graphen leftmost resid. s -t path V log V V log V + vertex capacities Hassin ’81 + Henzinger et al. ’97 Borradaile & Klein ’06 Kaplan & Nussbaum ’09 22 Kurze Geschichte der Berechnung max. Flüsse Methode Laufzeit O (·) Autoren Allgemeine gerichtete Graphen shortest resid. s -t path V E 2 Edmonds & Karp ’56 push relabel V 2E Goldberg ’87 relabel to front V3 Goldberg & Tarjan ’88 V E log(V 2 /E + 2) —”— blocking flow min(V 2/3 , E 1/2 ) · E · Goldberg &P Rao ’98 · log(V 2 /E + 2) · log C , wobei C = e ∈E c (e ) new VE Orlin ’13 shortest path in dual s-t-planare Graphen V Planare Graphen leftmost resid. s -t path V log V V log V + vertex capacities Hassin ’81 + Henzinger et al. ’97 Borradaile & Klein ’06 Kaplan & Nussbaum ’09 22 Kurze Geschichte der Berechnung max. Flüsse Methode Laufzeit O (·) Autoren Allgemeine gerichtete Graphen shortest resid. s -t path V E 2 Edmonds & Karp ’56 push relabel V 2E Goldberg ’87 relabel to front V3 Goldberg & Tarjan ’88 V E log(V 2 /E + 2) —”— blocking flow min(V 2/3 , E 1/2 ) · E · Goldberg &P Rao ’98 · log(V 2 /E + 2) · log C , wobei C = e ∈E c (e ) new VE Orlin ’13 shortest path in dual s-t-planare Graphen V Planare Graphen leftmost resid. s -t path V log V V log V + vertex capacities Hassin ’81 + Henzinger et al. ’97 Borradaile & Klein ’06 Kaplan & Nussbaum ’09 22 Kurze Geschichte der Berechnung max. Flüsse Methode Laufzeit O (·) Autoren Allgemeine gerichtete Graphen shortest resid. s -t path V E 2 Edmonds & Karp ’56 push relabel V 2E Goldberg ’87 relabel to front V3 Goldberg & Tarjan ’88 V E log(V 2 /E + 2) —”— blocking flow min(V 2/3 , E 1/2 ) · E · Goldberg &P Rao ’98 · log(V 2 /E + 2) · log C , wobei C = e ∈E c (e ) new VE Orlin ’13 shortest path in dual s-t-planare Graphen V Planare Graphen leftmost resid. s -t path V log V V log V + vertex capacities Hassin ’81 + Henzinger et al. ’97 Borradaile & Klein ’06 Kaplan & Nussbaum ’09 22