Code covered by the BSD License  

Highlights from
The Bellman-Ford-Moore Shortest Path Algorithm

5.0

5.0 | 1 rating Rate this file 64 Downloads (last 30 days) File Size: 224 KB File ID: #38129
image thumbnail

The Bellman-Ford-Moore Shortest Path Algorithm

by

 

11 Sep 2012 (Updated )

A simple, efficient sparse implementation of the original Bellman-Ford-Moore Shortest Path Algorithm

| Watch this File

File Information
Description

Over the years I have looked at many Shortest Path FEX submissions. Most,if not all of these, were implementations of Dijkstra's algorithm for dense adjacency matrices.

These submissions had very limited usefulness because most real graph problems are sparse and most can be solved much more efficiently by a variant of the Bellman-Ford-Moore (BFM) algorithm which predates Dijkstra by 4 or 5 years. Better still, BFM is robust in the sense that it can handle negative arc-weights and detect and find negative cycles. Dijkstra cannot do this and for this reason is not considered robust.

It was for these reasons and others that I decided to (try) to write the simplest possible Matlab function for shortest paths. This forced me to use the simplest possible data structures to represent the problem and its solution, in Matlab: the graph G is represented by a list of m arcs (head, tail, weight) or (u,v,duv); the solution is represented by a tree p which is an n-vector of parent "pointers"; the n-vector D is the shortest path distances. Thus the path from node u to the root r is u,p(u),p(p(u)), ... , p(r). The length of this shortest path is D(u). We can see that the space used is S = No. of arcs = m (nnz) + 2*n fixed-sized boxes. You can't get lower than that.

The latest version of the notes on this algorithm is available at:

http://www.scribd.com/derekroconnor4276

MATLAB release MATLAB 7.6 (R2008a)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (9)
08 May 2013 Roland

Dear Derek,
Do I understand correctly when I say that your function is only capable of computing the shortest path between a root and all other nodes. I am looking for a function that efficiently computes shortest paths between all nodes in a subset of the nodes of the whole graph.
Do I understand your code correctly when I say the following:
- I would have to call the function multiple times (for each root). It is not possible to specify r as a vector of roots? In other words, this algorithm does not save any info when you have to compute path from multiple roots.
- All computation spent on shortest paths to nodes that I do not need is lost. Is this really necessary (i.e. inherent to the Bellman-Ford algorithm) or could this could become faster if it is adapted to the situation I need it for?
Thank you very much for your reply.
Kind regards.
Roland

11 Mar 2013 none

Derek, I sent you an email outlining the real problem data/context etc.

I look forward to your reply!

08 Mar 2013 Derek O'Connor

@none Thanks for your compliments.

I would be grateful if you would post or send me your results for these REAL problems.

For example, I have not been able to find the official optimum solutions to the problems. This makes me uneasy.

08 Mar 2013 none

My mistake! Yes I can see you have written it in.

Excellent algo that works straight out of the box.

07 Mar 2013 Derek O'Connor

This file is not there because I did not have room for the larger files on my website. I pointed this out at the start of TestBFNOTMaps.m

All the USA files are available here:

http://www.dis.uniroma1.it/challenge9/download.shtml

07 Mar 2013 none

I try to run TestBFNOTMaps.m and get the error

Error using load
Unable to read file spusaNE: No such file or directory.

where is this file? Not in the zip file.

02 Nov 2012 Derek O'Connor

I have corrected an error in BFMSpathOT.m The two variables 'head' and 'tail' were switched which resulted in the directed arcs of the network being reversed.

OLD: [m,n,p,D,tail,head,W] = Initialize(spG);

NEW: [m,n,p,D,head,tail,W] = Initialize(spG);

This means that the old version gave the wrong answers [p D]. However, this change does not affect the analysis and running time of the algorithm.

02 Nov 2012 Derek O'Connor

The updated Matlab function BFMSpathOT.m can be found at:

http://www.scribd.com/doc/105903247/O-Connor-The-Bellman-Ford-Moore-Shortest-Path-Algorithm.m

19 Oct 2012 Derek O'Connor

I have an important update to this submission which corrects an error but the UPDATE process fails each time I use it.

Derek O'Connor

Updates
12 Sep 2012

Corrected minor typos

12 Sep 2012

Eliminated irrelevant comments

12 Sep 2012

Added a minor note.

12 Sep 2012

Eliminated comments

12 Sep 2012

Minor code modification

14 Sep 2012

Added an 11-page paper of notes and two test functions: one for random networks and one for real road networks

17 Sep 2012

Updated notes and results of tests.

18 Sep 2012

Added a Scribd link for the notes on this algorithm.

Contact us