Algorithms. Algorithms 4.3 MINIMUM SPANNING TREES. introduction cut property edge-weighted graph API Kruskal s algorithm Prim s algorithm

Similar documents
Algorithms. Algorithms 4.3 MINIMUM SPANNING TREES. introduction cut property edge-weighted graph API Kruskal s algorithm Prim s algorithm context

Algorithms. Algorithms. Algorithms 4.3 MINIMUM SPANNING TREES

Algorithms 4.3 MINIMUM SPANNING TREES. edge-weighted graph API greedy algorithm Kruskal's algorithm Prim's algorithm advanced topics

Algorithms. Algorithms 4.3 MINIMUM SPANNING TREES. introduction greedy algorithm edge-weighted graph API Kruskal's algorithm Prim's algorithm context

graph G not connected

Algorithms. Algorithms 4.3 MINIMUM SPANNING TREES. introduction greedy algorithm edge-weighted graph API Kruskal's algorithm Prim's algorithm context

Algorithms. Algorithms 4.3 MINIMUM SPANNING TREES. introduction greedy algorithm edge-weighted graph API Kruskal's algorithm Prim's algorithm context

Algorithms. Algorithms. Algorithms 4.3 MINIMUM SPANNING TREES

Chapter 4. Greedy Algorithms. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

Algorithms. Algorithms 4.4 SHORTEST PATHS. APIs properties Bellman Ford algorithm Dijkstra s algorithm ROBERT SEDGEWICK KEVIN WAYNE

Chapter 4. Greedy Algorithms. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

COMP 355 Advanced Algorithms

Chapter 4. Greedy Algorithms. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

Chapter 4. Greedy Algorithms. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

4.4 Shortest Paths. Dijkstra's algorithm implementation acyclic networks negative weights. Reference: Algorithms in Java, 4 th edition, Section 4.

Minimum Spanning Trees

Lecture 10: Analysis of Algorithms (CS ) 1

Minimum Spanning Trees. Minimum Spanning Trees. Minimum Spanning Trees. Minimum Spanning Trees

Minimum Spanning Trees My T. UF

CMSC 132: Object-Oriented Programming II. Shortest Paths

6.4 Maximum Flow. overview Ford-Fulkerson implementations applications

Chapter 4. Greedy Algorithms. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

CIS 121 Data Structures and Algorithms Minimum Spanning Trees

Decreasing a key FIB-HEAP-DECREASE-KEY(,, ) 3.. NIL. 2. error new key is greater than current key 6. CASCADING-CUT(, )

Algorithms after Dijkstra and Kruskal for Big Data. User Manual

22 Elementary Graph Algorithms. There are two standard ways to represent a

Design and Analysis of Algorithms

Minimum Spanning Trees

Minimum-Spanning-Tree problem. Minimum Spanning Trees (Forests) Minimum-Spanning-Tree problem

4. GREEDY ALGORITHMS II

22 Elementary Graph Algorithms. There are two standard ways to represent a

Week 11: Minimum Spanning trees

Algorithm Design and Analysis

Introduction to Algorithms

Minimum Spanning Trees Shortest Paths

Notes on Minimum Spanning Trees. Red Rule: Given a cycle containing no red edges, select a maximum uncolored edge on the cycle, and color it red.

Introduction to Algorithms

CMSC 132: Object-Oriented Programming II

Greedy Algorithms. At each step in the algorithm, one of several choices can be made.

CSC 8301 Design & Analysis of Algorithms: Kruskal s and Dijkstra s Algorithms

Introduction to Algorithms

23.2 Minimum Spanning Trees

CSE331 Introduction to Algorithms Lecture 15 Minimum Spanning Trees

Announcements Problem Set 5 is out (today)!

CS 561, Lecture 9. Jared Saia University of New Mexico

COS 226 Lecture 19: Minimal Spanning Trees (MSTs) PFS BFS and DFS examples. Classic algorithms for solving a natural problem

CSE 100 Minimum Spanning Trees Prim s and Kruskal

Lecture 13. Reading: Weiss, Ch. 9, Ch 8 CSE 100, UCSD: LEC 13. Page 1 of 29

Minimum-Cost Spanning Tree. Example

Week 12: Minimum Spanning trees and Shortest Paths

Example. Minimum-Cost Spanning Tree. Edge Selection Greedy Strategies. Edge Selection Greedy Strategies

6.1 Minimum Spanning Trees

Algorithms for Minimum Spanning Trees

Design and Analysis of Algorithms

Chapter 9. Greedy Technique. Copyright 2007 Pearson Addison-Wesley. All rights reserved.

Algorithms. Algorithms 1.5 UNION FIND. union find data type quick-find quick-union improvements applications ROBERT SEDGEWICK KEVIN WAYNE

CSC 1700 Analysis of Algorithms: Minimum Spanning Tree

Algorithm Design (8) Graph Algorithms 1/2

Undirected Graphs. DSA - lecture 6 - T.U.Cluj-Napoca - M. Joldos 1

Minimum Spanning Trees

Representations of Weighted Graphs (as Matrices) Algorithms and Data Structures: Minimum Spanning Trees. Weighted Graphs

2.1 Greedy Algorithms. 2.2 Minimum Spanning Trees. CS125 Lecture 2 Fall 2016

CSE 431/531: Algorithm Analysis and Design (Spring 2018) Greedy Algorithms. Lecturer: Shi Li

Algorithms and Theory of Computation. Lecture 5: Minimum Spanning Tree

Algorithms and Theory of Computation. Lecture 5: Minimum Spanning Tree

Minimum Spanning Trees

Reference Sheet for CO142.2 Discrete Mathematics II

COS 226 Algorithms and Data Structures Practice Design Questions

CSE 431/531: Analysis of Algorithms. Greedy Algorithms. Lecturer: Shi Li. Department of Computer Science and Engineering University at Buffalo

UC Berkeley CS 170: Efficient Algorithms and Intractable Problems Handout 8 Lecturer: David Wagner February 20, Notes 8 for CS 170

Chapter 9 Graph Algorithms

4.5 Minimum Spanning Tree. Minimo albero di copertura o ricoprimento

Definition: A graph G = (V, E) is called a tree if G is connected and acyclic. The following theorem captures many important facts about trees.

CSE202 Greedy algorithms. Fan Chung Graham

Minimum Spanning Trees COSC 594: Graph Algorithms Spring By Kevin Chiang and Parker Tooley

Chapter 9 Graph Algorithms

International Journal of Advanced Research in Computer Science and Software Engineering

CHAPTER 13 GRAPH ALGORITHMS

Chapter 23. Minimum Spanning Trees

Theory of Computing. Lecture 10 MAS 714 Hartmut Klauck

Algorithms. Algorithms 4.2 DIRECTED GRAPHS. introduction digraph API depth-first search breadth-first search topological sort strong components

4. GREEDY ALGORITHMS II

Recitation 13. Minimum Spanning Trees Announcements. SegmentLab has been released, and is due Friday, November 17. It s worth 135 points.

CS60020: Foundations of Algorithm Design and Machine Learning. Sourangshu Bhattacharya

GRAPHS (Undirected) Graph: Set of objects with pairwise connections. Why study graph algorithms?

Algorithm Design and Analysis

! Interesting and broadly useful abstraction. ! Challenging branch of computer science and discrete math. ! Hundreds of graph algorithms known.

CS 5321: Advanced Algorithms Minimum Spanning Trees. Acknowledgement. Minimum Spanning Trees

COP 4531 Complexity & Analysis of Data Structures & Algorithms

Priority Queues 1 / 15

cs2010: algorithms and data structures

CHAPTER 23. Minimum Spanning Trees

2 A Template for Minimum Spanning Tree Algorithms

CSE373: Data Structures & Algorithms Lecture 17: Minimum Spanning Trees. Dan Grossman Fall 2013

Outline. Computer Science 331. Analysis of Prim's Algorithm

Algorithm Analysis Graph algorithm. Chung-Ang University, Jaesung Lee

Algorithms. Algorithms 1.5 UNION-FIND. dynamic connectivity quick find quick union improvements applications ROBERT SEDGEWICK KEVIN WAYNE

Lecture Notes for Chapter 23: Minimum Spanning Trees

Review of Graph Theory. Gregory Provan

managing an evolving set of connected components implementing a Union-Find data structure implementing Kruskal s algorithm

Transcription:

Algorithms ROBERT SEDGEWICK KEVIN WAYNE 4.3 MINIMUM SPANNING TREES Algorithms F O U R T H E D I T I O N ROBERT SEDGEWICK KEVIN WAYNE introduction cut property edge-weighted graph API Kruskal s algorithm Prim s algorithm https://algs4.cs.princeton.edu Last updated on 11/13/18 12:47 PM

4.3 MINIMUM SPANNING TREES Algorithms ROBERT SEDGEWICK KEVIN WAYNE introduction cut property edge-weighted graph API Kruskal s algorithm Prim s algorithm https://algs4.cs.princeton.edu

Spanning tree Def. A spanning tree of G is a subgraph T that is: A tree: connected and acyclic. Spanning: includes all of the vertices. graph G spanning tree T 3

Spanning tree Def. A spanning tree of G is a subgraph T that is: A tree: connected and acyclic. Spanning: includes all of the vertices. not connected 4

Spanning tree Def. A spanning tree of G is a subgraph T that is: A tree: connected and acyclic. Spanning: includes all of the vertices. not a tree (cyclic) 5

Spanning tree Def. A spanning tree of G is a subgraph T that is: A tree: connected and acyclic. Spanning: includes all of the vertices. not spanning 6

Minimum spanning tree problem Input. Connected, undirected graph G with positive edge weights. 24 4 23 18 9 6 5 11 16 8 10 14 7 21 edge-weighted graph G 7

Minimum spanning tree problem Input. Connected, undirected graph G with positive edge weights. Output. A spanning tree of minimum weight. Brute force. Try all spanning trees? 24 4 23 18 9 6 5 11 16 8 10 14 21 minimum spanning tree T (weight = 52 = 4 + 6 + 10 + 5 + 11 + 9 + 7) 7 8

Minimum spanning trees: quiz 1 Let T be a spanning tree of a connected graph G with V vertices. Which of the following statements are true? A. T contains exactly V 1 edges. B. Removing any edge from T disconnects it. C. Adding any edge to T creates a cycle. D. All of the above. spanning tree T of graph G 9

Network design ddy city) and the paving. http://www.utdallas.edu/~besp/teaching/mst-applications.pdf 10

Medical image processing MST describes arrangement of nuclei in the epithelium for cancer research http://www.bccrc.ca/ci/ta01_archlevel.html 11

Slime mold grows network just like Tokyo rail system Rules for Biologically Inspired Adaptive Network Design Atsushi Tero, 1,2 Seiji Takagi, 1 Tetsu Saigusa, 3 Kentaro Ito, 1 Dan P. Bebber, 4 Mark D. Fricker, 4 Kenji Yumiki, 5 Ryo Kobayashi, 5,6 Toshiyuki Nakagaki 1,6 * https://www.youtube.com/watch?v=gwkufreogmo 12

Applications MST is fundamental problem with diverse applications. Cluster analysis. Real-time face verification. LDPC codes for error correction. Image registration with Renyi entropy. Curvilinear feature extraction in computer vision. Find road networks in satellite and aerial imagery. Handwriting recognition of mathematical expressions. Measuring homogeneity of two-dimensional materials. Model locality of particle interactions in turbulent fluid flows. Reducing data storage in sequencing amino acids in a protein. Autoconfig protocol for Ethernet bridging to avoid cycles in a network. Network design (communication, electrical, hydraulic, computer, road). Approximation algorithms for NP-hard problems (e.g., TSP, Steiner tree). http://www.ics.uci.edu/~eppstein/gina/mst.html http://www.utdallas.edu/~besp/teaching/mst-applications.pdf 13

4.3 MINIMUM SPANNING TREES Algorithms ROBERT SEDGEWICK KEVIN WAYNE introduction cut property edge-weighted graph API Kruskal s algorithm Prim s algorithm https://algs4.cs.princeton.edu

Simplifying assumptions For simplicity, we assume: No parallel edges. The graph is connected. MST exists. The edge weights are distinct. MST is unique. see Exercise 4.3.3 Note. Algorithms still work even if parallel edges or duplicate edge weights. no MST uses this edge 8 7 6 2 5 10 11 4 13 no two edge weights are equal 9 12 1 3 8 14 16 20 15

Cut property Def. A cut in a graph is a partition of its vertices into two (nonempty) sets. Def. A crossing edge connects a vertex in one set with a vertex in the other. Cut property. Given any cut, the crossing edge of min weight is in the MST. crossing edges connect gray and white vertices 5 10 11 3 20 16 minimum-weight crossing edge must be in the MST 16

Minimum spanning trees: quiz 2 Which is the min weight edge crossing the cut { 2, 3, 5, 6 }? A. 0 7 (0.16) B. 2 3 (0.17) 0-7 0.16 2-3 0.17 C. 0 2 (0.26) 1-7 0.19 0-2 0.26 D. 5 7 (0.28) 5-7 0.28 1-3 0.29 1-5 0.32 5 7 1 0 3 2 2-7 0.34 4-5 0.35 1-2 0.36 4-7 0.37 0-4 0.38 6-2 0.40 3-6 0.52 6-0 0.58 4 6 6-4 0.93 17

Cut property: correctness proof Def. A cut is a partition of a graph s vertices into two (nonempty) sets. Def. A crossing edge connects two vertices in different sets. Cut property. Given any cut, the min-weight crossing edge e is in the MST. Pf. [by contradiction] Suppose e is not in the MST. Adding e to the MST creates a cycle. Some other edge f in cycle must be a crossing edge. Removing f and adding e is also a spanning tree. Since weight of e is less than the weight of f, that spanning tree has lower weight. Contradiction. f e the MST does not contain e adding e to MST creates a unique cycle 18

Greedy MST algorithm demo Start with all edges colored gray. Find cut with no black crossing edges; color its min-weight edge black. Repeat until V 1 edges are colored black. 0-7 0.16 5 7 1 3 2 2-3 0.17 1-7 0.19 0-2 0.26 5-7 0.28 1-3 0.29 1-5 0.32 0 2-7 0.34 4-5 0.35 4 6 1-2 0.36 4-7 0.37 0-4 0.38 an edge-weighted graph 6-2 0.40 3-6 0.52 6-0 0.58 6-4 0.93 19

Greedy MST algorithm: correctness proof Proposition. The greedy algorithm computes the MST. Pf. Any edge colored black is in the MST (via cut property). Fewer than V - 1 black edges cut with no black crossing edges. (consider cut whose vertices are any one connected component) a cut with no no black crossing edges fewer than V-1 edges colored black fewer than V-1 edges colored black 20

Greedy MST algorithm: efficient implementations Proposition. The greedy algorithm computes the MST. Efficient implementations. Find cut? Find min-weight edge? Ex 1. Kruskal s algorithm. [stay tuned] Ex 2. Prim s algorithm. [stay tuned] Ex 3. Borüvka s algorithm. 21

Removing two simplifying assumptions Q. What if edge weights are not all distinct? A. Greedy MST algorithm still finds a MST! (our correctness proof fails, but that can be fixed) 1 2 1.00 1 3 0.50 2 4 1.00 3 4 0.50 Q. What if graph is not connected? 1 2 1.00 1 3 0.50 2 4 1.00 3 4 0.50 A. Finds a minimum spanning forest = MST of each connected component. 4 5 0.61 4 6 0.62 5 6 0.88 1 5 0.11 2 3 0.35 0 3 0.6 1 6 0.10 0 2 0.22 can independently compute MSTs of components 22

4.3 MINIMUM SPANNING TREES Algorithms ROBERT SEDGEWICK KEVIN WAYNE introduction cut property edge-weighted graph API Kruskal s algorithm Prim s algorithm https://algs4.cs.princeton.edu

Weighted edge API Edge abstraction needed for weighted edges. public class Edge implements Comparable<Edge> Edge(int v, int w, double weight) create a weighted edge v-w int either() either endpoint int other(int v) the endpoint that's not v int compareto(edge that) compare this edge to that edge double weight() the weight String tostring() string representation weight v w Idiom for processing an edge e: int v = e.either(), w = e.other(v); 24

Weighted edge: Java implementation public class Edge implements Comparable<Edge> { private final int v, w; private final double weight; } public Edge(int v, int w, double weight) { this.v = v; this.w = w; this.weight = weight; } public int either() { return v; } public int other(int vertex) { if (vertex == v) return w; else return v; } public int compareto(edge that) { if (this.weight < that.weight) return -1; else if (this.weight > that.weight) return +1; else return 0; } constructor either endpoint other endpoint compare edges by weight 25

Edge-weighted graph API public class EdgeWeightedGraph EdgeWeightedGraph(int V) create an empty graph with V vertices void addedge(edge e) add weighted edge e to this graph Iterable<Edge> adj(int v) edges incident to v Iterable<Edge> edges() all edges in this graph int V() int E() number of vertices number of edges Conventions. Allow self-loops and parallel edges. 26

Edge-weighted graph: adjacency-lists representation Maintain vertex-indexed array of Edge lists. V tinyewg.txt 8 E 16 4 5 0.35 4 7 0.37 5 7 0.28 0 7 0.16 1 5 0.32 0 4 0.38 2 3 0.17 1 7 0.19 0 2 0.26 1 2 0.36 1 3 0.29 2 7 0.34 6 2 0.40 3 6 0.52 6 0 0.58 6 4 0.93 adj[] 0 1 2 3 4 5 6 7 6 0.58 0 2.26 0 4.38 0 7.16 Bag objects 1 3.29 1 2.36 1 7.19 1 5.32 6 2.40 2 7.34 1 2.36 0 2.26 2 3.17 3 6.52 1 3.29 2 3.17 6 4.93 0 4.38 4 7.37 4 5.35 1 5.32 5 7.28 4 5.35 6 4.93 6 0.58 3 6.52 6 2.40 references to the same Edge object 2 7.34 1 7.19 0 7.16 5 7.28 4 7.37 Edge-weighted graph representation 27

Edge-weighted graph: adjacency-lists implementation public class EdgeWeightedGraph { private final int V; private final Bag<Edge>[] adj; public EdgeWeightedGraph(int V) { } this.v = V; adj = (Bag<Edge>[]) new Bag[V]; for (int v = 0; v < V; v++) adj[v] = new Bag<Edge>(); public void addedge(edge e) { } int v = e.either(), w = e.other(v); adj[v].add(e); adj[w].add(e); same as Graph, but adjacency lists of Edges instead of integers constructor add edge to both adjacency lists } public Iterable<Edge> adj(int v) { return adj[v]; } 28

Minimum spanning tree API Q. How to represent the MST? public class MST MST(EdgeWeightedGraph G) constructor Iterable<Edge> edges() edges in MST double weight() weight of MST 29

4.3 MINIMUM SPANNING TREES Algorithms ROBERT SEDGEWICK KEVIN WAYNE introduction cut property edge-weighted graph API Kruskal s algorithm Prim s algorithm https://algs4.cs.princeton.edu

Kruskal s algorithm demo Consider edges in ascending order of weight. Add next edge to tree T unless doing so would create a cycle. graph edges sorted by weight 0-7 0.16 2-3 0.17 5 1 3 1-7 0.19 0-2 0.26 5-7 0.28 7 2 1-3 0.29 1-5 0.32 0 2-7 0.34 4-5 0.35 4 6 1-2 0.36 4-7 0.37 0-4 0.38 an edge-weighted graph 6-2 0.40 3-6 0.52 6-0 0.58 6-4 0.93 31

Kruskal s algorithm: visualization 32

Kruskal s algorithm: correctness proof Proposition. [Kruskal 1956] Kruskal s algorithm computes the MST. Pf. [Case 1] Kruskal s algorithm adds edge e = v w to T. Vertices v and w are in different connected components of T. Cut = set of vertices connected to v in T. By construction of cut, no edge crossing cut is in T. No edge crossing cut has lower weight. Why? Cut property edge e is in the MST. add edge to tree w v 33

Kruskal s algorithm: correctness proof Proposition. [Kruskal 1956] Kruskal s algorithm computes the MST. Pf. [Case 2] Kruskal s algorithm discards edge e = v w. From Case 1, all edges in T are in the MST. The MST can t contain a cycle. adding edge to tree would create a cycle w v 34

Minimum spanning trees: quiz 3 Challenge. Would adding edge v w to tree T create a cycle? If not, add it. How difficult to implement? A. 1 B. log V C. V D. E + V add edge to tree adding edge to tree would create a cycle Case 1: v and w in same component Case 2: v and w in different components 35

Kruskal s algorithm: implementation challenge Challenge. Would adding edge v w to tree T create a cycle? If not, add it. Efficient solution. Use the union find data structure. Maintain a set for each connected component in T. If v and w are in same set, then adding v w would create a cycle. To add v w to T, merge sets containing v and w. w v w v Case 2: adding v w creates a cycle Case 1: add v w to T and merge sets containing v and w 36

Kruskal s algorithm: Java implementation public class KruskalMST { private Queue<Edge> mst = new Queue<Edge>(); public KruskalMST(EdgeWeightedGraph G) { DirectedEdge[] edges = G.edges(); Arrays.sort(edges); UF uf = new UF(G.V()); edges in the MST sort edges by weight maintain connected components } for (int i = 0; i < G.E(); i++) { Edge e = edges[i]; int v = e.either(), w = e.other(v); if (uf.find(v)!= uf.find(w)) { uf.union(v, w); mst.enqueue(e); } } greedily add edges to MST edge v w does not create cycle merge connected components add edge e to MST } public Iterable<Edge> edges() { return mst; } 37

Kruskal s algorithm: running time Proposition. Kruskal s algorithm computes MST in time proportional to E log V (in the worst case). Pf. operation frequency time per op SORT 1 E log E same as E log V if no parallel edges UNION V 1 log V FIND 2 E log V using weighted quick union 38

Greed is good Gordon Gecko (Michael Douglas) evangelizing the importance of greed (in algorithm design?) Wall Street (1986) 39

MAXIMUM SPANNING TREE Problem. Given an undirected graph G with positive edge weights, find a spanning tree that maximizes the sum of the edge weights. Running time. E log E (or better). 9 18 10 15 17 14 19 16 8 12 13 6 7 5 maximum spanning tree T (weight = 104) 40

4.3 MINIMUM SPANNING TREES Algorithms ROBERT SEDGEWICK KEVIN WAYNE introduction cut property edge-weighted graph API Kruskal s algorithm Prim s algorithm https://algs4.cs.princeton.edu

Prim s algorithm demo Start with vertex 0 and greedily grow tree T. Add to T the min weight edge with exactly one endpoint in T. Repeat until V 1 edges. 0-7 0.16 2-3 0.17 5 1 3 1-7 0.19 0-2 0.26 5-7 0.28 7 2 1-3 0.29 1-5 0.32 2-7 0.34 0 4-5 0.35 1-2 0.36 4 6 4-7 0.37 0-4 0.38 6-2 0.40 an edge-weighted graph 3-6 0.52 6-0 0.58 6-4 0.93 42

Prim s algorithm: visualization 43

Prim s algorithm: proof of correctness Proposition. [Jarník 1930, Dijkstra 1957, Prim 1959] Prim s algorithm computes the MST. Pf. Let e = min weight edge with exactly one endpoint in T. Cut = set of vertices in T. No crossing edge is in T. No crossing edge has lower weight. Cut property edge e is in the MST. edge e = 7-5 added to tree 44

Minimum spanning trees: quiz 4 Challenge. Find the min weight edge with exactly one endpoint in T. How difficult to implement? A. l B. log E C. V D. E 1-7 is min weight edge with exactly one endpoint in T priority queue of crossing edges 1-7 0.19 0-2 0.26 5-7 0.28 2-7 0.34 4-7 0.37 0-4 0.38 6-0 0.58 45

Prim s algorithm: lazy implementation Challenge. Find the min weight edge with exactly one endpoint in T. Lazy solution. Maintain a PQ of edges with (at least) one endpoint in T. Key = edge; priority = weight of edge. DELETE-MIN to determine next edge e = v w to add to T. If both endpoints v and w are marked (both in T), disregard. Otherwise, let w be the unmarked vertex (not in T): add e to T and mark w add to PQ any edge incident to w (assuming other endpoint not in T) 1-7 is min weight edge with exactly one endpoint in T priority queue of crossing edges 1-7 0.19 0-2 0.26 5-7 0.28 2-7 0.34 4-7 0.37 0-4 0.38 6-0 0.58 46

Prim s algorithm: lazy implementation demo Start with vertex 0 and greedily grow tree T. Add to T the min weight edge with exactly one endpoint in T. Repeat until V 1 edges. 0-7 0.16 5 7 1 3 2 2-3 0.17 1-7 0.19 0-2 0.26 5-7 0.28 1-3 0.29 1-5 0.32 0 2-7 0.34 4-5 0.35 4 6 1-2 0.36 4-7 0.37 0-4 0.38 an edge-weighted graph 6-2 0.40 3-6 0.52 6-0 0.58 6-4 0.93 47

Prim s algorithm: lazy implementation public class LazyPrimMST { private boolean[] marked; private Queue<Edge> mst; private MinPQ<Edge> pq; // MST vertices // MST edges // PQ of edges } } public LazyPrimMST(WeightedGraph G) { pq = new MinPQ<Edge>(); mst = new Queue<Edge>(); marked = new boolean[g.v()]; visit(g, 0); while (!pq.isempty() && mst.size() < G.V() - 1) { } Edge e = pq.delmin(); int v = e.either(), w = e.other(v); if (marked[v] && marked[w]) continue; mst.enqueue(e); if (!marked[v]) visit(g, v); if (!marked[w]) visit(g, w); assume G is connected repeatedly delete the min weight edge e = v w from PQ ignore if both endpoints in T add edge e to tree add either v or w to tree 48

Prim s algorithm: lazy implementation private void visit(weightedgraph G, int v) { } marked[v] = true; for (Edge e : G.adj(v)) if (!marked[e.other(v)]) pq.insert(e); public Iterable<Edge> mst() { return mst; } add v to T for each edge e = v w, add to PQ if w not already in T 49

Lazy Prim s algorithm: running time Proposition. Lazy Prim s algorithm computes the MST in time proportional to E log E and extra space proportional to E (in the worst case). Pf. minor defect operation frequency binary heap DELETE-MIN E log E INSERT E log E 50

Prim s algorithm: eager implementation Challenge. Find min weight edge with exactly one endpoint in T. Observation. For each vertex v, need only lightest edge connecting v to T. MST includes at most one edge connecting v to T. Why? If MST includes such an edge, it must take lightest such edge. Why? 5 1 3 7 2 0 4 6 51

Prim s algorithm: eager implementation demo Start with vertex 0 and greedily grow tree T. Add to T the min weight edge with exactly one endpoint in T. Repeat until V 1 edges. 0-7 0.16 5 7 1 3 2 2-3 0.17 1-7 0.19 0-2 0.26 5-7 0.28 1-3 0.29 1-5 0.32 0 2-7 0.34 4-5 0.35 4 6 1-2 0.36 4-7 0.37 0-4 0.38 an edge-weighted graph 6-2 0.40 3-6 0.52 6-0 0.58 6-4 0.93 52

Prim s algorithm: eager implementation demo Start with vertex 0 and greedily grow tree T. Add to T the min weight edge with exactly one endpoint in T. Repeat until V 1 edges. v edgeto[] distto[] 5 7 1 0 3 2 0 - - 7 0 7 0.16 1 1 7 0.19 2 0 2 0.26 3 2 3 0.17 5 5 7 0.28 4 4 5 0.35 6 6 2 0.40 4 6 MST edges 0-7 1-7 0-2 2-3 5-7 4-5 6-2 53

Prim s algorithm: eager implementation Challenge. Find min weight edge with exactly one endpoint in T. Eager solution. Maintain a PQ of vertices connected by an edge to T, where priority of vertex v = weight of lightest edge connecting v to T. Delete min vertex v; add its associated edge e = v w to T. Update PQ by considering all edges e = v x incident to v ignore if x is already in T add x to PQ if not already on it PQ has at most one entry per vertex decrease priority of x if v x becomes lightest edge connecting x to T 0 1 1-7 0.19 2 0-2 0.26 3 1-3 0.29 4 0-4 0.38 5 5-7 0.28 6 6-0 0.58 7 0-7 0.16 red: on PQ black: on MST 54

Indexed priority queue Associate an index between 0 and n 1 with each key in a priority queue. Insert a key associated with a given index. Delete a minimum key and return associated index. Decrease the key associated with a given index. for Prim s algorithm: n = V, index = vertex, key = weight public class IndexMinPQ<Key extends Comparable<Key>> IndexMinPQ(int n) create indexed PQ with indices 0, 1,, n 1 void insert(int i, Key key) associate key with index i int delmin() remove a minimal key and return its associated index void decreasekey(int i, Key key) decrease the key associated with index i boolean contains(int i) is i an index on the priority queue? boolean isempty() is the priority queue empty? int size() number of keys in the priority queue 55

Indexed priority queue: implementation Binary heap implementation. [see Section 2.4 of textbook] Start with same code as MinPQ. Maintain parallel arrays so that: keys[i] is the priority of vertex i qp[i] is the heap position of vertex i pq[i] is the index of the key in heap position i Use swim(qp[i]) to implement decreasekey(i, key). decrease key of vertex 2 to C i 0 1 2 3 4 5 6 7 8 keys[i] A S O R T I N G - qp[i] 1 5 4 8 7 6 2 3 - pq[i] - 0 6 7 2 1 5 4 3 N 1 A 2 3 G vertex 2 is at heap index 4 8 R O S I T 4 5 6 7 56

Prim s algorithm: which priority queue? Depends on PQ implementation: V INSERT, V DELETE-MIN, E DECREASE-KEY. PQ implementation INSERT DELETE-MIN DECREASE-KEY total unordered array 1 V 1 V 2 Bottom line. binary heap log V log V log V E log V d-way heap log d V d log d V log d V E log E/V V Fibonacci heap 1 log V 1 E + V log V amortized Array implementation optimal for complete graphs. Binary heap much faster for sparse graphs. 4-way heap worth the trouble in performance-critical situations. Fibonacci heap best in theory, but not worth implementing. 57

MST: algorithms of the day algorithm visualization bottleneck running time Kruskal sorting union find E log V Prim priority queue E log V 58