Bellman-Ford Algorytm-Wikipedia
L ‘ Algorytm Bellman-Ford , nazywane również Bellman – Ford – Algorytm Moore [[[ 3 ] , jest algorytmem, który oblicza najkrótsze ścieżki z danego szczytu źródłowego na ważonym wykresie zorientowanym. Nosi nazwę swoich wynalazców Richard Bellman i Lester Randolph Ford Junior (publikacje w 1956 i 1958 r.) Oraz Edwarda Forresta Moore’a, który odkrył go na nowo w 1959 roku.
W przeciwieństwie do algorytmu Dijkstra, algorytm Bellmana-Ford zezwala na obecność niektórych negatywnych łuków wagowych i umożliwia wykrycie istnienia obwodu chłonnego, to znaczy o ściśle ujemnej całkowitej wadze, dostępnej ze szczytu źródłowego.
Złożoność algorytmu jest w
Lub
to liczba szczytów
to liczba łuków.
Oblicza się algorytm Bellman-Ford, biorąc pod uwagę wykres
Bez ujemnego cyklu masy i szczytu źródłowego
, krótsza ścieżka
Na każdym szczycie
. Pozwala także takiej ścieżki na znalezienie poprzedników każdego szczytu na takiej ścieżce. Ponadto umożliwia wykrycie przypadków, w których występuje ujemny cykl masy, a zatem, w których niekoniecznie jest krótszy między dwoma szczytami.
Algorytm wykorzystuje zasadę dynamicznego programowania (jest on traktowany w rozdziale na temat programowania dynamicznego w niektórych książkach algorytmicznych [[[ 4 ] ). Sub-problublicms to:
- jest odległością od źródła S do T do T ze ścieżką zawierającą co najwięcej K łuków.
Na :
- Dla I ;
- .
Algorytm oblicza wartości
według wartości wzrostu k. Odległość od S do T jest
.
Algorytm Bellman-Ford jest zatem pisany przy użyciu danej relacji nawrotów bezpośrednio w poprzednim rozdziale [[[ 5 ] .
funkcjonować Bellman-Ford (G = (S, A), Poids, S) Dla W W S DO ZROBIENIA |. d [u] = +∞ |. pred [u] = null d [s] = 0 // Główna pętla Dla k = 1 dopóki Rozmiar (y) - 1 DO ZROBIENIA |. dla każdego Arc (u, v) wykresu DO ZROBIENIA |. |. I d [u] + poids (u, v)WIĘC |. |. |. d [v]: = d [u] + poids (u, v) |. |. |. pred [v]: = u powrót D, wcześniej
Pod koniec wykonania tego algorytmu,
reprezentuje długość krótszej ścieżki
ma
W
, chwila
reprezentuje poprzednik
na krótszej ścieżce
ma
. Wartość zerowa oznacza, że nie przypisano jeszcze poprzednika
.
Algorytm Bellman-Ford jest poprawny tylko na wykresie bez ujemnego cyklu masy. Możemy wykryć obecność takiego cyklu (pod warunkiem, że jest on dostępny ze szczytu
) W następujący sposób: Istnieje ujemny cykl masy wtedy i tylko wtedy, gdy nowa runda pętli zmniejszy się odległość. Tak więc na końcu algorytmu robimy:
dla każdego Arc (u, v) wykresu DO ZROBIENIA |. I D [v]> d [u] + poids (u, v) WIĘC |. Pokaż „Istnieje cykl chłonny”
Złożoność algorytmu jest w
Lub
to liczba szczytów i
to liczba łuków. Odpowiada to złożoności w
Dla prostego gęstego wykresu [[[ 5 ] .
Demonstrację korekcji algorytmu można wykonać przez nawrót:
Lemme. Po
Próby głównej pętli:
Dowód. W sprawie
, odpowiadający pierwszemu wykonaniu pętli Do
, z jednej strony,
I na każdy szczyt
W
, udowodnienie pierwszego punktu, a z drugiej strony,
jest jedynym szczytem, ponieważ jest ścieżka co najwyżej 0 krawędzi łączącego ją
.
W sprawie
Nie nikogo:
- Z jednej strony, załóżmy być aktualizowane . Następnie jako (Ponieważ w przeciwnym razie aktualizacja nie miałaby miejsca), reprezentuje ciężar ścieżki ma . Dlatego przez budowę, to waga ścieżki ma ;
- Z drugiej strony lub , krótsza ścieżka ma Od najbardziej kości. Albo Ostatni szczyt wcześniej na tej ścieżce. Albo , Sideland of z ma . Następnie przez indukcję, jest krótszą ścieżką ma Od najbardziej krawędzie (w rzeczywistości, jeśli nie, istnieje ściśle krótsza ścieżka ma . Dodając krawędź ma , istnieje ścieżka ściśle niższa niż z ma , co jest sprzeczne z definicją ). Następnie, przez hipotezę nawrotów, po iteracji W był co najwyżej długości krótszej ścieżki ma Od najbardziej kości. Tak więc w -Me iteracja, , ze względu na strukturę algorytmu. Jednak ta ostatnia długość jest co najwyżej długości krótszej ścieżki ma .
Dlatego wykazano lemat. Wynika z tego, że długość
jest długością krótszej ścieżki
ma
, co dowodzi korekcją algorytmu Bellman-Ford w przypadku tego
nie ma ujemnego cyklu masy [[[ 5 ] .
Wykonanie głównej pętli można zatrzymać, gdy odległości pozostaną niezmienione. Ciało głównej pętli jest następnie wykonywane mniej niż
czasy. Złożoność w najgorszym przypadku jest niezmieniona. Jen [[[ 6 ] opisał dwie ulepszenia algorytmu Bellman-Ford, które nie zmieniają złożoności w najgorszym przypadku, ale co sprawia, że jest szybszy w praktyce.
- Pierwsza poprawa zmniejsza liczbę relaksu. Jeśli d [u] nie został zmodyfikowany od czasu relaksacji łuku (u, t), nie ma potrzeby uwalniania łuków (u, t) po raz drugi. Zatem, wraz ze wzrostem liczby szczytów o prawidłowej odległości podczas algorytmu, liczba łuków, które zostaną uwolnione z każdej iteracji. Zarabiamy stałą czynnik złożoności gęstych wykresów.
- Drugim ulepszeniem Yena jest wybranie dowolnego całkowitego zamówienia
I F zawiera łuki (u, t) z u I B , zawiera łuki (u, t) z u> t. Pętla dla każdego ARC (u, t) wykresu DO ZROBIENIA jest przeprowadzany w następujący sposób. Każdy szczyt u jest odwiedzany w kolejności rosnącej <. Następnie uwalniamy każdy łuk (u, t) w I F . Następnie odwiedzamy szczyty U w zmniejszającej się kolejności>. Uwalniamy łuki (u, t) w I B . Każda iteracja głównej pętli (z wyjątkiem pierwszej) dodaje co najmniej dwa łuki, których szczyty mają prawidłowe odległości, jeden w I F i jeden I B . Ta poprawa zmniejsza liczbę iteracji głównej pętli ma .
Kolejna poprawa Banister & Eppstein [[[ 7 ] polega na zastąpieniu całkowitego zamówienia na szczytach drugiej poprawy jena z losową permutacją. Zatem najgorszy przypadek poprawy jena zdarza się nie często (fakt, że łuki krótszej ścieżki są czasami w I F czasami w I B ). Przy losowej permutacji jako całkowitym zamówieniu, nadzieja na liczbę iteracji głównej pętli jest co najwyżej
.
W 1993 r. Bahar i in. podano wdrożenie algorytmu Bellman-Ford dla wykresów reprezentowanych symbolicznie za pomocą struktury danych o nazwie algebraicznych diagramów decyzyjnych (ADD), która jest uogólnieniem binarnych diagramów decyzyjnych [[[ 8 ] .
W sieciach komputerowych algorytm Bellman-Ford służy do określenia ścieżki wiadomości, poprzez protokół routingu RIP [[[ 9 ] . Możemy użyć algorytmu Bellman-Ford do rozwiązania problemu programowania liniowego, w którym ograniczenia są różnicami. Na przykład : X – I ≤ 5, I – T ≤ 10 itp. Mówiąc dokładniej, taki system ma rozwiązanie, jeśli i tylko wtedy, gdy powiązany wykres nie ma ujemnych cykli masy [[[ dziesięć ] W [[[ 5 ] .
- G. Malkin, RIP wersja 2 , (Prośba o komentarze), IETF W W [[[ Czytaj online ] W skonsultowano
- J. ChroboKek, Protokół routingu BABEL , (Prośba o komentarze), IETF W W [[[ Czytaj online ] W skonsultowano
- Na przykład w «O optymalności algorytmu najkrótszej ścieżki Bellman – Ford -Moore» , Zwróć uwagę na Stasys Jokna It Georg Snows, Parue DO Teoretyczna informatyka 628 (2016) 101–109.
- ‘ Slajdy wykładowe do projektowania algorytmu autorstwa Jona Kleinberga i Éva Tardos » , NA www.cs.princeton.edu (skonsultuję się z ) .
- Thomas H. Cormen, Charles Leiseron, Ronald Rivest et Clifford Stein, Wprowadzenie do algorytmicznych: kursy i ćwiczenia , Dunod, , Rozdział 24: Bardziej unikalne kursy ścieżki .
- ‘ MR: Dopasowuje się do: MR = 253822 » , NA www.ams.org (skonsultuję się z ) .
- Michael J. Bannister i David Eppstein « Randomizowany przyspieszenie algorytmu Bellman-Ford », Materiały z spotkania na temat algorytmów analitycznych i kombinatorów , Society for Industrial and Applied Mathematics, analco ’12, W P. 41–47 ( Czytaj online , skonsultuałem się z ) .
- R. Iris Wiosna , Erica A. Frohm , Charles M. Gaona i Gary D. Hachtel « Schematy decyzyjne algebraiczne i ich zastosowania », ICCAD ’93 Proceedings z Międzynarodowej Konferencji IEEE/ACM w 1993 roku na temat projektowania wspomaganego komputerowo , IEEE Computer Society Press, W P. 188–191 (ISBN 0818644907 W Czytaj online , skonsultuałem się z )
- (W) Prośba o komentarze N O 1058 .
- Robert Shostak « Decydowanie o nierównościach liniowych poprzez obliczanie reszt pętli », J. Acm W tom. 28, W P. 769–779 (ISSN 0004-5411 , Doi 10.1145/322276.322288 W Czytaj online , skonsultuałem się z ) .
Oryginalne źródła [[[ modyfikator |. Modyfikator i kod ]
- (W) Richard Herold W ‘ Na temat problemu routingu » W Kwartalnik matematyki stosowanej W tom. 16, W P. 87–90 (Recenzje matematyczne 0102435 )
- (W) Lester R. Ford Jr. W Teoria przepływu sieci , Santa Monica, Kalifornia, Rand Corporation, coll. «Papier p-923», ( Czytaj online )
- (W) Edward F. Moore (1959). «Najkrótsza ścieżka przez labirynt» Dans Proc. Internat. Sympos. Teoria przełączania 1957, część II : 285–292 s., Cambridge, Mass.: Harvard Univ. Naciskać.
- (W) Jin Y. Jeśli W ‘ Algorytm znajdowania najkrótszych tras ze wszystkich węzłów źródłowych do danego miejsca docelowego w sieciach ogólnych » W Kwartalnik matematyki stosowanej W tom. 27, W P. 526–530 (Recenzje matematyczne 0253822 )
- (W) M. J. Banister i D. Eppstein (2012) ” Randomizowany przyspieszenie algorytmu Bellman -Ford »(Pdf) w Algorytmiki analityczne i kombinatoryczne (analco12), Kioto, Japonia : 41–47 p ..
Książki po francusku [[[ modyfikator |. Modyfikator i kod ]
- Michel Gondra i Michel Minoux W Wykresy i algorytmy , Eyrolles Editions, coll. „Badania i badania energii elektrycznej z Francji”, ( ROMPR. 1984, 1995, 2009 Chez Lavoisier, 4e ed.), 548 P. , „2 – najkrótszy problem”
Recent Comments