Graphs : Dijkstra Algorithm


Dijkstra’s algorithm is a fundamental graph traversal technique used to find the shortest path from a single source node to all other nodes in a weighted graph. Developed by Edsger W. Dijkstra in 1956, the algorithm operates efficiently by iteratively exploring the least-cost paths. It is widely employed in network routing, GPS navigation, and resource allocation.



Key Features of Dijkstra’s Algorithm

1. Non-Negative Weights:
Dijkstra’s algorithm only works accurately on graphs with non-negative edge weights due to its greedy approach.


2. Shortest Path Tree:
The algorithm constructs a tree representing the shortest paths from the source node to all other nodes.


3. Greedy Approach:
It selects the node with the smallest tentative distance at each step, ensuring optimal progress.




Steps of Dijkstra’s Algorithm

1. Initialization:

Assign an initial distance of infinity to all nodes except the source, which is set to 0.

Mark all nodes as unvisited.



2. Node Selection:

Choose the unvisited node with the smallest tentative distance.

Update the distance for its neighbors if a shorter path is found through the current node.



3. Mark as Visited:

Mark the current node as visited, and repeat the process for the remaining unvisited nodes.



4. Termination:

The algorithm ends when all nodes are visited or the shortest path to the desired node is found.



Code Example: Dijkstra’s Algorithm in Python

import heapq

def dijkstra(graph, start):
    distances = {node: float(‘inf’) for node in graph}
    distances[start] = 0
    priority_queue = [(0, start)]

    while priority_queue:
        current_distance, current_node = heapq.heappop(priority_queue)

        if current_distance > distances[current_node]:
            continue

        for neighbor, weight in graph[current_node].items():
            distance = current_distance + weight
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(priority_queue, (distance, neighbor))

    return distances

# Example usage
graph = {
    ‘A’: {‘B’: 1, ‘C’: 4},
    ‘B’: {‘A’: 1, ‘C’: 2, ‘D’: 6},
    ‘C’: {‘A’: 4, ‘B’: 2, ‘D’: 3},
    ‘D’: {‘B’: 6, ‘C’: 3}
}

print(“Shortest distances:”, dijkstra(graph, ‘A’))



Schematic Representation

Graph Example:

A
   / \
  1   4
/     \
B—2—C
\       |
  6——D




Applications of Dijkstra’s Algorithm

1. Network Routing: Identifies the shortest paths in computer networks.


2. Mapping Services: Calculates optimal routes in GPS systems.


3. Resource Allocation: Optimizes task distribution in distributed systems.


4. Transportation Systems: Finds the quickest travel routes in public transport networks.




Conclusion

Dijkstra’s algorithm is a cornerstone in computational graph theory, offering an elegant and efficient solution for shortest-path problems. Its adaptability across domains, from logistics to AI, underscores its enduring relevance in modern computing.

The article above is rendered by integrating outputs of 1 HUMAN AGENT & 3 AI AGENTS, an amalgamation of HGI and AI to serve technology education globally.

(Article By : Himanshu N)