Graph, Spring 2004 © L. Joskowicz 1 Graphs and basic search algorithms Motivation Definitions and properties Representation Breadth-First Search Depth-First.

Slides:



Advertisements
Similar presentations
Lecture 15. Graph Algorithms
Advertisements

Minimum Spanning Trees Definition of MST Generic MST algorithm Kruskal's algorithm Prim's algorithm.
Comp 122, Fall 2004 Elementary Graph Algorithms. graphs Lin / Devi Comp 122, Fall 2004 Graphs  Graph G = (V, E) »V = set of vertices »E = set of.
Introduction to Algorithms Second Edition by Cormen, Leiserson, Rivest & Stein Chapter 22.
Graphs Breadth First Search & Depth First Search by Shailendra Upadhye.
Graph Searching (Graph Traversal) Algorithm Design and Analysis Week 8 Bibliography: [CLRS] – chap 22.2 –
1 Graph Programming Gordon College. 2 Graph Basics A graph G = (V, E) –V = set of vertices, E = set of edges –Dense graph: |E|  |V| 2 ; Sparse graph:
Graph traversals / cutler1 Graph traversals Breadth first search Depth first search.
Chapter 23 Minimum Spanning Trees
Graph & BFS.
Data Structures, Spring 2004 © L. Joskowicz 1 Data Structures – LECTURE 13 Minumum spanning trees Motivation Properties of minimum spanning trees Kruskal’s.
Minimum Spanning Tree Algorithms
CSE 780 Algorithms Advanced Algorithms Minimum spanning tree Generic algorithm Kruskal’s algorithm Prim’s algorithm.
CS 311 Graph Algorithms. Definitions A Graph G = (V, E) where V is a set of vertices and E is a set of edges, An edge is a pair (u,v) where u,v  V. If.
Lecture 18: Minimum Spanning Trees Shang-Hua Teng.
Graph COMP171 Fall Graph / Slide 2 Graphs * Extremely useful tool in modeling problems * Consist of: n Vertices n Edges D E A C F B Vertex Edge.
1 Minimum Spanning Trees Definition of MST Generic MST algorithm Kruskal's algorithm Prim's algorithm.
Data Structures, Spring 2004 © L. Joskowicz 1 Data Structures – LECTURE 15 Shortest paths algorithms Properties of shortest paths Bellman-Ford algorithm.
Analysis of Algorithms CS 477/677
Data Structures, Spring 2004 © L. Joskowicz 1 Data Structures – LECTURE 12 Graphs and basic search algorithms Motivation Definitions and properties Representation.
Data Structures, Spring 2006 © L. Joskowicz 1 Data Structures – LECTURE 14 Strongly connected components Definition and motivation Algorithm Chapter 22.5.
Tirgul 7 Review of graphs Graph algorithms: – BFS (next tirgul) – DFS – Properties of DFS – Topological sort.
Data Structures, Spring 2006 © L. Joskowicz 1 Data Structures – LECTURE 15 Shortest paths algorithms Properties of shortest paths Bellman-Ford algorithm.
Shortest Path Algorithms. Kruskal’s Algorithm We construct a set of edges A satisfying the following invariant:  A is a subset of some MST We start with.
Theory of Computing Lecture 10 MAS 714 Hartmut Klauck.
COSC 3101NJ. Elder Assignment 2 Remarking Assignment 2 Marks y = 0.995x R 2 = Old Mark New Mark.
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.
Spring 2015 Lecture 10: Elementary Graph Algorithms
Sept Elementary Graph Algorithms Graph representation Graph traversal -Breadth-first search -Depth-first search Parenthesis theorem.
Chapter 2 Graph Algorithms.
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.
Minimum Spanning Trees and Kruskal’s Algorithm CLRS 23.
1 Minimum Spanning Trees. Minimum- Spanning Trees 1. Concrete example: computer connection 2. Definition of a Minimum- Spanning Tree.
Elementary Graph Algorithms CLRS Chapter 22. Graph A graph is a structure that consists of a set of vertices and a set of edges between pairs of vertices.
Graphs. Definitions A graph is two sets. A graph is two sets. –A set of nodes or vertices V –A set of edges E Edges connect nodes. Edges connect nodes.
Lecture 11 Algorithm Analysis Arne Kutzner Hanyang University / Seoul Korea.
Graphs 1 Definition 2 Terminology 3 Properties 4 Internal representation Adjacency list Adjacency matrix 5 Exploration algorithms 6 Other algorithms.
1 Chapter 22 Elementary Graph Algorithms. 2 Introduction G=(V, E) –V = vertex set –E = edge set Graph representation –Adjacency list –Adjacency matrix.
Chapter 23: Minimum Spanning Trees: A graph optimization problem Given undirected graph G(V,E) and a weight function w(u,v) defined on all edges (u,v)
Chapter 22: Elementary Graph Algorithms
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu Lecture 20.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Chapter 13: Graphs Data Abstraction & Problem Solving with C++
© 2006 Pearson Addison-Wesley. All rights reserved 14 A-1 Chapter 14 Graphs.
1 22c:31 Algorithms Minimum-cost Spanning Tree (MST)
Shahed University Dr. Shahriar Bijani May  A path is a sequence of vertices P = (v 0, v 1, …, v k ) such that, for 1 ≤ i ≤ k, edge (v i – 1, v.
Chapter 20: Graphs. Objectives In this chapter, you will: – Learn about graphs – Become familiar with the basic terminology of graph theory – Discover.
MST Lemma Let G = (V, E) be a connected, undirected graph with real-value weights on the edges. Let A be a viable subset of E (i.e. a subset of some MST),
Lecture 12 Algorithm Analysis Arne Kutzner Hanyang University / Seoul Korea.
November 22, Algorithms and Data Structures Lecture XII Simonas Šaltenis Nykredit Center for Database Research Aalborg University
CSC317 1 At the same time: Breadth-first search tree: If node v is discovered after u then edge uv is added to the tree. We say that u is a predecessor.
Chapter 22: Elementary Graph Algorithms Overview: Definition of a graph Representation of graphs adjacency list matrix Elementary search algorithms breadth-first.
Elementary Graph Algorithms
Chapter 22 Elementary Graph Algorithms
Introduction to Algorithms
Minimum Spanning Trees
Lecture 12 Algorithm Analysis
Algorithms and Data Structures Lecture XII
Data Structures – LECTURE 13 Minumum spanning trees
CS 583 Analysis of Algorithms
Lecture 12 Algorithm Analysis
Minimum Spanning Tree Algorithms
Lecture 12 Algorithm Analysis
Elementary Graph Algorithms
CSC 325: Algorithms Graph Algorithms David Luebke /24/2019.
Chapter 23: Minimum Spanning Trees: A graph optimization problem
INTRODUCTION A graph G=(V,E) consists of a finite non empty set of vertices V , and a finite set of edges E which connect pairs of vertices .
Minimum Spanning Trees
Presentation transcript:

graph, Spring 2004 © L. Joskowicz 1 Graphs and basic search algorithms Motivation Definitions and properties Representation Breadth-First Search Depth-First Search Chapter 22 in the textbook (pp 221—252).

graph, Spring 2004 © L. Joskowicz 2 Motivation Many situations can be described as a binary relation between objects: –Web pages and their accessibility –Roadmaps and plans –Transition diagrams A graph is an abstract structure that describes a binary relation between elements. It is a generalization of a tree. Many problems can be reduced to solving graph problems: shortest path, connected components, minimum spanning tree, etc.

graph, Spring 2004 © L. Joskowicz 3 Example: finding your way in the Metro Stations are vertices (nodes) Line segments are edges. Shortest path = shortest distance, time. Reachable stations. start finish

graph, Spring 2004 © L. Joskowicz 4 Graph (גרפים): definition A graph G = (V,E) is a pair, where V = {v 1,.. v n } is the vertex set (nodes) and E = {e 1,.. e m } is the edge set. An edge e k = (v i,v j ) connects (is incident to) two vertices v i and v j of V. Edges can be undirected or directed (unordered or odered): e ij : v i — v j or e ij : v i —> v j The graph G is finite when |V| and |E| are finite. The size of graph G is |G| = |V| + |E|.

graph, Spring 2004 © L. Joskowicz 5 Graphs: examples Let V = {1,2,3,4,5,6} Directed graph Undirected graph

graph, Spring 2004 © L. Joskowicz 6 Weighted graphs A weighted graph is graph in which edges have weights (costs) c(v i, v j ) > 0. A graph is a weighted graph in which all costs are 1. Two vertices with no edge (path) between them can be thought of having an edge (path) with weight ∞ The cost of a path is the sum of the costs of its edges: 6

graph, Spring 2004 © L. Joskowicz 7 Directed graphs In a directed graph, we say that an edge e = (u,v) leaves u and enters v (v is adjacent, a neighbor of u). Self-loops are allowed: an edge can leave and enter u. The in-degree d in (v) of a vertex v is the number of edges entering v. The out-degree d out (v) of a vertex v is the number of edges leaving v. Σd in (v i ) = Σd out (v i ) A path from u to v in G = (V,E) of length k is a sequence of vertices such that for every i in [1,…,k] the pair (v i–1,v i ) is in E.

graph, Spring 2004 © L. Joskowicz 8 Undirected graphs In an undirected graph, we say that an edge e = (u,v) is incident on u and v. Undirected graphs have no self-loops. Incidency is a symmetric relation: if e = (u,v) then u is a neighbor of v and v is a neighbor of u. The degree of a vertex d(v) is the total number of edges incident on v. Σd(v i ) = 2|E|. Path: as for directed graphs.

graph, Spring 2004 © L. Joskowicz 9 Graphs terminology A cycle (circuit) is a path from a vertex to itself of length ≥ 1 A connected graph is an undirected graph in which there is a path between any two vertices (every vertex is reachable from every other vertex). A strongly-connected graph is a directed graph in which for any two vertices u and v there is a directed path from u to v and from v to u. A graph G’= (V’,E’) is a sub-graph of G = (V,E), G’  G when V’  V and E’  E. The (strongly) connected components G 1, G 2, … of a graph G are the largest (strongly) connected sub-graphs of G.

graph, Spring 2004 © L. Joskowicz 10 Size of graphs There are at most |E| = O(|V| 2 ) edges in a graph. Proof: each node can be in at most |V| edges. A graph in which |E| = |V| 2 is called a clique. There are at least |E|  |V|–1 edges in a connected graph. Proof: By induction on the size of V. A graph is planar if it can be drawn in the plane with no two edges crossing. In a planar graph, |E| = O(|V|). The smallest non-planar graph has 5 vertices.

graph, Spring 2004 © L. Joskowicz 11 Trees and graphs A tree is a connected graph with no cycles. A tree has |E| =|V|–1 edges. The following four conditions are equivalent: 1. G is a tree. 2. G has no cycles; adding a new edge forms a cycle. 3. G is connected; deleting any edge destroys its connectivity. 4. G has no self-loops and there is a path between any two vertices. Similar definitions for a directed tree.

graph, Spring 2004 © L. Joskowicz 12 Graphs representation Two standard ways of representing graphs: 1.Adjacency list: for each vertex v there is a linked list L v of its neighbors in the graph. Size of the representation:  (|V|+|E|). 2.Adjacency matrix: a |V| ×|V| matrix in which an edge e = (u,v) is represented by a non-zero (u,v) entry. Size of the representation:  (|V| 2 ). Adjacency lists are better for sparse graphs. Adjacency matrices are better for dense graphs.

graph, Spring 2004 © L. Joskowicz 13 Example: adjacency list representation VLiLi null V = {1,2,3,4,5,6} E = {(1,2),(1,5),(2,5),(3,6)}

graph, Spring 2004 © L. Joskowicz 14 Example: adjacency matrix representation A For undirected graphs, A = A T V = {1,2,3,4,5,6} E = {(1,2),(1,5),(2,5),(3,6)}

graph, Spring 2004 © L. Joskowicz 15 Graph problems and algorithms Graph traversal algorithms –Breath-First Search (BFS) –Depth-First Search (DFS) Minimum spanning trees (MST) Shortest-path algorithms –Single path –Single source shortest path –All-pairs shortest path –Strongly connected components Other problems: planarity testing, graph isomorphism

graph, Spring 2004 © L. Joskowicz 16 There are three main types of shortest path problems: 1.Single path: given two vertices, s and t, find the shortest path from s to t and its length (distance). 2.Single source: given a vertex s, find the shortest paths to all other vertices. 3.All pairs: find the shortest path from all pairs of vertices (s, t). We will concentrate on the single source problem since 1. ends up solving this problem anyway, and 3. can be solved by applying 2. |V| times. Shortest path problems

graph, Spring 2004 © L. Joskowicz 17 Intuition: how to search a graph Start at the vertex s and label its level at 0. If t is a neighbor of s, stop. Otherwise, mark the neighbors of s as having level 1. If t is a neighbor of a vertex at level i, stop. Otherwise, mark the neighbors of vertices at level i as having level i+1. When t is found, trace the path back by going to vertices at level i, i –1, i –2, …0. The graph becomes in effect a shortest-path neighbor tree!

graph, Spring 2004 © L. Joskowicz 18 Example: a graph search problem... s abc def t

graph, Spring 2004 © L. Joskowicz 19 … becomes a tree search problem s ad bdae ceebbf dfbfceac t tc tf t level s abc def t

graph, Spring 2004 © L. Joskowicz 20 How is the tree searched? The tree can be searched in two ways: Breadth: search all vertices at level i before moving to level i+1  Breadth-First Search (BFS). Depth: follow the vertex adjacencies, searching a node at each level i and backing up for alternative neighbor choices  Depth-First Search (DFS).

graph, Spring 2004 © L. Joskowicz 21 Breadth-first search s ad be cf s abc def t level t

graph, Spring 2004 © L. Joskowicz 22 Depth-first search s a b ce f t s abc def t

graph, Spring 2004 © L. Joskowicz 23 The BFS algorithm: overview Search the graph by successive levels (expansion wave) starting at s. Distinguish between three types of vertices: –visited: the vertex and all its neighbors have been visited. –current: the vertex is at the frontier of the wave. –not_visited: the vertex has not been reached yet. Keep three additional fields per vertex: –the type of vertex label[u]: visited, current, not_visited –the distance from the source s, dist[u] –the predecessor of u in the search tree, π[u]. The current vertices are stored in a queue Q.

graph, Spring 2004 © L. Joskowicz 24 The BFS algorithm BFS(G, s) label[s]  current; dist[s] = 0; π[s] = null for all vertices u in V – {s} do label[u]  not_visited; dist[u] = ∞; π[u] = null EnQueue(Q,s) while Q is not empty do u  DeQueue(Q) for each v that is a neighbor of u do if label[v] = not_visited then label[v]  current dist[v]  dist[u] + 1; π[v]  u EnQueue(Q,v) label[u]  visited

graph, Spring 2004 © L. Joskowicz 25 Example: BFS algorithm s abc def t Breath-first tree

graph, Spring 2004 © L. Joskowicz 26 BFS characteristics Q contains only current vertices. Once a vertex becomes current or visited, it is never labeled again not_visited. Once all the neighbors of a current vertex have been considered, the vertex becomes visited. The algorithm can be easily modified to stop when a target t is found, or report that no path exists. The BSF algorithm builds a predecessor sub-graph, which is a breath-first tree: G π = (V π,E π ) V π = {v  V: π[v] ≠ null }  {s} and E π = {(π[v],v), v  V –{s}}

graph, Spring 2004 © L. Joskowicz 27 Complexity of BFS The algorithm removes each vertex from the queue only once. There are thus |V| DeQueue operations. For each vertex, the algorithm goes over all its neighbors and performs a constant number of operations. The amount of work per vertex in the if part of the while loop is a constant times the number of outgoing edges. The total number of operations (if part) for all vertices is a constant times the total number of edges |E|. Overall: O(|V|) + O(|E|) = O(|V|+|E|), at most O(|V| 2 )

graph, Spring 2004 © L. Joskowicz 28 The DFS algorithm: overview (1) Search the graph starting at s and proceed as deep as possible (expansion path) until no unexplored vertices remain. Then go back to the previous vertex and choose the next unvisited neighbor (backtracking). If any undiscovered vertices remain, select one of them as the source and repeat the process. Note that the result is a forest of depth-first trees: G π = (V,E π ) E π = {(π[v],v), v  V and π[v] ≠ null} where π[v] is the predecessor of v in the search tree As for BFS, there are three three types of vertices: visited, current, and not_visited.

graph, Spring 2004 © L. Joskowicz 29 The DFS algorithm: overview (2) Two additional fields holding timestamps. –d[u]: timestamp when u is first discovered (u becomes current). –f [u]: timestamp when the neighbors of u have all been explored (u becomes visited). Timestamps are integers between 1 and 2|V|, and for every vertex u, d[u] < f [u]. Backtracking is implemented with recursion.

graph, Spring 2004 © L. Joskowicz 30 The DFS algorithm DFS(G, s) label[s]  current; dist[s] = 0; π[s] = null; time  0. for each vertex u in do if label[u] = not_visited then DFS-Visit(u) DFS-Visit(u) label[u] = current; time  time +1; d[u]  time for each v that is a neighbor of u do if label[v] = not_visited then π[v]  u; DFS-Visit(v) label[u]  visited f [u]  time  time + 1

graph, Spring 2004 © L. Joskowicz 31 Example: DFS algorithm s abc def t 1/16 2/153/144/5 11/126/13 7/10 8/9 Time: discovery/finish Depth-first tree

graph, Spring 2004 © L. Joskowicz 32 DFS characteristics The depth-first forest that results from DFS depends on the order in which the neighbors of a vertex are selected to deepen the search. The DFS program be easily modified to search only from start vertex s, and to find the shortest path from s to t. Instead of recursion, a LIFO queue can be used (instead of FIFO for BFS). The history of discovery and finish times, d[v] and f [v], has a parenthesis structure.

graph, Spring 2004 © L. Joskowicz 33 DFS: parenthesis structure (1) s abc def t (s (a (b (c c) (e (f (t t) f) (d d) e) b) a) s) Discovery: open ( push Finish: close ) pop 1/16 2/15 3/144/5 11/126/137/10 8/9

graph, Spring 2004 © L. Joskowicz 34 DFS: parenthesis structure (2) (s (a (b (c c) (e (f (t t) f) (d d) e) b) a) s) (s s) 1 (a a) 16 2 (b b) 15 3 (c c) (e e) (f f) (d d) 13 7 (t t)

graph, Spring 2004 © L. Joskowicz 35 Complexity of DFS The algorithm visits every node v  V  Θ(|V|) For each vertex, the algorithm goes over all its neighbors and performs a constant number of operations. Overall, DFS-Visit is called only once for each v in V, since the first thing that the procedure does it label v as current. In DFS-Visit, the recursive call is made for at most the number of edges incident to v: Σ v  V |neighbors[v]| = Θ(|E|) Overall: Θ(|V|) + Θ(|E|) = Θ(|V|+|E|), at most Θ(|V| 2 ) Same complexity as BFS!

graph, Spring 2004 © L. Joskowicz 36 Classification of edges Edges in the depth-first forest G π = (V,E π ) and E π = {(π[v],v), v  V and π[v] ≠ null} can be classified into four categories: 1.Tree edges: depth-first forest edges in E π 2.Back edges: edges (u,v) connecting a vertex u to an ancestor v in a depth-first tree (includes self-loops) 3.Forward edges: non-tree edges (u,v) connecting a vertex u to a descendant v in a depth-first tree. 4.Cross edges: all other edges. Go between vertices in the same depth-first tree without an ancestor relation between them.

graph, Spring 2004 © L. Joskowicz 37 d b f e a s g Example: DFS edge classification Tree edges Cross edges Back edges Forward edges

graph, Spring 2004 © L. Joskowicz 38 Summary: Graphs, BFS, and DFS A graph is a useful representation for binary relations between elements. Many problems can be modeled as graphs, and solved with graph algorithms. Two ways of finding a path between a starting vertex s and all other vertices of a graph: –Breath-First Search (BFS): search all vertices at level i before moving to level i+1. –Depth-First search (DFS): follow vertex adjacencies, one vertex at each level i and backtracking for alternative neighbor choices. Complexity: linear in the size of the graph: Θ(|V|+|E|)

graph, Spring 2004 © L. Joskowicz 39 Minumum spanning trees Motivation Properties of minimum spanning trees Kruskal’s algorithm Prim’s algorithm Chapter 23 in the textbook (pp 561—579).

graph, Spring 2004 © L. Joskowicz 40 Motivation Given a set of nodes and possible connections with weights between them, find the subset of connections that connects all the nodes and whose sum of weights is the smallest. Examples: –telephone switching network –electronic board wiring The nodes and subset of connections form a tree! This tree is called the Minimum Spanning Tree (MST – ( עץ פורש מינימום

graph, Spring 2004 © L. Joskowicz 41 Example: spanning tree bcd hgf iae Cost: 51

graph, Spring 2004 © L. Joskowicz 42 Example: minimum spanning tree bcd hgf iae Cost: 37

graph, Spring 2004 © L. Joskowicz 43 Spanning trees Definition: Let G=(V,E) be a weighted connected undirected graph. A spanning tree of G is a subset T  E of edges, such that the sub-graph G’=(V,T) is connected and acyclic. The minimum spanning tree (MST) is a spanning tree that minimizes the sum:

graph, Spring 2004 © L. Joskowicz 44 Generic MST algorithm Greedy strategy: grow the minimum spanning tree one edge at a time, making sure that the added edge preserves the tree structure and the minimality condition  add “safe” edges incrementally. Generic-MST(G=(V,E)) T =  ; while (T is not a spanning tree of G) do choose a safe edge e=(u,v)  E T = T  {e} return T

graph, Spring 2004 © L. Joskowicz 45 Properties of MST (1) Question: how to find safe edges efficiently? Theorem 1: Let and e=(u,v) be a minimum weight edge with one endpoint in U and the other in V–U. Then there exists a minimum spanning tree T such that e is in T. UV–U V T

graph, Spring 2004 © L. Joskowicz 46 Properties of MST (2) bcd hgf iae U V–U cut

graph, Spring 2004 © L. Joskowicz 47 Properties of MST (2) Proof: Let T be an MST. If e is not in T, add e to T. Because T is a tree, the addition of e creates a cycle which contains e and at least one more edge e’=(u’,v’), where u’  U and v’  V–U. Clearly, w(e) ≤ w(e’) since e is of minimum weight among the edges connecting U and V–U. We can thus delete e’ from T. The resulting T’ = T – {e’}  {e} is a tree whose weight is less or equal than that of T: w(T’) ≤ w(T).

graph, Spring 2004 © L. Joskowicz 48 Properties of MST (3) Theorem 2: Let G=(V,E) be a connected undirected graph and A a subset of E included in a minimum spanning tree T for G. Let (U, V–U) be a cut that respects A (no edge of A crosses the cut), and let e=(u,v) be a minimum weight edge crossing (U, V–U). Then e is safe for A. UV–U V T cut A = T  E’

graph, Spring 2004 © L. Joskowicz 49 Properties of MST (4) Proof: Define an edge e to be a light edge crossing a cut if its weight is the minimum crossing the cut. Let T be an MST that includes A, and assume T does not contain the light edge e = (u,v) (if it does, e is safe). Construct another MST T’ that includes A  {e}. The edge forms a cycle with edges on the path p from u to v in T. Since u and v are on opposite sides of the cut, there is at least one edge e’ = (x,y) in T on the path p that also crosses the cut. The edge e’ is not in A because the cut respects A. Since e’ is on the unique path from u to v in T, removing it breaks T into two components.

graph, Spring 2004 © L. Joskowicz 50 Properties of MST (5) Adding e = (u,v) reconnects the two components to form a new spanning tree: T’ = T –{e’}  {e} We now show that T’ is an MST. Since e = (u,v) is a light edge crossing (U, V–U) and e’ = (x,y) also crosses this cut, w(u,v) ≤ w(x,y). Thus: w(T’) = w(T) – w(u,v) + w(x,y) ≤ w(T) Since T is an MST and w(T’) ≤ w(T), then w(T’) = w(T) and T’ is also an MST.

graph, Spring 2004 © L. Joskowicz 51 Properties of MST (6) Corollary: Let G=(V,E) be a connected undirected graph and A a subset of E included in a minimum spanning tree T for G, and let C = (V C, E C ) be a tree in the forest G A = (V,A). If e is a light edge connecting C to some other component in G A, then e is safe for A. Proof: The cut (V C, V–V C ) respects A, and e is a light edge for this cut. Therefore, e is safe.

graph, Spring 2004 © L. Joskowicz 52 Two algorithms to find an MST There are two ways of adding a safe edge: 1.Kruskal’s algorithm: the set A is a forest and the safe edge added is always the least-weight edge in the graph connecting two distinct components (Theorem 2). 2.Prim’s algorithm: the set A is a tree and the safe edge added is always the least-weight edge connecting A to a vertex not in A (Theorem 1).

graph, Spring 2004 © L. Joskowicz 53 Kruskal’s algorithm MST-Kruskal(G) A   for each vertex v  V do Make-Set(v) sort the edges in E in non-decreasing weight order for each edge e = (u,v)  E do if Find-Set(u) ≠ Find-Set(v) /* the trees are distinct */ then A  A  {e} Union(u,v) /* combine two trees */ return A

graph, Spring 2004 © L. Joskowicz 54 Example: Kruskal’s algorithm bcd hgf iae X X Cost: 37 X

graph, Spring 2004 © L. Joskowicz 55 Analysis of Kruskal’s algorithm Complexity: Depends on the implementation of the set operations! A naïve implementation takes O(|V| |E|). –Sorting the edges takes O(|E| lg |E|). –the for loop goes over every edge and performs two Find-Set and one Union operation. These can be implemented to take O(1) amortized time. The total running time is O(|E| lg |E|) = O(|E| lg |V|).

graph, Spring 2004 © L. Joskowicz 56 Prim’s algorithm MST-Prim(G, root) for each vertex v  V do key(v)  ∞; π[v]  null key(root)  0; Q  V while Q is not empty do u  Extract-Min(Q) for each v that is a neighbor of u do if v  Q and w(u,v) < key(v) then π[v]  u key(v)  w(u,v) /*decrease value of key */

graph, Spring 2004 © L. Joskowicz 57 Example: Prim’s algorithm bcd hgf iae Cost: 37 ∞ 0 ∞ ∞ ∞ ∞ ∞∞ ∞

graph, Spring 2004 © L. Joskowicz 58 Analysis of Prim’s algorithm Complexity: Depends on the implementation of the minimum priority queue. With a binary mean-heap, we have: –Building the initial heap takes O(|V|). –Extract-Min takes O(lg |V|) per vertex  total O(|V| lg |V|) –The for loop is executed O(|E|). –Membership test is O(1). Decreasing a key is O(lg |V|). Overall, the running time is O(|V| lg |V| + |E| lg |V|) = O(|E| lg |V|).

graph, Spring 2004 © L. Joskowicz 59 Summary: MST MST is a tree of all nodes with minimum total cost Two greedy algorithms for finding MST: –Kruskal’s algorithm: edge-based. Runs in O(|V| |E|). –Prim’s algorithm: vertex-based. Runs in O(|E| lg |V|). Complexity of Kruskal’s algorithm can be improved with Union-Find ADT to O(|E| lg |V|), Complexity of Prim’s algorithm can be improved with Fibonacci heaps to O(|V| lg |V| + |E|). Randomized algorithm takes O(|V| + |E|) expected time.