depth first search
play

Depth-First Search A B D E C Outline and Reading Definitions - PowerPoint PPT Presentation

Depth-First Search A B D E C Outline and Reading Definitions (6.1) Subgraph Connectivity Spanning trees and forests Depth-first search (6.3.1) Algorithm Example Properties Analysis Applications of


  1. Depth-First Search A B D E C

  2. Outline and Reading Definitions (6.1) • Subgraph • Connectivity • Spanning trees and forests Depth-first search (6.3.1) • Algorithm • Example • Properties • Analysis Applications of DFS (6.5) • Path finding • Cycle finding Depth-First Search 2

  3. Subgraphs A subgraph S of a graph G is a graph such that • the vertices of S are a subset of the vertices of G Subgraph • the edges of S are a subset of the edges of G A spanning subgraph of G is a subgraph that contains all the vertices of G Spanning subgraph Depth-First Search 3

  4. Connectivity A graph is connected if there is a path between every pair of vertices Connected graph A connected component of a graph G is a maximal connected subgraph of G Non connected graph with two connected components Depth-First Search 4

  5. Trees and Forests • A (free) tree is an undirected graph T such that – T is connected – T has no cycles This definition of tree is different from Tree the one of a rooted tree • A forest is an undirected graph without cycles • The connected components of a forest are trees Forest Depth-First Search 5

  6. Spanning Trees and Forests A spanning tree of a connected graph is a spanning subgraph that is a tree • A spanning tree is not unique unless the graph is a tree Graph • Spanning trees have applications to the design of communication networks • A spanning forest of a graph is a spanning subgraph that is a forest Spanning tree Depth-First Search 6

  7. Depth-First Search • Depth-first search (DFS) is a general technique for traversing a graph. A DFS traversal of a graph G – visits all the vertices and edges of G – determines whether G is connected – computes the connected components of G – computes a spanning forest of G DFS on a graph with n vertices and m edges takes O ( n + m ) time • • DFS can be further extended to solve other graph problems – find and report a path between two given vertices – find a cycle in the graph • Depth-first search is to graphs what Euler tour is to binary trees Depth-First Search 7

  8. DFS Algorithm The algorithm uses a mechanism for setting and getting “ labels ” of vertices and edges. Algorithm DFS ( G, v ) Algorithm DFS ( G ) Input graph G and a start vertex v of G Input graph G Output labeling of the edges of G Output labeling of the edges of G in the connected component of v as discovery edges and as discovery edges and back edges back edges setLabel ( v, VISITED ) for all u Î G.vertices () for all e Î G.incidentEdges ( v ) setLabel ( u, UNEXPLORED ) if getLabel ( e ) = UNEXPLORED for all e Î G.edges () w ¬ G.opposite ( v,e ) setLabel ( e, UNEXPLORED ) if getLabel ( w ) = UNEXPLORED for all v Î G.vertices () setLabel ( e, DISCOVERY ) if getLabel ( v ) = UNEXPLORED DFS ( G, w ) DFS ( G, v ) else setLabel ( e, BACK ) Depth-First Search 8

  9. Example A unexplored vertex A visited vertex A B D E unexplored edge discovery edge C back edge A A B D E B D E C C Depth-First Search 9

  10. Example (cont.) A A B D E B D E C C A A B D E B D E C C Depth-First Search 10

  11. DFS and Maze Traversal The DFS algorithm is similar to a classic strategy for exploring a maze • We mark each intersection, corner and dead end (vertex) visited • We mark each corridor (edge ) traversed • We keep track of the path back to the entrance (start vertex) by means of a rope (recursion stack) Depth-First Search 11

  12. Properties of DFS Property 1 DFS ( G, v ) visits all the vertices A and edges in the connected component of v B D E Property 2 C The discovery edges labeled by DFS ( G, v ) form a spanning tree of the connected component of v Depth-First Search 12

  13. Analysis of DFS • Setting/getting a vertex/edge label takes O (1) time • Each vertex is labeled twice – once as UNEXPLORED – once as VISITED • Each edge is labeled twice – once as UNEXPLORED – once as DISCOVERY or BACK • Method incidentEdges is called once for each vertex DFS runs in O ( n + m ) time provided the graph is represented by • the adjacency list structure – Recall that S v deg( v ) = 2 m Depth-First Search 13

  14. Path Finding • We can specialize the DFS Algorithm pathDFS ( G, v, z ) algorithm to find a path between setLabel ( v, VISITED ) two given vertices u and z using S.push ( v ) the template method pattern if v = z return S.elements () for all e Î G.incidentEdges ( v ) • We call DFS ( G, u ) with u as the if getLabel ( e ) = UNEXPLORED start vertex w ¬ opposite ( v, e ) if getLabel ( w ) = UNEXPLORED setLabel ( e, DISCOVERY ) • We use a stack S to keep track of S.push ( e ) the path between the start vertex pathDFS ( G, w, z ) and the current vertex S.pop () { e gets popped } else setLabel ( e, BACK ) • As soon as destination vertex z is S.pop () { v gets popped } encountered, we return the path as the contents of the stack Depth-First Search 14

  15. Cycle Finding Algorithm cycleDFS ( G, v ) • We can specialize the DFS setLabel ( v, VISITED ) algorithm to find a simple cycle S.push ( v ) using the template method for all e Î G.incidentEdges ( v ) if getLabel ( e ) = UNEXPLORED pattern w ¬ opposite ( v,e ) S.push ( e ) if getLabel ( w ) = UNEXPLORED • We use a stack S to keep track of setLabel ( e, DISCOVERY ) the path between the start vertex cycleDFS ( G, w ) S.pop () and the current vertex else C ¬ new empty stack repeat • As soon as a back edge ( v, w ) is o ¬ S.pop () encountered, we return the cycle C.push ( o ) until o = w as the portion of the stack from return C.elements () the top to vertex w S.pop () Depth-First Search 15

Recommend


More recommend