Tut 4

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 38

Minimum Spanning Trees

 Problem
 Given a connected undirected weighted graph with
, the goal of the minimum spanning tree (MST)
problem is to find a spanning tree of the smallest cost.

 How to implement Prim’s algorithm in


time?

1
Let be a connected undirected graph. Let be a
function that maps each edge of to a positive integer
called the weight of .

A spanning tree is a tree satisfying the following conditions:


 The vertex set of is .
 Every edge of is an edge in .

The cost of is the sum of the weights of all the edges in .

2
Example

The second row shows three spanning trees. The cost of the first two trees is 37,
and that of the right tree is 48.
3
Prim’s algorithm
The algorithm grows a tree by including one vertex at a time.
At any moment, it divides the vertex set into two parts:
 The set of vertices that are already in .
 The set of other vertices: .
At the end of the algorithm, .
If an edge connects a vertex in and a vertex in , we call it an
cross edge.

4
Prim’s algorithm
The algorithm grows a tree by including one vertex at a time.
At any moment, it divides the vertex set into two parts:
 The set of vertices that are already in .
 The set of other vertices: .
At the end of the algorithm, .

If an edge connects a vertex in and a vertex in , we call it an


cross edge.
a f
g

b e

c d

5
Prim’s algorithm
The algorithm grows a tree by including one vertex at a time.
At any moment, it divides the vertex set into two parts:
 The set of vertices that are already in .
 The set of other vertices: .
At the end of the algorithm, .

If an edge connects a vertex in and a vertex in , we call it an


cross edge.
a f
g

b e

c d

6
Prim’s algorithm
The algorithm grows a tree by including one vertex at a time.
At any moment, it divides the vertex set into two parts:
 The set of vertices that are already in .
 The set of other vertices: .
At the end of the algorithm, .

If an edge connects a vertex in and a vertex in , we call it an


cross edge.
a f
g

b e

c d

7
Prim’s algorithm
The algorithm grows a tree by including one vertex at a time.
At any moment, it divides the vertex set into two parts:
 The set of vertices that are already in .
 The set of other vertices: .
At the end of the algorithm, .

If an edge connects a vertex in and a vertex in , we call it an


cross edge.
a f
g

b e

c d

8
Implementing Prim’s algorithm
To implement the algorithm efficiently, we will enforce the
following invariant:

 For every vertex , remember which cross edge of


has the smallest weight — refer to the edge as the lightest
cross edge of and denote it as best-cross( ).

9
Implementing Prim’s algorithm
1. = an edge with the smallest weight among all edges.
2. Set . Initialize a tree with only one edge .
3. Enforce our invariant:
 For every vertex of
 If is a neighbor of , but not of
best-cross( ) = edge
 If is a neighbor of , but not of u
best-cross( ) = edge
 Otherwise
best-cross( ) = the lighter edge between and

10
Example
Edge is the lightest of all. So, in the beginning . The
MST now has one edge .

vertex 𝒗 best-cross and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c {c, a}, 3
b 10 e
d nil, ∞

11 12 e {e, b}, 10
3 3 h
f {a, f}, 7
c 6 d
g {g, b}, 13

h {a, h}, 8

11
Implementing Prim’s algorithm
4. Repeat the following until :
5. Find a cross edge with the smallest weight
/* Without loss of generality, suppose and */
6. Add into , and add edge into
/* Next, restore the invariant. */
7. for every edge of :
 If then
If best-cross( ) is heavier than edge then
Set best-cross( ) = edge

12
Example
Edge is a lightest cross edge. So, we add to , which is now
. Add edge into the MST.

vertex 𝒗 best-cross and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c {c, a}, 3
b 10 e
d nil, ∞

11 12 e {e, b}, 10
3 3 h
f {a, f}, 7
c 6 d
g {g, b}, 13

h {a, h}, 8

13
Example

Restore the invariant.

vertex 𝒗 best-cross and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c {c, a}, 3 => n / a
b 10 e
d nil, ∞

11 12 e {e, b}, 10
3 3 h
f {a, f}, 7 => {c, f}}, 5
c 6 d
g {g, b}, 13

h {a, h}, 8 => {c, h}, 6

14
Example
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d nil, ∞

11 12 e {e, b}, 10
3 3 h
f {c, f}, 5
c 6 d
g {g, b}, 13

h {c, h}, 6

15
Example

Restore the invariant.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d nil, ∞

11 12 e {e,
{e,b}, 10
f}, 2
3 3 h
f n/a
c 6 d
g {g, b}, 13

h {c, h}, 6

16
Example
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d nil, ∞

11 12 e {e, f}, 2
3 3 h
f n/a
c 6 d
g {g, b}, 13

h {c, h}, 6

17
Example

Restore the invariant.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d nil,d},
{e, ∞12

11 12 e n/a
3 3 h
f n/a
c 6 d
g {g, b}, 13

h {c, h}, 6

18
Example
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d {e, d}, 12

11 12 e n/a
3 3 h
f n/a
c 6 d
g {g, b}, 13

h {c, h}, 6

19
Example

Restore the invariant.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d {e, d}, 12

11 12 e n/a
3 3 h
f n/a
c 6 d
g {g,
{g,b},
h},13
9

h n/a

20
Example
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d {e, d}, 12

11 12 e n/a
3 3 h
f n/a
c 6 d
g {g, h}, 9

h n/a

21
Example

Restore the invariant.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d {d, d},
{e, g}, 12
11

11 12 e n/a
3 3 h
f n/a
c 6 d
g n/a

h n/a

22
Example
Finally, edge is the lightest cross edge. So, we add to ,
which is now . Add edge into the
MST.
vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d {d, g}, 11

11 12 e n/a
3 3 h
f n/a
c 6 d
g n/a

h n/a

23
Example

We have obtained our final MST.

vertex 𝒗 best-cro(𝒗) and weight

a n/a
a 7 f
8 g b n/a
1 2
13 9 5 c n/a
b 10 e
d n/a

11 12 e n/a
3 3 h
f n/a
c 6 d
g n/a

h n/a

24
Data structure
For a fast implementation, we need a good data structure.
Let be a set of n tuples of the form . Design a data structure
to support the following operations:
 Find: given an integer t, find the tuple from where
; return nothing if the tuple does not exist.
 Insert: add a new tuple to .
 Delete: given an integer t, delete the tuple from
where .
 DeleteMin: remove from the tuple with the smallest weight.

We can obtain a structure of space that supports all operations in


time. See Problem 4 of Regular Exercise 4.

25
Data structure operations
Edge is the lightest of all. .
vertex weight best-cross
a 7 f c 3 {c, a}
1 8 g
2 d ∞ nil
13 9 5
b 10 e e 10 {e, b}

f 7 {a, f}
11 12
3 3 h g 13 {g, b}

c 6 d h 8 {a, h}

6 (id, weight, data) insertions into P.

In general, insertions in time.

26
Data structure operations
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

vertex weight (key) best-cross


a 7 f c 3 {c, a}
1 8 g
2 d ∞ nil
13 9 5
b 10 e e 10 {e, b}

f 7 {a, f}
11 12
3 3 h g 13 {g, b}

c 6 d h 8 {a, h}

Perform DeleteMin to obtain {c, a} in time.

27
Data structure operations
Restore the invariant.
vertex weight best-cross
a 7 f
g d ∞ nil
1 8
2
13 9 5 e 10 {e, b}
b 10 e f 7 => 5 {a, f} => {c, f}

11 g 13 {g, b}
3 12
3 h
h 8 => 6 {a, h} => {c, h}
c 6 d

For edge {c, b}, perform a find op. using the id of b => b has no tuple in P.
For edge {c, a}, perform a find op. => a has no tuple in P.
For edge {c, f}, perform a find op. => f has a tuple with weight 7.
As {c, f} is lighter, delete (f, 7, {a, f}) from P and insert (f, 5, {c, f}).
For edge {c, h}, perform a find op. => h has a tuple with weight 8.
As {c, h} is lighter, delete (h, 8, {a, h}) from P and insert (h, 6, {c, h}).

Time: time where is the degree of c.


28
Data structure operations
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

a 7 f vertex weight best-cross


1 8 g
2 d ∞ Nil
13 9 5
b 10 e e 10 {e, b}

f 5 {c, f}
11 12
3 3 h g 13 {g, b}

c 6 d h 6 {c, h}

Perform DeleteMin to obtain {f, c}in time.

29
Data structure operations
Restore the invariant.

a 7 f
vertex weight best-cross
1 8 g
2
13 9 5 d ∞ Nil
b 10 e e 10=>2 {e, b}=>{e, f}

11 g 13 {g, b}
3 3 12
h h 6 {c, h}
c 6 d

For edge {f, a}, perform a find op. using the id of a => a has no tuple in P.
For edge {f, c}, perform a find op. => c has no tuple in P.
For edge {f, e}, perform a find op. => e has a tuple with weight 2.
As {f, e} is lighter, delete (e, 10, {e, b}) from P and insert (e, 2, {e, f}).

Time: time where is the degree of f.

30
Data structure operations
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

a 7 f
g vertex weight best-cross
1 8
2
13 9 5 d ∞ Nil
b 10 e e 2 {e, f}

11 g 13 {g, b}
3 3 12
h
h 6 {c, h}
c 6 d

Perform DeleteMin to obtain {e, f}in time.

31
Data structure operations
Restore the invariant.

a 7 f
1 8 g vertex weight best-cross
2
13 9 5
10 d ∞ => 12 Nil => {e,d}
b e
g 13 {g, b}
11 12
3 3 h 6 {c, h}
h

c 6 d

For edge {e, f}, perform a find op. using the id of f => f has no tuple in P.
For edge {e, b}, perform a find op. => b has no tuple in P.
For edge {e, d}, perform a find op. => d has a tuple with weight .
As {e, d} is lighter, delete (d, , Nil) from P and insert (d, 12, {e, d}).

Time: time where is the degree of e.


32
Data structure operations
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

a 7 f
1 8 g
2 vertex weight best-cross
13 9 5
b 10 d 12 {e,d}
e
g 13 {g, b}
11 12
3 3 h h 6 {c, h}

c 6 d

Perform DeleteMin to obtain {c, h} in time.

33
Example
Restore the invariant.

a 7 f
8 g vertex weight best-cross
1 2
13 9 5 d 12 {e,d}
b 10 e
g 13 => 9 {g, b} => {g,h}

11 12
3 3 h

c 6 d

For edge {h, a}, perform a find op. using the id of a => a has no tuple in P.
For edge {h, c}, perform a find op. => c has no tuple in P.
For edge {h, g}, perform a find op. => g has a tuple with weight .
As {h, g} is lighter, delete (g, , {g, b}) from P and insert (g, 9, {g, h}).

Time: time where is the degree of h.


34
Example
Edge is the lightest cross edge. So, we add to , which is
now . Add edge into the MST.

a 7 f
1 8 g
2 vertex weight best-cross
13 9 5
b 10 e d 12 {e,d}

g 9 {g,h}
11 12
3 3 h

c 6 d

Perform DeleteMin to obtain {g, h}in time.

35
Example
Restore the invariant.

a 7 f
1 8 g
2 vertex weight best-cross
13 9 5
b 10 e d 12=>11 {e,d}=>{g,d}

11 12
3 3 h

c 6 d

For edge {g, b}, perform a find op. using the id of b => b has no tuple in P.
For edge {g, h}, perform a find op. => h has no tuple in P.
For edge {g, d}, perform a find op. => d has a tuple with weight .
As {g, d} is lighter, delete (d, , {e, d}) from P and insert (g, 11, {g, d}).

Time: time where is the degree of g.

36
Example
Finally, edge is the lightest cross edge. So, we add to ,
which is now . Add edge into the
MST.
a 7 f
1 8 g
2 vertex weight best-cross
13 9 5
b 10 e d 11 {g,d}

11 12
3 3 h

c 6 d

Perform DeleteMin to obtain {g, d}in time.

37
Example

We have obtained our final MST.

Total time:
a 7 f O(
1 8 g
2
13 9 5
b 10 e

11 12
3 3 h

c 6 d

38

You might also like