CSE332: Data Abstractions Lecture 26: Minimum Spanning Trees Dan Grossman Spring 2010.

Slides:



Advertisements
Similar presentations
CSE332: Data Abstractions Lecture 17: Shortest Paths Dan Grossman Spring 2010.
Advertisements

Chapter 23 Minimum Spanning Trees
Discussion #36 Spanning Trees
Data Structures, Spring 2004 © L. Joskowicz 1 Data Structures – LECTURE 13 Minumum spanning trees Motivation Properties of minimum spanning trees Kruskal’s.
3 -1 Chapter 3 The Greedy Method 3 -2 The greedy method Suppose that a problem can be solved by a sequence of decisions. The greedy method has that each.
Spanning Trees.
1 7-MST Minimal Spanning Trees Fonts: MTExtra:  (comment) Symbol:  Wingdings: Fonts: MTExtra:  (comment) Symbol:  Wingdings:
Spanning Trees. 2 Spanning trees Suppose you have a connected undirected graph Connected: every node is reachable from every other node Undirected: edges.
Chapter 9: Greedy Algorithms The Design and Analysis of Algorithms.
Greedy Algorithms Reading Material: Chapter 8 (Except Section 8.5)
CSE 326: Data Structures Spanning Trees Ben Lerner Summer 2007.
Greedy Algorithms Like dynamic programming algorithms, greedy algorithms are usually designed to solve optimization problems Unlike dynamic programming.
Tirgul 13 Today we’ll solve two questions from last year’s exams.
Spanning Trees. Spanning trees Suppose you have a connected undirected graph –Connected: every node is reachable from every other node –Undirected: edges.
1 Minimum Spanning Trees Longin Jan Latecki Temple University based on slides by David Matuszek, UPenn, Rose Hoberman, CMU, Bing Liu, U. of Illinois, Boting.
1 Minimum Spanning Trees Longin Jan Latecki Temple University based on slides by David Matuszek, UPenn, Rose Hoberman, CMU, Bing Liu, U. of Illinois, Boting.
Minimum Spanning Tree in Graph - Week Problem: Laying Telephone Wire Central office.
Midwestern State University Minimum Spanning Trees Definition of MST Generic MST algorithm Kruskal's algorithm Prim's algorithm 1.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 223 – Advanced Data Structures Graph Algorithms: Minimum.
© The McGraw-Hill Companies, Inc., Chapter 3 The Greedy Method.
Chapter 9 – Graphs A graph G=(V,E) – vertices and edges
MST Many of the slides are from Prof. Plaisted’s resources at University of North Carolina at Chapel Hill.
CSE373: Data Structures & Algorithms Lecture 17: Shortest Paths Nicki Dell Spring 2014.
2IL05 Data Structures Fall 2007 Lecture 13: Minimum Spanning Trees.
Spring 2015 Lecture 11: Minimum Spanning Trees
UNC Chapel Hill Lin/Foskey/Manocha Minimum Spanning Trees Problem: Connect a set of nodes by a network of minimal total length Some applications: –Communication.
CSE373: Data Structures & Algorithms Lecture 18: Network Flow, NP-Completeness, and More Aaron Bauer Winter 2014.
Minimum Spanning Trees and Kruskal’s Algorithm CLRS 23.
CSE 332 Data Abstractions: Disjoint Set Union-Find and Minimum Spanning Trees Kate Deibel Summer 2012 August 13, 2012 CSE 332 Data Abstractions, Summer.
CSE332: Data Abstractions Lecture 17: Shortest Paths Dan Grossman Spring 2012.
Spanning Trees. A spanning tree for a connected, undirected graph G is a graph S consisting of the nodes of G together with enough edges of G such that:
1 Minimum Spanning Trees (some material adapted from slides by Peter Lee, Ananda Guna, Bettina Speckmann)
CSE373: Data Structures & Algorithms Lecture 17: Dijkstra’s Algorithm Lauren Milne Summer 2015.
Minimum Spanning Trees CSE 373 Data Structures Lecture 21.
MA/CSSE 473 Day 34 MST details: Kruskal's Algorithm Prim's Algorithm.
CSE373: Data Structures & Algorithms Lecture 19: Dijkstra’s algorithm and Spanning Trees Catie Baker Spring 2015.
Lecture 12 Algorithm Analysis Arne Kutzner Hanyang University / Seoul Korea.
Midwestern State University Minimum Spanning Trees Definition of MST Generic MST algorithm Kruskal's algorithm Prim's algorithm 1.
Instructor: Lilian de Greef Quarter: Summer 2017
May 12th – Minimum Spanning Trees
Shortest Paths and Minimum Spanning Trees
CSE373: Data Structures & Algorithms
CSE373: Data Structures & Algorithms Lecture 19: Spanning Trees
Spanning Trees.
Minimum Spanning Trees and Shortest Paths
Lecture 12 Algorithm Analysis
CSE373: Data Structures & Algorithms Lecture 17: Shortest Paths
CSCE350 Algorithms and Data Structure
Minimum Spanning Tree.
CSE373: Data Structures & Algorithms Lecture 12: Minimum Spanning Trees Catie Baker Spring 2015.
CSE373: Data Structures & Algorithms Lecture 20: Minimum Spanning Trees Linda Shapiro Spring 2016.
CSE 373 Data Structures and Algorithms
CSE373: Data Structures & Algorithms Lecture 18: Dijkstra’s Algorithm
Spanning Trees.
Data Structures – LECTURE 13 Minumum spanning trees
Hannah Tang and Brian Tjaden Summer Quarter 2002
Lecture 12 Algorithm Analysis
CSE373: Data Structures & Algorithms Lecture 19: Spanning Trees
CSE332: Data Abstractions Lecture 18: Minimum Spanning Trees
Minimum Spanning Trees
Minimum Spanning Trees
Minimum Spanning Trees
CSE 373: Data Structures and Algorithms
CSE332: Data Abstractions Lecture 17: Shortest Paths
CSE 373: Data Structures and Algorithms
Lecture 12 Algorithm Analysis
CSE 373: Data Structures and Algorithms
Topological Sorting Minimum Spanning Trees Shortest Path
Minimum Spanning Trees
Presentation transcript:

CSE332: Data Abstractions Lecture 26: Minimum Spanning Trees Dan Grossman Spring 2010

“Scheduling note” “We now return to our interrupted program” on graphs –Last “graph lecture” was lecture 17 Shortest-path problem Dijkstra’s algorithm for graphs with non-negative weights Why this strange schedule? –Needed to do parallelism and concurrency in time for project 3 and homeworks 6 and 7 –But cannot delay all of graphs because of the CSE312 co- requisite So: not the most logical order, but hopefully not a big deal Spring 20102CSE332: Data Abstractions

Spanning trees A simple problem: Given a connected graph G=(V,E), find a minimal subset of the edges such that the graph is still connected –A graph G2=(V,E2) such that G2 is connected and removing any edge from E2 makes G2 disconnected Spring 20103CSE332: Data Abstractions

Observations 1.Any solution to this problem is a tree –Recall a tree does not need a root; just means acyclic –For any cycle, could remove an edge and still be connected 2.Solution not unique unless original graph was already a tree 3.Problem ill-defined if original graph not connected 4.A tree with |V| nodes has |V|-1 edges –So every solution to the spanning tree problem has |V|-1 edges Spring 20104CSE332: Data Abstractions

Motivation A spanning tree connects all the nodes with as few edges as possible Example: A “phone tree” so everybody gets the message and no unnecessary calls get made –Bad example since would prefer a balanced tree In most compelling uses, we have a weighted undirected graph and we want a tree of least total cost Example: Electrical wiring for a house or clock wires on a chip Example: A road network if you cared about asphalt cost rather than travel time This is the minimum spanning tree problem –Will do that next, after intuition from the simpler case Spring 20105CSE332: Data Abstractions

Two approaches Different algorithmic approaches to the spanning-tree problem: 1.Do a graph traversal (e.g., depth-first search, but any traversal will do), keeping track of edges that form a tree 2.Iterate through edges; add to output any edge that doesn’t create a cycle Spring 20106CSE332: Data Abstractions

Spanning tree via DFS Spring 20107CSE332: Data Abstractions spanning_tree(Graph G) { for each node i: i.marked = false for some node i: f(i) } f(Node i) { i.marked = true for each j adjacent to i: if(!j.marked) { add(i,j) to output f(j) // DFS } Correctness: DFS reaches each node. We add one edge to connect it to the already visited nodes. Order affects result, not correctness. Time: O(|E|)

Example Stack f(1) Spring 20108CSE332: Data Abstractions Output:

Example Stack f(1) f(2) Spring 20109CSE332: Data Abstractions Output: (1,2)

Example Stack f(1) f(2) f(7) Spring CSE332: Data Abstractions Output: (1,2), (2,7)

Example Stack f(1) f(2) f(7) f(5) Spring CSE332: Data Abstractions Output: (1,2), (2,7), (7,5)

Example Stack f(1) f(2) f(7) f(5) f(4) Spring CSE332: Data Abstractions Output: (1,2), (2,7), (7,5), (5,4)

Example Stack f(1) f(2) f(7) f(5) f(4) f(3) Spring CSE332: Data Abstractions Output: (1,2), (2,7), (7,5), (5,4),(4,3)

Example Stack f(1) f(2) f(7) f(5) f(4) f(6) f(3) Spring CSE332: Data Abstractions Output: (1,2), (2,7), (7,5), (5,4), (4,3), (5,6)

Example Stack f(1) f(2) f(7) f(5) f(4) f(6) f(3) Spring CSE332: Data Abstractions Output: (1,2), (2,7), (7,5), (5,4), (4,3), (5,6)

Second approach Iterate through edges; output any edge that doesn’t create a cycle Correctness (hand-wavy): –Goal is to build an acyclic connected graph –When we don’t add an edge, adding it would not connect any nodes that aren’t already connected in the output –So we won’t end up with less than a spanning tree Efficiency: –Depends on how quickly you can detect cycles –Reconsider after the example Spring CSE332: Data Abstractions

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7),(1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output:

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7),(1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output: (1,2)

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7),(1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output: (1,2), (3,4)

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7),(1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output: (1,2), (3,4), (5,6),

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7),(1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output: (1,2), (3,4), (5,6), (5,7)

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7), (1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output: (1,2), (3,4), (5,6), (5,7), (1,5)

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7), (1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output: (1,2), (3,4), (5,6), (5,7), (1,5)

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7), (1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output: (1,2), (3,4), (5,6), (5,7), (1,5)

Example Edges in some arbitrary order: (1,2), (3,4), (5,6), (5,7), (1,5), (1,6), (2,7), (2,3), (4,5), (4,7) Spring CSE332: Data Abstractions Output: (1,2), (3,4), (5,6), (5,7), (1,5), (2,3) Can stop once we have |V|-1 edges

Cycle detection To decide if an edge could form a cycle is O(|V|) since we may need to traverse all edges already in the output So overall algorithm would be O(|V||E|) But there is a faster way using the disjoint-set ADT –Initially, each item is in its own 1-element set –find(u,v) : are u and v in the same set? –union(u,v) : union (combine) the sets u and v are in (Operations often presented slightly differently) Spring CSE332: Data Abstractions

Using disjoint-set Can use a disjoint-set implementation in our spanning-tree algorithm to detect cycles: Invariant: u and v are connected in output-so-far iff u and v in the same set Initially, each node is in its own set When processing edge (u,v) : –If find(u,v), then do not add the edge –Else add the edge and union(u,v) Spring CSE332: Data Abstractions

Why do this? Using an ADT someone else wrote is easier than writing your own cycle detection It is also more efficient Chapter 8 of your textbook gives several implementations of different sophistication and asymptotic complexity –A slightly clever and easy-to-implement one is O( log n) for find and union (as we defined the operations here) –Lets our spanning tree algorithm be O(|E| log |V|) [We skipped disjoint-sets as an example of “sometimes knowing- an-ADT-exists and you-can-learn-it-on-your-own suffices”] Spring CSE332: Data Abstractions

Summary so far The spanning-tree problem –Add nodes to partial tree approach is O(|E|) –Add acyclic edges approach is O(|E| log |V|) Using the disjoint-set ADT “as a black box” But really want to solve the minimum-spanning-tree problem –Given a weighted undirected graph, give a spanning tree of minimum weight –Same two approaches will work with minor modifications –Both will be O(|E| log |V|) Spring CSE332: Data Abstractions

Punch line Algorithm #1 Shortest-path is to Dijkstra’s Algorithm as Minimum Spanning Tree is to Prim’s Algorithm (Both based on expanding cloud of known vertices, basically using a priority queue instead of a DFS stack) Algorithm #2 Kruskal’s Algorithm for Minimum Spanning Tree is Exactly our 2 nd approach to spanning tree but process edges in cost order Spring CSE332: Data Abstractions

Prim’s Algorithm Idea Idea: Grow a tree by adding an edge from the “known” vertices to the “unknown” vertices. Pick the edge with the smallest weight that connects “known” to “unknown.” Recall Dijkstra “picked the edge with closest known distance to the source.” –But that’s not what we want here –Otherwise identical –Compare to slides in lecture 17 if you don’t believe me Spring CSE332: Data Abstractions

The algorithm Spring CSE332: Data Abstractions 1.For each node v, set v.cost =  and v.known = false 2.Choose any node v. a)Mark v as known b)For each edge (v,u) with weight w, set u.cost=w and u.prev=v 3.While there are unknown nodes in the graph a)Select the unknown node v with lowest cost b)Mark v as known and add (v, v.prev) to output c)For each edge (v,u) with weight w, if(w < u.cost) { u.cost = w; u.prev = v; }

Example Spring CSE332: Data Abstractions A B C D F E G       vertexknown?costprev A?? B C D E F G 

Example Spring CSE332: Data Abstractions A B C D F E G 0 2  2 1   vertexknown?costprev AY0 B2A C2A D1A E?? F G

Example Spring CSE332: Data Abstractions A B C D F E G vertexknown?costprev AY0 B2A C1D DY1A E1D F6D G5D

Example Spring CSE332: Data Abstractions A B C D F E G vertexknown?costprev AY0 B2A CY1D DY1A E1D F2C G5D

Example Spring CSE332: Data Abstractions A B C D F E G vertexknown?costprev AY0 B1E CY1D DY1A EY1D F2C G3E

Example Spring CSE332: Data Abstractions A B C D F E G vertexknown?costprev AY0 BY1E CY1D DY1A EY1D F2C G3E

Example Spring CSE332: Data Abstractions A B C D F E G vertexknown?costprev AY0 BY1E CY1D DY1A EY1D FY2C G3E

Example Spring CSE332: Data Abstractions A B C D F E G vertexknown?costprev AY0 BY1E CY1D DY1A EY1D FY2C GY3E

Analysis Correctness ?? –A bit tricky –Intuitively similar to Dijkstra –Might return to this time permitting (unlikely) Run-time –Same as Dijkstra –O(|E| log |V|) using a priority queue Spring CSE332: Data Abstractions

Kruskal’s Algorithm Idea: Grow a forest out of edges that do not grow a cycle, just like for the spanning tree problem. –But now consider the edges in order by weight So: –Sort edges: O(|E| log |E|) –Iterate through edges using union-find for cycle detection O(|E| log |V|) Somewhat better: –Floyd’s algorithm to build min-heap with edges O(|E|) –Iterate through edges using union-find for cycle detection and deleteMin to get next edge O(|E| log |V|) –(Not better worst-case asymptotically, but often stop long before considering all edges) Spring CSE332: Data Abstractions

Pseudocode 1.Sort edges by weight (better: put in min-heap) 2.Each node in its own set 3.While output size < |V|-1 –Consider next smallest edge (u,v) –if find(u,v) indicates u and v are in different sets output (u,v) union(u,v) Recall invariant: u and v in same set if and only if connected in output-so-far Spring CSE332: Data Abstractions

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: Note: At each step, the union/find sets are the trees in the forest

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: (A,D) Note: At each step, the union/find sets are the trees in the forest

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: (A,D), (C,D) Note: At each step, the union/find sets are the trees in the forest

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: (A,D), (C,D), (B,E) Note: At each step, the union/find sets are the trees in the forest

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: (A,D), (C,D), (B,E), (D,E) Note: At each step, the union/find sets are the trees in the forest

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: (A,D), (C,D), (B,E), (D,E) Note: At each step, the union/find sets are the trees in the forest

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: (A,D), (C,D), (B,E), (D,E), (C,F) Note: At each step, the union/find sets are the trees in the forest

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: (A,D), (C,D), (B,E), (D,E), (C,F) Note: At each step, the union/find sets are the trees in the forest

Example Spring CSE332: Data Abstractions A B C D F E G Edges in sorted order: 1: (A,D), (C,D), (B,E), (D,E) 2: (A,B), (C,F), (A,C) 3: (E,G) 5: (D,G), (B,D) 6: (D,F) 10: (F,G) Output: (A,D), (C,D), (B,E), (D,E), (C,F), (E,G) Note: At each step, the union/find sets are the trees in the forest

Correctness Kruskal’s algorithm is clever, simple, and efficient –But does it generate a minimum spanning tree? –How can we prove it? First: it generates a spanning tree –Intuition: Graph started connected and we added every edge that did not create a cycle –Proof by contradiction: Suppose u and v are disconnected in Kruskal’s result. Then there’s a path from u to v in the initial graph with an edge we could add without creating a cycle. But Kruskal would have added that edge. Contradiction. Second: There is no spanning tree with lower total cost… Spring CSE332: Data Abstractions

The inductive proof set-up Let F (stands for “forest”) be the set of edges Kruskal has added at some point during its execution. Claim: F is a subset of one or more MSTs for the graph (Therefore, once |F|=|V|-1, we have an MST.) Proof: By induction on |F| Base case: |F|=0: The empty set is a subset of all MSTs Inductive case: |F|=k+1: By induction, before adding the (k+1) th edge (call it e), there was some MST T such that F-{e}  T … Spring CSE332: Data Abstractions

Staying a subset of some MST Two disjoint cases: If {e}  T: Then F  T and we’re done Else e forms a cycle with some simple path (call it p) in T –Must be since T is a spanning tree Spring CSE332: Data Abstractions Claim: F is a subset of one or more MSTs for the graph So far: F-{e}  T:

Staying a subset of some MST There must be an edge e2 on p such that e2 is not in F –Else Kruskal would not have added e Claim: e2.weight == e.weight Spring CSE332: Data Abstractions Claim: F is a subset of one or more MSTs for the graph So far: F-{e}  T and e forms a cycle with p  T e

Staying a subset of some MST Claim: e2.weight == e.weight –If e2.weight > e.weight, then T is not an MST because T-{e2}+{e} is a spanning tree with lower cost: contradiction –If e2.weight < e.weight, then Kruskal would have already considered e2. It would have added it since T has no cycles and F-{e}  T. But e2 is not in F: contradiction Spring CSE332: Data Abstractions Claim: F is a subset of one or more MSTs for the graph So far: F-{e}  T e forms a cycle with p  T e2 on p is not in F e e2

Staying a subset of some MST Claim: T-{e2}+{e} is an MST –It’s a spanning tree because p-{e2}+{e} connects the same nodes as p –It’s minimal because its cost equals cost of T, an MST Since F  T-{e2}+{e}, F is a subset of one or more MSTs Done. Spring CSE332: Data Abstractions Claim: F is a subset of one or more MSTs for the graph So far: F-{e}  T e forms a cycle with p  T e2 on p is not in F e2.weight == e.weight e e2