1 greedy algorithms and mst dr. ying lu [email protected] raik 283 data structures & algorithms

71
1 Greedy Algorithms and MST Dr. Ying Lu [email protected] RAIK 283 Data Structures & Algorithms

Upload: beryl-collins

Post on 04-Jan-2016

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

1

Greedy Algorithms and MST

Dr. Ying [email protected]

RAIK 283Data Structures & Algorithms

Page 2: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

2

RAIK 283Data Structures & Algorithms

Giving credit where credit is due:» Most of slides for this lecture are based on slides

created by Dr. David Luebke, University of Virginia.

» Some examples and slides are based on lecture notes created by Dr. Chuck Cusack, Hope College, Dr. Jim Cohoon, University of Virginia, and Dr. Ben Choi, Louisiana Technical University.

» I have modified them and added new slides

Page 3: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

3

Greedy Algorithms

Main Concept: Make the best or greedy choice at any given step.

Choices are made in sequence such that» Each individual choice is best according to some limited “short-

term” criterion, that is not too expensive to evaluate

» Once a choice is made, it cannot be undone! Even if it becomes evident later that it was a poor choice Sometimes life is like that

The goal is to » take a sequence of locally optimal actions, hoping to yield a

globally optimal solution.

Page 4: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

4

When to be Greedy

Greedy algorithms apply to problems with» Optimal substructures: optimal solutions contain optimal sub-

solutions.

» The greedy choice property: an optimal solution can be obtained by making the greedy choice at each step.

» Many optimal solutions, but we only need one such solution.

Page 5: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

5

Minimum Spanning Tree (MST)

A spanning tree for a connected, undirected graph, G=(V, E) is

1. a connected subgraph of G that forms an

2. undirected tree incident with each vertex.

In a weighted graph G=(V, E, W), » the weight of a subgraph is the sum of the weights of

the edges in the subgraph.

A minimum spanning tree (MST) for a weighted graph is

» a spanning tree with the minimum weight.

Page 6: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

6

Minimum Spanning Tree

Problem: given a connected, undirected, weighted graph:

1410

3

6 4

5

2

9

15

8

find a spanning tree using edges that minimize the total weight

Page 7: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

7

Minimum Spanning Tree

Which edges form the minimum spanning tree (MST) of the graph?

H B C

G E D

F

A

1410

3

6 4

5

2

9

15

8

Page 8: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

8

Minimum Spanning Tree

Answer:

H B C

G E D

F

A

1410

3

6 4

5

2

9

15

8

Page 9: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

9

Another Example

Given a weighted graph G=(V, E,W), find a MST of G

3

64

5

6

3

3

5

7

2

Page 10: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

10

Finding a MST

MSTs satisfy the optimal substructure property: an optimal tree is composed of optimal subtrees

Principal greedy methods: algorithms by Prim and Kruskal Prim

» Grow a single tree by repeatedly adding the least cost edge that connects a vertex in the existing tree to a vertex not in the existing tree

Intermediary solution is a subtree

Kruskal» Grow a tree by repeatedly adding the least cost edge that does not

introduce a cycle among the edges included so far Intermediary solution is a spanning forest

Page 11: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

11

Prime’s Algorithm (High-Level Pseudocode)

Prime(G)

//Input: A weighted connected graph G = <V, E>

//Output: ET --- the set of edges composing MST of G

VT = {v0}

ET =

for i = 1 to |V| - 1 do

find a minimum-weight edge e* = (u*, v*) among all the edges (u, v) such that u is in VT and v is in V-VT

VT = VT {v*}

ET = ET {e*}

return ET

Page 12: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

12

Prime’s Algorithm (High-Level Pseudocode)

Prime(G)

//Input: A weighted connected graph G = <V, E>

//Output: ET --- the set of edges composing MST of G

VT = {v0}

ET =

for i = 1 to |V| - 1 do

find a minimum-weight edge e* = (u*, v*) among all the edges (u, v) such that u is in VT and v is in V-VT

VT = VT {v*}

ET = ET {e*}

return ET

H B C

G E D

F

A

1410

3

6 45

2

9

15

8

Page 13: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

13

Prime’s Algorithm (High-Level Pseudocode)

Prime(G)

//Input: A weighted connected graph G = <V, E>

//Output: ET --- the set of edges composing MST of G

VT = {v0}

ET =

for i = 1 to |V| - 1 do

find a minimum-weight edge e* = (u*, v*) among all the edges (u, v) such that u is in VT and v is in V-VT

VT = VT {v*}

ET = ET {e*}

return ET

H B C

G E D

F

A

1410

3

6 45

2

9

15

8

Page 14: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

14

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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);

Grow a single tree by repeatedly adding the least cost edge that connects a vertex in the existing tree to a vertex not in the existing tree

Intermediary solution is a subtree

Page 15: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

15

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 45

2

9

15

8

Run on example graph

Page 16: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

16

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 45

2

9

15

8

Run on example graph

Page 17: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

17

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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);

0

1410

3

6 45

2

9

15

8

Pick a start vertex r

r

Page 18: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

18

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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);

0

1410

3

6 45

2

9

15

8

Red vertices have been removed from Q

u

Page 19: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

19

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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);

0

3

1410

3

6 45

2

9

15

8

Red arrows indicate parent pointers

u

Page 20: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

20

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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

0

3

1410

3

6 45

2

9

15

8

u

Page 21: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

21

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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

0

3

1410

3

6 45

2

9

15

8u

Page 22: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

22

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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

0 8

3

1410

3

6 45

2

9

15

8u

Page 23: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

23

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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

0 8

3

1410

3

6 45

2

9

15

8u

Page 24: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

24

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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

0 8

3

1410

3

6 45

2

9

15

8u

Page 25: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

25

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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

0 8

3

1410

3

6 45

2

9

15

8u

Page 26: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

26

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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

0 8 15

3

1410

3

6 45

2

9

15

8u

Page 27: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

27

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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

0 8 15

3

1410

3

6 45

2

9

15

8

u

Page 28: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

28

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 9

0 8 15

3

1410

3

6 45

2

9

15

8

u

Page 29: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

29

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 9

0 8 15

3

4

1410

3

6 45

2

9

15

8

u

Page 30: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

30

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 45

2

9

15

8

u

Page 31: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

31

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 45

2

9

15

8

u

Page 32: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

32

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 45

2

9

15

8

u

Page 33: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

33

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 45

2

9

15

8

u

Page 34: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

34

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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 45

2

9

15

8

u

Page 35: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

35

Review: Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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);

What is the hidden cost in this code?

Page 36: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

36

Review: Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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));

delete the smallest element from the min-heap

decrease an element’s value in the min-heap

(outline an efficient algorithm for it)

Page 37: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

37

Review: Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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?

Page 38: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

38

Review: Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; 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);

What will be the running time?

There are n=|V| ExtractMin calls and m=|E| DecreaseKey calls.

The priority Q implementation has a large impact on

performance.

E.g., O((n+m)lg n) = O(m lg n) using min-heap for Q(for connected graph, n – 1 m)

Page 39: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

39

Finding a MST

Principal greedy methods: algorithms by Prim and Kruskal

Prim» Grow a single tree by repeatedly adding the least cost edge that

connects a vertex in the existing tree to a vertex not in the existing tree

Intermediary solution is a subtree

Kruskal» Grow a tree by repeatedly adding the least cost edge that does not

introduce a cycle among the edges included so far Intermediary solution is a spanning forest

Page 40: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

40

MST Applications?

H B C

G E D

F

A

1410

3

6 4

5

2

9

15

8

Page 41: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

41

MST Applications

Network design» telephone, electrical power, hydraulic, TV cable, computer,

road

MST gives a minimum-cost network connecting all sites

MST: the most economical construction of a network

Page 42: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

42

Kruskal’s Algorithm (High-Level Pseudocode)

Kruskal(G)//Input: A weighted connected graph G = <V, E>

//Output: ET --- the set of edges composing MST of GSort E in nondecreasing order of the edge weight

ET = ; encounter = 0 //initialize the set of tree edges and its size

k = 0 //initialize the number of processed edgeswhile encounter < |V| - 1

k = k+1

if ET {ek} is acyclic

ET = ET {ek}; encounter = encounter + 1

return ET

Page 43: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

43

Kruskal’s Algorithm (High-Level Pseudocode)

Kruskal(G)//Input: A weighted connected graph G = <V, E>

//Output: ET --- the set of edges composing MST of GSort E in nondecreasing order of the edge weight

ET = ; encounter = 0 //initialize the set of tree edges and its size

k = 0 //initialize the number of processed edgeswhile encounter < |V| - 1

k = k+1

if ET {ek} is acyclic

ET = ET {ek}; encounter = encounter + 1

return ET

H B C

G E D

F

A

1410

3

6 45

2

9

15

8

Page 44: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

44

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

Grow a tree by repeatedly adding the least cost edge that does not introduce a cycle among the edges included so far

Intermediary solution is a spanning forest

Page 45: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

45

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 46: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

46

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 47: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

47

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 48: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

48

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1?

5

13

1725

148

21

Run the algorithm:

Page 49: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

49

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 50: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

50

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2? 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 51: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

51

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 52: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

52

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5?

13

1725

148

21

Run the algorithm:

Page 53: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

53

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 54: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

54

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148?

21

Run the algorithm:

Page 55: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

55

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 56: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

56

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9?

1

5

13

1725

148

21

Run the algorithm:

Page 57: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

57

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 58: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

58

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13?

1725

148

21

Run the algorithm:

Page 59: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

59

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 60: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

60

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

14?8

21

Run the algorithm:

Page 61: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

61

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 62: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

62

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

17?25

148

21

Run the algorithm:

Page 63: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

63

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19?

9

1

5

13

1725

148

21

Run the algorithm:

Page 64: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

64

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21?

Run the algorithm:

Page 65: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

65

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725?

148

21

Run the algorithm:

Page 66: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

66

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 67: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

67

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v));

}

2 19

9

1

5

13

1725

148

21

Run the algorithm:

Page 68: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

68

Kruskal’s Algorithm

Kruskal()

{

T = ; for each v V MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

What will affect the running time?Let n=|V| and m=|E|

O(n) MakeSet() calls1 Sort

O(m) FindSet() callsO(n) Union() calls

Page 69: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

69

Kruskal’s Algorithm: Running Time

To summarize: » Sort edges: O(m lg m) » O(n) MakeSet()’s» O(m) FindSet()’s» O(n) Union()’s

Upshot: » Best disjoint subsets union-find algorithm makes above 3

operations only slightly worse than linear» Refer to the textbook for a discussion on the algorithms» Overall thus O(m lg m)

Page 70: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

70

In-Class Exercise (9.1.7)

Page 71: 1 Greedy Algorithms and MST Dr. Ying Lu ylu@cse.unl.edu RAIK 283 Data Structures & Algorithms

71

In-Class Exercise

Applying Kruskal’s algorithm to 9.2.1 (b)