CS 106B, Lecture 24 Dijkstra’s and Kruskal’s

ThisThis document document is is copyright copyright (C) (C) Stanford Stanford Computer Computer Science Science and and Ashley Marty Taylor, Stepp, licensed under Creative Commons Attribution 2.5 LLiciceensnse.e. All All rights rights reserved. reserved. Based on slidesBased created on slides by Marty created Stepp by, ChrisKeith Gregg,Schwarz, Keith Julie Schwarz, Zelenski, Julie Jerry Zelenski Cain, Eric, Jerry Roberts, Cain, Eric Mehran Roberts, Sahami, Mehran StuartSahami Reges,, Stuart Cynthia Reges Lee,, Cynthiaand others. Lee, and others Plan for Today

• Real-world graph algorithms (with coding examples!) – Dijkstra's Algorithm for finding the least-cost path (like Google Maps) – Kruskal's Algorithm for finding the minimum • Applications in civil engineering and biology

2 Shortest Paths

• Recall: BFS allows us to find the shortest path

• Sometimes, you want to find the least-cost path – Only applies to graphs with weighted edges

• Examples: – cheapest flight(s) from here to New York – fastest driving route (Google Maps) – the internet: fastest path to send information through the network of routers

3 Least-Cost Paths

• BFS uses a queue to keep track of which nodes to use next • BFS pseudocode: bfs from v1: add v1 to the queue. while queue is not empty: dequeue a node n enqueue n's unseen neighbors

• How could we modify this pseudocode to dequeue the least-cost nodes instead of the closest nodes?

4 Least-Cost Paths

• BFS uses a queue to keep track of which nodes to use next • BFS pseudocode: bfs from v1: add v1 to the queue. while queue is not empty: dequeue a node n enqueue n's unseen neighbors

• How could we modify this pseudocode to dequeue the least-cost nodes instead of the closest nodes? – Use a instead of a queue

5 Edsger Dijkstra (1930-2002)

• famous Dutch computer scientist and prof. at UT Austin – Turing Award winner (1972)

• Noteworthy algorithms and software: – THE multiprogramming system (OS) • layers of abstraction – Compiler for a language that can do recursion – Dijkstra's algorithm – Dining Philosophers Problem: resource contention, deadlock

• famous papers: – "Go To considered harmful" – "On the cruelty of really teaching computer science"

6 Dijkstra pseudocode

dijkstra(v1, v2): consider every vertex to have a cost of infinity, except v1 which has a cost of 0. create a priority queue of vertexes, ordered by cost, storing only v1 .

while the pqueue is not empty: dequeue a vertex v from the pqueue, and mark it as visited. for each unvisited neighbor, n, of v, we can reach n with a total cost of (v's cost + the weight of the edge from v to n). if this cost is cheaper than n's current cost, we should enqueue the neighbor n to the pqueue with this new cost, and remember v was its previous vertex.

when we are done, we can reconstruct the path from v2 back to v1 by following the path of previous vertices.

7 Dijkstra example dijkstra(A, F); v1's distance := 0. all other distances := ¥. • color key 0 ¥ – white: unexamined 2 – yellow: enqueued A B

– green: visited 4 1 3 10

2 2 ¥ C D E ¥

13 5 8 ¥ 4 6

¥ H F 1 G

6 ¥ ¥ ¥ I pqueue = {A:0}

8 Dijkstra example dijkstra(A, F);

0 2 A 2 B

4 1 3 10

2 2 ¥ C D E ¥

13 5 8 1 4 6

¥ H F 1 G

6 ¥ ¥ ¥ I pqueue = {D:1, B:2}

9 Dijkstra example dijkstra(A, F);

0 2 A 2 B

4 1 3 10 3 C 2 D 2 E 3

13 5 8 1 4 6

¥ H F 1 G

6 9 5 ¥ I pqueue = {B:2, C:3, E:3, G:5, F:9}

10 Dijkstra example dijkstra(A, F);

0 2 A 2 B

4 1 3 10

2 2 3 C D E 3

13 5 8 1 4 6

¥ H F 1 G

6 9 5 ¥ I pqueue = {C:3, E:3, G:5, F:9}

11 Dijkstra example dijkstra(A, F);

0 2 A 2 B

4 1 3 10

2 2 3 C D E 3

13 5 8 1 4 6

16 1 H F G

6 8 5 ¥ I pqueue = {E:3, G:5, F:8, H:16}

12 Dijkstra example dijkstra(A, F);

0 2 A 2 B

4 1 3 10

2 2 3 C D E 3

13 5 8 1 4 6

16 1 H F G

6 8 5 ¥ I pqueue = {G:5, F:8, H:16}

13 Dijkstra example dijkstra(A, F);

0 2 A 2 B

4 1 3 10

2 2 3 C D E 3

13 5 8 1 4 6

16 1 H F G

6 6 5 ¥ I pqueue = {F:6, H:16}

14 Dijkstra example dijkstra(A, F);

0 2 A 2 B

4 1 3 10

2 2 3 C D E 3

13 5 8 1 4 6

16 1 H F G

6 6 5 ¥ I pqueue = {H:16}

15 Dijkstra example dijkstra(A, F);

0 2 A 2 B

4 1 3 10

2 2 3 C D E 3

13 5 8 1 4 6

16 1 H F G

6 6 5 ¥ I

16 Algorithm properties

• Dijkstra's algorithm is a : – Make choices that currently seem best

• It is correct because it maintains the following two properties: – 1) for every marked vertex, the current recorded cost is the lowest cost to that vertex from the source vertex. – 2) for every unmarked vertex v, its recorded distance is shortest path distance to v from source vertex, considering only currently known vertices and v.

17 Dijkstra's runtime

• For sparse graphs, (i.e. graphs with much less than V 2 edges) Dijkstra's is implemented most efficiently with a priority queue.

– initialization: O(V) – while loop: O(V) times • remove min-cost vertex from pq: O(log V) • potentially perform E updates on cost/previous • update costs in pq: O(log V) – reconstruct path: O(E)

– Total runtime: O(V log V + E log V) • For more in depth calculation: http://www- inst.eecs.berkeley.edu/~cs61bl/r//cur/graphs/dijkstra-algorithm- runtime.html?topic=lab24.topic&step=4&course=

18 Announcements

• Assn. 6 due today

• Assn. 7 (the last one!) comes out today

19 Minimum Spanning Trees

• Sometimes, you want to find a way to connect every node in a graph in the least-cost way possible – Utility (road, water, or power) connectivity – Tracing virus evolution

20 source: https://www.researchgate.net/figure/Position-of-the-eleven-Dutch-strains-on-the-B-anthracis-phylogenetic-tree-based-on_fig2_274406206 Spanning trees

• A spanning tree of a graph is a set of edges that connects all vertices in the graph with no cycles. – What is a spanning tree for the graph below?

V V a b b d U X Z U X Z h h c e c e W g W g f Y Y

21 Minimum spanning tree

• minimum spanning tree (MST): A spanning tree that has the lowest combined edge weight (cost).

V V 8 3 3 6 U X Z U X Z 9 9 4 5 4 5 W 2 W 2 6 Y Y

22 MST examples

• Q: How many minimum spanning trees does this graph have?

A. 0-1 B D F B. 2-3 1 7 C. 4-5 3 3 D. 6-7 E. > 7 A C E 3 3

(question courtesy Cynthia Lee) 23 Kruskal's algorithm

• Kruskal's algorithm: Finds a MST in a given graph. function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue based on their weight (cost). While the priority queue is not empty: Dequeue an edge e from the priority queue. If e's endpoints aren't already connected, add that edge into the MST. Otherwise, skip the edge.

• Runtime: O(E log E) = O(E log V)

24 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {a:1, b:2, c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 25 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {b:2, c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 26 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {b:2, c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 27 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 28 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 29 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {d:4, e:5, f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 30 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {e:5, f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 31 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {e:5, f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 32 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 33 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 e:5 n:14

d:4 l:12 h:8

– pq = {f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 34 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 n:14

d:4 l:12 h:8

– pq = {f:6, g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 35 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 n:14

d:4 l:12 h:8

– pq = {g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 36 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 n:14

d:4 l:12 h:8

– pq = {g:7, h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 37 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 n:14

d:4 l:12 h:8

– pq = {h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 38 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 g:7 b:2 n:14

d:4 l:12 h:8

– pq = {h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 39 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {h:8, i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 40 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 41 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {i:9, j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 42 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 43 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {j:10, k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 44 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 45 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. j:10 o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 46 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {k:11, l:12, m:13, n:14, o:15, p:16, q:17, r:18} 47 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {l:12, m:13, n:14, o:15, p:16, q:17, r:18} 48 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {l:12, m:13, n:14, o:15, p:16, q:17, r:18} 49 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {m:13, n:14, o:15, p:16, q:17, r:18} 50 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 l:12 h:8

– pq = {m:13, n:14, o:15, p:16, q:17, r:18} 51 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 h:8

– pq = {m:13, n:14, o:15, p:16, q:17, r:18} 52 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 m:13 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 h:8

– pq = {n:14, o:15, p:16, q:17, r:18} 53 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 h:8

– pq = {n:14, o:15, p:16, q:17, r:18} 54 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2 n:14

d:4 h:8

– pq = {o:15, p:16, q:17, r:18} 55 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2

d:4 h:8

– pq = {o:15, p:16, q:17, r:18} 56 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. o:15 If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2

d:4 h:8

– pq = {p:16, q:17, r:18} 57 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2

d:4 h:8

– pq = {p:16, q:17, r:18} 58 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2

d:4 h:8

– pq = {q:17, r:18} 59 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2

d:4 h:8

– pq = {q:17, r:18} 60 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

q:17 p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2

d:4 h:8

– pq = {r:18} 61 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2

d:4 h:8

– pq = {r:18} 62 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: i:9 Dequeue an edge e from the priority queue. If e's endpoints aren't already connected, add that edge into the MST. f:6 r:18 Otherwise, skip the edge. a:1 c:3 b:2

d:4 h:8

– pq = { } 63 Kruskal example

• In what order would Kruskal's algorithm visit the edges in the graph below? What MST would it produce?

p:16 function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue k:11 based on their weight (cost). While the priority queue is not empty: Dequeue an edge e from the priority queue. i:9 If e's endpoints aren't already connected, add that edge into the MST. Otherwise, skip the edge. f:6

a:1 c:3 b:2

d:4 h:8 – pq = { }

64 Kruskal example

• Kruskal's algorithm would output the following MST: – {a, b, c, d, f, h, i, k, p} p:16 • The MST's total cost is: k:11 1+2+3+4+6+8+9+11+16 = 60 – Can you find any spanning trees of lower cost? i:9 Of equal cost? f:6

a:1 c:3 b:2

d:4 h:8

65 Implementing Kruskal

• What data structures should we use to implement this algorithm?

function kruskal(graph): Start with an empty structure for the MST Place all edges into a priority queue based on their weight (cost). While the priority queue is not empty: Dequeue an edge e from the priority queue. If e's endpoints aren't already connected, add that edge into the MST. Otherwise, skip the edge.

66 Vertex clusters

• Need some way to identify which vertexes are "connected" to which other ones – we call these "clusters" of vertices

• Also need an efficient way to figure out which cluster a given vertex is in.

• Also need to merge clusters when adding an edge.

67 Kruskal's Code

• How would we code Kruskal's algorithm to find a minimum spanning tree? • What type of graph (adjacency list, adjacency matrix, or edge list) should we use?

68