Presentation is loading. Please wait.

Presentation is loading. Please wait.

Data Structures & Algorithms Digraphs and DAGs

Similar presentations


Presentation on theme: "Data Structures & Algorithms Digraphs and DAGs"— Presentation transcript:

1 Data Structures & Algorithms Digraphs and DAGs
Richard Newman based on book by R. Sedgewick and slides by S. Sahni 1 1 1 1

2 Digraphs Edges are directed
Number of possible undirected graphs is huge 2V(V+1)/2 Number of possible directed graphs is … huger(?) 2V^2 2 2 2 2

3 Digraphs Graph enumeration V Undir Graphs Digraphs 2 8 16 3 64 512 4
1,024 65,536 5 32,768 33,554,432 6 2,097,152 68,719,476,736 7 268,435,456 562,949,953,421,312 wow Wow wow wow 3 3 3 3

4 Digraphs Defn. 19.1: A digraph is a set of nodes V and a set of distinct directed edges E, each from one node to another node in V. (self-loop allowed) Defn. 19.2: A directed path in a digraph is a list of nodes for which there is an edge from each node to its successor. A node t is reachable from node s iff there is a d.p. from s to t. 4 4 4 4

5 Digraphs Defn. 19.3: A directed acyclic graph (DAG) is a digraph with no directed cycles (tours). A node with only out- edges is a source; a node with only in-edges is a sink. Defn. 19.4: A digraph is strongly connected iff every node is reachable from every node. 5 5 5 5

6 DAGs DAGs can be used to model many real-life problems Scheduling
Precedence Pre-requisite structures Causality Etc. 6 6 6 6

7 Digraphs Prop. 19.1: A digraph that is not strongly connected comprises a set of strongly connected components, which are maximal strongly connected subgraphs, and a set of directed edges that go from one component to another. 7 7 7 7

8 DAGs Connected components 0-7-4-5-3 2 2-6 1 2 2 1 1 7 7 5 5 6 6 4 4 3
2 2-6 1 2 2 1 1 7 7 5 5 6 6 4 4 3 3 8 8 8 8

9 Digraphs Prop. 19.2: Given a digraph D, define another digraph K(D) with one node corresponding to each strongly connected component of D, and an edge from u to v iff there is one or more edge from the component corresponding to u to the component corresponding to v. K(D) is a DAG called the kernel DAG of D. 9 9 9 9

10 DAGs DAG Components 0: 0-7-4-5-3 1: 2-6 2: 1 Kernel DAG Component 0
1 1 7 7 5 5 6 6 4 4 3 3 1 2 10 10 10 10

11 Digraphs In undirected graph, we just say two nodes are connected if there is a path between them In a digraph, node t is reachable from node s if there is a directed path from s to t. In a digraph, s and t are strongly connected if they are mutually reachable. 11 11 11 11

12 Digraphs Classify edges in DFS Tree – recursive calls
Back – to ancestor (including parent!) Down – to visited descendent Cross – neither ancestor nor descendent (cousins) 12 12 12 12

13 DFS in Digraphs Stack: 572 576 57(2) 541 54 55(6 cross) 53(0 back) 5(4 back) (5 down) down 2 7 2 2 6 4 back 1 1 1 7 7 5 5 cross 5 6 6 4 4 3 3 3 1 2 3 4 5 6 7 pre 4 1 7 5 6 2 3 post 7 2 1 3 5 4 6 13 13 13 13

14 DFS Algorithms Cycle Detection
If we find a back edge, it represents a cycle – including link to parent! Cross edges don’t make cycles! Reachability Start from one, DFS until find other (or complete DFS) Weak connectivity If DFS finds all the nodes, then yes! 14 14 14 14

15 DFS Algorithms Convert digraph to DAG Remove back edges!
Use to generate large DAGs from large digraphs Note that DFS in a digraph only gives reachability from the start node, not from all nodes 15 15 15 15

16 Transitive Closure Defn. 19.5: The transitive closure of a digraph D is a digraph T with the same vertices but with an edge from s to t in T iff t is reachable from s in D. 2 2 2 1 7 5 1 1 7 7 5 5 6 4 3 6 6 4 4 3 3 16 16 16 16

17 Transitive Closure Can also view (and compute) transitive closure by Boolean matrix multiplication Use logical AND as x Use logical OR as + Ai represents (any) path of length i A A 1 2 3 4 5 6 7 17 17 17 17

18 Transitive Closure Can also view (and compute) transitive closure by Boolean matrix multiplication Use logical AND as x Use logical OR as + Ai represents (any) path of length i A<3 A 1 2 3 4 5 6 7 18 18 18 18

19 Transitive Closure Can also view (and compute) transitive closure by Boolean matrix multiplication Use logical AND as x Use logical OR as + Ai represents (any) path of length i A<4 A 1 2 3 4 5 6 7 19 19 19 19

20 Transitive Closure Can also view (and compute) transitive closure by Boolean matrix multiplication Use logical AND as x Use logical OR as + Ai represents (any) path of length i A<5 A 1 2 3 4 5 6 7 20 20 20 20

21 Transitive Closure Can also view (and compute) transitive closure by Boolean matrix multiplication Use logical AND as x Use logical OR as + Ai represents (any) path of length i A<6 Keep on multiplying and adding until… … reach fixed point Matrix does not change 21 21 21 21

22 Transitive Closure Prop. 19.5: We can compute the transitive closure of a digraph by adding self-loops, then computing AV, taking time V4. Self-loops allow path to be of any length up to exponent Must reach fixed point by V – why? Efficient approach: A, A2, A4, A8, … successive squaring Takes lg V matrix multiplies, each V3 Total time is V3 lg V 22 22 22 22

23 Transitive Closure Even faster way! Warshall’s algorithm:
for (i = 0; i < V; ++i) for (s = 0; s < V; ++s) for (t = 0; t < V; ++t) if (A[s][i] && A[i][t]) A[s][t] = 1; 23 23 23 23

24 Transitive Closure Correctness by induction on i:
Base: After first iteration, s-t or s-0-t After second iteration, s-t, s-0-t, s-1-t, s-0-1-t, s-1-0-t. IH: After ith iteration – all paths w/o inner nodes > i Inductive step: path from s to t w/o i+1 (already there) or path via i+1 (tested by if statement) for (every intermediate node i) for (every source s) for (every destination t) if (s reaches i & i reaches t) s reaches t; 24 24 24 24

25 Transitive Closure Prop. 19.7: Warshall’s algorithm computes the transitive closure of a digraph in time V3. Obvious from structure of Warshall’s algorithm – three nested loops of V each: for (i = 0; i < V; ++i) for (s = 0; s < V; ++s) for (t = 0; t < V; ++t) if (A[s][i] && A[i][t]) A[s][t] = 1; 25 25 25 25

26 Transitive Closure Prop. 19.8: We can support constant-time reachability testing for a digraph with V nodes using space O(V2) and preprocessing time O(V3). Can improve Warshall’s algorithm: for (i = 0; i < V; ++i) for (s = 0; s < V; ++s) for (t = 0; t < V; ++t) if (A[s][i] && A[i][t]) A[s][t] = 1; 26 26 26 26

27 Transitive Closure We can improve Warshall’s algorithm by moving the test of A[s][i] out of the inner loop, avoiding innermost loop when s cannot reach i. for (i = 0; i < V; ++i) for (s = 0; s < V; ++s) if (A[s][i]) for (t = 0; t < V; ++t) if (A[i][t]) A[s][t] = 1; 27 27 27 27

28 Shortest Path We can modify Warshall’s algorithm to compute shortest path, if A[][] contains the length of the minimum path from s to t (initialized with 1 for an edge and sentinel value V for no edge). for (i = 0; i < V; ++i) for (s = 0; s < V; ++s) for (t = 0; t < V; ++t) if (A[s][i] + A[i][t] < A[s][t]) A[s][t] = A[s][i] + A[i][t]; 28 28 28 28

29 Reduction Prop. 19.9: We can use any transitive- closure algorithm to compute the product of two Boolean matrices with at most a constant factor difference in running time. Prf: Construct a 3v x 3v matrix using A, B, and VxV identity matrix I. TC is square. 2 I A I A AB 0 I B = 0 I B 0 0 I I 29 29 29 29

30 Reduction What this means is that if we can perform transitive closure faster, then we can compute Boolean matrix products faster. Likewise, a faster Boolean matrix multiply algorithm will speed up our TC algorithm. Note that we can compute TC faster for sparse graphs – time O(V(E+V)) 30 30 30 30

31 Recap Digraphs Strong connectivity Connected components Reachability
Digraph kernel Transitive closure Shortest paths (special case) Reduction (from Boolean matrix multiply) 31 31 31 31


Download ppt "Data Structures & Algorithms Digraphs and DAGs"

Similar presentations


Ads by Google