patternMinor
Can I run Dijkstra's algorithm using priority queue?
Viewed 0 times
prioritycandijkstraalgorithmusingqueuerun
Problem
I think I can run Dijkstra's algorithm using any data structure. I do not see any implementation details of Dijkstra's algorithm.
Is a priority queue a possible data structure? Will running Dijkstra's algorithm using a priority queue reduce or increase the complexity? Will I overshoot the problem?
Is a priority queue a possible data structure? Will running Dijkstra's algorithm using a priority queue reduce or increase the complexity? Will I overshoot the problem?
Solution
Yes, you can use priority queues to improve the complexity of the algorithm from $O(V^2)$ to $O(|E| + |V| \log|V|)$ where $E$ is the number of edges and $V$ is the number of nodes.
You should consider carefully the number of nodes in your graph and the desired run time before adding complexity to your implementation.
See here for a brief explanation of performance vs difficulty trade offs.
To summarize the blog, using a regular queue can still speed up Dijkstra's algorithm by up to a factor of 4 in most cases, with rarely occurring graphs running in $O(V^3)$. The link says "never" occurring, but that would depend on the actual problem you are solving.
See this for the original research on using min-priority queues to speed up Dijkstra's algorithm, it is the fastest known implementation for Dijkstra's algorithm.
You should consider carefully the number of nodes in your graph and the desired run time before adding complexity to your implementation.
See here for a brief explanation of performance vs difficulty trade offs.
To summarize the blog, using a regular queue can still speed up Dijkstra's algorithm by up to a factor of 4 in most cases, with rarely occurring graphs running in $O(V^3)$. The link says "never" occurring, but that would depend on the actual problem you are solving.
See this for the original research on using min-priority queues to speed up Dijkstra's algorithm, it is the fastest known implementation for Dijkstra's algorithm.
Context
StackExchange Computer Science Q#63821, answer score: 7
Revisions (0)
No revisions yet.