0% found this document useful (0 votes)
13 views

Floyd Warshall Algorithm

Uploaded by

Deva Dharshan
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Floyd Warshall Algorithm

Uploaded by

Deva Dharshan
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 12

Floyd Warshall Algorithm

The Floyd-Warshall algorithm, named after its creators Robert Floyd


and Stephen Warshall, is a fundamental algorithm in computer science
and graph theory. It is used to find the shortest paths between all pairs of
nodes in a weighted graph. This algorithm is highly efficient and can
handle graphs with both positive and negative edge weights, making it a
versatile tool for solving a wide range of network and connectivity
problems.
Idea Behind Floyd Warshall Algortihm:

Suppose we have a graph G[][] with V vertices from 1 to N. Now we


have to evaluate a shortestPathMatrix[][] where
shortestPathMatrix[i][j] represents the shortest path between
vertices i and j.
Obviously the shortest path between i to j will have some k number of
intermediate nodes. The idea behind floyd warshall algorithm is to treat
each and every vertex from 1 to N as an intermediate node one by one.
The following figure shows the above optimal substructure property in
floyd warshall algorithm:
Floyd Warshall Algorithm Algorithm:

Initialize the solution matrix same as the input graph matrix as a first step.
Then update the solution matrix by considering all vertices as an intermediate
vertex.
The idea is to pick all vertices one by one and updates all shortest paths which
include the picked vertex as an intermediate vertex in the shortest path.
When we pick vertex number k as an intermediate vertex, we already have
considered vertices {0, 1, 2, .. K-1} as intermediate vertices.
For every pair (i, j) of the source and destination vertices respectively, there are
two possible cases.
K is not an intermediate vertex in shortest path from i to j. We keep the value of
dist[i][j] as it is.
1. K is an intermediate vertex in shortest path from i to j. We update the value of
dist[i][j] as dist[i][k] + dist[k][j], if dist[i][j] > dist[i][k] + dist[k][j]
Pseudo-Code of Floyd Warshall Algorithm :
For k = 0 to n – 1
For i = 0 to n – 1
For j = 0 to n – 1
Distance[i, j] = min(Distance[i, j], Distance[i, k] + Distance[k, j])

where i = source Node, j = Destination Node, k = Intermediate Node


Illustration of Floyd Warshall Algorithm :
Step 1: Initialize the Distance[][] matrix using the input graph such that
Distance[i][j]= weight of edge from i to j, also Distance[i][j] = Infinity if there is no
edge from i to j.
Step 2: Treat node A as an intermediate node and calculate the
Distance[][] for every {i,j} node pair using the formula:
= Distance[i][j] = minimum (Distance[i][j], (Distance from i to A) + (Distance
from A to j ))
= Distance[i][j] = minimum (Distance[i][j], Distance[i][A] + Distance[A][j])
Step 3: Treat node B as an intermediate node and calculate the Distance[]
[] for every {i,j} node pair using the formula:
= Distance[i][j] = minimum (Distance[i][j], (Distance from i to B) + (Distance
from B to j ))
= Distance[i][j] = minimum (Distance[i][j], Distance[i][B] + Distance[B][j])
Step 4: Treat node C as an intermediate node and calculate the Distance[][]
for every {i,j} node pair using the formula:
= Distance[i][j] = minimum (Distance[i][j], (Distance from i to C) + (Distance
from C to j ))
= Distance[i][j] = minimum (Distance[i][j], Distance[i][C] + Distance[C][j])
Step 5: Treat node D as an intermediate node and calculate the
Distance[][] for every {i,j} node pair using the formula:
= Distance[i][j] = minimum (Distance[i][j], (Distance from i to D) + (Distance
from D to j ))
= Distance[i][j] = minimum (Distance[i][j], Distance[i][D] + Distance[D][j])
Step 6: Treat node E as an intermediate node and calculate the
Distance[][] for every {i,j} node pair using the formula:

= Distance[i][j] = minimum (Distance[i][j], (Distance from i to E) +


(Distance from E to j ))
= Distance[i][j] = minimum (Distance[i][j], Distance[i][E] + Distance[E]
[j])
Step 7: Since all the nodes have been treated as an intermediate node,
we can now return the updated Distance[][] matrix as our answer
matrix.
Time and Space Complexity of Floyd Warshall Algorithm
Time Complexity: O(V3), where V is the number of vertices in the
graph and we run three nested loops each of size V
Auxiliary Space: O(V2), to create a 2-D matrix in order to store the
shortest distance for each pair of nodes.

Why Floyd-Warshall Algorithm better for Dense Graphs and


not for Sparse Graphs?
Dense Graph: A graph in which the number of edges are significantly
much higher than the number of vertices.
Sparse Graph: A graph in which the number of edges are very much low.
No matter how many edges are there in the graph the Floyd Warshall
Algorithm runs for O(V3) times therefore it is best suited for Dense
graphs. In the case of sparse graphs, Johnson’s Algorithm is more
suitable.

You might also like