1 / 17

Depth-First Search

G is completely traversed before exploring G and G. 1. 2. 3. Depth-First Search. Idea : Keep going forward as long as there are unseen nodes to be visited. Backtrack when stuck. v. G. 3. G. G. 2. 1. From Computer Algorithms by S. Baase and A. van Gelder.

ishi
Download Presentation

Depth-First Search

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. G is completely traversed before exploring G and G . 1 2 3 Depth-First Search Idea: Keep going forward as long as there are unseen nodes to be visited. Backtrack when stuck. v G 3 G G 2 1 From Computer Algorithms by S. Baase and A. van Gelder

  2. The DFS Algorithm DFS(G) time  0 // global variable for eachv  V(G) do disc(v)  unseen for eachv  V(G) do if disc(v) = unseen then DFS-visit(v) DFS-visit(v) time  time + 1 disc(v)  time for eachu  Adj(v) do ifdisc(u) = unseen then DFS-visit(u)

  3. 8 9 4 10 6 7 5 11 12 A DFS Example time = 1 a h i c d e j f k l b g 2 3

  4. Recursive DFS Calls DFS(G) DFS-visit(a) DFS-visit(b) DFS-visit(g) DFS-visit(e) DFS-visit(f) DFS-visit(c) DFS-visit(d) DFS-visit(h) DFS-visit(i) DFS-visit(j) DFS-visit(k) DFS-visit(l) 1 a c d e 4 6 7 5 f 2 3 b g 8 9 h i 10 j k l DFS-visit(v) explores every unvisited vertex reachable from v before it returns. 12 11

  5. Depth-First Search Forest a h i c d e j f k l b g Edges that, during DFS, lead to an unexplored vertex form a depth-first search forest.

  6. DFS-visit is called exactly once for each node. |V| such calls in total. Each call timestamps a node and then increments the time, which takes O(1) time. Each edge is examined O(1) time. Running Time of DFS O(|V| + |E|)

  7. Edge Classification – Undirected Graphs 1. Tree edges are those in the DFS forest. 2. Back edges go from a vertex to one of its ancestors. a h j b c d i k g l f e

  8. Edge Classification – Directed Graphs Besides tree edges and back edges, there are also 3. Forward edges go from a vertex to one of its descendants. 4. Cross edges: all other edges. a h b c g d e i

  9. Find connected components of G. Determine if G has a cycle. Determine if removing a vertex or edge will disconnect G. Determine if G is planar. … Applications of DFS InO(|V| + |E|)time, we can

  10. a b c v has not been explored at the time of the initial call to DFS-visit(u). v v will be visited before returning from DFS-visit(u). u Back Edge TheoremA directed graph G has a cycle if and only if its DFS forest has a back edge.  A back edge leads to a cycle. Proof  Suppose there is a cycle. Let u be the vertex with smallest time stamp on the cycle and v be the predecessor of u in the cycle. Therefore at the time of visiting v, a back edge (v, u) is found. The above sufficient and necessary condition carries over to an undirected graph.

  11. root u v Algorithm for Detecting Cycle (v, u) is a back edge if v is a descendant of u in the DFS tree. for eachu Vdo onpath(u)  false// on path from the root of the DFS tree DFS-visit(v) time  time + 1 disc(v)  time onpath(v)  true for eachu  Adj(v) do ifdisc(u) = unseen then DFS-visit(u) else if onpath(u) then a cycle has been found; halt onpath(v)  false// backtrack: v no longer on path from root

  12. Some topological sorts: a b • a, c, e, b, d, g, f • a, b, c, d, g, f, e • b, d, g, a, c, f, e d c e f g Topological Sort of Digraph Ordering < over V(G) such that u < v whenever (u, v)  E(G).

  13. Each node represents an activity; e.g., taking a class. (u, v)  E(G) implies activity u must be scheduled before activity v. Topological sort schedules all activities. More than one schedule may exist. Intuition: Precedence Diagram

  14. a b Existence of Topological Sort Lemma G can be topologically sorted iff it has no cycle, that is, iff it is a dag(directed acyclic graph).  If G has a cycle, then it cannot be topologically sorted. Proof  If G has no cycle, then it can be topologically sorted. Constructive proof: An algorithm that sorts any dag. Courtesy: Dr. Fernandez-Baca

  15. Initialize a global queue L   within DFS(G) Add a line to DFS-visit Algorithm for Topological Sort DFS-visit-topo(v) time  time + 1 disc(v)  time for eachu  Adj(v) do ifdisc(u) = unseen then DFS-visit(u) L insert(v, L)// insert v in the front of L

  16. u v v u Correctness of the Algorithm Claim Let G be a directed acyclic graph (dag). If (u, v)  E(G), then DFS-visit-topo(u) finishes after DFS-visit-topo(v). Proof Consider the time when DFS-visit-topo(u) first scans (u, v): Case 1:DFS-visit-topo(v) has already finished. Obviously, DFS-visit-topo(u) finishes afterwards. And (u, v) is a cross edge. Case 2:DFS-visit-topo(v) has already started, but not yet finished. Then (u, v) is a back-edge and G has a cycle, contradicting that it is a dag!

  17. u v Correctness (cont’d) Case 3: DFS-visit-topo(v) has not yet started. Then the procedure call will start immediately. So (u, v) is a tree edge. Hence DFS-visit-topo(u) will finish after DFS-visit-topo(v). Combining cases 1 and 3, u will always be inserted in front of v in the queue L. Theorem If G is a dag, then at termination of DFS, L is a topological ordering of V(G).

More Related