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 .
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 .
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 returnItt 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 thenAz 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 pA 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).
Grafikon keresési algoritmusok | ||
---|---|---|
Tájékozatlan módszerek | ||
Tájékozott módszerek | ||
Parancsikonok | ||
Minimálisan átívelő fa | ||
Egyéb |