1 / 20

Graph Traversals

Graph Traversals. Graph Traversals. For solving most problems on graphs Need to systematically visit all the vertices and edges of a graph Two major traversals Breadth-First Search (BFS) Depth-First Search(DFS). BFS. Starts at some source vertex s

aideen
Download Presentation

Graph Traversals

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. Graph Traversals

  2. Graph Traversals • For solving most problems on graphs • Need to systematically visit all the vertices and edges of a graph • Two major traversals • Breadth-First Search (BFS) • Depth-First Search(DFS)

  3. BFS • Starts at some source vertex s • Discover every vertex that is reachable from s • Also produces a BFS tree with root s and including all reachable vertices • Discovers vertices in increasing order of distance from s • Distance between v and s is the minimum number of edges on a path from s to v • i.e. discovers vertices in a series of layers

  4. BFS : vertex colors stored in color[] • Initially all undiscovered: white • When first discovered: gray • They represent the frontier of vertices between discovered and undiscovered • Frontier vertices stored in a queue • Visits vertices across the entire breadth of this frontier • When processed: black

  5. Additional info stored (some applications of BFS need this info) • pred[u]: points to the vertex which first discovered u • d[u]: the distance from s to u

  6. BFS(G=(V,E),s) for each (u in V) color[u] = white d[u] = infinity pred[u] = NIL color[s] = gray d[s] = 0 Q.enqueue(s) while (Q is not empty) do u = Q.dequeue() for each (v in Adj[u]) do if (color(v] == white) then color[v] = gray //discovered but not yet processed d[v] = d[u] + 1 pred[v] = u Q.enqueue(v) //added to the frontier color[u] = black //processed

  7. Chapter 12: Graphs Example A identified vertex A visited vertex A B C D unexplored edge discovery edge E F cross edge A A B C D B C D E F E F

  8. Chapter 12: Graphs Example (cont.) A A B C D B C D E F E F A A B C D B C D E F E F

  9. Chapter 12: Graphs Example (cont.) A A B C D B C D L2 E F E F A A B C D B C D E F E F

  10. Analysis • Each vertex is enqued once and dequeued once : Θ(n) • Each adjacency list is traversed once: • Total: Θ(n+m)

  11. BFS Tree • predecessor pointers after BFS is completed define an inverted tree • Reverse edges: BFS tree rooted at s • The edges of the BFS tree are called : discovery (tree) edges • Remaining graph edges are called: cross edges

  12. BFS and shortest paths • Theorem: Let G=(V,E) be a directed or undirected graph, and suppose BFS is run on G starting from vertex s. During its execution BFS discovers every vertex v in V that is reachable from s. Let δ(s,v) denote the number of edges on the shortest path form s to v. Upon termination of BFS, d[v] = δ(s,v) for all v in V.

  13. DFS • Start at a source vertex s • Search as far into the graph as possible and backtrack when there is no new vertices to discover • recursive

  14. color[u] and pred[u] as before • color[u] • Undiscovered: white • Discovered but not finished processing: gray • Finished: black • pred[u] • Pointer to the vertex that first discovered u

  15. Time stamps, • We store two time stamps: • d[u]: the time vertex u is first discovered (discovery time) • f[u]: the time we finish processing vertex u (finish time)

  16. DFS(G) for each (u in V) do color[u] = white pred[u] = NIL time = 0 for each (u in V) do if (color[u] == white) DFS-VISIT(u) DFS-VISIT(u) //vertex u is just discovered color[u] = gray time = time +1 d[u] = time for each (v in Adj[u]) do //explore neighbor v if (color[v] == white) then //v is discovered by u pred[v] = u DFS-VISIT(v) color[u] = black // u is finished f[u] = time = time+ 1 DFS-VISIT invoked by each vertex exactly once. Θ(V+E)

  17. A C B D E DFS Forest • Tree edges: inverse of pred[] pointers • Recursion tree, where the edge (u,v) arises when processing a vertex u, we call DFS-VISIT(v) Remaining graph edges are classified as: • Back edges: (u, v) where v is an ancestor of u in the DFS forest (self loops are back edges) • Forward edges: (u, v) where v is a proper descendent of u in the DFS forest • Cross edges: (u,v) where u and v are not ancestors or descendents of one another. s

  18. If DFS run on an undirected graph • No difference between back and forward edges: all called back edges • No cross edges: can you see why?

  19. Parenthesis Theorem • In any DFS of a graph G= (V,E), for any two vertices u and v, exactly one of the following three conditions holds: • The intervals [d[u],f[u]] and [d[v],f[v]] are entirely disjoint and neither u nor v is a descendent of the other in the DFS forest • The interval [d[u],f[u]] is contained within interval [d[v],f[v]] and u is a descendent of v in the DFS forest • The interval [d[v],f[v]] is contained within interval [d[u],f[u]] and v is a descendent of u in the DFS forest

  20. How can we use DFS to determine whether a graph contains any cycles?

More Related