Grafem skierowanym. Typowe zastosowania grafów skierowanych obejmują wiele dziedzin:



Podobne dokumenty
Algorytmiczna teoria grafów Przepływy w sieciach.

Digraf. 13 maja 2017

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Sortowanie topologiczne skierowanych grafów acyklicznych

Matematyczne Podstawy Informatyki

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

5c. Sieci i przepływy

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Czy istnieje zamknięta droga spaceru przechodząca przez wszystkie mosty w Królewcu dokładnie jeden raz?

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

Algorytmiczna teoria grafów

a) 7 b) 19 c) 21 d) 34

Sieć (graf skierowany)

Matematyka dyskretna - 5.Grafy.

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy wyznaczania centralności w sieci Szymon Szylko

Suma dwóch grafów. Zespolenie dwóch grafów

Sieć (graf skierowany)

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Algorytmy i Struktury Danych.

Programowanie sieciowe. Tadeusz Trzaskalik

Matematyka dyskretna

Lista 4. Kamil Matuszewski 22 marca 2016

DWA ZDANIA O TEORII GRAFÓW. przepływ informacji tylko w kierunku

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Zagadnienie najkrótszej drogi w sieci

Grafy. Jeżeli, to elementy p i q nazywamy końcami krawędzi e. f a b c d e γ f {1} {1,2} {2,3} {2,3} {1,3}

Ogólne wiadomości o grafach

Algebrą nazywamy strukturę A = (A, {F i : i I }), gdzie A jest zbiorem zwanym uniwersum algebry, zaś F i : A F i

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Wstęp do programowania

SPÓJNOŚĆ. ,...v k. }, E={v 1. v k. i v k. ,...,v k-1. }. Wierzchołki v 1. v 2. to końce ścieżki.

Minimalne drzewa rozpinające

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

Graf. Definicja marca / 1

Grafy dla każdego. dr Krzysztof Bryś. Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska.

Szukanie najkrótszych dróg z jednym ródłem

1 Działania na zbiorach

Programowanie dynamiczne i algorytmy zachłanne

Wstp. Warto przepływu to

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Znajdowanie skojarzeń na maszynie równoległej

Algorytmy i Struktury Danych.

5. Najkrótsze ścieżki

Plan wykładu. Przykład. Przykład 3/19/2011. Przykład zagadnienia transportowego. Optymalizacja w procesach biznesowych Wykład 2 DECYZJA?

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Matematyka dyskretna - 7.Drzewa

ZAGADNIENIE TRANSPORTOWE

6. Wstępne pojęcia teorii grafów

Algorytmika Problemów Trudnych

Algorytmy grafowe. Wykład 1 Podstawy teorii grafów Reprezentacje grafów. Tomasz Tyksiński CDV

PROGRAMOWANIE SIECIOWE. METODA ŚCIEŻKI KRYTYCZNEJ

Algebra liniowa z geometrią

MODELE SIECIOWE 1. Drzewo rozpinające 2. Najkrótsza droga 3. Zagadnienie maksymalnego przepływu źródłem ujściem

Indukcja matematyczna. Zasada minimum. Zastosowania.

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska

Teoria grafów podstawy. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Podstawowe własności grafów. Wykład 3. Własności grafów

A. Kasperski, M. Kulej, Badania operacyjne, Wykład 4, Zagadnienie transportowe1

Programowanie liniowe

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa

Problemy Decyzyjne dla Systemów Nieskończonych

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Wstęp do programowania

Zagadnienia optymalizacji na grafach

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

1) Grafy eulerowskie własnoci algorytmy. 2) Problem chiskiego listonosza

Grafy i Zastosowania. 9: Digrafy (grafy skierowane) c Marcin Sydow

Rozdział 8 PROGRAMOWANIE SIECIOWE

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Macierze. Rozdział Działania na macierzach

Elementy teorii grafów Elementy teorii grafów

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV

Matematyka dyskretna - 8. Egzaminy próbne. Uwaga! Niektórych z tych zadań nie obejmuje program dla studiów zaocznych - proszę się tym nie niepokoić -

7. Teoria drzew - spinanie i przeszukiwanie

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

G. Wybrane elementy teorii grafów

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Kolorowanie wierzchołków grafu

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Zagadnienie transportowe

Grupy. Permutacje 1. (G2) istnieje element jednostkowy (lub neutralny), tzn. taki element e G, że dla dowolnego a G zachodzi.

Filogeneza: problem konstrukcji grafu (drzewa) zależności pomiędzy gatunkami.

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

ZAGADNIENIE TRANSPORTOWE(ZT)

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

TEORIA GIER W EKONOMII WYKŁAD 2: GRY DWUOSOBOWE O SUMIE ZEROWEJ. dr Robert Kowalczyk Katedra Analizy Nieliniowej Wydział Matematyki i Informatyki UŁ

Algorytmiczna teoria grafów

0 + 0 = 0, = 1, = 1, = 0.

Transkrypt:

Grafem skierowanym D (inaczej digrafem) nazywamy parę(v, A), gdzie V jest skończonym zbiorem wierzchołków, A jest zbiorem par uporządkowanych(u, v) o elementach ze zbioru V. Elementy zbioru A nazywamy łukami digrafu. Typowe zastosowania grafów skierowanych obejmują wiele dziedzin: Obszar Wierzchołek Łuk Internet strona link Telekomunikacja telefon połączenie Łańcuch pokarmowy gatunek zależność drapieżnik-ofiara Finanse papiery wartościowe transakcja Sieć urządzenie połączenie Plan miasta skrzyżowanie ulica jednokierunkowa Projekt zadanie relacja następstwa O łuku(u, v) mówimy, że prowadzi z pierwszego do drugiego wierzchołka w parze, czyli z u do v; wierzchołek u to początek łuku, v jego koniec (kolejność wierzchołków w parze ma znaczenie - określa kierunek danego łuku!). Stopień wejścia wierzchołka w digrafie to liczba łuków wchodzących do wierzchołka, ozn. deg + (v). Stopień wyjścia to liczba łuków wychodzących z niego, ozn. deg (v). W powyższym digrafie mamy deg + ()=, deg ()=, deg + ()=, deg ()=0. Pytanie, jakie często pada przy badaniu własności digrafów: czy jeden wierzchołek jest osiagalny z drugiego? Inaczej - czy z pierwszego wierzchołka można przejść do drugiego zgodnie z kierunkiem łuków? W tym digrafie, z wierzchołka do mamy połączenie (np. ), ale nie istnieje połączenie z do.

Ścieżka w digrafie D nazywamy ciąg(v, e, v, e,...,e k, v k+ ) wierzchołków i łuków digrafu D, w którym e i =(v i, v i+ ), dla i=,...,k. Jeżeli żaden z wierzchołków ścieżki się nie powtarza, to nazywamy ją droga. Dla uproszczenia zapisu, będziemy często podawali ścieżkę (drogę) w postaci ciągu wierzchołków. Ścieżka w digrafie D nazywamy ciąg(v, e, v, e,...,e k, v k+ ) wierzchołków i łuków digrafu D, w którym e i =(v i, v i+ ), dla i=,...,k. Jeżeli żaden z wierzchołków ścieżki się nie powtarza, to nazywamy ją droga. Dla uproszczenia zapisu, będziemy często podawali ścieżkę (drogę) w postaci ciągu wierzchołków. Cyklem w digrafie D nazywamy ciąg(v, e, v, e,...,e k, v k+ ) wierzchołków i różnych łuków digrafu D, w którym e i =(v i, v i+ ), dla i=,...,k, v = v k+, oraz wszystkie pozostałe wierzchołki są różne. Ścieżka w digrafie D nazywamy ciąg(v, e, v, e,...,e k, v k+ ) wierzchołków i łuków digrafu D, w którym e i =(v i, v i+ ), dla i=,...,k. Jeżeli żaden z wierzchołków ścieżki się nie powtarza, to nazywamy ją droga. Dla uproszczenia zapisu, będziemy często podawali ścieżkę (drogę) w postaci ciągu wierzchołków. Cyklem w digrafie D nazywamy ciąg(v, e, v, e,...,e k, v k+ ) wierzchołków i różnych łuków digrafu D, w którym e i =(v i, v i+ ), dla i=,...,k, v = v k+, oraz wszystkie pozostałe wierzchołki są różne. Ścieżka w digrafie D nazywamy ciąg(v, e, v, e,...,e k, v k+ ) wierzchołków i łuków digrafu D, w którym e i =(v i, v i+ ), dla i=,...,k. Jeżeli żaden z wierzchołków ścieżki się nie powtarza, to nazywamy ją droga. Dla uproszczenia zapisu, będziemy często podawali ścieżkę (drogę) w postaci ciągu wierzchołków. Cyklem w digrafie D nazywamy ciąg(v, e, v, e,...,e k, v k+ ) wierzchołków i różnych łuków digrafu D, w którym e i =(v i, v i+ ), dla i=,...,k, v = v k+, oraz wszystkie pozostałe wierzchołki są różne. Droga:(,, ), cykl:(,,, ),(,, ),... ale nie jest drogą ciąg np.(,,, ). Zarówno droga (ścieżka) jak i cykl muszą uwzględniać kierunek łuków (często aby to podkreślić, mówi się, że droga (cykl) jest skierowany).

Problem wyznaczania najkrótszych ścieżek Problem: dana jest sieć połączeń, każde połączenie ma przypisany pewien koszt (np. czas, odległość, itp.). Dla ustalonego elementu sieci, jak wyznaczyć ścieżkę o najmniejszym koszcie do każdego innego elementu w sieci? Problem wyznaczania najkrótszych ścieżek Problem: dana jest sieć połączeń, każde połączenie ma przypisany pewien koszt (np. czas, odległość, itp.). Dla ustalonego elementu sieci, jak wyznaczyć ścieżkę o najmniejszym koszcie do każdego innego elementu w sieci? Model: digraf, w którym wierzchołki reprezentują elementy sieci, łuki połączenia, koszt to waga w przypisana do danego łuku. Dla ustalonego wierzchołka v digrafu chcemy wyznaczyć najkrótszą ścieżkę (czyli ścieżkę o najmniejszej wadze, rozumianej jako suma wag jej łuków) do każdego innego wierzchołka w digrafie. Problem wyznaczania najkrótszych ścieżek Problem: dana jest sieć połączeń, każde połączenie ma przypisany pewien koszt (np. czas, odległość, itp.). Dla ustalonego elementu sieci, jak wyznaczyć ścieżkę o najmniejszym koszcie do każdego innego elementu w sieci? Model: digraf, w którym wierzchołki reprezentują elementy sieci, łuki połączenia, koszt to waga w przypisana do danego łuku. Dla ustalonego wierzchołka v digrafu chcemy wyznaczyć najkrótszą ścieżkę (czyli ścieżkę o najmniejszej wadze, rozumianej jako suma wag jej łuków) do każdego innego wierzchołka w digrafie. Niech D=(V, A, w) będzie digrafem ważonym (w jest funkcją przypisującą wagi łukom digrafu). Najkrótsza ścieżka z u do v w digrafie D nazywamy ścieżkę z u do v o najmniejszej wadze w D (waga ścieżki jest definiowana jako suma wag łuków). Najkrótsza ścieżka z do w tym digrafie to (,,, ) (decyduje waga ścieżki, a nie jej długość). Problem: najkrótsze ścieżki z jednego źródła. Dla digrafu ważonego D i źródłowego wierzchołka s chcemy wskazać najkrótszą ścieżkę (o minimalnej łącznej wadze) z wierzchołka źródłowego do każdego innego, osiągalnego z s, wierzchołka digrafu.

Uwaga. jeżeli dopuszczamy ujemne wagi łuków, to najkrótsze ścieżki mogą nie być dobrze zdefiniowane. Dla przykładu, w tym digrafie mamy cykl c=(,, ), którego waga jest ujemna. Niech p będzie ścieżką z do, zawierającą łuki e, e, e. Waga p wynosi. Czy jest to najkrótsza ścieżka z do? Nie, ponieważ jeżeli przejdziemy po cyklu c, otrzymamy ścieżkę z do o mniejszej wadze, przechodząc po cyklu po raz drugi, dostajemy ścieżkę o mniejszej wadze, niż poprzednio, itd. Zatem w tym digrafie najkrótsza ścieżka z do nie jest dobrze określona. Uwaga. jeżeli dopuszczamy ujemne wagi łuków, to najkrótsze ścieżki mogą nie być dobrze zdefiniowane. Dla przykładu, w tym digrafie mamy cykl c=(,, ), którego waga jest ujemna. Niech p będzie ścieżką z do, zawierającą łuki e, e, e. Waga p wynosi. Czy jest to najkrótsza ścieżka z do? Nie, ponieważ jeżeli przejdziemy po cyklu c, otrzymamy ścieżkę z do o mniejszej wadze, przechodząc po cyklu po raz drugi, dostajemy ścieżkę o mniejszej wadze, niż poprzednio, itd. Zatem w tym digrafie najkrótsza ścieżka z do nie jest dobrze określona. e e - e e - e e e e Problem: najkrótsze ścieżki z jednego źródła. Dla digrafu ważonego D i źródłowego wierzchołka s chcemy wskazać najkrótszą ścieżkę (o minimalnej łącznej wadze) z wierzchołka źródłowego do każdego innego, osiągalnego z s, wierzchołka digrafu. Problem: najkrótsze ścieżki z jednego źródła. Dla digrafu ważonego D i źródłowego wierzchołka s chcemy wskazać najkrótszą ścieżkę (o minimalnej łącznej wadze) z wierzchołka źródłowego do każdego innego, osiągalnego z s, wierzchołka digrafu. Dalej będziemy zakładać, że w digrafie nie ma cykli o ujemnej wadze.

Problem: najkrótsze ścieżki z jednego źródła. Dla digrafu ważonego D i źródłowego wierzchołka s chcemy wskazać najkrótszą ścieżkę (o minimalnej łącznej wadze) z wierzchołka źródłowego do każdego innego, osiągalnego z s, wierzchołka digrafu. Dalej będziemy zakładać, że w digrafie nie ma cykli o ujemnej wadze. Drzewo najkrótszych ścieżek (SPT) o korzeniu w wierzchołku s definiujemy jako poddigraf D =(V, A, w ) digrafu D, gdzie V jest zbiorem wierzchołków osiągalnych z s, D jest drzewem z korzeniem s, oraz dla każdego wierzchołka v V, droga z s do v w D jest najkrótszą drogą z s do v w digrafie D. Innymi słowy, SPT dla wierzchołka s to drzewo z korzeniem w s zawierające najkrótsze ścieżki z s do wszystkich wierzchołków osiągalnych z s w digrafie D. Do rozwiązania problemu kluczowa jest obserwacja, że mając daną najkrótszą ścieżkę, każdy jej fragment też jest najkrótszą ścieżką: Lemat () Niech D=(V, A, w) będzie digrafem ważonym, p=(v,...,v k ) najkrótsza ścieżka z v do v k. Wówczas dla dowolnych i<j k, ścieżka(v i,...,v j ) jest też najkrótsza ścieżka z v i do v j. Dowód. Niech p ab oznacza fragment ścieżki p od wierzchołka v a do v b. Ścieżkę p można zdekomponować na p i, p ij oraz p jk : p v i p ij p jk vi v j v k. Wówczas w(p)=w(p i )+w(p ij )+w(p jk ). Gdyby istniała krótsza ścieżka p i między parą wierzchołków v, v i niż ścieżka p i, to biorąc taką ścieżkę zamiast p i otrzymalibyśmy ścieżkę z v do v k o mniejszej wadze, niż p, a to jest sprzeczne z wyborem p jako najkrótszej ścieżki. W analogiczny sposób dochodzimy do sprzeczności w przypadku, gdy istnieje krótsza ścieżka z v i do v j albo z v j do v k. Technika relaksacji łuku Niech dany będzie digraf D=(V, A, w), bez cykli o ujemnej wadze, wierzchołek źródłowy s. Każdemu wierzchołkowi v digrafu przypiszmy atrybut d[v] - szacunkowa długość najkrótszej drogi z s do v. Wartość d[v] jest ograniczeniem górnym dla długości najkrótszej drogi z s do v. Inicjalizujemy wartości d[v] następująco: d[s]:= 0; dla każdego wierzchołka v V, v s, d[v]:=. Relaksacja łuku(u, v) polega na sprawdzeniu, czy droga do wierzchołka v poprzez u jest krótsza, niż najkrótsza dotychczas znaleziona, i jeżeli tak, to odpowiednim poprawieniu wartości d[v], tzn. jeżeli d[v]>d[u]+w(u, v), to d[v]:= d[u]+w(u, v); w przeciwnym przypadku (gdy d[v] d[u]+w(u, v)) łuk(u, v) nazywamy niewybieralnym. Algorytm Dijkstry Niech D będzie digrafem ważonym, w którym wszystkie wagi są nieujemne. Algorytm Dijkstry wyznaczania drzewa najkrótszych ścieżek (SPT) z wierzchołka źródłowego s. Idea algorytmu: Inicjujemy wartości d[v]: dla wszystkich wierzchołków digrafu podstawiamy, dla wierzchołka źródłowego d[s]:= 0. Wybieramy wierzchołek spoza drzewa znajdujący się najbliżej wierzchołka s (tzn. taki wierzchołek u, dla którego d[u] jest najmniejsza); dodajemy u do drzewa. Dla każdego łuku(u, v) wychodzacego z u wykonujemy relaksację; jeżeli d[v]>d[u]+w(u, v), to d[v]:= d[u]+w(u, v), w przeciwnym przypadku łuk(u, v) jest niewybieralny. powtarzamy krok drugi, aż wszystkie wierzchołki znajdą się w drzewie, albo żaden z wierzchołków spoza drzewa nie będzie miał skończonej wartości d[v].

Input: digraf ważony D, wierzchołek źródłowy s. Output: drzewo najkrótszych ścieżek dla s, reprezentowane za pomocą tablicy poprzednik[]. kolejka Q jest kolejka priorytetowa, zawierajac a wierzchołki uporzadkowane wg wartości d[v] indeksowana wierzchołkami tablica poprzednik[] element poprzednik[u] przechowuje indeks wierzchołka - rodzica wierzchołka u w drzewie SPT. dla każdego wierzchołka v digrafu do d[v]:= ;. d[s]:= 0;. dodaj do kolejki Q wierzchołek s;. while kolejka Q nie jest pusta do. zdejmij pierwszy wierzchołek u z kolejki Q; //zdejmujemy z kolejki wierzchołek u, dla którego d[u] jest najmniejsze. dla każdego łuku (u,v) do 7. if d[v] > d[u] + w(u,v) then //relaksacja łuku (u,v) 8. d[v]:= d[u] + w(u,v); 9. poprzednik[v]:=u; //rodzicem dla v jest u 0. if v nie należy do Q, then dodaj v do Q; 0 0 0

0 0 0 0

0 0 Przepływy w sieciach Twierdzenie Przy wyznaczaniu drzewa SPT o korzeniu w danym wierzchołku digrafu ważonego D, bez wag ujemnych, o m łukach i n wierzchołkach, algorytm Dijkstry działa w czasie proporcjonalnym do m log n (dla najgorszego przypadku). Przykład. Rozważmy sieć kanałów (rurek), którymi płynie ciecz, przy czym przepływ cieczy jest dozwolony tylko w jedną stronę. Każdy kanał (rurka) ma określoną przepustowość (na jednostkę czasu). Model dla sieci tego typu: digraf, którego wierzchołki odpowiadają skrzyżowaniom kanałów (połączeniom rurek), natomiast łuki odpowiadają kanałom, a waga łuku odpowiada przepustowości danego kanału. Zakładamy także, że przepływ nie może się kumulować w punktach połączeń. Mając dane dwa miejsca w sieci, powiedzmy s i t, pytamy o nawiększy przepływ (na jednostkę czasu) z punktu s do t.

Przepływy w sieciach Możliwe zastosowania: badanie natężenia ruchu ulicznego (łuki - ulice, waga łuku to przepustowość danej ulicy, pytamy ile pojazdów może przejechać z punktu A do B w określonym czasie); sieci komputerowe (łuki to łącza o określonej przepustowości); sieci elektryczne (jakie jest maksymalne natężenie prądu w danej sieci, jeżeli znamy maksymalne dopuszczalne natężenia prądu dla poszczególnych przewodów); sieci transportowe (ile towarów można przesłać w danym czasie), itp. Przepływy w sieciach Sieć definiujemy jako digraf D, w którym każdy łuk e ma przypisaną liczbą rzeczywistą nieujemną c(e), nazywaną przepustowościa; mamy dokładnie jedno źródło s (czyli wierzchołek o stopniu wejścia równym 0) oraz dokładnie jedno ujście t (stopień wyjścia równy 0). Przepływ w sieci D jest to funkcja f, która każdemu łukowi e sieci przypisuje liczbę rzeczywistą f(e) (przepływ wzdłuż łuku e). Sumę przepływów wzdłuż łuków wychodzących z wierzchołka u ozn. f (u), a sumę przepływów wzdłuż łuków wchodzących do wierzchołka u ozn. f + (u). Przepływ f jest dopuszczalny, jeżeli spełnia warunki: (i) 0 f(e) c(e) dla każdego łuku e (przepustowość); (ii) f (u)=f + (u) dla każdego wierzchołka u {s, t} (zachowanie przepływu). Maksymalny przepływ w sieci Niech D będzie siecią o źródle s i ujściu t. Wartościa przepływu f, ozn. val(f), nazywamy liczbę f + (t), czyli sumę wartości przepływów wzdłuż łuków wchodzących do ujścia t. Przepływ maksymalny jest to dopuszczalny przepływ o maksymalnej wartości. Zauważmy, że jeśli przepływ f jest dopuszczalny, to f (s)=f + (t). Przepływ zerowy to przepływ o wielkości przepływu równej 0 dla każdego łuku. Łuki dla których f(e)=c(e) nazywamy nasyconymi. Maksymalny przepływ w sieci Niech D będzie siecią o źródle s i ujściu t. Wartościa przepływu f, ozn. val(f), nazywamy liczbę f + (t), czyli sumę wartości przepływów wzdłuż łuków wchodzących do ujścia t. Przepływ maksymalny jest to dopuszczalny przepływ o maksymalnej wartości. Zauważmy, że jeśli przepływ f jest dopuszczalny, to f (s)=f + (t). Przepływ zerowy to przepływ o wielkości przepływu równej 0 dla każdego łuku. Łuki dla których f(e)=c(e) nazywamy nasyconymi. s () (0) u () () () v y (0) () t Przepływ dopuszczalny f : f(s, )=f(v, t)=0, f(e)=dla pozostałych łuków. Wartość przepływu val(f) =. Wielkości przepływów wzdłuż łuków podane są w nawiasach.

Maksymalny przepływ w sieci Niech D będzie siecią o źródle s i ujściu t. Wartościa przepływu f, ozn. val(f), nazywamy liczbę f + (t), czyli sumę wartości przepływów wzdłuż łuków wchodzących do ujścia t. Przepływ maksymalny jest to dopuszczalny przepływ o maksymalnej wartości. Zauważmy, że jeśli przepływ f jest dopuszczalny, to f (s)=f + (t). Przepływ zerowy to przepływ o wielkości przepływu równej 0 dla każdego łuku. Łuki dla których f(e)=c(e) nazywamy nasyconymi. Ścieżki powiększajace Szkielet digrafu D - graf otrzymany z D po usunięciu orientacji łuków (czyli każdy łuk zastępujemy odpowiednią krawędzią). s () () u () (0) v () () t Przepływ dopuszczalny f, wartość tego przepływu val(f )=. Przepływ f jest maksymalny. Łuki nasycone to(u, v),(, y). () y Ścieżki powiększajace Ścieżki powiększajace Niech f będzie dopuszczalnym przepływem w sieci D. Ścieżkę P w grafie G, będącym szkieletem sieci D, od źródła s do ujścia t nazywamy f -powiększajac a, jeżeli dla każdej krawędzi e ścieżki P zachodzi. jeżeli krawędzi ścieżki odpowiada w sieci łuk o kierunku "zgodnym z kierunkiem ścieżki", to f(e)<c(e);. jeżeli krawędzi ścieżki odpowiada w sieci łuk o kierunku "przeciwnym do kierunku ścieżki", to f(e)>0. Niech f będzie dopuszczalnym przepływem w sieci D. Ścieżkę P w grafie G, będącym szkieletem sieci D, od źródła s do ujścia t nazywamy f -powiększajac a, jeżeli dla każdej krawędzi e ścieżki P zachodzi. jeżeli krawędzi ścieżki odpowiada w sieci łuk o kierunku "zgodnym z kierunkiem ścieżki", to f(e)<c(e);. jeżeli krawędzi ścieżki odpowiada w sieci łuk o kierunku "przeciwnym do kierunku ścieżki", to f(e)>0. Niech f (e)=c(e) f(e), jeżeli łuk e ma kierunek zgodny z P, f (e)=f(e), jeżeli łuk e ma kierunek przeciwny do P. Wówczas tolerancję ścieżki P definiujemy jako min e E(P) {f (e)}.

Ścieżki powiększajace Niech f będzie dopuszczalnym przepływem w sieci D. Ścieżkę P w grafie G, będącym szkieletem sieci D, od źródła s do ujścia t nazywamy f -powiększajac a, jeżeli dla każdej krawędzi e ścieżki P zachodzi. jeżeli krawędzi ścieżki odpowiada w sieci łuk o kierunku "zgodnym z kierunkiem ścieżki", to f(e)<c(e);. jeżeli krawędzi ścieżki odpowiada w sieci łuk o kierunku "przeciwnym do kierunku ścieżki", to f(e)>0. Niech f (e)=c(e) f(e), jeżeli łuk e ma kierunek zgodny z P, f (e)=f(e), jeżeli łuk e ma kierunek przeciwny do P. Wówczas tolerancję ścieżki P definiujemy jako min e E(P) {f (e)}. Jeżeli mamy ścieżkę f -powiększającą P, to możemy jej użyć do skonstruowania przepływu o wartości większej od val(f) o wartość równą tolerancji ścieżki P (która jest zawsze liczbą dodatnią). Ścieżki powiększajace s () (0) u () () () v y (0) () Ścieżka f -powiększająca: idziemy z wierzchołka s do, dalej do v i do t. Tolerancja tej ścieżki wynosi. Jeżeli zwiększymy przepływ wzdłuż łuków(s, ) i(v, t) o, a zmniejszymy na łuku(v, ) o, to otrzymamy przepływ f o wartości równej val(f)+=. t Lemat Niech P będzie f -powiększajac a ścieżka o tolerancji z. Wówczas jeżeli zmienimy przepływ f następujaco: na łukach o kierunkach zgodnych z P o wartość+z, na łukach przeciwnych o wartość z, to otrzymamy przepływ dopuszczalny f o wartości val(f )=val(f)+z. Lemat Niech P będzie f -powiększajac a ścieżka o tolerancji z. Wówczas jeżeli zmienimy przepływ f następujaco: na łukach o kierunkach zgodnych z P o wartość+z, na łukach przeciwnych o wartość z, to otrzymamy przepływ dopuszczalny f o wartości val(f )=val(f)+z. Dowód. Pokażemy, że f jest dopuszczalnym przepływem oraz val(f )=val(f)+z. Z definicji tolerancji mamy, że dla każdego łuku e, 0 f (e) c(e), zatem warunek (i) przepustowości jest spełniony. Trzeba pokazać, że zachodzi też warunek (ii) zachowania przepływu. Wystarczy sprawdzić wierzchołki wewnętrzne leżące na ścieżce P (dla pozostałych przepływy się nie zmieniły).

Lemat Niech P będzie f -powiększajac a ścieżka o tolerancji z. Wówczas jeżeli zmienimy przepływ f następujaco: na łukach o kierunkach zgodnych z P o wartość+z, na łukach przeciwnych o wartość z, to otrzymamy przepływ dopuszczalny f o wartości val(f )=val(f)+z. Dowód. Pokażemy, że f jest dopuszczalnym przepływem oraz val(f )=val(f)+z. Z definicji tolerancji mamy, że dla każdego łuku e, 0 f (e) c(e), zatem warunek (i) przepustowości jest spełniony. Trzeba pokazać, że zachodzi też warunek (ii) zachowania przepływu. Wystarczy sprawdzić wierzchołki wewnętrzne leżące na ścieżce P (dla pozostałych przepływy się nie zmieniły). Dla dowolnego wewnętrznego wierzchołka ścieżki P, może zajść jedna z poniższych sytuacji: Lemat Niech P będzie f -powiększajac a ścieżka o tolerancji z. Wówczas jeżeli zmienimy przepływ f następujaco: na łukach o kierunkach zgodnych z P o wartość+z, na łukach przeciwnych o wartość z, to otrzymamy przepływ dopuszczalny f o wartości val(f )=val(f)+z. Dowód. Pokażemy, że f jest dopuszczalnym przepływem oraz val(f )=val(f)+z. Z definicji tolerancji mamy, że dla każdego łuku e, 0 f (e) c(e), zatem warunek (i) przepustowości jest spełniony. Trzeba pokazać, że zachodzi też warunek (ii) zachowania przepływu. Wystarczy sprawdzić wierzchołki wewnętrzne leżące na ścieżce P (dla pozostałych przepływy się nie zmieniły). Dla dowolnego wewnętrznego wierzchołka ścieżki P, może zajść jedna z poniższych sytuacji: + + + - + + + - - + - - - + - - W każdej z nich, zmiana przepływu na łuku wchodzącym do jest taka sama, jak na łuku wychodzącym, zatem f ()=f + (). Z kolei suma przepływów na łukach wchodzących do ujścia zwiększa się o z. Niech dana będzie sieć D, niech s będzie źródłem, t będzie ujściem w D. Przekrojem[S, T] w sieci D nazywamy zbiór zawierający wszystkie łuki ze zbioru S do zbioru T, gdzie S T= V i S T= oraz s S, t T. Przepustowość przekroju[s, T] definiujemy jako sumę przepustowości łuków zawartych w[s, T], ozn. cap(s, T). Uwaga. do przekroju należą tylko te łuki, których koniec leży w zbiorze S, a początek w T, więc łuki z S do T nie mają wpływu na przepustowość tego przekroju. Niech dana będzie sieć D, niech s będzie źródłem, t będzie ujściem w D. Przekrojem[S, T] w sieci D nazywamy zbiór zawierający wszystkie łuki ze zbioru S do zbioru T, gdzie S T= V i S T= oraz s S, t T. Przepustowość przekroju[s, T] definiujemy jako sumę przepustowości łuków zawartych w[s, T], ozn. cap(s, T). Uwaga. do przekroju należą tylko te łuki, których koniec leży w zbiorze S, a początek w T, więc łuki z S do T nie mają wpływu na przepustowość tego przekroju. Twierdzenie Jeżeli f jest dopuszczalnym przepływem, natomiast[s, T] przekrojem, to val(f) cap(s, T).

Niech dana będzie sieć D, niech s będzie źródłem, t będzie ujściem w D. Przekrojem[S, T] w sieci D nazywamy zbiór zawierający wszystkie łuki ze zbioru S do zbioru T, gdzie S T= V i S T= oraz s S, t T. Przepustowość przekroju[s, T] definiujemy jako sumę przepustowości łuków zawartych w[s, T], ozn. cap(s, T). Uwaga. do przekroju należą tylko te łuki, których koniec leży w zbiorze S, a początek w T, więc łuki z S do T nie mają wpływu na przepustowość tego przekroju. Twierdzenie Jeżeli f jest dopuszczalnym przepływem, natomiast[s, T] przekrojem, to val(f) cap(s, T). Wyznaczanie maksymalnego przekroju. Algorytm Forda-Fulkersona Idea algorytmu: () zaczynamy od przepływu zerowego (który jest zawsze dopuszczalny); () mając dany przepływ dopuszczalny, szukamy ścieżki powiększającej; jeżeli taka ścieżka istnieje, to wykorzystujemy ją do skonstruowania przepływu o większej wartości; () jeżeli nie istnieje ścieżka powiększająca, to otrzymaliśmy maksymalny przepływ. Z powyższego twierdzenia wynika, że maksymalny przepływ w sieci nie może przekraczać przepustowości minimalnego przekroju. Algorytm Forda-Fulkersona (algorytm etykietujacy) Input: sieć D oraz dopuszczalny przepływ f. Output: ścieżka f-poszerzająca albo przekrój o przepustowości równej val(f). W trakcie działania algorytmu konstruujemy dwa zbiory: R, wierzchołki odwiedzone i S, wierzchołki przeszukane, S R. () R={s}, S= ; () wybieramy dowolny wierzchołek v R\S; () dla każdego łuku vw wychodzącego z v, jeżeli f(v, w)<c(v, w) i w R, to dodaj w do R; () dla każdego łuku uv wchodzącego do v, jeżeli f(u, v)>0 i u R, to dodaj u do R; każdy wierzchołek dodany do R oznaczamy jako odwiedzony i zapisujemy v jako wierzchołek, z którego dotarliśmy do () jeżeli przeszukano wszystkie łuki dla v, to dodaj v do S; (7) jeżeli ujście t R, to odtwórz ścieżkę P kończącą się w s (to ścieżka f-powiększająca); zwróć P i zakończ; (8) jeżeli R=S, to zwróć przekrój [S, S] i zakończ; (9) w przeciwnym przypadku, wróć do (). Twierdzenie Forda-Fulkersona o minimalnym przekroju i maksymalnym przepływie Twierdzenie (Ford-Fulkerson, 9) W dowolnej sieci, wartość maksymalnego dopuszczalnego przepływu jest równa minimalnej przepustowości przekroju.

Twierdzenie Forda-Fulkersona o minimalnym przekroju i maksymalnym przepływie Twierdzenie (Ford-Fulkerson, 9) W dowolnej sieci, wartość maksymalnego dopuszczalnego przepływu jest równa minimalnej przepustowości przekroju. Podany wcześniej algorytm etykietujący może zapętlić się w przypadku sieci o przepustowościach będących liczbami niewymiernymi. Można wtedy zastosować algorytm, który zaproponowali Edmonds i Karp (w roku 97), będący modyfikacją algorytmu Forda-Fulkersona. Algorytm Forda-Fulkersona w przypadku sieci o przepustowościach będących liczbami całkowitymi działa w czasieo(m val(f )), gdzie f jest maksymalnym przepływem.