Post on 06-Apr-2018
transcript
8/3/2019 Lecture-35 Minimum Spanning Tree
1/32
Minimum Spanning
Tree (MST)
8/3/2019 Lecture-35 Minimum Spanning Tree
2/32
MotivationFor an electrical circuit certain pins have to begrounded. Finding the arrangement of wires
(connecting those pins) that uses the least amount of
wire.Let a G(V,E) be a graph such that (u, v) E and a
weight w(u,v) corresponding to wire needed to join u
and v.
We are looking for an acyclic subset T E that
connects all vertices and whose total weight w(T) is
minimized.
!Tvu
vuwTw),(
),()(
8/3/2019 Lecture-35 Minimum Spanning Tree
3/32
MotivationSince T is acyclic and connects all the vertices, it mustform a tree.
Since it spans the graph, it is called a spanning tree.
MST or actually means Minimum Weight Spanning
Tree.
8/3/2019 Lecture-35 Minimum Spanning Tree
4/32
Minimum Spanning Tree Problem: given a connected, undirected,
weighted graph:
14
10
3
6 4
5
2
9
15
8
8/3/2019 Lecture-35 Minimum Spanning Tree
5/32
Minimum Spanning Tree Problem: given a connected, undirected,weighted graph, find a spanning tree using
edges that minimize the total weight
14
10
3
6 4
5
2
9
15
8
8/3/2019 Lecture-35 Minimum Spanning Tree
6/32
Minimum Spanning Tree Which edges form the minimum spanning
tree (MST) of the following graph?
H B C
G E D
F
A
14
10
3
6 4
5
2
9
15
8
8/3/2019 Lecture-35 Minimum Spanning Tree
7/32
Minimum Spanning TreeAnswer:
H B C
G E D
F
A
14
10
3
6 45
2
9
15
8
8/3/2019 Lecture-35 Minimum Spanning Tree
8/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);
for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
8/3/2019 Lecture-35 Minimum Spanning Tree
9/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);
for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
1410
3
6 4
5
2
9
15
8
Run on example graph
8/3/2019 Lecture-35 Minimum Spanning Tree
10/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);
for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
g g g
g g g
g
g
1410
3
6 4
5
2
9
15
8
Run on example graph
8/3/2019 Lecture-35 Minimum Spanning Tree
11/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);
for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
g g g
0 g g
g
g
1410
3
6 4
5
2
9
15
8
Picka start vertex r
r
8/3/2019 Lecture-35 Minimum Spanning Tree
12/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);
for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
g g g
0 g g
g
g
1410
3
6 4
5
2
9
15
8
Blackvertices have been removed from Q
u
8/3/2019 Lecture-35 Minimum Spanning Tree
13/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
g g g
0 g g
3
g
1410
3
6 4
5
2
9
15
8
Blackarrows indicate parent pointers
u
8/3/2019 Lecture-35 Minimum Spanning Tree
14/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
14 g g
0 g g
3
g
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
15/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
14 g g
0 g g
3
g
1410
3
6 4
5
2
9
15
8u
8/3/2019 Lecture-35 Minimum Spanning Tree
16/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
14 g g
0 8 g
3
g
1410
3
6 4
5
2
9
15
8u
8/3/2019 Lecture-35 Minimum Spanning Tree
17/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
10 g g
0 8 g
3
g
1410
3
6 4
5
2
9
15
8u
8/3/2019 Lecture-35 Minimum Spanning Tree
18/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
10 g g
0 8 g
3
g
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
19/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
10 2 g
0 8 g
3
g
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
20/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
10 2 g
0 8 15
3
g
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
21/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
10 2 g
0 8 15
3
g
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
22/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
10 2 g
0 8 15
3
4
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
23/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
5 2 g
0 8 15
3
4
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
24/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
5 2 9
0 8 15
3
4
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
25/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
5 2 9
0 8 15
3
4
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
26/32
8/3/2019 Lecture-35 Minimum Spanning Tree
27/32
Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
5 2 9
0 8 15
3
4
1410
3
6 4
5
2
9
15
8
u
8/3/2019 Lecture-35 Minimum Spanning Tree
28/32
8/3/2019 Lecture-35 Minimum Spanning Tree
29/32
R
eview: Prims AlgorithmMST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
key[v] = w(u,v);
Whatis the hidden costin this code?
8/3/2019 Lecture-35 Minimum Spanning Tree
30/32
Review: Prims Algorithm
MST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
DecreaseKey(v, w(u,v));
8/3/2019 Lecture-35 Minimum Spanning Tree
31/32
Review: Prims Algorithm
MST-Prim(G, w, r)
Q = V[G];
for each u Q
key[u] = g;
key[r] = 0;
p[r] = NULL;
while (Q not empty)
u = ExtractMin(Q);for each v Adj[u]
if (v Q and w(u,v) < key[v])
p[v] = u;
DecreaseKey(v, w(u,v));
How often is ExtractMin() called?
How often is DecreaseKey() called?
8/3/2019 Lecture-35 Minimum Spanning Tree
32/32