Directed Graph Algorithms

Directed Graph Algorithms

Directed Graph Algorithms CSE 373 Data Structures Readings • Reading Chapter 13 › Sections 13.3 and 13.4 Digraphs 2 Topological Sort 142 322 143 321 Problem: Find an order in which all these courses can 326 be taken. 370 341 Example: 142 Æ 143 Æ 378 Æ 370 Æ 321 Æ 341 Æ 322 Æ 326 Æ 421 Æ 401 378 421 In order to take a course, you must 401 take all of its prerequisites first Digraphs 3 Topological Sort Given a digraph G = (V, E), find a linear ordering of its vertices such that: for any edge (v, w) in E, v precedes w in the ordering B C A F D E Digraphs 4 Topo sort – valid solution B C Any linear ordering in which A all the arrows go to the right F is a valid solution D E A B F C D E Note that F can go anywhere in this list because it is not connected. Also the solution is not unique. Digraphs 5 Topo sort – invalid solution B C A Any linear ordering in which an arrow goes to the left F is not a valid solution D E A B F C E D NO! Digraphs 6 Paths and Cycles • Given a digraph G = (V,E), a path is a sequence of vertices v1,v2, …,vk such that: ›(vi,vi+1) in E for 1 < i < k › path length = number of edges in the path › path cost = sum of costs of each edge • A path is a cycle if : › k > 1; v1 = vk •G is acyclic if it has no cycles. Digraphs 7 Only acyclic graphs can be topo. sorted • A directed graph with a cycle cannot be topologically sorted. B C A F D E Digraphs 8 Topo sort algorithm - 1 Step 1: Identify vertices that have no incoming edges • The “in-degree” of these vertices is zero B C A F D E Digraphs 9 Topo sort algorithm - 1a Step 1: Identify vertices that have no incoming edges • If no such vertices, graph has only cycle(s) (cyclic graph) • Topological sort not possible – Halt. B C A Example of a cyclic graph D Digraphs 10 Topo sort algorithm - 1b Step 1: Identify vertices that have no incoming edges • Select one such vertex Select B C A F D E Digraphs 11 Topo sort algorithm - 2 Step 2: Delete this vertex of in-degree 0 and all its outgoing edges from the graph. Place it in the output. B C A F A D E Digraphs 12 Continue until done Repeat Step 1 and Step 2 until graph is empty Select B C F A D E Digraphs 13 B Select B. Copy to sorted list. Delete B and its edges. B C F A B D E Digraphs 14 C Select C. Copy to sorted list. Delete C and its edges. C F A B C D E Digraphs 15 D Select D. Copy to sorted list. Delete D and its edges. F A B C D D E Digraphs 16 E, F Select E. Copy to sorted list. Delete E and its edges. Select F. Copy to sorted list. Delete F and its edges. F A B C D E F E Digraphs 17 Done B C A F D E A B C D E F Digraphs 18 Implementation Assume adjacency list representation B C 1 2 4 A 2 3 F 3 4 5 D E 4 5 5 Translation 1 2 3 4 5 6 value next array A B C D E F 6 Digraphs 19 Calculate In-degrees D A 0 1 2 4 1 2 3 1 3 4 5 In-Degree array; or add a 2 4 5 field to array A 2 5 0 6 Digraphs 20 Calculate In-degrees for i = 1 to n do D[i] := 0; endfor for i = 1 to n do x := A[i]; while x ≠ null do D[x.value] := D[x.value] + 1; x := x.next; endwhile endfor Digraphs 21 Maintaining Degree 0 Vertices Key idea: Initialize and maintain a queue (or stack) of vertices with In-Degree 0 D A 0 1 2 4 Queue 1 6 1 2 3 1 3 4 5 2 3 5 1 6 2 4 2 5 4 5 0 6 Digraphs 22 Topo Sort using a Queue (breadth-first) After each vertex is output, when updating In-Degree array, enqueue any vertex whose In-Degree becomes zero Queue 6 2 D A 1 dequeue enqueue 0 2 4 Output 1 0 2 3 1 3 4 5 2 3 1 4 5 1 6 2 5 4 5 0 6 Digraphs 23 Topological Sort Algorithm 1. Store each vertex’s In-Degree in an array D 2. Initialize queue with all “in-degree=0” vertices 3. While there are vertices remaining in the queue: (a) Dequeue and output a vertex (b) Reduce In-Degree of all vertices adjacent to it by 1 (c) Enqueue any of these vertices whose In-Degree became zero 4. If all vertices are output then success, otherwise there is a cycle. Digraphs 24 Some Detail Main Loop while notEmpty(Q) do x := Dequeue(Q) Output(x) y := A[x]; while y ≠ null do D[y.value] := D[y.value] – 1; if D[y.value] = 0 then Enqueue(Q,y.value); y := y.next; endwhile endwhile Digraphs 25 Topological Sort Analysis • Initialize In-Degree array: O(|V| + |E|) • Initialize Queue with In-Degree 0 vertices: O(|V|) • Dequeue and output vertex: › |V| vertices, each takes only O(1) to dequeue and output: O(|V|) • Reduce In-Degree of all vertices adjacent to a vertex and Enqueue any In-Degree 0 vertices: › O(|E|) • For input graph G=(V,E) run time = O(|V| + |E|) › Linear time! Digraphs 26 Topo Sort using a Stack (depth-first) After each vertex is output, when updating In-Degree array, push any vertex whose In-Degree becomes zero Stack 2 6 D A 1 pop push 0 2 4 Output 1 0 2 3 1 3 4 5 2 3 1 4 5 1 6 2 5 4 5 0 6 Digraphs 27.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    27 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us