Algorytm Dinica - Dinic's algorithm

Algorytm Dinica lub algorytm Dinitza to silnie wielomianowy algorytm do obliczania maksymalnego przepływu w sieci przepływowej , wymyślony w 1970 roku przez izraelskiego (dawniej sowieckiego) informatyka Jefima (Chaima) A. Dinitza. Algorytm działa w czasie i jest podobny do algorytmu Edmondsa-Karpa , który działa w czasie, ponieważ używa najkrótszych ścieżek rozszerzających. Wprowadzenie pojęć grafu poziomu i przepływu blokującego umożliwia algorytmowi Dinica osiągnięcie odpowiedniej wydajności.

Historia

Yefim Dinitz wynalazł ten algorytm w odpowiedzi na przedklasowe ćwiczenie w klasie algorytmów Adelsona-Velsky'ego . Nie znał wówczas podstawowych faktów dotyczących algorytmu Forda-Fulkersona .

Dinitz wspomina o wynalezieniu swojego algorytmu w styczniu 1969 roku, który został opublikowany w 1970 roku w czasopiśmie Doklady Akademii Nauk SSSR . W 1974 roku Shimon Even i (jego ówczesny doktorant) Alon Itai z Technion w Hajfie byli bardzo ciekawi i zaintrygowani algorytmem Dinitza, a także powiązanym z nim pomysłem Aleksandra V. Karzanowa o blokowaniu przepływu. Trudno było im jednak rozszyfrować te dwa dokumenty, z których każdy był ograniczony do czterech stron, aby spełnić wymogi czasopisma Doklady Akademii Nauk SSSR . Nawet się nie poddał i po trzech dniach wysiłku zdołał zrozumieć oba artykuły, z wyjątkiem kwestii konserwacji sieci warstwowej. Przez kilka następnych lat Even prowadził wykłady na temat „Algorytmu Dinica”, błędnie wymawiając nazwisko autora podczas jego popularyzacji. Even i Itai również przyczynili się do tego algorytmu, łącząc BFS i DFS , w ten sposób algorytm jest obecnie powszechnie prezentowany.

Przez około 10 lat po wynalezieniu algorytmu Forda-Fulkersona nie było wiadomo, czy można go zakończyć w czasie wielomianowym w ogólnym przypadku niewymiernych możliwości krawędziowych. Spowodowało to brak jakiegokolwiek znanego algorytmu wielomianowego do rozwiązania problemu maksymalnego przepływu w ogólnych przypadkach. Zarówno algorytm Dinitza, jak i algorytm Edmondsa-Karpa (opublikowany w 1972 r.) niezależnie wykazały, że w algorytmie Forda-Fulkersona, jeśli każda ścieżka rozszerzająca jest najkrótsza, to długość ścieżek rozszerzających nie maleje, a algorytm zawsze się kończy.

Definicja

Niech być siecią z i pojemność i przepływ krawędzi , odpowiednio.

Pojemności resztkowej jest odwzorowaniem zdefiniowane jak
  1. jeśli ,
  2. Inaczej.
Pozostały wykres jest nieważony wykres , w którym
.
Zwiększając ścieżka jest - droga w resztkowym wykresie .
Zdefiniuj długość najkrótszej ścieżki od do in . Następnie wykres poziomu od jest wykres , w którym
.
Blokowania przepływu jest - przepływ tak, że wykres z nie zawiera - ścieżki.

Algorytm

Algorytm Dinica

Wejście : Sieć .
Wyjście : An – przepływ o wartości maksymalnej.
  1. Zestaw dla każdego .
  2. Skonstruować z o . Jeśli , zatrzymaj się i wyślij .
  3. Znajdź blokujący przepływ w .
  4. Dodaj przepływ augment przez i wróć do kroku 2.

Analiza

Można wykazać, że liczba warstw w każdym przepływie blokującym wzrasta za każdym razem o co najmniej 1, a zatem w algorytmie występują co najwyżej przepływy blokujące. Dla każdego z nich:

  • wykres poziomu może być skonstruowany przez wyszukiwanie wszerz w czasie
  • blokujący przepływ na wykresie poziomu można znaleźć w czasie

z całkowitym czasem działania dla każdej warstwy. W konsekwencji czas działania algorytmu Dinica wynosi .

Stosując strukturę danych zwaną dynamicznymi drzewami , czas znajdowania przepływu blokującego w każdej fazie można skrócić do, a zatem czas działania algorytmu Dinic można poprawić do .

Przypadki specjalne

W sieciach o pojemnościach jednostkowych obowiązuje znacznie silniejsza granica czasu. Każdy przepływ blokujący można znaleźć w czasie i można wykazać, że liczba faz nie przekracza i . W ten sposób algorytm działa w czasie.

W sieciach, które wynikają z problemu dopasowania dwudzielnego , liczba faz jest ograniczona przez , co prowadzi do ograniczenia czasowego. Powstały algorytm jest również znany jako algorytm Hopcrofta-Karpa . Mówiąc bardziej ogólnie, to ograniczenie obowiązuje dla dowolnej sieci jednostkowej — sieci, w której każdy wierzchołek, z wyjątkiem źródła i ujścia, ma albo pojedynczą wchodzącą krawędź pojemności 1, albo pojedynczą krawędź wychodzącą pojemności 1, a wszystkie inne pojemności są arbitralnymi liczbami całkowitymi .

Przykład

Poniżej znajduje się symulacja algorytmu Dinica. Na wykresie poziomu wierzchołki z etykietami w kolorze czerwonym są wartościami . Ścieżki w kolorze niebieskim tworzą przepływ blokujący.

1. Algorytm Dinic G1.svg Algorytm Dinic Gf1.svg Algorytm Dinic GL1.svg

Przepływ blokujący składa się z

  1. z 4 jednostkami przepływu,
  2. z 6 jednostkami przepływu i
  3. z 4 jednostkami przepływu.

Dlatego przepływ blokujący wynosi 14 jednostek, a wartość przepływu wynosi 14. Należy zauważyć, że każda ścieżka zwiększająca się w przepływie blokującym ma 3 krawędzie.

2. Algorytm Dinic G2.svg Algorytm Dinic Gf2.svg Algorytm Dinic GL2.svg

Przepływ blokujący składa się z

  1. z 5 jednostkami przepływu.

Dlatego przepływ blokujący wynosi 5 jednostek, a wartość przepływu wynosi 14 + 5 = 19. Zauważ, że każda ścieżka rozszerzająca ma 4 krawędzie.

3. Algorytm Dinic G3.svg Algorytm Dinic Gf3.svg Algorytm Dinic GL3.svg

Ponieważ nie można osiągnąć w , algorytm kończy działanie i zwraca przepływ o maksymalnej wartości 19. Należy zauważyć, że w każdym przepływie blokującym liczba krawędzi w ścieżce rozszerzającej wzrasta o co najmniej 1.

Zobacz też

Uwagi

Bibliografia