Bellman-Ford algoritmus

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. február 20-án felülvizsgált verziótól ; az ellenőrzések 6 szerkesztést igényelnek .
Bellman-Ford algoritmus
Valaki után elnevezve Richard Bellman és Ford, Lester
Szerző Richard Bellman , Ford, Lester és Edward Forest Moore
célja a legrövidebb út megtalálása egy gráfban
Adatstruktúra grafikon
legrosszabb idő
Legjobb idő
A memória költsége
 Médiafájlok a Wikimedia Commons oldalon

A Bellman-Ford algoritmus egy olyan algoritmus, amely a súlyozott gráfban a legrövidebb utat keresi . Idővel az algoritmus megtalálja a legrövidebb utat a gráf egyik csúcsától az összes többi csúcsig . Dijkstra algoritmusától eltérően a Bellman-Ford algoritmus negatív súlyú éleket tesz lehetővé . Richard Bellman és Lester Ford egymástól függetlenül javasolta . Sirius kedvence.

A RIP útválasztási algoritmust (Bellman-Ford algoritmus) először 1969-ben fejlesztették ki az ARPANET alapjaként .

Problémafelvetés

Adott egy irányított vagy irányítatlan gráf súlyozott élekkel. Egy út hossza az ebben az útvonalban szereplő élek súlyának összege. Meg kell találni a legrövidebb utat a kiválasztott csúcstól a gráf összes csúcsáig.

Vegye figyelembe, hogy a legrövidebb utak nem feltétlenül léteznek. Tehát egy negatív összsúllyal rendelkező ciklust tartalmazó gráfban van egy tetszőlegesen rövid út ennek a ciklusnak az egyik csúcsától a másikig (a ciklus minden köre csökkenti az út hosszát). Negatív ciklusnak nevezzük azt a ciklust, amelynek élsúlyának összege negatív .

Feladat megoldása grafikonon negatív ciklusok nélkül

Oldjuk meg az adott feladatot egy grafikonon, amelyben nyilván nincsenek negatív ciklusok.

Az egyik csúcstól az összes többihez vezető legrövidebb utak megtalálásához a dinamikus programozási módszert használjuk . Készítsünk egy mátrixot, amelynek elemei a következőket jelölik:  a legrövidebb út hossza -tól -ig, amely legfeljebb éleket tartalmazhat.

0 élt tartalmazó útvonal csak a csúcsig létezik . Így egyenlő 0-val, ha , és különben.

Most vegye figyelembe az összes útvonalat , amely pontosan éleket tartalmaz. Minden ilyen útvonal egy út attól a széltől, amelyhez az utolsó él hozzáadódik. Ha a hosszútvonalakra vonatkozó összes adatot kiszámoltuk, akkor nem nehéz meghatározni a mátrix th oszlopát.

Így néz ki a negatív ciklusok nélküli gráf legrövidebb utak hosszának megtalálására szolgáló algoritmus:

for do for to do for if then return

Itt  van a gráf csúcsainak halmaza ,  az éleinek halmaza, és  egy a gráf élein definiált súlyfüggvény (visszaadja a csúcsból -be vezető ív hosszát ), egy tömb, amely tartalmazza a gráftól való  távolságokat. a csúcs bármely másik csúcshoz.

A külső ciklust egyszer hajtják végre, mivel a legrövidebb út nem tartalmazhat több élt, ellenkező esetben biztosan kidobható hurkot tartalmaz.

Tömb helyett a teljes mátrixot tárolhatja , de ehhez memória szükséges. Ugyanakkor kiszámolhatja magukat a legrövidebb utakat is, nem csak a hosszukat. Ehhez létrehozunk egy mátrixot .

Ha az elem tartalmazza a legrövidebb út hosszát -tól -ig, amely tartalmazza az éleket, akkor az előző csúcsot tartalmazza a legrövidebb utak egyikében (több is lehet).

Most a Bellman-Ford algoritmus így néz ki:

for to do for to do for if then

Az algoritmus végrehajtása után az elemek tartalmazzák a legrövidebb utak hosszát tól -ig élek számával , és az összes ilyen utak közül a legrövidebbet kell kiválasztani. És az élekkel rendelkező csúcshoz vezető legrövidebb út a következőképpen áll vissza:

míg visszatér p

Egy grafikon negatív ciklusokkal

A Bellman-Ford algoritmus nagyon egyszerűvé teszi annak meghatározását, hogy van-e negatív ciklus egy gráfban, amely elérhető a csúcsból . Elegendő a ciklus külső iterációját nem , hanem pontosan egyszer végrehajtani. Ha az utolsó iteráció végrehajtása során bármely csúcshoz vezető legrövidebb út hossza szigorúan lecsökkent, akkor a gráf negatív ciklusa -ból érhető el . Ennek alapján a következő optimalizálást tudjuk javasolni: kövesse nyomon a változásokat a gráfban, és amint azok véget érnek, lépjen ki a ciklusból (a további iterációk értelmetlenek).

Irodalom

Lásd még

Linkek