depth-first searchgoodrich/teach/cs260p/notes/dfs.pdf · 2018. 2. 8. · © 2015 goodrich and...
TRANSCRIPT
![Page 1: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/1.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 1
Depth-First Search
D B
A
C
E
Presentation for use with the textbook, Algorithm Design and Applications, by M. T. Goodrich and R. Tamassia, Wiley, 2015
![Page 2: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/2.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 2
Subgraphs q A subgraph S of a graph
G is a graph such that n The vertices of S are a
subset of the vertices of G n The edges of S are a
subset of the edges of G
q A spanning subgraph of G is a subgraph that contains all the vertices of G
Subgraph
Spanning subgraph
![Page 3: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/3.jpg)
© 2015 Goodrich and Tamassia
Application: Web Crawlers q A fundamental kind of algorithmic operation that we
might wish to perform on a graph is traversing the edges and the vertices of that graph.
q A traversal is a systematic procedure for exploring a graph by examining all of its vertices and edges.
q For example, a web crawler, which is the data collecting part of a search engine, must explore a graph of hypertext documents by examining its vertices, which are the documents, and its edges, which are the hyperlinks between documents.
q A traversal is efficient if it visits all the vertices and edges in linear time.
Depth-First Search 3
![Page 4: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/4.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 4
Connectivity
q A graph is connected if there is a path between every pair of vertices
q A connected component of a graph G is a maximal connected subgraph of G
Connected graph
Non connected graph with two connected components
![Page 5: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/5.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 5
Trees and Forests q A (free) tree is an
undirected graph T such that n T is connected n T has no cycles This definition of tree is
different from the one of a rooted tree
q A forest is an undirected graph without cycles
q The connected components of a forest are trees
Tree
Forest
![Page 6: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/6.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 6
Spanning Trees and Forests q A spanning tree of a
connected graph is a spanning subgraph that is a tree
q A spanning tree is not unique unless the graph is a tree
q Spanning trees have applications to the design of communication networks
q A spanning forest of a graph is a spanning subgraph that is a forest
Graph
Spanning tree
![Page 7: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/7.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 7
Depth-First Search q Depth-first search (DFS)
is a general technique for traversing a graph
q A DFS traversal of a graph G n Visits all the vertices and
edges of G n Determines whether G is
connected n Computes the connected
components of G n Computes a spanning
forest of G
q DFS on a graph with n vertices and m edges takes O(n + m ) time
q DFS can be further extended to solve other graph problems n Find and report a path
between two given vertices
n Find a cycle in the graph
q Depth-first search is to graphs what Euler tour is to binary trees
![Page 8: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/8.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 8
DFS Algorithm from a Vertex
![Page 9: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/9.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 9
Example
D B
A
C
E
D B
A
C
E
D B
A
C
E
discovery edge back edge
A visited vertex A unexplored vertex
unexplored edge
![Page 10: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/10.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 10
Example (cont.)
D B
A
C
E
D B
A
C
E
D B
A
C
E
D B
A
C
E
![Page 11: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/11.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 11
DFS and Maze Traversal q The DFS algorithm is
similar to a classic strategy for exploring a maze n We mark each
intersection, corner and dead end (vertex) visited
n We mark each corridor (edge ) traversed
n We keep track of the path back to the entrance (start vertex) by means of a rope (recursion stack)
![Page 12: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/12.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 12
Properties of DFS Property 1
DFS(G, v) visits all the vertices and edges in the connected component of v
Property 2 The discovery edges labeled by DFS(G, v) form a spanning tree of the connected component of v
D B
A
C
E
![Page 13: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/13.jpg)
© 2015 Goodrich and Tamassia
The General DFS Algorithm
q Perform a DFS from each unexplored vertex:
Depth-First Search 13
![Page 14: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/14.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 14
Analysis of DFS q Setting/getting a vertex/edge label takes O(1) time q Each vertex is labeled twice
n once as UNEXPLORED n once as VISITED
q Each edge is labeled twice n once as UNEXPLORED n once as DISCOVERY or BACK
q Method incidentEdges is called once for each vertex q DFS runs in O(n + m) time provided the graph is
represented by the adjacency list structure n Recall that Σv deg(v) = 2m
![Page 15: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/15.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 15
Path Finding (not in book) q We can specialize the DFS
algorithm to find a path between two given vertices u and z using the template method pattern
q We call DFS(G, u) with u as the start vertex
q We use a stack S to keep track of the path between the start vertex and the current vertex
q As soon as destination vertex z is encountered, we return the path as the contents of the stack
Algorithm pathDFS(G, v, z) setLabel(v, VISITED) S.push(v) if v = z
return S.elements() for all e ∈ G.incidentEdges(v)
if getLabel(e) = UNEXPLORED w ← opposite(v,e) if getLabel(w) = UNEXPLORED setLabel(e, DISCOVERY) S.push(e) pathDFS(G, w, z) S.pop(e) else setLabel(e, BACK)
S.pop(v)
![Page 16: Depth-First Searchgoodrich/teach/cs260P/notes/DFS.pdf · 2018. 2. 8. · © 2015 Goodrich and Tamassia Depth-First Search 1 Depth-First Search B D A C E Presentation for use with](https://reader035.vdocuments.us/reader035/viewer/2022081617/604271867de5700aad0bb24a/html5/thumbnails/16.jpg)
© 2015 Goodrich and Tamassia Depth-First Search 16
Cycle Finding (not in book) q We can specialize the
DFS algorithm to find a simple cycle using the template method pattern
q We use a stack S to keep track of the path between the start vertex and the current vertex
q As soon as a back edge (v, w) is encountered, we return the cycle as the portion of the stack from the top to vertex w
Algorithm cycleDFS(G, v, z) setLabel(v, VISITED) S.push(v) for all e ∈ G.incidentEdges(v)
if getLabel(e) = UNEXPLORED w ← opposite(v,e) S.push(e) if getLabel(w) = UNEXPLORED setLabel(e, DISCOVERY) pathDFS(G, w, z) S.pop(e) else T ← new empty stack repeat o ← S.pop() T.push(o) until o = w return T.elements()
S.pop(v)