Notes for Lecture 3

advertisement
4.5. Minimum Spanning Trees
•Definition of MST
•Generic MST algorithm
•Kruskal's algorithm
•Prim's algorithm
1
Definition of MST
• Let G=(V,E) be a connected, undirected graph.
• For each edge (u,v) in E, we have a weight w(u,v) specifying
the cost (length of edge) to connect u and v.
• We wish to find a (acyclic) subset T of E that connects all of
the vertices in V and whose total weight is minimized.
• Since the total weight is minimized, the subset T must be
acyclic (no circuit).
• Thus, T is a tree. We call it a spanning tree.
• The problem of determining the tree T is called the
minimum-spanning-tree problem.
2
Application of MST: an example
• In the design of electronic circuitry, it is often
necessary to make a set of pins electrically
equivalent by wiring them together.
• To interconnect n pins, we can use n-1 wires, each
connecting two pins.
• We want to minimize the total length of the wires.
• Minimum Spanning Trees can be used to model
this problem.
3
Electronic Circuits:
4
Electronic Circuits:
5
Here is an example of a connected graph
and its minimum spanning tree:
8
4
c
b
i
7
8
d
2
11
a
7
4
6
h
14
e
10
g
1
9
f
2
Notice that the tree is not unique:
replacing (b,c) with (a,h) yields another spanning tree
with the same minimum weight.
6
Growing a MST(Generic Algorithm)
GENERIC_MST(G,w)
1
A:={}
2
while A does not form a spanning tree do
3
find an edge (u,v) that is safe for A
4
A:=A∪{(u,v)}
5
return A
• Set A is always a subset of some minimum spanning tree.
This property is called the invariant Property.
• An edge (u,v) is a safe edge for A if adding the edge to A
does not destroy the invariant.
• A safe edge is just the CORRECT edge to choose to add to
T.
7
How to find a safe edge
We need some definitions and a theorem.
• A cut (S,V-S) of an undirected graph G=(V,E) is a
partition of V.
• An edge crosses the cut (S,V-S) if one of its
endpoints is in S and the other is in V-S.
• An edge is a light edge crossing a cut if its weight
is the minimum of any edge crossing the cut.
8
8
4
S↑ a
c
b
i
7
V-S↓
d
2
11
8
7
4
6
h
14
e
↑S
10
g
1
9
f
2
↓ V-S
• This figure shows a cut (S,V-S) of the graph.
• The edge (d,c) is the unique light edge
crossing the cut.
9
Theorem 1
• Let G=(V,E) be a connected, undirected graph with a realvalued weight function w defined on E.
• Let A be a subset of E that is included in some minimum
spanning tree for G.
• Let (S,V-S) be any cut of G such that for any edge (u, v) in
A, {u, v}  S or {u, v}  (V-S).
• Let (u,v) be a light edge crossing (S,V-S).
• Then, edge (u,v) is safe for A.
• Proof: Let Topt be a minimum spanning tree.(Blue)
•
•
•
•
•
A --a subset of Topt and (u,v)-- a light edge crossing (S, V-S)
If (u,v) is NOT safe, then (u,v) is not in T. (See the red edge in Figure)
There MUST be another edge (u’, v’) in Topt crossing (S, V-S).(Green)
We can replace (u’,v’) in Topt with (u, v) and get another treeT’opt
Since (u, v) is light , T’opt is also optimal.
1
1
1
1
2
1
1
1
10
Corollary .2
• Let G=(V,E) be a connected, undirected graph with a realvalued weight function w defined on E.
• Let A be a subset of E that is included in some minimum
spanning tree for G.
• Let C be a connected component (tree) in the forest
GA=(V,A).
• Let (u,v) be a light edge (shortest among all edges
connecting C with other components) connecting C to
some other component in GA.
• Then, edge (u,v) is safe for A. (For Kruskal’s algorithm)
11
The algorithms of Kruskal and Prim
• The two algorithms are elaborations of the generic
algorithm.
• They each use a specific rule to determine a safe
edge in line 3 of GENERIC_MST.
• In Kruskal's algorithm,
– The set A is a forest.
– The safe edge added to A is always a least-weight edge
in the graph that connects two distinct components.
• In Prim's algorithm,
– The set A forms a single tree.
– The safe edge added to A is always a least-weight edge
connecting the tree to a vertex not in the tree.
12
Kruskal's algorithm(basic part)
1
2
3
3
(Sort the edges in an increasing order)
A:={}
while E is not empty do {
take an edge (u, v) that is shortest in E
and delete it from E
4
if u and v are in different components then
add (u, v) to A
}
Note: each time a shortest edge in E is considered.
13
Kruskal's algorithm
MST_KRUSKAL(G,w)
1 A:={}
2 for each vertex v in V[G]
3
do MAKE_SET(v)
4 sort the edges of E by nondecreasing weight w
5 for each edge (u,v) in E, in order by
nondecreasing weight
6
do if FIND_SET(u) != FIND_SET(v)
7
then A:=A∪{(u,v)}
8
UNION(u,v)
9 return A
(Disjoint set is discussed in Chapter 21, Page 498)
14
Disjoint-Set (Chapter 21, Page 498)
• Keep a collection of sets S1, S2, .., Sk,
– Each Si is a set, e,g, S1={v1, v2, v8}.
• Three operations
– Make-Set(x)-creates a new set whose only member is x.
– Union(x, y) –unites the sets that contain x and y, say, Sx
and Sy, into a new set that is the union of the two sets.
– Find-Set(x)-returns a pointer to the representative of the
set containing x.
– Each operation takes O(log n) time.
15
• Our implementation uses a disjoint-set data
structure to maintain several disjoint sets of
elements.
• Each set contains the vertices in a tree of the
current forest.
• The operation FIND_SET(u) returns a
representative element from the set that contains u.
• Thus, we can determine whether two vertices u
and v belong to the same tree by testing whether
FIND_SET(u) equals FIND_SET(v).
• The combining of trees is accomplished by the
UNION procedure.
• Running time O(|E| lg (|E|)).
16
The execution of Kruskal's algorithm (Moderate part)
•The edges are considered by the algorithm in sorted
order by weight.
•The edge under consideration at each step is shown
with a red weight number.
8
4
c
b
i
7
8
d
2
11
a
7
6
h
14
4
e
10
g
1
9
f
2
17
8
c
b
4
i
7
8
d
2
11
a
7
h
10
g
f
1
2
8
4
c
d
2
i
7
8
7
b
11
a
14
4
6
h
9
e
10
g
1
e
14
4
6
9
f
2
18
8
4
c
b
i
7
8
4
8
f
1
2
8
7
c
d
2
i
7
14
4
6
h
9
e
10
g
1
e
10
g
b
9
14
4
6
h
11
a
d
2
11
a
7
f
2
19
8
4
c
b
i
7
8
4
8
f
1
2
8
7
c
d
2
i
7
14
4
6
h
9
e
10
g
1
e
10
g
b
9
14
4
6
h
11
a
d
2
11
a
7
f
2
20
8
4
c
b
i
7
8
4
8
f
1
2
8
7
c
d
2
i
7
14
4
6
h
9
e
10
g
1
e
10
g
b
9
14
4
6
h
11
a
d
2
11
a
7
f
2
21
8
4
c
b
i
7
8
4
8
f
1
2
8
7
c
d
2
i
7
14
4
6
h
9
e
10
g
1
e
10
g
b
9
14
4
6
h
11
a
d
2
11
a
7
f
2
22
Prim's algorithm(basic part)
MST_PRIM(G,w,r)
1. A={}
2. S:={r} (r is an arbitrary node in V)
3. Q=V-{r};
4. while Q is not empty do {
5
take an edge (u, v) such that (1) u S and v  Q (v S ) and
(u, v) is the shortest edge satisfying (1)
6
add (u, v) to A, add v to S and delete v from Q
}
23
Prim's algorithm
MST_PRIM(G,w,r)
1
for each u in Q do
2
key[u]:=∞
3
parent[u]:=NIL
4 key[r]:=0; parent[r]=NIL;
5
QV[Q]
6
while Q!={} do
7
u:=EXTRACT_MIN(Q); if parent[u]Nil print (u, parent[u])
8
for each v in Adj[u] do
9
if v in Q and w(u,v)<key[v]
10
then
parent[v]:=u
11
key[v]:=w(u,v)
24
priority queue Q: three important operations
– EXTRACT-MIN(Q) –takes log (n) times if
there are n items in Q.
– Insert an element (key u) into Q- takes log(n)
time.
– Update(u, k): update the key value of element u
into k. It takes Olog (n) time for adaptable
priority queue (heap).
25
• 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.
• parent[v] names the parent of v in the tree.
• When the algorithm terminates, Q is empty; the
minimum spanning tree A for G is thus
A={(v,parent[v]):v∈V-{r}}.
• Running time: O(||E||lg |V|).
26
The execution of Prim's algorithm(basic part)
8
the root
vertex
4
c
b
i
7
8
4
8
f
1
2
8
7
c
d
2
i
7
14
4
6
h
9
e
10
g
1
e
10
g
b
9
14
4
6
h
11
a
d
2
11
a
7
f
2
27
8
4
c
b
i
7
8
4
8
f
1
2
8
7
c
d
2
i
7
14
4
6
h
9
e
10
g
1
e
10
g
b
9
14
4
6
h
11
a
d
2
11
a
7
f
2
28
8
4
c
b
i
7
8
4
8
f
1
2
8
7
c
d
2
i
7
14
4
6
h
9
e
10
g
1
e
10
g
b
9
14
4
6
h
11
a
d
2
11
a
7
f
2
29
8
4
c
b
i
7
8
4
8
f
1
2
8
7
c
d
2
i
7
14
4
6
h
9
e
10
g
1
e
10
g
b
9
14
4
6
h
11
a
d
2
11
a
7
f
2
30
8
4
c
b
i
7
8
d
2
11
a
7
6
h
14
4
e
10
g
1
9
f
2
Bottleneck spanning tree: A spanning tree of G whose
largest edge weight is minimum over all spanning trees of G.
The value of the bottleneck spanning tree is the weight of the
maximum-weight edge in T.
Theorem:
A minimum spanning tree is also a bottleneck
spanning tree. (Challenge problem)
31
Download