Directed Graphs BOS ORD JFK SFO LAX DFW MIA Directed Graphs 1
Outline and Reading Reachability Directed DFS Strong connectivity Transitive closure The Floyd-Warshall Algorithm Directed Acyclic Graphs (DAG s) Topological Sorting Directed Graphs 2
Digraphs A digraph is a graph whose edges are all directed Short for directed graph Applications one-way streets flights task scheduling A C E D B Directed Graphs 3
E Digraph Properties D A graph G=(V,E) such that Each edge goes in one direction: Edge (a,b) goes from a to b, but not b to a. If G is simple, m < n*(n-1). If we keep in-edges and out-edges in separate adjacency lists, we can perform listing of inedges and out-edges in time proportional to their size. C A B Directed Graphs 4
Digraph Application Scheduling: edge (a,b) means task a must be completed before b can be started ics21 ics22 ics23 ics51 ics53 ics52 ics161 ics131 ics141 ics121 ics171 ics151 The good life Directed Graphs 5
Directed DFS We can specialize the traversal algorithms (DFS and BFS) to digraphs by traversing edges only along their direction In the directed DFS algorithm, we have four types of edges discovery edges back edges forward edges cross edges A directed DFS starting a a vertex s determines the vertices reachable from s C E A D B Directed Graphs 6
Reachability DFS tree rooted at v: vertices reachable from v via directed paths E D E D C A C B F A E C D F A Directed Graphs 7 B
Strong Connectivity Each vertex can reach all other vertices a c g d e f b Directed Graphs 8
Strong Connectivity Algorithm Pick a vertex v in G. Perform a DFS from v in G. If there s a w not visited, print no. G: a c g Let G be G with edges reversed. d e Perform a DFS from v in G. If there s a w not visited, print no. f b Else, print yes. G : a c g Running time: O(n+m). d e f b Directed Graphs 9
Strongly Connected Components Maximal subgraphs such that each vertex can reach all other vertices in the subgraph Can also be done in O(n+m) time using DFS, but is more complicated (similar to biconnectivity). a c g { a, c, g } f d e b { f, d, e, b } Directed Graphs 10
Transitive Closure Given a digraph G, the transitive closure of G is the digraph G* such that G* has the same vertices as G if G has a directed path from u to v (u v), G* has a directed edge from u to v The transitive closure provides reachability information about a digraph B A B A D C D C E G E G* Directed Graphs 11
Computing the Transitive Closure We can perform DFS starting at each vertex O(n(n+m)) Actually O(n 3 ) for dense graphs Complex If there's a way to get from A to B and from B to C, then there's a way to get from A to C. Alternatively... Use dynamic programming: The Floyd-Warshall Algorithm O(n 3 ) Simple Directed Graphs 12
Floyd-Warshall Transitive Closure Idea #1: Number the vertices 1, 2,, n. Idea #2: Consider paths that use only vertices numbered 1, 2,, k, as intermediate vertices: i Uses only vertices numbered 1,,k (add this edge if it s not already in) Uses only vertices numbered 1,,k-1 k j Uses only vertices numbered 1,,k-1 Directed Graphs 13
Floyd-Warshall s Algorithm Floyd-Warshall s algorithm numbers the vertices of G as v 1,, v n and computes a series of digraphs G 0,, G n G 0 =G G k has a directed edge (v i, v j ) if G has a directed path from v i to v j with intermediate vertices in the set {v 1,, v k } We have that G n = G* In phase k, digraph G k is computed from G k - 1 Running time: O(n 3 ), assuming areadjacent is O(1) (e.g., adjacency matrix) Algorithm FloydWarshall(G) Input digraph G Output transitive closure G* of G i 1 for all v G.vertices() denote v as v i i i + 1 G 0 G for k 1 to n do G k G k - 1 for i 1 to n (i k) do for j 1 to n (j i, k) do if G k - 1.areAdjacent(v i, v k ) G k - 1.areAdjacent(v k, v j ) if G k.areadjacent(v i, v j ) G k.insertdirectededge(v i, v j, k) return G n Directed Graphs 14
Floyd-Warshall Example BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 15
Floyd-Warshall, Iteration 1 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 16
Floyd-Warshall, Iteration 1 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 17
Floyd-Warshall, Iteration 2 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 18
Floyd-Warshall, Iteration 3 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 19
Floyd-Warshall, Iteration 3 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 20
Floyd-Warshall, Iteration 4 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 21
Floyd-Warshall, Iteration 4 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 22
Floyd-Warshall, Iteration 5 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 23
Floyd-Warshall, Iteration 5 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 24
Floyd-Warshall, Iteration 6 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 25
Floyd-Warshall, Iteration 7 BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 26
Floyd-Warshall, Conclusion BOS v 7 ORD v 4 v 2 SFO JFK v 6 LAX v 1 v 3 DFW MIA v 5 Directed Graphs 27
DAGs and Topological Ordering A directed acyclic graph (DAG) is a digraph that has no directed cycles A topological ordering of a digraph is a numbering v 1,, v n of the vertices such that for every edge (v i, v j ), we have i < j Example: in a task scheduling digraph, a topological ordering of a task sequence satisfies the precedence constraints Theorem A digraph admits a topological ordering if and only if it is a DAG v 2 v 1 B A B A Directed Graphs 28 D C E DAG G v 4 v 5 D E C v3 Topological ordering of G
Topological Sorting Number vertices, so that (u,v) in E implies u < v wake up 2 3 eat study computer sci. 7 play 9 1 make cookies for professors nap 8 write c.s. program 10 sleep A typical student day 4 5 more c.s. 6 work out dream about graphs Directed Graphs 29 11
Algorithm for Topological Sorting Note: This algorithm is different (more compact) than the one in Goodrich-Tamassia (yet of the same big-oh) Method TopologicalSort(G) H G // Temporary copy of G n G.numVertices() while H is not empty do Let v be a vertex with no outgoing edges Label v n n n - 1 Remove v from H Running time: O(n + m). Why? Directed Graphs 30
Topological Sorting Algorithm using DFS Simulate the algorithm by using depth-first search Algorithm topologicaldfs(g) Input dag G Output topological ordering of G n G.numVertices() for all u G.vertices() setlabel(u, UNEXPLORED) for all e G.edges() setlabel(e, UNEXPLORED) for all v G.vertices() if getlabel(v) = UNEXPLORED topologicaldfs(g, v) O(n+m) time. Algorithm topologicaldfs(g, v) Input graph G and a start vertex v of G Output labeling of the vertices of G in the connected component of v setlabel(v, VISITED) for all e G.outgoingEdges(v) if getlabel(e) = UNEXPLORED w opposite(v,e) if getlabel(w) = UNEXPLORED setlabel(e, DISCOVERY) topologicaldfs(g, w) else {e is a forward or cross edge} Label v with topological number n n n - 1 Directed Graphs 31
Topological Sorting Example Directed Graphs 32
Topological Sorting Example 9 Directed Graphs 33
Topological Sorting Example 8 9 Directed Graphs 34
Topological Sorting Example 8 7 9 Directed Graphs 35
Topological Sorting Example 6 8 7 9 Directed Graphs 36
Topological Sorting Example 6 5 8 7 9 Directed Graphs 37
Topological Sorting Example 6 4 5 8 7 9 Directed Graphs 38
Topological Sorting Example 3 6 4 5 8 7 9 Directed Graphs 39
Topological Sorting Example 2 3 6 4 5 8 7 9 Directed Graphs 40
Topological Sorting Example 2 1 3 6 4 5 8 7 9 Directed Graphs 41