Kruskal’s Algorithm for Computing MSTs
Presented by: Raj Kumar Ranabhat
M.E in Computer Engineering(I/I)
Kathmandu University
Tree
A tree is a graph with the following properties:
• The graph is connected (can go from anywhere to anywhere)
• There are no cycles(acyclic)
Graphs that are not treesTree
Minimum Spanning Tree (MST)
3
• T is a tree (i.e., it is acyclic)
• T covers all the vertices V
• contains |V| - 1 edges
• T has minimum total weight
• A single graph can have many different spanning trees.
Let G=(V,E) be an undirected connected graph.
A sub graph T=(V,E’) of G is a spanning tree of G if :-
Connected undirected graph Spanning Tree
Kruskal’s Algorithm
• It is a algorithm used to find a minimum cost spanning tree for connected weighted
undirected graph
• This algorithm first appeared in Proceedings of the American Mathematical Society
in 1956, and was written by Joseph Kruskal
A B
C D
A B
C D
Connected Weighted
1
5
3
4 26
1
3
2
• It's a spanning tree because it connects all vertices
without loops.
• Tree weight is minimum of all possibilities hence
minimum cost spanning tree
Disjoint Sets
6
• A disjoint set is a data structure which keeps track of all elements that are separated by
a number of disjoint (not connected) subsets.
• It supports three useful operations
• MAKE-SET(x): Make a new set with a single element x
• UNION (S1,S2): Merge the set S1 and set S2
• FIND-SET(x): Find the set containing the element x
Disjoint Sets
7
• A disjoint set is a data structure which keeps track of all elements that are separated by
a number of disjoint (not connected) subsets.
• It supports three useful operations
• MAKE-SET(x): Make a new set with a single element x
• UNION (S1,S2): Merge the set S1 and set S2
• FIND-SET(x): Find the set containing the element x
1 2 3
MAKE-SET(1), MAKE-SET(2), MAKE-
SET(3) creates new set S1,S2,S3
S1 S2 S3
Disjoint Sets
8
• A disjoint set is a data structure which keeps track of all elements that are separated by
a number of disjoint (not connected) subsets.
• It supports three useful operations
• MAKE-SET(x): Make a new set with a single element x
• UNION (S1,S2): Merge the set S1 and set S2
• FIND-SET(x): Find the set containing the element x
1 2
UNION (1,2) merge set S1 and set S2
to create set S4
1 2 3
S1 S2 S3 S4
MAKE-SET(1), MAKE-SET(2), MAKE-
SET(3) creates new set S1,S2,S3
Disjoint Sets
9
• A disjoint set is a data structure which keeps track of all elements that are separated by
a number of disjoint (not connected) subsets
• It supports three useful operations
• MAKE-SET(x): Make a new set with a single element x
• UNION (S1,S2): Merge the set S1 and set S2
• FIND-SET(x): Find the set containing the element x
1 2
UNION (1,2) merge set S1 and set S2
to create set S4
1 2 3
S1 S2 S3 S4
FIND-SET(2) returns set S4
1 2
S4
MAKE-SET(1), MAKE-
SET(2), MAKE-SET(3) creates
new set S1,S2,S3
KRUSKAL(V,E):
A = ∅
foreach 𝑣∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Kruskal’s Algorithm
A
B
C
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
AB 4
BC 6
CD 3
DE 2
EF 4
AF 2
BF 5
CF 1
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
C
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
AB 4
BC 6
CD 3
DE 2
EF 4
AF 2
BF 5
CF 1
A ={ }
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
C
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
AB 4
BC 6
CD 3
DE 2
EF 4
AF 2
BF 5
CF 1
A B C
A ={ }
F DE
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
C
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A B C
F DE
A ={ }
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
C
F
D
E
4
6 3
2
4
2
5 1
A ={ }
A B C
F DE
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
C
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A ={ }
A B C
F DE
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
C
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A ={(C,F)}
A B C
F DE
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
C
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A ={(C,F)}
A B
DE
C,F
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
C
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A ={(C,F)}
A B
DE
C,F
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
F
D
E
4
6 3
2
4
2
5 1
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
C
A ={(C,F),(A,F)}
A B
DE
C,F
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A
B
F
D
E
4
6 3
2
4
2
5 1
A,C,F
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
C
A ={(C,F),(A,F)}
B
DE
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
B D
E
4
6 3
2
4
2
5 1
A
F
C
A ={(C,F),(A,F)}
A,C,FB
DE
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
B
4
6 3
2
4
2
5 1
D
EA
F
C
A ={(C,F),(A,F),(D,E)}
A,C,FB
DE
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
D,E
B
4
6 3
2
4
2
5 1
D
EA
F
C
A ={(C,F),(A,F),(D,E)}
A,C,FB
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
B
4
6 3
2
4
2
5 1
A
C
F
D
E
A ={(C,F),(A,F),(D,E)}
D,E
A,C,FB
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
B
4
6 3
2
4
2
5 1
A
C
F
D
E
A ={(C,F),(A,F),(D,E),
(C,D)}
D,E
A,C,FB
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A,C,D,E,F
B
4
6 3
2
4
2
5 1
A
C
F
D
E
A ={(C,F),(A,F),(D,E),
(C,D)}
B
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
B
4
6 3
2
4
2
5 1
A
C
F
D
E
A ={(C,F),(A,F),(D,E),
(C,D)}
A,C,D,E,FB
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
4
6 3
2
4
2
5 1
B
A
C
F
D
E
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,C,D,E,FB
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A
B
C
F
D
E
4
6 3
2
4
2
5 1
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
4
6 3
2
4
2
5 1
A
B
C
F
D
E
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
F
E
4
6 3
2
4
2
5 1
Is in a same set.
A
B
C
D
It is cyclic
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A
B
C
F
D
E
4
6 3
2
2
5 1
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
4
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
4
6 3
2
2
5 1
F
EA
B
C
DKRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A
B
C
F
D
E
4
6 3
2
2
5 1
Is in a same set.
It is cyclic
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A
B
C
F
D
E
4
6 3
2
2
1
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
5
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
4
6 3
2
2
1
F
EA
B
C
DKRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A
B
C
F
D
E
4
6 3
2
2
1
It is cyclic
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
Is in a same set.
A,B,C,D,E,F
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
A
B
C
F
D
E
4
3
2
2
1
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
A,B,C,D,E,F
6
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
4
3
2
2
1
F
EA
B
C
DKRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
A ={(C,F),(A,F),(D,E),
(C,D),(A,B)}
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Edges Weight
CF 1
AF 2
DE 2
CD 3
AB 4
FE 4
BF 5
BC 6
4
3
2
2
1
Total Weight :- 1 + 2 + 2 + 3 + 4
= 12
F
EA
B
C
D
A ={(C,F),(A,F),(D,E),(C,D),(A,B)}
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Time Complexity
O(1)
O(V)
O(E log E)
O(E log V)
KRUSKAL(V,E):
A = ∅
foreach 𝑣 ∈ V:
MAKE-SET(𝑣)
Sort E by weight increasingly
foreach (𝑣1,𝑣2) ∈ E:
if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2):
A = A ∪ {(𝑣1,𝑣2)}
UNION(𝑣1,𝑣2)
else
Remove edge (𝑣1,𝑣2)
return A
Time Complexity
O(1)
O(V)
O(E log E)
Time Complexity = O(1)+ O(V)+O(E log E)+O(E log V)
= O(E log E) + O(E log V)
Since, |E| ≤ |V|2 ⇒log |E| = O(2 log V) = O(log V).
= O(E log V) + O(E log V)
= O(E log V)
O(E log V)
Real-life applications of Kruskal's algorithm
• Landing Cables
• TV Network
• Tour Operations
• Computer networking
• Study of Molecular bonds in Chemistry
• Routing Algorithms
Problem: Laying Telephone Wire
Central office
Wiring: Naïve Approach
Central office
Expensive!
Wiring: Better Approach
Central office
Minimize the total length of wire connecting the customers

More Related Content

PPTX
Kruskal Algorithm
PPTX
Prims and kruskal algorithms
PPT
Prim Algorithm and kruskal algorithm
PPT
Prim's Algorithm on minimum spanning tree
PPTX
Kruskal & Prim's Algorithm
PPT
Recursion tree method
PDF
Minimum spanning tree
PDF
Graph Data Structure
Kruskal Algorithm
Prims and kruskal algorithms
Prim Algorithm and kruskal algorithm
Prim's Algorithm on minimum spanning tree
Kruskal & Prim's Algorithm
Recursion tree method
Minimum spanning tree
Graph Data Structure

What's hot (20)

PPTX
Kruskal’s algorithm
PPTX
Dijkstra s algorithm
PPT
Minimum spanning tree
PDF
Shortest Path in Graph
PPTX
A presentation on prim's and kruskal's algorithm
PPT
01 knapsack using backtracking
PDF
All pairs shortest path algorithm
PPTX
Prim's algorithm
PPTX
My presentation minimum spanning tree
PPTX
Travelling salesman dynamic programming
PPTX
Bellman ford algorithm
PPTX
Bfs and Dfs
PPT
Spanning trees
PPTX
Graph coloring using backtracking
PPTX
Dijkstra’s algorithm
PDF
Recurrence relation solutions
PPTX
Greedy Algorithm - Knapsack Problem
PPT
Floyd Warshall Algorithm
PPTX
GRAPH APPLICATION - MINIMUM SPANNING TREE (MST)
PPTX
Minimum Spanning Tree
Kruskal’s algorithm
Dijkstra s algorithm
Minimum spanning tree
Shortest Path in Graph
A presentation on prim's and kruskal's algorithm
01 knapsack using backtracking
All pairs shortest path algorithm
Prim's algorithm
My presentation minimum spanning tree
Travelling salesman dynamic programming
Bellman ford algorithm
Bfs and Dfs
Spanning trees
Graph coloring using backtracking
Dijkstra’s algorithm
Recurrence relation solutions
Greedy Algorithm - Knapsack Problem
Floyd Warshall Algorithm
GRAPH APPLICATION - MINIMUM SPANNING TREE (MST)
Minimum Spanning Tree
Ad

Similar to Kruskal's algorithm (20)

PPT
kruskal Algorithm in Algorithm for CS St
PPT
lecture 22
PPTX
Kruskal Algorithm
PPTX
Prims & kruskal algorithms
PPT
2.4 mst prim &kruskal demo
PPTX
Minimum spanning tree algorithms by ibrahim_alfayoumi
PPT
19 prim,kruskal alg. in data structure
PDF
DS & Algo 5 - Disjoint Set and MST
PPT
19 primkruskal
PPT
lecture 16
PPT
minimum spanning trees Algorithm
PDF
prims and Kruskal 1.pdf
PPT
chapter23.ppt
PDF
module3_Greedymethod_2022.pdf
PPTX
DYNAMIC PROGRAMMING AND GREEDY TECHNIQUE
PPTX
Bfs dfs mst
PPT
2.4 mst kruskal’s
PPT
Unit 3-Greedy Method
PPTX
kruskal and prims algorithm _
PPT
kruskal Algorithm in Algorithm for CS St
lecture 22
Kruskal Algorithm
Prims & kruskal algorithms
2.4 mst prim &kruskal demo
Minimum spanning tree algorithms by ibrahim_alfayoumi
19 prim,kruskal alg. in data structure
DS & Algo 5 - Disjoint Set and MST
19 primkruskal
lecture 16
minimum spanning trees Algorithm
prims and Kruskal 1.pdf
chapter23.ppt
module3_Greedymethod_2022.pdf
DYNAMIC PROGRAMMING AND GREEDY TECHNIQUE
Bfs dfs mst
2.4 mst kruskal’s
Unit 3-Greedy Method
kruskal and prims algorithm _
Ad

More from Raj Kumar Ranabhat (9)

PPTX
AI Revolutionizing the Salesforce Developer's Day
PPTX
Sales forcedemo
PPTX
Sales force
PPTX
From data mining to knowledge discovery in
PPTX
PPTX
The Adoption of Knowledge Management Systems in Small Firms
PPTX
Visual notation
PPTX
Take-Grant Protection Model
PPT
Visual Notation
AI Revolutionizing the Salesforce Developer's Day
Sales forcedemo
Sales force
From data mining to knowledge discovery in
The Adoption of Knowledge Management Systems in Small Firms
Visual notation
Take-Grant Protection Model
Visual Notation

Recently uploaded (20)

PDF
HVAC Specification 2024 according to central public works department
PDF
BP 704 T. NOVEL DRUG DELIVERY SYSTEMS (UNIT 2).pdf
PDF
Practical Manual AGRO-233 Principles and Practices of Natural Farming
PDF
Environmental Education MCQ BD2EE - Share Source.pdf
PDF
Vision Prelims GS PYQ Analysis 2011-2022 www.upscpdf.com.pdf
PDF
1.3 FINAL REVISED K-10 PE and Health CG 2023 Grades 4-10 (1).pdf
PDF
FORM 1 BIOLOGY MIND MAPS and their schemes
PPTX
ELIAS-SEZIURE AND EPilepsy semmioan session.pptx
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PDF
CISA (Certified Information Systems Auditor) Domain-Wise Summary.pdf
PDF
Hazard Identification & Risk Assessment .pdf
PPTX
Computer Architecture Input Output Memory.pptx
PPTX
A powerpoint presentation on the Revised K-10 Science Shaping Paper
PPTX
TNA_Presentation-1-Final(SAVE)) (1).pptx
PDF
BP 704 T. NOVEL DRUG DELIVERY SYSTEMS (UNIT 1)
PDF
Trump Administration's workforce development strategy
PDF
LDMMIA Reiki Yoga Finals Review Spring Summer
PPTX
CHAPTER IV. MAN AND BIOSPHERE AND ITS TOTALITY.pptx
PDF
David L Page_DCI Research Study Journey_how Methodology can inform one's prac...
PDF
Empowerment Technology for Senior High School Guide
HVAC Specification 2024 according to central public works department
BP 704 T. NOVEL DRUG DELIVERY SYSTEMS (UNIT 2).pdf
Practical Manual AGRO-233 Principles and Practices of Natural Farming
Environmental Education MCQ BD2EE - Share Source.pdf
Vision Prelims GS PYQ Analysis 2011-2022 www.upscpdf.com.pdf
1.3 FINAL REVISED K-10 PE and Health CG 2023 Grades 4-10 (1).pdf
FORM 1 BIOLOGY MIND MAPS and their schemes
ELIAS-SEZIURE AND EPilepsy semmioan session.pptx
Chinmaya Tiranga quiz Grand Finale.pdf
CISA (Certified Information Systems Auditor) Domain-Wise Summary.pdf
Hazard Identification & Risk Assessment .pdf
Computer Architecture Input Output Memory.pptx
A powerpoint presentation on the Revised K-10 Science Shaping Paper
TNA_Presentation-1-Final(SAVE)) (1).pptx
BP 704 T. NOVEL DRUG DELIVERY SYSTEMS (UNIT 1)
Trump Administration's workforce development strategy
LDMMIA Reiki Yoga Finals Review Spring Summer
CHAPTER IV. MAN AND BIOSPHERE AND ITS TOTALITY.pptx
David L Page_DCI Research Study Journey_how Methodology can inform one's prac...
Empowerment Technology for Senior High School Guide

Kruskal's algorithm

  • 1. Kruskal’s Algorithm for Computing MSTs Presented by: Raj Kumar Ranabhat M.E in Computer Engineering(I/I) Kathmandu University
  • 2. Tree A tree is a graph with the following properties: • The graph is connected (can go from anywhere to anywhere) • There are no cycles(acyclic) Graphs that are not treesTree
  • 3. Minimum Spanning Tree (MST) 3 • T is a tree (i.e., it is acyclic) • T covers all the vertices V • contains |V| - 1 edges • T has minimum total weight • A single graph can have many different spanning trees. Let G=(V,E) be an undirected connected graph. A sub graph T=(V,E’) of G is a spanning tree of G if :-
  • 5. Kruskal’s Algorithm • It is a algorithm used to find a minimum cost spanning tree for connected weighted undirected graph • This algorithm first appeared in Proceedings of the American Mathematical Society in 1956, and was written by Joseph Kruskal A B C D A B C D Connected Weighted 1 5 3 4 26 1 3 2 • It's a spanning tree because it connects all vertices without loops. • Tree weight is minimum of all possibilities hence minimum cost spanning tree
  • 6. Disjoint Sets 6 • A disjoint set is a data structure which keeps track of all elements that are separated by a number of disjoint (not connected) subsets. • It supports three useful operations • MAKE-SET(x): Make a new set with a single element x • UNION (S1,S2): Merge the set S1 and set S2 • FIND-SET(x): Find the set containing the element x
  • 7. Disjoint Sets 7 • A disjoint set is a data structure which keeps track of all elements that are separated by a number of disjoint (not connected) subsets. • It supports three useful operations • MAKE-SET(x): Make a new set with a single element x • UNION (S1,S2): Merge the set S1 and set S2 • FIND-SET(x): Find the set containing the element x 1 2 3 MAKE-SET(1), MAKE-SET(2), MAKE- SET(3) creates new set S1,S2,S3 S1 S2 S3
  • 8. Disjoint Sets 8 • A disjoint set is a data structure which keeps track of all elements that are separated by a number of disjoint (not connected) subsets. • It supports three useful operations • MAKE-SET(x): Make a new set with a single element x • UNION (S1,S2): Merge the set S1 and set S2 • FIND-SET(x): Find the set containing the element x 1 2 UNION (1,2) merge set S1 and set S2 to create set S4 1 2 3 S1 S2 S3 S4 MAKE-SET(1), MAKE-SET(2), MAKE- SET(3) creates new set S1,S2,S3
  • 9. Disjoint Sets 9 • A disjoint set is a data structure which keeps track of all elements that are separated by a number of disjoint (not connected) subsets • It supports three useful operations • MAKE-SET(x): Make a new set with a single element x • UNION (S1,S2): Merge the set S1 and set S2 • FIND-SET(x): Find the set containing the element x 1 2 UNION (1,2) merge set S1 and set S2 to create set S4 1 2 3 S1 S2 S3 S4 FIND-SET(2) returns set S4 1 2 S4 MAKE-SET(1), MAKE- SET(2), MAKE-SET(3) creates new set S1,S2,S3
  • 10. KRUSKAL(V,E): A = ∅ foreach 𝑣∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Kruskal’s Algorithm
  • 11. A B C F D E 4 6 3 2 4 2 5 1 Edges Weight AB 4 BC 6 CD 3 DE 2 EF 4 AF 2 BF 5 CF 1 KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A
  • 12. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B C F D E 4 6 3 2 4 2 5 1 Edges Weight AB 4 BC 6 CD 3 DE 2 EF 4 AF 2 BF 5 CF 1 A ={ }
  • 13. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B C F D E 4 6 3 2 4 2 5 1 Edges Weight AB 4 BC 6 CD 3 DE 2 EF 4 AF 2 BF 5 CF 1 A B C A ={ } F DE
  • 14. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B C F D E 4 6 3 2 4 2 5 1 Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A B C F DE A ={ }
  • 15. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B C F D E 4 6 3 2 4 2 5 1 A ={ } A B C F DE Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6
  • 16. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B C F D E 4 6 3 2 4 2 5 1 Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A ={ } A B C F DE
  • 17. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B C F D E 4 6 3 2 4 2 5 1 Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A ={(C,F)} A B C F DE
  • 18. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B C F D E 4 6 3 2 4 2 5 1 Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A ={(C,F)} A B DE C,F
  • 19. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B C F D E 4 6 3 2 4 2 5 1 Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A ={(C,F)} A B DE C,F
  • 20. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B F D E 4 6 3 2 4 2 5 1 Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 C A ={(C,F),(A,F)} A B DE C,F
  • 21. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A B F D E 4 6 3 2 4 2 5 1 A,C,F Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 C A ={(C,F),(A,F)} B DE
  • 22. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 B D E 4 6 3 2 4 2 5 1 A F C A ={(C,F),(A,F)} A,C,FB DE
  • 23. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 B 4 6 3 2 4 2 5 1 D EA F C A ={(C,F),(A,F),(D,E)} A,C,FB DE
  • 24. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 D,E B 4 6 3 2 4 2 5 1 D EA F C A ={(C,F),(A,F),(D,E)} A,C,FB
  • 25. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 B 4 6 3 2 4 2 5 1 A C F D E A ={(C,F),(A,F),(D,E)} D,E A,C,FB
  • 26. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 B 4 6 3 2 4 2 5 1 A C F D E A ={(C,F),(A,F),(D,E), (C,D)} D,E A,C,FB
  • 27. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A,C,D,E,F B 4 6 3 2 4 2 5 1 A C F D E A ={(C,F),(A,F),(D,E), (C,D)} B
  • 28. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 B 4 6 3 2 4 2 5 1 A C F D E A ={(C,F),(A,F),(D,E), (C,D)} A,C,D,E,FB
  • 29. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 4 6 3 2 4 2 5 1 B A C F D E A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,C,D,E,FB
  • 30. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A B C F D E 4 6 3 2 4 2 5 1 KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F
  • 31. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 4 6 3 2 4 2 5 1 A B C F D E KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F
  • 32. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 F E 4 6 3 2 4 2 5 1 Is in a same set. A B C D It is cyclic KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F
  • 33. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A B C F D E 4 6 3 2 2 5 1 KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F 4
  • 34. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 4 6 3 2 2 5 1 F EA B C DKRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F
  • 35. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A B C F D E 4 6 3 2 2 5 1 Is in a same set. It is cyclic A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F
  • 36. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A B C F D E 4 6 3 2 2 1 KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F 5
  • 37. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 4 6 3 2 2 1 F EA B C DKRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F
  • 38. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A B C F D E 4 6 3 2 2 1 It is cyclic A ={(C,F),(A,F),(D,E), (C,D),(A,B)} Is in a same set. A,B,C,D,E,F
  • 39. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 A B C F D E 4 3 2 2 1 KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)} A,B,C,D,E,F 6
  • 40. Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 4 3 2 2 1 F EA B C DKRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A A ={(C,F),(A,F),(D,E), (C,D),(A,B)}
  • 41. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Edges Weight CF 1 AF 2 DE 2 CD 3 AB 4 FE 4 BF 5 BC 6 4 3 2 2 1 Total Weight :- 1 + 2 + 2 + 3 + 4 = 12 F EA B C D A ={(C,F),(A,F),(D,E),(C,D),(A,B)}
  • 42. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Time Complexity O(1) O(V) O(E log E) O(E log V)
  • 43. KRUSKAL(V,E): A = ∅ foreach 𝑣 ∈ V: MAKE-SET(𝑣) Sort E by weight increasingly foreach (𝑣1,𝑣2) ∈ E: if FIND-SET(𝑣1) ≠ FIND-SET(𝑣2): A = A ∪ {(𝑣1,𝑣2)} UNION(𝑣1,𝑣2) else Remove edge (𝑣1,𝑣2) return A Time Complexity O(1) O(V) O(E log E) Time Complexity = O(1)+ O(V)+O(E log E)+O(E log V) = O(E log E) + O(E log V) Since, |E| ≤ |V|2 ⇒log |E| = O(2 log V) = O(log V). = O(E log V) + O(E log V) = O(E log V) O(E log V)
  • 44. Real-life applications of Kruskal's algorithm • Landing Cables • TV Network • Tour Operations • Computer networking • Study of Molecular bonds in Chemistry • Routing Algorithms
  • 45. Problem: Laying Telephone Wire Central office
  • 46. Wiring: Naïve Approach Central office Expensive!
  • 47. Wiring: Better Approach Central office Minimize the total length of wire connecting the customers