# Lecture 16: DFS, DAG, and Strongly Connected Components Shang-Hua Teng.

## Presentation on theme: "Lecture 16: DFS, DAG, and Strongly Connected Components Shang-Hua Teng."— Presentation transcript:

Lecture 16: DFS, DAG, and Strongly Connected Components Shang-Hua Teng

Directed Acyclic Graphs A directed acyclic graph or DAG is a directed graph with no directed cycles:

DFS and DAGs Theorem: a directed graph G is acyclic iff a DFS of G yields no back edges: –=> if G is acyclic, will be no back edges Trivial: a back edge implies a cycle –<= if no back edges, G is acyclic Proof by contradiction: G has a cycle   a back edge –Let v be the vertex on the cycle first discovered, and u be the predecessor of v on the cycle –When v discovered, whole cycle is white –Must visit everything reachable from v before returning from DFS-Visit() –So path from u  v is gray  gray, thus (u, v) is a back edge

Topological Sort Topological sort of a DAG: –Linear ordering of all vertices in graph G such that vertex u comes before vertex v if edge (u, v)  G Real-world application: Scheduling a dependent graph, find a feasible course plan for university studies

A Topological Sort Algorithm Topological-Sort() { 1.Call DFS to compute finish time f[v] for each vertex 2.As each vertex is finished, insert it onto the front of a linked list 3.Return the linked list of vertices } Time: O(V+E) Correctness: need to prove that (u,v)  G  f[u]>f[v]

Correctness of Topological Sort Lemma: (u,v)  G  f[u] > f[v] –When (u,v) is explored, u is gray, consider the following cases: 1.v is gray  (u,v) is back edge. Can’t happen, if G is a DAG. 2.v if white  v becomes descendent of u  f[v] < f[u] (since must finish v before backtracking and finishing u) 3.v is black  v already finished  f[v] < f[u]

Our Algorithm for Topological Sorting is correct

Strongly Connected Directed graphs Every pair of vertices are reachable from each other a b d c e f g

Strongly-Connected Graph G is strongly connected if, for every u and v in V, there is some path from u to v and some path from v to u. Strongly Connected Not Strongly Connected

Strongly-Connected Components A strongly connected component of a graph is a maximal subset of nodes (along with their associated edges) that is strongly connected. Nodes share a strongly connected component if they are inter-reachable.

Strongly Connected Components a b d c e f g { a, c, g } { f, d, e, b }

Reduced Component Graph of Strongly Connected Components a b d c e f g { a, c, g } { f, d, e, b } Component graph G SCC =(V SCC, E SCC ): one vertex for each component –(u, v)  E SCC if there exists at least one directed edge from the corresponding components

Strongly Connected Components

Graph of Strongly Connected Components Theorem: the Component graph G SCC =(V SCC, E SCC ) is a DAG –Each component is maximal in the sense that no other vertices can be added to it. If G SCC =(V SCC, E SCC ) is not a DAG, then one can merge components on along a circle of G SCC Therefore, G SCC has a topological ordering

Finding Strongly-Connected Components Input: A directed graph G = (V,E) Output: a partition of V into disjoint sets so that each set defines a strongly connected component of G How should we compute the partition?

Graph of Strongly Connected Components Recall: Theorem: the Component graph G SCC =(V SCC, E SCC ) is a DAG –Each component is maximal in the sense that no other vertices can be added to it. If G SCC =(V SCC, E SCC ) is not a DAG, then one can merge components on along a circle of G SCC Therefore, G SCC has a topological ordering

DFS on G Topological Sort G SCC =(V SCC, E SCC ) Let U be a subset of V If we output U in V SCC in the decreasing order of f[U], then we topologically sort G SCC Lemma: Let U and U’ be distinct strongly connected component, suppose there is an edge (u,v) in E where u in U and v in U’. Then f[U] > f[U’]

Proof of the Lemma Lemma: Let U and U’ be distinct strongly connected component, suppose there is an edge (u,v) in E where u in U and v in U’. Then f[U] > f[U’] Proof: Two cases 1.d[U] < d[U’], say x in U is the first vertex 2.d[U’] < d[U], say y is the first, but U is not reachable from y

Transpose of a Digraph Transpose of G = (V,E): G T =(V, E T ), where E T ={(u, v): (v, u)  E} If G is a DAG then G T is also a DAG If we print the topological order of G in the reverse order, then it is a topological order of G T

Strongly-Connected Components Strongly-Connected-Components(G) 1.call DFS(G) to compute finishing times f[u] for each vertex u. 2.compute G T 3.call DFS(G T ), but in the main loop of DFS, consider the vertices in order of decreasing f[u] 4.output the vertices of each tree in the depth-first forest of step 3 as a separate strongly connected component. The graph G T is the transpose of G, which is visualized by reversing the arrows on the digraph.

Strong Components: example a dc ba dc b after step 1 a4a4 b3b3 c2c2 d1d1 a4a4 d1d1c2c2 b3b3 Graph G r a4a4 c2c2 b3b3 d1d1 df spanning forest for G r

Runtime Lines 1 and 3 are  (E+V) due to DFS Line 2 involves creating an adjacency list or matrix, and it is also O(E+V) Line 4 is constant time So, SCC(G) is  (E+V)

Strongly-Connected Components DFS on G, starting at c. node a d=13 f=14 node b d=11 f=16 node c d=1 f=10 node d d=8 f=9 node e d=12 f=15 node f d=3 f=4 node g d=2 f=7 node h d=5 f=6

DFS on G T node a d=13 f=14 node b d=11 f=16 node c d=1 f=10 node d d=8 f=9 node e d=12 f=15 node f d=3 f=4 node g d=2 f=7 node h d=5 f=6 node a d=2 f=5  =b node b d=1 f=6  =NIL node c d=7 f=10  =NIL node d d=8 f=9  =c node e d=3 f=4  =a node f d=12 f=13  =g node g d=11 f=14  =NIL node h d=15 f=16  =NIL

DFS on G T This is G T, labeled after running DFS(G T ). In order of decreasing finishing time, process the nodes in this order: b e a c d g h f. G T : node a d=2 f=5  =b node b d=1 f=6  =NIL node c d=7 f=10  =NIL node d d=8 f=9  =c node e d=3 f=4  =a node f d=12 f=13  =g node g d=11 f=14  =NIL node h d=15 f=16  =NIL

Strongly-Connected Components These are the 4 trees that result, yielding the strongly connected components. Finally, merge the nodes of any given tree into a super-node, and draw links between them, showing the resultant acyclic component graph. a bc d e f gh abcd efgh abecd fg h Component Graph

Download ppt "Lecture 16: DFS, DAG, and Strongly Connected Components Shang-Hua Teng."

Similar presentations