Middle
What is Dijkstra's algorithm?
sobes.tech AI
Answer from AI
Dijkstra's algorithm is a method for finding the shortest path from a starting vertex to all other vertices in a weighted directed or undirected graph with non-negative edge weights.
Main principles:
- The algorithm operates in a step-by-step manner.
- At each step, the unprocessed vertex with the smallest current distance from the start is selected.
- The distances to adjacent vertices are updated if a shorter path is found through the current vertex.
Algorithm steps:
- Initialize distances to all vertices as infinity, except for the starting vertex, which is set to 0.
- Create a set of vertices that have not yet been processed.
- Repeat while there are unprocessed vertices:
a. Select the unprocessed vertex
uwith the minimum distance. b. Markuas processed. c. For each adjacent vertexvofu: i. If the distance tovis greater than the distance touplus the weight of the edgeu->v, update the distance tov.
Example implementation (pseudocode):
// Dijkstra's function
def dijkstra(graph, start_node):
distances = {} // Dictionary to store shortest distances
unvisited_nodes = set(graph.get_nodes()) // Set of unprocessed vertices
// Initialize distances
for node in graph.get_nodes():
distances[node] = float('inf')
distances[start_node] = 0
while unvisited_nodes:
// Find the unprocessed vertex with the minimum distance
current_node = get_node_with_min_distance(unvisited_nodes, distances)
if distances[current_node] == float('inf'):
break // Disconnected vertices
unvisited_nodes.remove(current_node)
// Update distances for adjacent vertices
for neighbor, weight in graph.get_neighbors(current_node):
new_distance = distances[current_node] + weight
if new_distance < distances[neighbor]:
distances[neighbor] = new_distance
return distances
// Helper function to find the vertex with the minimum distance
def get_node_with_min_distance(unvisited_nodes, distances):
min_distance = float('inf')
min_node = None
for node in unvisited_nodes:
if distances[node] < min_distance:
min_distance = distances[node]
min_node = node
return min_node
Algorithm complexity:
- Using lists and linear search for the minimum distance: O(V^2), where V is the number of vertices.
- Using a priority queue (e.g., binary heap): O((V + E) log V), where E is the number of edges.
Applications:
- Finding shortest routes on maps (GPS navigation).
- Routing in computer networks.
- Finding shortest paths in dependency graphs.