Bellman-Ford algoritmen løser single-source shortest-path (SSSP) problemet i det generelle tilfellet hvor kanter kan ha negativ vekt.
Gitt en vektet rettet graf True
hvis og bare hvis grafens startnode ikke finner noen ingen negativ-vekt sykler.
G = graf | w = vekting | i = teller | u = fra-node | v = til-node
Bellman-Ford(G,w,s)
1 Initialize-Single-Source(G,s)
2 for i=1 to |G.V| - 1
3 for each edge (u.v) ∈ G.E
4 Relax(u,v,w)
5 for each edge (u.v) ∈ G.Ez
6 if v.d > u.d + w (u,v)
7 return False
8 return True
1: Avstand = uendelig, forgjengernoder = NIL, startnode avstand = 0 2: Tell opp til V-1 ganger
3-4: For hver kant, slakk kanten
5-6: Er første del av relax!
7: Dersom kanten ikke ble slakket helt etter 4, returner false. Det betyr at det er en negativ sykel i grafen!
8: Hvis alle var korrekt slakket, returner true. Algoritmen fungerte!
Korrekthetsbevis for Bellman-Ford er på side 653 i pensumboka.
+ Kan oppdage negative sykler
- Høyere kjøretid enn Dijkstras algoritme
Operasjon | Antall | Kjøretid |
---|---|---|
Initialisering | 1 | |
RELAX | V-1 | |
RELAX | 1 |
Operasjon | Antall | Kjøretid |
---|---|---|
Initialisering | ||
Relax | ||
Relax |
- Slakker hver kant
$|V|-1$ ganger,$O(E)$ . - Initalisering
$O(V)$ - Total kjøretid på
$O(V\cdot E)$ .