Bellman-Ford Algorytm-Wikipedia

before-content-x4

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.

after-content-x4

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

O ( |. S |. |. A |. ) {DisplayStyle o (| s || a |)}

Lub

|. S |. {DisplayStyle | s |}

to liczba szczytów

|. A |. {displayStyle | a |}

to liczba łuków.

Oblicza się algorytm Bellman-Ford, biorąc pod uwagę wykres

after-content-x4
G = ( S W A ) {DisplayStyle g = (s, a)}

Bez ujemnego cyklu masy i szczytu źródłowego

S S {DisplayStyle sin s}

, krótsza ścieżka

S {DisplayStyle s}

Na każdym szczycie

G {DisplayStyle g}

. 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:

Na :

Algorytm oblicza wartości

D [[[ T W k ] {DisplayStyle d [t, k]}

według wartości wzrostu k. Odległość od S do T jest

D [[[ T W |. S |. Pierwszy ] {DisplayStyle d [t, | s | -1]}

.

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,

D [[[ W ] {DisplayStyle d [u]}

reprezentuje długość krótszej ścieżki

S {DisplayStyle s}

ma

W {displayStyle u}

W

G {DisplayStyle g}

, chwila

P R To jest D [[[ W ] {DisplayStyle Pred [u]}

reprezentuje poprzednik

W {displayStyle u}

na krótszej ścieżce

S {DisplayStyle s}

ma

W {displayStyle u}

. Wartość zerowa oznacza, że ​​nie przypisano jeszcze poprzednika

P R To jest D [[[ W ] {DisplayStyle Pred [u]}

.

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

S {DisplayStyle s}

) 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

O ( |. S |. |. A |. ) {DisplayStyle o (| s || a |)}

Lub

|. S |. {DisplayStyle | s |}

to liczba szczytów i

|. A |. {displayStyle | a |}

to liczba łuków. Odpowiada to złożoności w

O ( |. S |. 3 ) {DisplayStyle o (| s |^{3})}

Dla prostego gęstego wykresu [[[ 5 ] .

Demonstrację korekcji algorytmu można wykonać przez nawrót:

Lemme. Po

I {DisplayStyle i}

Próby głównej pętli:

Dowód. W sprawie

I = 0 {DisplayStyle i = 0}

, odpowiadający pierwszemu wykonaniu pętli Do , z jednej strony,

D [[[ S ] = 0 {DisplayStyle d [s] = 0}

I na każdy szczyt

W S {DisplayStyle Uneq s}

W

D [[[ W ] = + {DisplayStyle d [u] =+infty}

, udowodnienie pierwszego punktu, a z drugiej strony,

S {DisplayStyle s}

jest jedynym szczytem, ​​ponieważ jest ścieżka co najwyżej 0 krawędzi łączącego ją

S {DisplayStyle s}

.

W sprawie

I {DisplayStyle i}

Nie nikogo:

  • Z jednej strony, załóżmy
  • Z drugiej strony lub

Dlatego wykazano lemat. Wynika z tego, że długość

D [[[ W ] {DisplayStyle d [u]}

jest długością krótszej ścieżki

S {DisplayStyle s}

ma

W {displayStyle u}

, co dowodzi korekcją algorytmu Bellman-Ford w przypadku tego

G {DisplayStyle g}

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ż

|. S |. Pierwszy {DisplayStyle | s | -1}

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.

  1. 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.
  2. 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

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

|S|3 {DisplayStyle {frac {| s |} {3}}}

.

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 ] .

  1. G. Malkin, RIP wersja 2 , (Prośba o komentarze), IETF W W [[[ Czytaj online ] W skonsultowano Voir et modifier les données sur Wikidata
  2. J. ChroboKek, Protokół routingu BABEL , (Prośba o komentarze), IETF W W [[[ Czytaj online ] W skonsultowano Voir et modifier les données sur Wikidata
  3. 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.
  4. Slajdy wykładowe do projektowania algorytmu autorstwa Jona Kleinberga i Éva Tardos » , NA www.cs.princeton.edu (skonsultuję się z ) .
  5. A B C i D Thomas H. Cormen, Charles Leiseron, Ronald Rivest et Clifford Stein, Wprowadzenie do algorytmicznych: kursy i ćwiczenia , Dunod, , Rozdział 24: Bardziej unikalne kursy ścieżki .
  6. MR: Dopasowuje się do: MR = 253822 » , NA www.ams.org (skonsultuję się z ) .
  7. 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 ) .
  8. 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 )
  9. (W) Prośba o komentarze N O 1058 .
  10. 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”

O innych projektach Wikimedia:

after-content-x4