Bellman-Ford algoritmus

Ez a cikk egy vázlatot kapcsolatos elméleti számítógép-tudomány .

Megoszthatja ismereteit fejlesztésével ( hogyan? ) A megfelelő projektek ajánlásai szerint .

Bellman-Ford algoritmus Bellman - Ford algoritmus példa.gif
Felfedezők vagy feltalálók Richard Bellman (1958), LR Ford Jr. (1956), Edward F. Moore (1957)
Kapcsolódó kérdések Útkeresési algoritmus ( d ) , gráfelméleti algoritmus ( d ) , matematikai koncepció ( d )
Adatszerkezet Grafikon
Kezdetekor Routing Information Protocol
Az idő összetettsége
Legrosszabb esetben
Legjobb eset
A tér összetettsége
Legrosszabb esetben

A Bellman-Ford algoritmus , más néven Bellman - Ford - Moore algoritmus , olyan algoritmus , amely egy adott forráscsúcsból a legrövidebb utakat számítja ki egy súlyozott irányított gráfban . Feltalálói, Richard Bellman és Lester Randolph Ford junior (megjelent 1956-ban és 1958-ban), valamint Edward Forrest Moore nevét viseli , aki 1959-ben fedezte fel újra.

Dijkstra algoritmusától eltérően a Bellman-Ford algoritmus lehetővé teszi bizonyos negatív súlyú ívek jelenlétét, és lehetővé teszi az abszorpciós áramkör , vagyis a szigorúan negatív össztömeg létezésének detektálását , amely elérhető a forráscsúcsról.

Az algoritmus bonyolultsága az, ahol a csúcsok száma az ívek száma.

Leírás

A Bellman-Ford algoritmus egy negatív súlyciklus nélküli gráf és egy forráscsúcs alapján kiszámítja a legrövidebb utat az egyes csúcsokhoz . Lehetővé teszi egy ilyen út megtalálását is azáltal, hogy az egyes csúcsok elődjeit visszaküldi egy ilyen útra. Ezenkívül lehetővé teszi azoknak az eseteknek a felderítését, amikor negatív súlyú ciklus van, és ezért nem feltétlenül van rövidebb út két csúcs között.

Az algoritmus a dinamikus programozás elvét használja (egyes algoritmikus könyvekben a dinamikus programozásról szóló fejezet foglalkozik vele). Az alproblémák a következők:

Nekünk van :

Az algoritmus az értékeket k értékének növelésével számítja ki . Az s és t közötti távolság .

Álkód

A Bellman-Ford algoritmust tehát közvetlenül az előző szakaszban megadott megismétlődési reláció felhasználásával írjuk meg.

fonction Bellman-Ford(G = (S, A), poids, s) pour u dans S faire | d[u] = +∞ | pred[u] = null d[s] = 1 //Boucle principale pour k = 1 jusqu'à taille(S) - 1 faire | pour chaque arc (u, v) du graphe faire | | si d[v] > d[u] + poids(u, v) alors | | | d[v] := d[u] + poids(u, v) | | | pred[v]:= u retourner d, pred

Végén a végrehajtás ezen algoritmus, a hosszát jelenti rövidebb utat , hogy az , mivel képviseli az elődje egy rövidebb utat az . A null érték azt jelenti, hogy még nem rendeltek elődöt .

A Bellman-Ford algoritmus csak egy negatív súlyciklus nélküli grafikonon helyes. Egy ilyen ciklus jelenléte a következőképpen detektálható (feltéve, hogy felülről elérhető ): csak akkor van negatív súlyciklus, ha a hurok új köre csökkenti a távolságot. Tehát az algoritmus végén:

pour chaque arc (u, v) du graphe faire | si d[v] > d[u] + poids(u, v) alors | afficher "il existe un cycle absorbant"

Bonyolultság

Az algoritmus bonyolultsága ahol a csúcsok száma és az ívek száma. Ez a sűrű, egyszerű gráf összetettségének felel meg .

A korrekció igazolása

Az algoritmus helyességének igazolása indukcióval történhet  :

Lemma. A fő hurok megismétlése után :

Bizonyíték. Abban az esetben, amely a hurok első végrehajtásának felel meg , akkor először is, és az egyes csúcsok esetében az első pont igazolására, másodsorban pedig ez az egyetlen olyan csúcs, amelyen legfeljebb "0 él van összekötve . for

Bármely nem nulla eset esetén :

A lemma tehát bebizonyosodott. Ebből következik, hogy a hossz egy rövidebb út hossza a- tól , ami bizonyítja a Bellman-Ford algoritmus helyességét abban az esetben, ha nincs negatív súlyciklusa.

Fejlesztések

A fő hurok végrehajtása megállítható, ha a távolságok változatlanok. Ezután a fő hurok testét kevesebbszer hajtják végre . A legrosszabb eset összetettsége változatlan. Yen két olyan fejlesztést írt le a Bellman-Ford algoritmusban, amelyek a legrosszabb esetben sem változtatják meg a bonyolultságot, de a gyakorlatban gyorsabbá teszik.

  1. Az első fejlesztés csökkenti a relaxációk számát. Ha d [u] az ív (u, t) lazítása óta nem módosult, akkor nincs szükség az ívek (u, t) második kiadására. Tehát, ahogy az algoritmus során növekszik a megfelelő távolsággal rendelkező csúcsok száma, az egyes iterációk során csökken a felszabadítandó ívek száma. A sűrű gráfok komplexitására állandó tényezőt kapunk.
  2. A Yen második fejlesztése abból áll, hogy tetszőleges teljes sorrendet választunk <a csúcsokon, majd az ívkészletet két disszjunkt részhalmazra osztjuk. Az első alcsoport E F tartalmazza az íveket (u, t) u <t és a második, E b , tartalmazza az íveket (u, t) u> t. A do gráf minden ívéhez (u, t) a hurok a következőképpen kerül végrehajtásra. Minden u csúcsot növekvő sorrendben látogatunk meg <. Ezután minden ívet (u, t) elengedünk E f-ben . Ezután csökkenő sorrendben meglátogatjuk az u csúcsokat>. Elengedjük az E b íveket (u, t) . Minden iteráció a fő hurok (kivéve az első) egészíti legalább két ív, amelynek csúcsai vannak a helyes távolságokat, egy E f és egy E b . Ez a javulás csökkenti az iterációk számát a fő hurok a .

A Bannister & Eppstein további javítása az, hogy a második Yen-javulás csúcsain lévő teljes sorrendet véletlenszerű permutációval helyettesíti. Így a Yen javulásának legrosszabb esete ritkán fordul elő (az a tény, hogy egy rövidebb út ívei néha E f-ben, néha pedig E b-ben vannak ). Véletlenszerű permutációval, mint teljes sorrenddel, a fő hurok iterációinak számára vonatkozó elvárás legfeljebb .

1993-ban Bahar és mtsai. a Bellman-Ford algoritmus megvalósítását adta szimbolikusan ábrázolt grafikonokhoz az Algebrai Döntési Diagramok (ADD) nevű adatszerkezet felhasználásával , amely a bináris döntési diagramok általánosítása .

Használ

A számítógépes hálózatokban a Bellman-Ford algoritmust használják az üzenetek áramlásának meghatározására a RIP útválasztási protokollon keresztül . A Bellman-Ford algoritmust felhasználhatjuk egy lineáris programozási probléma megoldására, ahol a korlátok eltérések. Például: x - y ≤ 5, y - t ≤ 10 stb. Pontosabban, egy ilyen rendszernek akkor és csak akkor van megoldása, ha a társított grafikonnak nincsenek negatív súlyú ciklusai.

Megjegyzések és hivatkozások

  1. Például: „A Bellman - Ford - Moore legrövidebb út algoritmusának optimalizálásáról” , Stasys Jukna és Georg Schnitger megjegyzése, Theoretical Computer Science 628 (2016) 101–109.
  2. "  Lecture Slides for Algorithm Design by Jon Kleinberg And Tardos Éva  " , www.cs.princeton.edu, (hozzáférés : 2016. március 15. ) .
  3. Thomas H. Cormen, Charles Leiserson, Ronald Rivest és Clifford Stein, Bevezetés az algoritmikába: leckék és gyakorlatok , Dunod ,2009, P.  24. fejezet: Hosszabb egy eredetű utak.
  4. (in) "Bellman-Ford algoritmus" a Wikipedia ,1 st május 2021( online olvasás )
  5. "  MR: Matches for: MR = 253822  " , www.ams.org (megtekintve 2016. március 15-én ) .
  6. Michael J. Bannister és David Eppstein , „  A Bellman-Ford algoritmus véletlenszerű felgyorsítása  ”, az Analitikus Algoritmika és Kombinatorika Találkozója , Ipari és Alkalmazott Matematikai Társaság, aNALCO '12,1 st január 2012, P.  41–47 ( online olvasás , konzultáció 2016. március 15-én ).
  7. R. Iris Bahar , Erica A. Frohm , Charles M. Gaona és Gary D. Hachtel , „  Algebrai döntési diagramok és alkalmazásuk  ”, ICCAD '93 Az 1993-as IEEE / ACM nemzetközi konferencia anyagai a számítógéppel segített tervezésről , IEEE Computer Society Press,1993. november 7, P.  188-191 ( ISBN  0818644907 , olvasható online , elérhető 9 február 2018 )
  8. (in) Megjegyzések iránti kérelem, n o  1058 .
  9. Robert Shostak , "  A lineáris egyenlőtlenségek eldöntése a hurokmaradványok kiszámításával  ", J. ACM , vol.  28,1 st október 1981, P.  769–779 ( ISSN  0004-5411 , DOI  10.1145 / 322276.322288 , online olvasás , hozzáférés : 2016. április 22. ).

Bibliográfia

Eredeti források

Francia könyvek

Lásd is

<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">