Bellman–Ford runs in
time, where
and
are the number of vertices and edges respectively.
function BellmanFord(list vertices, list edges, vertex source)
::distance[],predecessor[]
// This implementation takes in a graph, represented as
// lists of vertices and edges, and fills two arrays
// (distance and predecessor) with shortest-path
// (less cost/distance/metric) information
// Step 1: initialize graph
for each vertex v in vertices:
if v is source then distance[v] := 0
else distance[v] := inf
predecessor[v] := null
// Step 2: relax edges repeatedly
for i from 1 to size(vertices)-1:
for each edge (u, v) with weight w in edges:
if distance[u] + w < distance[v]:
distance[v] := distance[u] + w
predecessor[v] := u
// Step 3: check for negative-weight cycles
for each edge (u, v) with weight w in edges:
if distance[u] + w < distance[v]:
error "Graph contains a negative-weight cycle"
return distance[], predecessor[]
In this example graph, assuming that A is the source and edges are
processed in the worst order, from right to left, it requires the full
|V|−1 or 4 iterations for the distance estimates to converge.
Conversely, if the edges are processed in the best order, from left to
right, the algorithm converges in a single iteration.
Class |
Single-source shortest path problem (for weighted directed graphs) |
Data structure |
Graph |
Worst case performance |
|
Worst case space complexity
|
|
No comments:
Post a Comment