Depth First Search (DFS)

Similar documents
Depth First Search (DFS)

CS 473: Algorithms. Chandra Chekuri 3228 Siebel Center. Fall University of Illinois, Urbana-Champaign

Strongly connected: A directed graph is strongly connected if every pair of vertices are reachable from each other.

Graph Search. Algorithms & Models of Computation CS/ECE 374, Fall Lecture 15. Thursday, October 19, 2017

Graph Representations and Traversal

Depth-first search in undirected graphs What parts of the graph are reachable from a given vertex?

Strongly Connected Components

CSE 101. Algorithm Design and Analysis Miles Jones and Russell Impagliazzo Miles Office 4208 CSE Building

Graph Algorithms Using Depth First Search

Design and Analysis of Algorithms

Fundamental Graph Algorithms Part Three

Copyright 2000, Kevin Wayne 1

Lecture 3: Graphs and flows

Algorithm Design and Analysis

Undirected Graphs. V = { 1, 2, 3, 4, 5, 6, 7, 8 } E = { 1-2, 1-3, 2-3, 2-4, 2-5, 3-5, 3-7, 3-8, 4-5, 5-6 } n = 8 m = 11

Graph Search. CS/ECE 374: Algorithms & Models of Computation, Fall Lecture 15. October 18, 2018

Algorithms (VII) Yijia Chen Shanghai Jiaotong University

Algorithms (VII) Yijia Chen Shanghai Jiaotong University

Fundamental Graph Algorithms Part Four

CS2 Algorithms and Data Structures Note 10. Depth-First Search and Topological Sorting

1 Connected components in undirected graphs

Finding Strongly Connected Components

CS 125 Section #6 Graph Traversal and Linear Programs 10/13/14

Lecture 22 Tuesday, April 10

CS781 Lecture 2 January 13, Graph Traversals, Search, and Ordering

Algorithms: Lecture 10. Chalmers University of Technology

22.3 Depth First Search

Announcements. HW3 is graded. Average is 81%

Graph Algorithms. Andreas Klappenecker. [based on slides by Prof. Welch]

W4231: Analysis of Algorithms

Strongly Connected Components. Andreas Klappenecker

Algorithm Design and Analysis

Chapter 3. Graphs. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

Graphs. Part I: Basic algorithms. Laura Toma Algorithms (csci2200), Bowdoin College

LECTURE NOTES OF ALGORITHMS: DESIGN TECHNIQUES AND ANALYSIS

Plan. CMPSCI 311: Introduction to Algorithms. Recall. Adjacency List Representation. DFS Descriptions. BFS Description

Graph Algorithms. Imran Rashid. Jan 16, University of Washington

3.1 Basic Definitions and Applications. Chapter 3. Graphs. Undirected Graphs. Some Graph Applications

Graphs: Connectivity. Jordi Cortadella and Jordi Petit Department of Computer Science

CS483 Design and Analysis of Algorithms

3.4 Testing Bipartiteness

Copyright 2000, Kevin Wayne 1

Inf 2B: Graphs II - Applications of DFS

DFS & STRONGLY CONNECTED COMPONENTS

3.1 Basic Definitions and Applications

Chapter 3. Graphs CLRS Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

Proof: if not f[u] < d[v], then u still grey while v is being visited. DFS visit(v) will then terminate before DFS visit(u).

CSE 417: Algorithms and Computational Complexity. 3.1 Basic Definitions and Applications. Goals. Chapter 3. Winter 2012 Graphs and Graph Algorithms

3.1 Basic Definitions and Applications

Algorithms and Theory of Computation. Lecture 3: Graph Algorithms

Algorithms for Minimum Spanning Trees

Depth-First Search Depth-first search (DFS) is another way to traverse the graph.

CS4800: Algorithms & Data Jonathan Ullman

Introduction to Graphs. CS2110, Spring 2011 Cornell University

CS 161 Lecture 11 BFS, Dijkstra s algorithm Jessica Su (some parts copied from CLRS) 1 Review

Design and Analysis of Algorithms

U.C. Berkeley CS170 : Algorithms, Fall 2013 Midterm 1 Professor: Satish Rao October 10, Midterm 1 Solutions

Taking Stock. IE170: Algorithms in Systems Engineering: Lecture 17. Depth-First Search. DFS (Initialize and Go) Last Time Depth-First Search

CS Algorithms and Complexity

CS 361 Data Structures & Algs Lecture 15. Prof. Tom Hayes University of New Mexico

Graph Representation

Dynamic-Programming algorithms for shortest path problems: Bellman-Ford (for singlesource) and Floyd-Warshall (for all-pairs).

CSE 331: Introduction to Algorithm Analysis and Design Graphs

Graphs. A graph is a data structure consisting of nodes (or vertices) and edges. An edge is a connection between two nodes

Directed Graphs (II) Hwansoo Han

Graph Algorithms. Chapter 22. CPTR 430 Algorithms Graph Algorithms 1

Basic Graph Algorithms

Lecture 2 - Graph Theory Fundamentals - Reachability and Exploration 1

Graph Algorithms. Definition

CS 220: Discrete Structures and their Applications. graphs zybooks chapter 10

Elementary Graph Algorithms CSE 6331

BACKGROUND: A BRIEF INTRODUCTION TO GRAPH THEORY

CSE 421 DFS / Topological Ordering

Algorithms and Data Structures

Graph: representation and traversal

GRAPHS Lecture 17 CS2110 Spring 2014

Midterm 1 for CS 170

U.C. Berkeley CS170 : Algorithms Midterm 1 Lecturers: Alessandro Chiesa and Satish Rao September 18, Midterm 1

Cut vertices, Cut Edges and Biconnected components. MTL776 Graph algorithms

Lecture 10. Finding strongly connected components

Algorithms (V) Path in Graphs. Guoqiang Li. School of Software, Shanghai Jiao Tong University

CSCE 750, Fall 2002 Notes 6 Page Graph Problems ffl explore all nodes (breadth first and depth first) ffl find the shortest path from a given s

CS473-Algorithms I. Lecture 13-A. Graphs. Cevdet Aykanat - Bilkent University Computer Engineering Department

(Refer Slide Time: 05:25)

Graphs. CSE 2320 Algorithms and Data Structures Alexandra Stefan and Vassilis Athitsos University of Texas at Arlington

Greedy algorithms. Given a problem, how do we design an algorithm that solves the problem? There are several strategies:

More Graph Algorithms

Elementary Graph Algorithms. Ref: Chapter 22 of the text by Cormen et al. Representing a graph:

COL351: Analysis and Design of Algorithms (CSE, IITD, Semester-I ) Name: Entry number:

Outline. Graphs. Divide and Conquer.

CS 341: Algorithms. Douglas R. Stinson. David R. Cheriton School of Computer Science University of Waterloo. February 26, 2019

Applications of BDF and DFS

Question Points Score TOTAL 50

These are not polished as solutions, but ought to give a correct idea of solutions that work. Note that most problems have multiple good solutions.

CS261: Problem Set #1

Lecture 16: Directed Graphs

Lecture 10: Strongly Connected Components, Biconnected Graphs

Lecture 20 : Trees DRAFT

Computer Science & Engineering 423/823 Design and Analysis of Algorithms

Chapter 6. Planar Orientations. 6.1 Numberings of Digraphs

Transcription:

Algorithms & Models of Computation CS/ECE 374, Fall 2017 Depth First Search (DFS) Lecture 16 Thursday, October 26, 2017 Sariel Har-Peled (UIUC) CS374 1 Fall 2017 1 / 60

Today Two topics: Structure of directed graphs DFS and its properties One application of DFS to obtain fast algorithms Sariel Har-Peled (UIUC) CS374 2 Fall 2017 2 / 60

Part I Depth First Search (DFS) Sariel Har-Peled (UIUC) CS374 3 Fall 2017 3 / 60

Depth First Search 1 DFS special case of Basic Search. 2 DFS is useful in understanding graph structure. 3 DFS used to obtain linear time (O(m + n)) algorithms for 1 Finding cut-edges and cut-vertices of undirected graphs 2 Finding strong connected components of directed graphs 3 Linear time algorithm for testing whether a graph is planar 4...many other applications as well. Sariel Har-Peled (UIUC) CS374 4 Fall 2017 4 / 60

DFS in Undirected Graphs Recursive version. Easier to understand some properties. DFS(G) for all u V (G) do Mark u as unvisited Set pred(u) to null T is set to while unvisited u do DFS(u) Output T DFS(u) Mark u as visited for each uv in Out(u) do if v is not visited then add edge uv to T set pred(v) to u DFS(v) Implemented using a global array Visited for all recursive calls. T is the search tree/forest. Sariel Har-Peled (UIUC) CS374 5 Fall 2017 5 / 60

Example 1 2 3 4 5 6 7 8 9 10 Edges classified into two types: uv E is a 1 tree edge: belongs to T 2 non-tree edge: does not belong to T Sariel Har-Peled (UIUC) CS374 6 Fall 2017 6 / 60

Properties of DFS tree Proposition 1 T is a forest 2 connected components of T are same as those of G. 3 If uv E is a non-tree edge then, in T, either: 1 u is an ancestor of v, or 2 v is an ancestor of u. Question: Why are there no cross-edges? Sariel Har-Peled (UIUC) CS374 7 Fall 2017 7 / 60

DFS with Visit Times Keep track of when nodes are visited. DFS(G) for all u V (G) do Mark u as unvisited T is set to time = 0 while unvisited u do DFS(u) Output T DFS(u) Mark u as visited pre(u) = ++time for each uv in Out(u) do if v is not marked then add edge uv to T DFS(v) post(u) = ++time Sariel Har-Peled (UIUC) CS374 8 Fall 2017 8 / 60

Example 1 2 3 4 5 6 7 8 9 10 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 7 [8, ] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 7 [8, ] 8 [9, ] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 7 [8, ] 8 [9, 10] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 7 [8, 11] 8 [9, 10] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, 14] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, ] 2 [2, 15] 4 [3, 14] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, 16] 2 [2, 15] 4 [3, 14] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

Example 1 7 9 1 7 9 2 3 2 3 4 5 8 10 4 5 8 10 6 vertex [pre, post] 1 [1, 16] 2 [2, 15] 4 [3, 14] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10] 9 [17, 20] 10 [18, 19] 6 Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

pre and post numbers Node u is active in time interval [pre(u), post(u)] Proposition For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other. Proof. Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

pre and post numbers Node u is active in time interval [pre(u), post(u)] Proposition For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other. Proof. Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

pre and post numbers Node u is active in time interval [pre(u), post(u)] Proposition For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other. Proof. Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

pre and post numbers Node u is active in time interval [pre(u), post(u)] Proposition For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other. Proof. Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

pre and post numbers Node u is active in time interval [pre(u), post(u)] Proposition For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other. Proof. Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

pre and post numbers Node u is active in time interval [pre(u), post(u)] Proposition For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other. Proof. Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

DFS in Directed Graphs DFS(G) Mark all nodes u as unvisited T is set to time = 0 while there is an unvisited node u do DFS(u) Output T DFS(u) Mark u as visited pre(u) = ++time for each edge (u, v) in Out(u) do if v is not visited add edge (u, v) to T DFS(v) post(u) = ++time Sariel Har-Peled (UIUC) CS374 11 Fall 2017 11 / 60

Example B A C E F D G H Sariel Har-Peled (UIUC) CS374 12 Fall 2017 12 / 60

Example B A C [1, 16] [2, 11] B A C [12, 15] E F D [3, 10] E F [6, 7] D [13, 14] [4, 5] G H G H [8, 9] Sariel Har-Peled (UIUC) CS374 12 Fall 2017 12 / 60

DFS Properties Generalizing ideas from undirected graphs: 1 DFS(G) takes O(m + n) time. 2 Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered. 3 If u is the first vertex considered by DFS(G) then DFS(u) outputs a directed out-tree T rooted at u and a vertex v is in T if and only if v rch(u) 4 For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the other. Note: Not obvious whether DFS(G) is useful in directed graphs but it is. Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

DFS Properties Generalizing ideas from undirected graphs: 1 DFS(G) takes O(m + n) time. 2 Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered. 3 If u is the first vertex considered by DFS(G) then DFS(u) outputs a directed out-tree T rooted at u and a vertex v is in T if and only if v rch(u) 4 For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the other. Note: Not obvious whether DFS(G) is useful in directed graphs but it is. Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

DFS Properties Generalizing ideas from undirected graphs: 1 DFS(G) takes O(m + n) time. 2 Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered. 3 If u is the first vertex considered by DFS(G) then DFS(u) outputs a directed out-tree T rooted at u and a vertex v is in T if and only if v rch(u) 4 For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the other. Note: Not obvious whether DFS(G) is useful in directed graphs but it is. Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

DFS Properties Generalizing ideas from undirected graphs: 1 DFS(G) takes O(m + n) time. 2 Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered. 3 If u is the first vertex considered by DFS(G) then DFS(u) outputs a directed out-tree T rooted at u and a vertex v is in T if and only if v rch(u) 4 For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the other. Note: Not obvious whether DFS(G) is useful in directed graphs but it is. Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

DFS Properties Generalizing ideas from undirected graphs: 1 DFS(G) takes O(m + n) time. 2 Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered. 3 If u is the first vertex considered by DFS(G) then DFS(u) outputs a directed out-tree T rooted at u and a vertex v is in T if and only if v rch(u) 4 For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the other. Note: Not obvious whether DFS(G) is useful in directed graphs but it is. Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

DFS Tree Edges of G can be classified with respect to the DFS tree T as: 1 Tree edges that belong to T 2 A forward edge is a non-tree edges (x, y) such that pre(x) < pre(y) < post(y) < post(x). 3 A backward edge is a non-tree edge (y, x) such that pre(x) < pre(y) < post(y) < post(x). 4 A cross edge is a non-tree edges (x, y) such that the intervals [pre(x), post(x)] and [pre(y), post(y)] are disjoint. Sariel Har-Peled (UIUC) CS374 14 Fall 2017 14 / 60

Types of Edges Backward C A B Cross Forward D Sariel Har-Peled (UIUC) CS374 15 Fall 2017 15 / 60

Cycles in graphs Question: Given an undirected graph how do we check whether it has a cycle and output one if it has one? Question: Given an directed graph how do we check whether it has a cycle and output one if it has one? Sariel Har-Peled (UIUC) CS374 16 Fall 2017 16 / 60

Using DFS...... to check for Acylicity and compute Topological Ordering Question Given G, is it a DAG? If it is, generate a topological sort. Else output a cycle C. DFS based algorithm: 1 Compute DFS(G) 2 If there is a back edge e = (v, u) then G is not a DAG. Output cyclce C formed by path from u to v in T plus edge (v, u). 3 Otherwise output nodes in decreasing post-visit order. Note: no need to sort, DFS(G) can output nodes in this order. Algorithm runs in O(n + m) time. Correctness is not so obvious. See next two propositions. Sariel Har-Peled (UIUC) CS374 17 Fall 2017 17 / 60

Using DFS...... to check for Acylicity and compute Topological Ordering Question Given G, is it a DAG? If it is, generate a topological sort. Else output a cycle C. DFS based algorithm: 1 Compute DFS(G) 2 If there is a back edge e = (v, u) then G is not a DAG. Output cyclce C formed by path from u to v in T plus edge (v, u). 3 Otherwise output nodes in decreasing post-visit order. Note: no need to sort, DFS(G) can output nodes in this order. Algorithm runs in O(n + m) time. Correctness is not so obvious. See next two propositions. Sariel Har-Peled (UIUC) CS374 17 Fall 2017 17 / 60

Using DFS...... to check for Acylicity and compute Topological Ordering Question Given G, is it a DAG? If it is, generate a topological sort. Else output a cycle C. DFS based algorithm: 1 Compute DFS(G) 2 If there is a back edge e = (v, u) then G is not a DAG. Output cyclce C formed by path from u to v in T plus edge (v, u). 3 Otherwise output nodes in decreasing post-visit order. Note: no need to sort, DFS(G) can output nodes in this order. Algorithm runs in O(n + m) time. Correctness is not so obvious. See next two propositions. Sariel Har-Peled (UIUC) CS374 17 Fall 2017 17 / 60

Back edge and Cycles Proposition G has a cycle iff there is a back-edge in DFS(G). Proof. If: (u, v) is a back edge implies there is a cycle C consisting of the path from v to u in DFS search tree and the edge (u, v). Only if: Suppose there is a cycle C = v 1 v 2... v k v 1. Let v i be first node in C visited in DFS. All other nodes in C are descendants of v i since they are reachable from v i. Therefore, (v i 1, v i ) (or (v k, v 1 ) if i = 1) is a back edge. Sariel Har-Peled (UIUC) CS374 18 Fall 2017 18 / 60

Proof Proposition If G is a DAG and post(v) > post(u), then (u, v) is not in G. Proof. Assume post(v) > post(u) and (u, v) is an edge in G. We derive a contradiction. One of two cases holds from DFS property. Case 1: [pre(u), post(u)] is contained in [pre(v), post(v)]. Implies that u is explored during DFS(v) and hence is a descendent of v. Edge (u, v) implies a cycle in G but G is assumed to be DAG! Case 2: [pre(u), post(u)] is disjoint from [pre(v), post(v)]. This cannot happen since v would be explored from u. Sariel Har-Peled (UIUC) CS374 19 Fall 2017 19 / 60

Example a b c d e f g h Sariel Har-Peled (UIUC) CS374 20 Fall 2017 20 / 60

Part II Strong connected components Sariel Har-Peled (UIUC) CS374 21 Fall 2017 21 / 60

Strong Connected Components (SCCs) Algorithmic Problem Find all SCCs of a given directed graph. Previous lecture: Saw an O(n (n + m)) time algorithm. This lecture: sketch of a O(n + m) time algorithm. B E A F G C D H Sariel Har-Peled (UIUC) CS374 22 Fall 2017 22 / 60

Graph of SCCs B A C B, E, F A, C, D E F D G H G: G H Meta-graph of SCCs Graph of SCCs G SCC Let S 1, S 2,... S k be the strong connected components (i.e., SCCs) of G. The graph of SCCs is G SCC 1 Vertices are S 1, S 2,... S k 2 There is an edge (S i, S j ) if there is some u S i and v S j such that (u, v) is an edge in G. Sariel Har-Peled (UIUC) CS374 23 Fall 2017 23 / 60

Reversal and SCCs Proposition For any graph G, the graph of SCCs of G rev is the same as the reversal of G SCC. Proof. Exercise. Sariel Har-Peled (UIUC) CS374 24 Fall 2017 24 / 60

SCCs and DAGs Proposition For any graph G, the graph G SCC has no directed cycle. Proof. If G SCC has a cycle S 1, S 2,..., S k then S 1 S 2 S k should be in the same SCC in G. Formal details: exercise. Sariel Har-Peled (UIUC) CS374 25 Fall 2017 25 / 60

Part III Directed Acyclic Graphs Sariel Har-Peled (UIUC) CS374 26 Fall 2017 26 / 60

Directed Acyclic Graphs Definition A directed graph G is a directed acyclic graph (DAG) if there is no directed cycle in G. 2 1 3 4 Sariel Har-Peled (UIUC) CS374 27 Fall 2017 27 / 60

Is this a DAG? a c b g v d s i f w u k t m o l n p q r h j e k p r j m o g i h q s t n l v w u f e c a b d Sariel Har-Peled (UIUC) CS374 28 Fall 2017 28 / 60

Sources and Sinks 2 3 source sink 1 4 Definition 1 A vertex u is a source if it has no in-coming edges. 2 A vertex u is a sink if it has no out-going edges. Sariel Har-Peled (UIUC) CS374 29 Fall 2017 29 / 60

Simple DAG Properties Proposition Every DAG G has at least one source and at least one sink. Proof. Let P = v 1, v 2,..., v k be a longest path in G. Claim that v 1 is a source and v k is a sink. Suppose not. Then v 1 has an incoming edge which either creates a cycle or a longer path both of which are contradictions. Similarly if v k has an outgoing edge. 1 G is a DAG if and only if G rev is a DAG. 2 G is a DAG if and only each node is in its own strong connected component. Formal proofs: exercise. Sariel Har-Peled (UIUC) CS374 30 Fall 2017 30 / 60

Simple DAG Properties Proposition Every DAG G has at least one source and at least one sink. Proof. Let P = v 1, v 2,..., v k be a longest path in G. Claim that v 1 is a source and v k is a sink. Suppose not. Then v 1 has an incoming edge which either creates a cycle or a longer path both of which are contradictions. Similarly if v k has an outgoing edge. 1 G is a DAG if and only if G rev is a DAG. 2 G is a DAG if and only each node is in its own strong connected component. Formal proofs: exercise. Sariel Har-Peled (UIUC) CS374 30 Fall 2017 30 / 60

Simple DAG Properties Proposition Every DAG G has at least one source and at least one sink. Proof. Let P = v 1, v 2,..., v k be a longest path in G. Claim that v 1 is a source and v k is a sink. Suppose not. Then v 1 has an incoming edge which either creates a cycle or a longer path both of which are contradictions. Similarly if v k has an outgoing edge. 1 G is a DAG if and only if G rev is a DAG. 2 G is a DAG if and only each node is in its own strong connected component. Formal proofs: exercise. Sariel Har-Peled (UIUC) CS374 30 Fall 2017 30 / 60

Topological Ordering/Sorting 2 3 1 2 3 4 1 4 Topological Ordering of G Graph G Definition A topological ordering/topological sorting of G = (V, E) is an ordering on V such that if (u, v) E then u v. Informal equivalent definition: One can order the vertices of the graph along a line (say the x-axis) such that all edges are from left to right. Sariel Har-Peled (UIUC) CS374 31 Fall 2017 31 / 60

DAGs and Topological Sort Lemma A directed graph G can be topologically ordered iff it is a DAG. Need to show both directions. Sariel Har-Peled (UIUC) CS374 32 Fall 2017 32 / 60

DAGs and Topological Sort Lemma A directed graph G can be topologically ordered if it is a DAG. Proof. Consider the following algorithm: 1 Pick a source u, output it. 2 Remove u and all edges out of u. 3 Repeat until graph is empty. Exercise: prove this gives topological sort. Exercise: show algorithm can be implemented in O(m + n) time. Sariel Har-Peled (UIUC) CS374 33 Fall 2017 33 / 60

Topological Sort: Example a b c d e f g h Sariel Har-Peled (UIUC) CS374 34 Fall 2017 34 / 60

DAGs and Topological Sort Lemma A directed graph G can be topologically ordered only if it is a DAG. Proof. Suppose G is not a DAG and has a topological ordering. G has a cycle C = u 1, u 2,..., u k, u 1. Then u 1 u 2... u k u 1! That is... u 1 u 1. A contradiction (to being an order). Not possible to topologically order the vertices. Sariel Har-Peled (UIUC) CS374 35 Fall 2017 35 / 60

DAGs and Topological Sort Note: A DAG G may have many different topological sorts. Question: What is a DAG with the most number of distinct topological sorts for a given number n of vertices? Question: What is a DAG with the least number of distinct topological sorts for a given number n of vertices? Sariel Har-Peled (UIUC) CS374 36 Fall 2017 36 / 60

Cycles in graphs Question: Given an undirected graph how do we check whether it has a cycle and output one if it has one? Question: Given an directed graph how do we check whether it has a cycle and output one if it has one? Sariel Har-Peled (UIUC) CS374 37 Fall 2017 37 / 60

To Remember: Structure of Graphs Undirected graph: connected components of G = (V, E) partition V and can be computed in O(m + n) time. Directed graph: the meta-graph G SCC of G can be computed in O(m + n) time. G SCC gives information on the partition of V into strong connected components and how they form a DAG structure. Above structural decomposition will be useful in several algorithms Sariel Har-Peled (UIUC) CS374 38 Fall 2017 38 / 60

Part IV Linear time algorithm for finding all strong connected components of a directed graph Sariel Har-Peled (UIUC) CS374 39 Fall 2017 39 / 60

Finding all SCCs of a Directed Graph Problem Given a directed graph G = (V, E), output all its strong connected components. Straightforward algorithm: Mark all vertices in V as not visited. for each vertex u V not visited yet do find SCC(G, u) the strong component of u: Compute rch(g, u) using DFS(G, u) Compute rch(g rev, u) using DFS(G rev, u) SCC(G, u) rch(g, u) rch(g rev, u) u SCC(G, u): Mark u as visited. Running time: O(n(n + m)) Is there an O(n + m) time algorithm? Sariel Har-Peled (UIUC) CS374 40 Fall 2017 40 / 60

Finding all SCCs of a Directed Graph Problem Given a directed graph G = (V, E), output all its strong connected components. Straightforward algorithm: Mark all vertices in V as not visited. for each vertex u V not visited yet do find SCC(G, u) the strong component of u: Compute rch(g, u) using DFS(G, u) Compute rch(g rev, u) using DFS(G rev, u) SCC(G, u) rch(g, u) rch(g rev, u) u SCC(G, u): Mark u as visited. Running time: O(n(n + m)) Is there an O(n + m) time algorithm? Sariel Har-Peled (UIUC) CS374 40 Fall 2017 40 / 60

Finding all SCCs of a Directed Graph Problem Given a directed graph G = (V, E), output all its strong connected components. Straightforward algorithm: Mark all vertices in V as not visited. for each vertex u V not visited yet do find SCC(G, u) the strong component of u: Compute rch(g, u) using DFS(G, u) Compute rch(g rev, u) using DFS(G rev, u) SCC(G, u) rch(g, u) rch(g rev, u) u SCC(G, u): Mark u as visited. Running time: O(n(n + m)) Is there an O(n + m) time algorithm? Sariel Har-Peled (UIUC) CS374 40 Fall 2017 40 / 60

Structure of a Directed Graph B A C B, E, F A, C, D E F D Reminder G Graph G H G H Graph of SCCs G SCC G SCC is created by collapsing every strong connected component to a single vertex. Proposition For a directed graph G, its meta-graph G SCC is a DAG. Sariel Har-Peled (UIUC) CS374 41 Fall 2017 41 / 60

Linear-time Algorithm for SCCs: Ideas Exploit structure of meta-graph... Wishful Thinking Algorithm 1 Let u be a vertex in a sink SCC of G SCC 2 Do DFS(u) to compute SCC(u) 3 Remove SCC(u) and repeat Justification 1 DFS(u) only visits vertices (and edges) in SCC(u) 2 3 4 Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

Linear-time Algorithm for SCCs: Ideas Exploit structure of meta-graph... Wishful Thinking Algorithm 1 Let u be a vertex in a sink SCC of G SCC 2 Do DFS(u) to compute SCC(u) 3 Remove SCC(u) and repeat Justification 1 DFS(u) only visits vertices (and edges) in SCC(u) 2 3 4 Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

Linear-time Algorithm for SCCs: Ideas Exploit structure of meta-graph... Wishful Thinking Algorithm 1 Let u be a vertex in a sink SCC of G SCC 2 Do DFS(u) to compute SCC(u) 3 Remove SCC(u) and repeat Justification 1 DFS(u) only visits vertices (and edges) in SCC(u) 2... since there are no edges coming out a sink! 3 4 Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

Linear-time Algorithm for SCCs: Ideas Exploit structure of meta-graph... Wishful Thinking Algorithm 1 Let u be a vertex in a sink SCC of G SCC 2 Do DFS(u) to compute SCC(u) 3 Remove SCC(u) and repeat Justification 1 DFS(u) only visits vertices (and edges) in SCC(u) 2... since there are no edges coming out a sink! 3 DFS(u) takes time proportional to size of SCC(u) 4 Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

Linear-time Algorithm for SCCs: Ideas Exploit structure of meta-graph... Wishful Thinking Algorithm 1 Let u be a vertex in a sink SCC of G SCC 2 Do DFS(u) to compute SCC(u) 3 Remove SCC(u) and repeat Justification 1 DFS(u) only visits vertices (and edges) in SCC(u) 2... since there are no edges coming out a sink! 3 DFS(u) takes time proportional to size of SCC(u) 4 Therefore, total time O(n + m)! Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

Big Challenge(s) How do we find a vertex in a sink SCC of G SCC? Can we obtain an implicit topological sort of G SCC without computing G SCC? Answer: DFS(G) gives some information! Sariel Har-Peled (UIUC) CS374 43 Fall 2017 43 / 60

Big Challenge(s) How do we find a vertex in a sink SCC of G SCC? Can we obtain an implicit topological sort of G SCC without computing G SCC? Answer: DFS(G) gives some information! Sariel Har-Peled (UIUC) CS374 43 Fall 2017 43 / 60

Big Challenge(s) How do we find a vertex in a sink SCC of G SCC? Can we obtain an implicit topological sort of G SCC without computing G SCC? Answer: DFS(G) gives some information! Sariel Har-Peled (UIUC) CS374 43 Fall 2017 43 / 60

Linear Time Algorithm...for computing the strong connected components in G do DFS(G rev ) and output vertices in decreasing post order. Mark all nodes as unvisited for each u in the computed order do if u is not visited then DFS(u) Let S u be the nodes reached by u Output S u as a strong connected component Remove S u from G Theorem Algorithm runs in time O(m + n) and correctly outputs all the SCCs of G. Sariel Har-Peled (UIUC) CS374 44 Fall 2017 44 / 60

Linear Time Algorithm: An Example - Initial steps Graph G: Reverse graph G rev : B A C B A C E F D = E F D G H G H DFS of reverse graph: B A C Pre/Post DFS numbering of reverse graph: [1, 6] [7, 12] B A C [3, 4] = E F D = [9, 10] E F [8, 11] D [2, 5] G H [13, 16] G H [14, 15] Sariel Har-Peled (UIUC) CS374 45 Fall 2017 45 / 60

Linear Time Algorithm: An Example Removing connected components: 1 Original graph G with rev post numbers: Do DFS from vertex G remove it. 12 6 B A C 4 10 12 B E 6 A F 11 C 4 D 5 = 10 E F 11 D H 5 15 G 16 H 15 SCC computed: {G} Sariel Har-Peled (UIUC) CS374 46 Fall 2017 46 / 60

Linear Time Algorithm: An Example Removing connected components: 2 Do DFS from vertex G remove it. 12 6 B A C 4 Do DFS from vertex H, remove it. 12 6 B A C 4 10 E F 11 D H 5 15 = 11 10 E F D 5 SCC computed: {G} SCC computed: {G}, {H} Sariel Har-Peled (UIUC) CS374 47 Fall 2017 47 / 60

Linear Time Algorithm: An Example Removing connected components: 3 Do DFS from vertex H, remove it. 12 6 B A C 4 Do DFS from vertex B Remove visited vertices: {F, B, E}. 6 A C 4 11 10 E F D 5 = D 5 SCC computed: {G}, {H} SCC computed: {G}, {H}, {F, B, E} Sariel Har-Peled (UIUC) CS374 48 Fall 2017 48 / 60

Linear Time Algorithm: An Example Removing connected components: 4 Do DFS from vertex F Remove visited vertices: {F, B, E}. 6 A C 4 Do DFS from vertex A Remove visited vertices: {A, C, D}. D 5 = SCC computed: {G}, {H}, {F, B, E} SCC computed: {G}, {H}, {F, B, E}, {A, C, D} Sariel Har-Peled (UIUC) CS374 49 Fall 2017 49 / 60

Linear Time Algorithm: An Example Final result B A C E F D G H SCC computed: {G}, {H}, {F, B, E}, {A, C, D} Which is the correct answer! Sariel Har-Peled (UIUC) CS374 50 Fall 2017 50 / 60

Obtaining the meta-graph... Once the strong connected components are computed. Exercise: Given all the strong connected components of a directed graph G = (V, E) show that the meta-graph G SCC can be obtained in O(m + n) time. Sariel Har-Peled (UIUC) CS374 51 Fall 2017 51 / 60

Solving Problems on Directed Graphs A template for a class of problems on directed graphs: Is the problem solvable when G is strongly connected? Is the problem solvable when G is a DAG? If the above two are feasible then is the problem solvable in a general directed graph G by considering the meta graph G SCC? Sariel Har-Peled (UIUC) CS374 52 Fall 2017 52 / 60

Part V An Application to make Sariel Har-Peled (UIUC) CS374 53 Fall 2017 53 / 60

Make/Makefile (A) I know what make/makefile is. (B) I do NOT know what make/makefile is. Sariel Har-Peled (UIUC) CS374 54 Fall 2017 54 / 60

make Utility [Feldman] 1 Unix utility for automatically building large software applications 2 A makefile specifies 1 Object files to be created, 2 Source/object files to be used in creation, and 3 How to create them Sariel Har-Peled (UIUC) CS374 55 Fall 2017 55 / 60

An Example makefile project: main.o utils.o command.o cc -o project main.o utils.o command.o main.o: main.c defs.h cc -c main.c utils.o: utils.c defs.h command.h cc -c utils.c command.o: command.c defs.h command.h cc -c command.c Sariel Har-Peled (UIUC) CS374 56 Fall 2017 56 / 60

makefile as a Digraph main.c utils.c main.o defs.h utils.o project command.h command.c command.o Sariel Har-Peled (UIUC) CS374 57 Fall 2017 57 / 60

Computational Problems for make 1 Is the makefile reasonable? 2 If it is reasonable, in what order should the object files be created? 3 If it is not reasonable, provide helpful debugging information. 4 If some file is modified, find the fewest compilations needed to make application consistent. Sariel Har-Peled (UIUC) CS374 58 Fall 2017 58 / 60

Algorithms for make 1 Is the makefile reasonable? Is G a DAG? 2 If it is reasonable, in what order should the object files be created? Find a topological sort of a DAG. 3 If it is not reasonable, provide helpful debugging information. Output a cycle. More generally, output all strong connected components. 4 If some file is modified, find the fewest compilations needed to make application consistent. 1 Find all vertices reachable (using DFS/BFS) from modified files in directed graph, and recompile them in proper order. Verify that one can find the files to recompile and the ordering in linear time. Sariel Har-Peled (UIUC) CS374 59 Fall 2017 59 / 60

Take away Points 1 Given a directed graph G, its SCCs and the associated acyclic meta-graph G SCC give a structural decomposition of G that should be kept in mind. 2 There is a DFS based linear time algorithm to compute all the SCCs and the meta-graph. Properties of DFS crucial for the algorithm. 3 DAGs arise in many application and topological sort is a key property in algorithm design. Linear time algorithms to compute a topological sort (there can be many possible orderings so not unique). Sariel Har-Peled (UIUC) CS374 60 Fall 2017 60 / 60