19. W-11_L-1_Minimum Spanning Tree (MST), MST Kruskal’s Algorithm, MST Prim’s Algorithm.pptx
19. W-11_L-1_Minimum Spanning Tree (MST), MST Kruskal’s Algorithm, MST Prim’s Algorithm.pptx
Central office
2
Wiring: Naïve Approach
Central office
Expensive!
3
Wiring: Better Approach
Central office
4
A Networking Problem
5
Minimum Spanning Trees
• Undirected, connected graph G =
(V,E)
• Weight function W: E → R
6
Minimum Spanning Tree (MST)
A minimum spanning tree is a subgraph of an
undirected weighted graph G, such that
7
How Can We Generate a MST?
9 9
b b
a 2 6 a 2 6
d d
4 5 4 5
5 4 5 4
5 e 5 e
c c
8
Greedy Choice
We will show two ways to build a minimum spanning tree.
• A MST can be grown from the current spanning tree by adding the
nearest vertex and the edge connecting the nearest vertex to the
MST. (Prim's algorithm)
9
Notation
• Tree-vertices: in the tree constructed so far
• Non-tree vertices: rest of vertices
10
The Prim algorithm Main Idea
Select a vertex to be a tree-node
11
Prim’s Algorithm
• Vertex based algorithm
• Grows one tree T, one vertex at a time
12
Prim Algorithm (2)
MST-Prim(G,w,r)
01 Q ← V[G] // Q – vertices out of T
02 for each u ∈ Q
03 key[u] ← ∞
04 key[r] ← 0 // r is the first tree node, let r=1
05 π[r] ← NIL
06 while Q ≠ ∅ do
07 u ← ExtractMin(Q) // making u part of T
08 for each v ∈ Adj[u] do
09 if v ∈ Q and w(u,v) < key[v] then
10 π[v] ← u
11 key[v] ← w(u,v)
13
Prim Algorithm:Variables
• r:
• Grow the minimum spanning tree from the root vertex “r”.
• Q:
• is a priority queue, holding all vertices that are not in the tree now.
• key[v]:
• is the minimum weight of any edge connecting v to a vertex in the
tree.
• π [v]:
• names the parent of v in the tree.
• T[v] –
• Vertex v is already included in MST if T[v]==1, otherwise, it is not
included yet.
14
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 1 14 e
i 4
1 7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 0 0 0 0 0 0 0 0
Key 0 - - - - - - - -
π -1 - - - - - - - -
15
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 1 14 e
i 4
1 7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 0 0 0 0 0 0 0 0
Key 0 4 - - - - - 8 -
π -1 a - - - - - a -
16
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 11 14 e
i 4
7 6
10
8
h g f
1 2
Important: Update Key[v] only if T[v]==0
V a b c d e f g h i
T 1 1 0 0 0 0 0 0 0
Key 0 4 8 - - - - 8 -
π -1 a b - - - - a -
17
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 11 14 e
i 4
7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 1 1 0 0 0 0 0 0
Key 0 4 8 7 - 4 - 8 2
π -1 a b c - c - a c
18
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 11 14 e
i 4
7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 1 1 0 0 0 0 0 1
Key 0 4 8 7 - 4 6 7 2
π -1 a b c - c i i c
19
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 11 14 e
i 4
7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 1 1 0 0 1 0 0 1
Key 0 4 8 7 10 4 2 7 2
π -1 a b c f c f i c
20
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 11 14 e
i 4
7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 1 1 0 0 1 1 0 1
Key 0 4 8 7 10 4 2 1 2
π -1 a b c f c f g c
21
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 11 14 e
i 4
7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 1 1 0 0 1 1 1 1
Key 0 4 8 7 10 4 2 1 2
π -1 a b c f c f g c
22
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 11 14 e
i 4
7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 1 1 1 0 1 1 1 1
Key 0 4 8 7 9 4 2 1 2
π -1 a b c d c f g c
23
The execution of Prim's algorithm(moderate part)
8 7
the root b c d 9
vertex 4
2
a 11 14 e
i 4
7 6
10
8
h g f
1 2
V a b c d e f g h i
T 1 1 1 1 1 1 1 1 1
Key 0 4 8 7 9 4 2 1 2
π -1 a b c d c f g c
24
Complexity: Prim Algorithm
MST-Prim(G,w,r)
01 Q ← V[G] // Q – vertices out of T
02 for each u ∈ Q
03 key[u] ← ∞ O(V)
04 key[r] ← 0
05 π[r] ← NIL
06 while Q ≠ ∅ do
O(V)
07 u ← ExtractMin(Q) // making u part of T
08 for each v ∈ Adj[u] do Heap: O(lgV)
09 if v ∈ Q and w(u,v) < key[v] then Overall: O(E)
10 π[v] ← u
11 key[v] ← w(u,v)
Decrease Key: O(lgV)
26
Kruskal’s Algorithm
27
Some Definition
• Cut:
• Partition of V. Ex: (S, V-S)
• Cross:
• Edge (u,v) crosses the cut (S, V-S) if one of its endpoints is in S and the other is
in V-S.
• Light edge:
• An edge crossing a cut if its weight is the minimum of any edge crossing the
cut.
28
Kruskal's Algorithm
• Edge based algorithm
• Add the edges one at a time, in increasing weight order
• The algorithm maintains A – a forest of trees. An edge is accepted it if
connects vertices of distinct trees
• We need a data structure that maintains a partition, i.e.,a collection
of disjoint sets
• MakeSet(S,x)
• Union(Si,Sj)
• FindSet(S, x)
29
Kruskal – Step 1
30
Kruskal – Step 2
31
Kruskal – Step 3
32
Kruskal – Step 4
33
Kruskal – Step 5
34
Kruskal – Step 6
35
Why Avoiding Cycles Matters
36
Forms a Cycle
37
Kruskal – Step 7 DONE!!
38
Kruskal's Algorithm
• The algorithm adds the cheapest edge that connects
two trees of the forest
MST-Kruskal(G,w)
01 A ← ∅
02 for each vertex v ∈ V[G] do
O(V)
03 Make-Set(v)
04 sort the edges of E by non-decreasing weight w O(ElogE)
05 for each edge (u,v) ∈ E, in order by
O(E)
non-decreasing weight do
06 if Find-Set(u) ≠ Find-Set(v) then
07 A ← A ∪ {(u,v)} O(V)
08 Union(u,v)
09 return A