You are on page 1of 41

Minimum Spanning Trees

Text
Read Weiss, 9.5 Weiss 9.5.1 Similar to Dijkstras Algorithm Weiss 9.5.2 Focuses on edges, rather than nodes

Prims Algorithm Kruskals Algorithm

Definition
A Minimum Spanning Tree (MST) is a subgraph of an undirected graph such that the subgraph spans (includes) all nodes, is connected, is acyclic, and has minimum total edge weight

Algorithm Characteristics
Both Prims and Kruskals Algorithms work with undirected graphs Both work with weighted and unweighted graphs but are more interesting when edges are weighted Both are greedy algorithms that produce optimal solutions

Prims Algorithm
Similar to Dijkstras Algorithm except that dv records edge weights, not path lengths

Walk-Through
2

10

F
7 8

Initialize array

C
3 4

K
A B C F F F

dv

pv

A
4 9

B
10 2

18

D
25

H
3

D
E F G H

F
F F F F

10

F
7 8

Start with any node, say D

C
3 4

K
A B C

dv

pv

A
4 9

B
10 2

18

D
25

H
3

D
E F G H

10

F
7 8

Update distances of adjacent, unselected nodes


K dv pv
A B C 3 D

C
3 4 18 10 2 25 7

A
4 9

B G

D E

H
3

D
E F G H

0
25 18 2

D D D

10

F
7 8

Select node with minimum distance


K dv pv
A B C 3 D

C
3 4 18 10 2 25 7

A
4 9

B G

D E

H
3

D
E F G H

0
25 18

D D D

10

F
7 8

Update distances of adjacent, unselected nodes


K dv pv
A B C 3 D

C
3 4 18 10 2 25 7

A
4 9

B G

D E

H
3

D
E F G H

0
7 18

G D D G

2 3

10

F
7 8

Select node with minimum distance


K dv pv
A B C T 3 D

C
3 4 18 10 2 25 7

A
4 9

B G

D E

H
3

D
E F G H

0
7 18

G D D G

2 3

10

F
7 8

Update distances of adjacent, unselected nodes


K dv
4 T 3

C
3 4

pv
C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

0
7 3

G C D G

2 3

10

F
7 8

Select node with minimum distance


K dv
4 T 3

C
3 4

pv
C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

T
T T

0
7 3 2 3

G C D G

10

F
7 8

Update distances of adjacent, unselected nodes


K dv
10 4 T 3

C
3 4

pv
F C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

T
T T

0
2 3 2 3

F C D G

10

F
7 8

Select node with minimum distance


K dv
10 4 T 3

C
3 4

pv
F C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

T
T T T

0
2 3 2 3

F C D G

10

F
7 8

Update distances of adjacent, unselected nodes


K dv
10 4 T 3

C
3 4

pv
F C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

T
T T T

0
2 3 2 3

F C D G

Table entries unchanged

10

F
7 8

Select node with minimum distance


K dv
10 4 T 3

C
3 4

pv
F C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

T
T T T T

0
2 3 2 3

F C D G

10

F
7 8

Update distances of adjacent, unselected nodes


K dv
4 4 T 3

C
3 4

pv
H C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

T
T T T T

0
2 3 2 3

F C D G

10

F
7 8

Select node with minimum distance


K dv
4 4 T 3

C
3 4

pv
H C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

T
T T T T

0
2 3 2 3

F C D G

10

F
7 8

Update distances of adjacent, unselected nodes


K dv
4 4 T 3

C
3 4

pv
H C D

A
4 9

A B C

B
10 2

18

D
25

H
3

D
E F G H

T
T T T T

0
2 3 2 3

F C D G

Table entries unchanged

10

F
7 8

Select node with minimum distance


K dv
4 4 3

C
3 4

pv
H C D

A
4 9

A B C

T T T

B
10 2

18

D
25

H
3

D
E F G H

T
T T T T

0
2 3 2 3

F C D G

F
A
4

Cost of Minimum Spanning Tree = dv = 21


K dv
4 4 3

C
3 4

pv
H C D

A B C

T T T

B
2 3

D E

H G

D
E F G H

T
T T T T

0
2 3 2 3

F C D G

Done

Kruskals Algorithm
Work with edges, rather than nodes Two steps:
Sort edges by increasing edge weight Select the first |V| 1 edges that do not generate a cycle

Walk-Through
10

F
4 8

Consider an undirected, weight graph

C
3 4 6 4 2 1 3

A
5 4

B G

D E

H
3

10

F
4 8

Sort the edges by increasing edge weight

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge (B,E) (B,F)

dv 4 4

A
5 4

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Accepting edge (E,G) would create a cycle

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle


10

F
4 8

C
3 4 6 4 2 1 3

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

A
5 4

(B,E) (B,F)

B G

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H
3

Select first |V|1 edges which do not generate a cycle

F
A
5

C
3 4

edge
(D,E) (D,G) (E,G) (C,D) (G,H) (C,F) (B,C)

dv
1 2 3 3 3 3 4

edge

dv 4 4

(B,E) (B,F)

B
2 3 1

D E

(B,H)
(A,H) (D,F) (A,B) (A,F)

4
5 6 8 10

H G

not considered

Done
Total Cost = dv = 21

Detecting Cycles
Use Disjoint Sets (Chapter 8)

You might also like