Algorytm Edmondsa-Karpa

Algorytm Edmondsa-Karpa (1) Animacja pokazująca przykładowe wykonanie algorytmu. W sieci przepływowej wartość przed ukośnikiem oznacza aktualny przepływ, a wartość po ukośniku – przepływ maksymalny. Ścieżka powiększająca oznaczana jest na pomarańczowo
Algorytm Edmondsa-Karpa, jeden arkusz (2) Ten sam przykład zaprezentowany na jednym obrazku (kliknij, aby powiększyć)

Algorytm Edmondsa-Karpa – algorytm wyszukiwania maksymalnego przepływu w sieci przepływowej. Jest to przypadek szczególny algorytmu Forda-Fulkersona.

W algorytmie Edmondsa-Karpa ścieżka powiększająca wyznaczana jest za pomocą przeszukiwania grafu wszerz. Dzięki temu w każdej iteracji algorytmu dołączana jest zawsze najkrótsza (pod względem liczby krawędzi) ścieżka powiększająca. W metodzie Forda-Fulkersona sposób wyznaczania ścieżki powiększającej jest dowolny.

Pojęcia

Aby zrozumieć algorytm Edmondsa-Karpa (i ogólnie metodę Forda-Fulkersona) konieczna jest znajomość następujących pojęć:

  • Sieć residualna – graf skierowany, w którym każdy łuk (krawędź skierowana) informuje, o ile można zmienić (zwiększyć bądź zmniejszyć) przepływ w danym łuku sieci przepływowej. Przykład: załóżmy, że w sieci przepływowej mamy łuk prowadzący z wierzchołka A do wierzchołka B o przepustowości 5, przy czym aktualnie wykorzystujemy przepustowość 2. Zakładamy też, że sieć nie zawiera łuku prowadzącego z B do A. W takim przypadku sieć residualna będzie zawierała łuk prowadzący z A do B o wartości 3 (o tyle możemy zwiększyć przepływ) oraz łuk prowadzący z B do A o wartości 2 (o tyle możemy zmniejszyć przepływ).
  • Ścieżka powiększająca – ścieżka prosta (tzn. nie przechodząca wielokrotnie przez ten sam wierzchołek) w sieci residualnej prowadząca od źródła do ujścia.
  • Przepustowość residualna ścieżki powiększającej – maksymalna wartość, o którą możemy zwiększyć przepływ na ścieżce powiększającej. Jest ona równa najmniejszej spośród wag łuków należących do ścieżki powiększającej.

Przebieg algorytmu

Algorytm ten przebiega w następująco:

  1. Tworzymy sieć residualną,
  2. Wyznaczamy ścieżkę powiększającą w sieci residualnej przeszukując ją wszerz,
  3. Jeśli nie da się wyznaczyć żadnej ścieżki powiększającej, kończymy działanie algorytmu. W przeciwnym razie modyfikujemy przepływ w sieci przepływowej o wartość residualną ścieżki powiększającej.

Złożoność czasowa algorytmu

Wyznaczenie ścieżki za pomocą przeszukiwania wszerz ma złożoność O(e) (e jest liczbą krawędzi). Liczba wykonań głównej pętli algorytmu jest rzędu O(ne) (n jest liczbą wierzchołków). Złożoność czasowa algorytmu Edmondsa-Karpa wynosi zatem O(ne2). Wyprowadzenie tych wartości można znaleźć w książce Wprowadzenie do algorytmów.

Bibliografia

  1. T.H. Cormen, Ch.E. Leiserson, R.L. Rivest, C. Stein, Wprowadzenie do algorytmów, Wydawnictwo Naukowe PWN, Warszawa, 2012.
  2. A. Debudaj-Grabysz, S. Deorowicz, J. Widuch, Algorytmy i struktury danych. Wybór zaawansowanych metod, Wydawnictwo Politechniki Śląskiej, Gliwice, 2012
Ocena: 0 Tak Nie
Liczba głosów: 0.

Dodano: 22 listopada 2017 18:04, ostatnia edycja: 12 grudnia 2017 15:57.

REKLAMA

Zobacz też

Metoda przyrostowa – technika projektowania algorytmów polegająca na dodawaniu do rozwiązania kolejnych elementów z danych wejściowych. Przykładem algorytmu opartego na tej metodzie jest sortowanie przez wstawianie, gdzie kolejne elementy są wstawiane do posortowanej części tablicy.

Jest to metoda prosta, jednak sprawdza się tylko dla niektórych problemów obliczeniowych.

→ Czytaj całość

Ten artykuł opisuje algorytm zachłanny rozwiązujący problem wydawania reszty. Algorytm ten polega na wybieraniu zawsze największej dostępnej monety, tzn. takiej, która nie jest większa od kwoty pozostałej do wydania.

Algorytm nie zawsze znajduje rozwiązanie optymalne. Przykładowo, dla zbioru nominałów {1, 3, 4} i kwoty 6 algorytm użyje najpierw monety o nominale 4 (pozostaje do wydania kwota 2), potem monety o nominale 1 (pozostaje kwota 1) i jeszcze raz monety o nominale 1. Łącznie algorytm użyje więc trzech monet, podczas gdy rozwiązanie optymalne wymaga użycia tylko dwóch (dwie monety o nominale 3).

→ Czytaj całość

Matroid – struktura matematyczna składająca się z niepustego zbioru elementów E i takiej rodziny jego podzbiorów I, że spełnione są następujące warunki:

  1. Jeśli jakiś zbiór należy do I, to wszystkie jego podzbiory także należą do I.
  2. Jeśli weźmiemy dowolne dwa zbiory należące do I o różnej liczbie elementów, to jesteśmy w stanie dodać do mniejszego z nich taki element z większego (spośród tych, które nie należą do mniejszego), że utworzony w ten sposób zbiór także będzie należał do I.

Drugi warunek, zwany własnością wymiany, formalnie może być zapisany jako:

$$⋀↙{A,B∊I}↙{ |A|>|B| }⋁↙{t∊(A-B)} B∪\{t\} ∈ I$$

Co istotne, rodzina zbiorów I nie musi zawierać wszystkich możliwych podzbiorów zbioru E. Ważne tylko, aby była spełniona własność wymiany. Przykładowo, dla E={a,b,c,d} prawidłową rodziną I, może być zarówno { {a,b}, {b,c}, {a}, {b}, {c}, ∅}, jak i { {a}, {b}, {c}, {d}, ∅}. Trywialnym przypadkiem poprawnego matroidu jest taki, w którym rodzina I zawiera jedynie zbiór pusty.

→ Czytaj całość
Polityka prywatnościKontakt