On Dijkstra's Algorithm
motherboard.vice.com
motherboard.vice.com
I wrote a year ago a small blog post where I tried to show the chronology: http://blog.tristramg.eu/short-history-of-routes-computation...
Here's a talk I gave (about computing shortest paths for British Rail in 1955).
Rather than
Here's a talk I gave (about computing shortest paths for British Rail) in 1955.
That is, the topic is computing shortest paths in 1955 for British Rail and the talk was given in 2012.
For anyone interested in route planning algorithms, there is a wide variety of interesting speed-up techniques. Some more key words: Arc Flags, Landmarks, Multi-Layer Dijkstra, Customizable Route Planning, Hub Labelling, Highway Hierarchies, PHAST. For transportation networks, also have a look at RAPTOR. A list of interesting references is available at http://i11www.iti.uni-karlsruhe.de/teaching/sommer2014/route... (the slides are in German, unfortunately)
Does anyone know how costs are assigned in a mapping application that may use something like Dijkstra's? In the network world cost is derived by link speed and distance, being a general oversimplification, but I wonder how general areas are broken up into routing domains? By city or state?
Very interesting...
"The result of such an explosion is that problems, like shortest path problems, grow so quickly as to become practically incomputable, taking a practically infinite amount of time to solve."
This is exactly the reason why neither Dijkstra nor a variant thereof is a feasible solution for real-world route planning (we would be talking about hours instead of ms per query). However, variants of Dijkstra are used in the pre-computational steps for the actual routing algorithms like Contraction Hierarchies or Transit Node Routing.
I have to do some processing after running the algorithm, right?
Let d(x,y) be the single-edge distance between two adjacent nodes, and S(A,y) be the computed shortest path. If S(A,C) + d(C,B) == S(A,B), then any shortest path from A-C is also part of a minimal path from A-B. Starting from B, you can check all its neighbors to find one that is a predecessor on a shortest path, and then just repeat that process until you get back to the starting point.
(If you look at other dynamic programming problems, like longest common subsequence, they often use similar tricks to reconstruct a solution after the initial computation is done.)
Shortest-Path Queries in Static Networks http://www.sommer.jp/spq-survey.pdf