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
- jeśli ,
- Inaczej.
- jeśli ,
- 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.
- Zestaw dla każdego .
- Skonstruować z o . Jeśli , zatrzymaj się i wyślij .
- Znajdź blokujący przepływ w .
- 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.
Zobacz też
Uwagi
Bibliografia
- Jefima Dinitza (2006). „Dinitz” Algorytm: oryginalną wersję, a nawet jest wersja” (PDF) . W Oded Goldreich ; Arnold L. Rosenberg; Alan L. Selman (red.). Informatyka teoretyczna: Eseje ku pamięci Shimona Evena . Skoczek. s. 218–240. Numer ISBN 978-3-540-32880-3.
- Tarjan, RE (1983). Struktury danych i algorytmy sieciowe .
- BH Korte; Jensa Vygena (2008). „8.4 Blokowanie przepływów i algorytm Fujishige” . Optymalizacja kombinatoryczna: teoria i algorytmy (Algorytmy i kombinatoryka, 21) . Springer Berlin Heidelberg. s. 174–176. Numer ISBN 978-3-540-71844-4.