depth-first search (dfs)bai/ecs122a/notes/dfs.pdfdepth-first search (dfs) i another archetype for...
TRANSCRIPT
![Page 1: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/1.jpg)
Depth-First Search (DFS)
I Another archetype for many important graph algorithms
I Methodically explore every vertex and every edge
I Input: G = (V,E)
Output: (1) two timestamps for every v ∈ Vd[v] = when v is first discovered.f [v] = when v is finished.
(2) classification of edges
1 / 8
![Page 2: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/2.jpg)
Depth-First Search (DFS)
I Another archetype for many important graph algorithms
I Methodically explore every vertex and every edge
I Input: G = (V,E)
Output: (1) two timestamps for every v ∈ Vd[v] = when v is first discovered.f [v] = when v is finished.
(2) classification of edges
1 / 8
![Page 3: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/3.jpg)
Depth-First Search (DFS)
I Another archetype for many important graph algorithms
I Methodically explore every vertex and every edge
I Input: G = (V,E)
Output: (1) two timestamps for every v ∈ Vd[v] = when v is first discovered.f [v] = when v is finished.
(2) classification of edges
1 / 8
![Page 4: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/4.jpg)
Depth-First Search (DFS)
I Another archetype for many important graph algorithms
I Methodically explore every vertex and every edge
I Input: G = (V,E)
Output: (1) two timestamps for every v ∈ Vd[v] = when v is first discovered.f [v] = when v is finished.
(2) classification of edges
1 / 8
![Page 5: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/5.jpg)
DFS
I Basic idea:
I go as deep as possible, then “back up”,
I edges are explored out of the most recently discovered vertex v thatstill have unexplored edges leaving,
I when all of v’s edges have been explored, the search “backtracks” toexplore edges leaving the vertex from which v was discoverd.
I Three-color code for search status of vertices
I White = a vertex is undiscoveredI Gray = a vertex is discovered, but its processing is incompleteI Black = a vertex is discovered, and its processing is complete
2 / 8
![Page 6: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/6.jpg)
DFS
I Basic idea:
I go as deep as possible, then “back up”,
I edges are explored out of the most recently discovered vertex v thatstill have unexplored edges leaving,
I when all of v’s edges have been explored, the search “backtracks” toexplore edges leaving the vertex from which v was discoverd.
I Three-color code for search status of vertices
I White = a vertex is undiscoveredI Gray = a vertex is discovered, but its processing is incompleteI Black = a vertex is discovered, and its processing is complete
2 / 8
![Page 7: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/7.jpg)
DFS
I Basic idea:
I go as deep as possible, then “back up”,
I edges are explored out of the most recently discovered vertex v thatstill have unexplored edges leaving,
I when all of v’s edges have been explored, the search “backtracks” toexplore edges leaving the vertex from which v was discoverd.
I Three-color code for search status of vertices
I White = a vertex is undiscoveredI Gray = a vertex is discovered, but its processing is incompleteI Black = a vertex is discovered, and its processing is complete
2 / 8
![Page 8: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/8.jpg)
DFS
I Basic idea:
I go as deep as possible, then “back up”,
I edges are explored out of the most recently discovered vertex v thatstill have unexplored edges leaving,
I when all of v’s edges have been explored, the search “backtracks” toexplore edges leaving the vertex from which v was discoverd.
I Three-color code for search status of vertices
I White = a vertex is undiscoveredI Gray = a vertex is discovered, but its processing is incompleteI Black = a vertex is discovered, and its processing is complete
2 / 8
![Page 9: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/9.jpg)
DFS
I Basic idea:
I go as deep as possible, then “back up”,
I edges are explored out of the most recently discovered vertex v thatstill have unexplored edges leaving,
I when all of v’s edges have been explored, the search “backtracks” toexplore edges leaving the vertex from which v was discoverd.
I Three-color code for search status of vertices
I White = a vertex is undiscoveredI Gray = a vertex is discovered, but its processing is incompleteI Black = a vertex is discovered, and its processing is complete
2 / 8
![Page 10: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/10.jpg)
DFS
I Basic idea:
I go as deep as possible, then “back up”,
I edges are explored out of the most recently discovered vertex v thatstill have unexplored edges leaving,
I when all of v’s edges have been explored, the search “backtracks” toexplore edges leaving the vertex from which v was discoverd.
I Three-color code for search status of vertices
I White = a vertex is undiscoveredI Gray = a vertex is discovered, but its processing is incompleteI Black = a vertex is discovered, and its processing is complete
2 / 8
![Page 11: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/11.jpg)
DFS
DFS(G) // main routine :
for each vertex u in V :
color[u] = ‘‘white’’ :
endfor :
time = 0 :
for each vertex u in V :
if color[u] = ‘‘white’’ :
DFS-Visit(u) :
endif :
endfor :
// end of main routine :
DFS-Visit(u) // subroutine
color[u] = ‘‘gray’’
time = time + 1
d[u] = time
for each v in Adj[u]
if color[v] = ‘‘white’’
DFS-Visit(v)
endif
end for
color[u] = ‘‘black’’
time = time + 1
f[u] = time
// end of subroutine
3 / 8
![Page 12: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/12.jpg)
DFS
DFS(G) // main routine : DFS-Visit(u) // subroutine
for each vertex u in V : color[u] = ‘‘gray’’
color[u] = ‘‘white’’ : time = time + 1
endfor : d[u] = time
time = 0 : for each v in Adj[u]
for each vertex u in V : if color[v] = ‘‘white’’
if color[u] = ‘‘white’’ : DFS-Visit(v)
DFS-Visit(u) : end if
endif : end for
endfor : color[u] = ‘‘black’’
// end of main routine : time = time + 1
: f[u] = time
: // end of subroutine
4 / 8
![Page 13: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/13.jpg)
DFS
Remarks:
I Vertices, from which exploration is incomplete, are proceessed in aLIFO stack.
I Running time: Θ(|V |+ |E|)
not big-O since guaranteed to examine every vertex and edge.
I For more properties of DFS, see pp.606-608 of [CLRS,3rd ed.]
5 / 8
![Page 14: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/14.jpg)
DFS
Remarks:
I Vertices, from which exploration is incomplete, are proceessed in aLIFO stack.
I Running time: Θ(|V |+ |E|)
not big-O since guaranteed to examine every vertex and edge.
I For more properties of DFS, see pp.606-608 of [CLRS,3rd ed.]
5 / 8
![Page 15: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/15.jpg)
DFS
Remarks:
I Vertices, from which exploration is incomplete, are proceessed in aLIFO stack.
I Running time: Θ(|V |+ |E|)
not big-O since guaranteed to examine every vertex and edge.
I For more properties of DFS, see pp.606-608 of [CLRS,3rd ed.]
5 / 8
![Page 16: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/16.jpg)
DFS
Remarks:
I Vertices, from which exploration is incomplete, are proceessed in aLIFO stack.
I Running time: Θ(|V |+ |E|)
not big-O since guaranteed to examine every vertex and edge.
I For more properties of DFS, see pp.606-608 of [CLRS,3rd ed.]
5 / 8
![Page 17: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/17.jpg)
DFS
Classification of edges:
I T = Tree edge = encounter new vertex (gray to white)
I B = Back edge = from descendant to ancestor (gray to gray)
I F = Forward edge = from ancestor to descendant (gray to black)
I C = Cross edge = any other edges (between trees and subtrees)(gray to black)
Note: In an undirected graph, there may be some ambiguity since edge(u,v) and (v,u) are the same edge. Classify by the first type that matches.
6 / 8
![Page 18: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/18.jpg)
DFS
DFS(G) // main routine : DFS-Visit(u) // subroutine
for each vertex u in V : color[u] = ‘‘gray’’
color[u] = ‘‘white’’ : time = time + 1
endfor : d[u] = time
time = 0 : for each v in Adj[u]
for each vertex u in V : if color[v] = ‘‘white’’
if color[u] = ‘‘white’’ : DFS-Visit(v)
DFS-Visit(u) : end if
endif : end for
endfor : color[u] = ‘‘black’’
// end of main routine : time = time + 1
: f[u] = time
: // end of subroutine
Classification of edges
T = Tree edge = encounter new vertex (gray to white)
B = Back edge = from descendant to ancestor (gray to gray)
F = Forward edge = from ancestor to descendant (gray toblack)
C = Cross edge = any other edges (between trees andsubtrees) (gray to black)
7 / 8
![Page 19: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/19.jpg)
DFS vs. BFS
1. DFS: vertices from which the exploring is incomplete are processed ina LIFO order (stack)
BFS: vertices to be explored are organized in a FIFO order (queue)
2. DFS contains two processing opportunities for each vertex v, when itis “discovered” and when it is “finished”
BFS contains only one processing opportunity for each vertex v, andthen it is dequeued
8 / 8
![Page 20: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/20.jpg)
DFS vs. BFS
1. DFS: vertices from which the exploring is incomplete are processed ina LIFO order (stack)
BFS: vertices to be explored are organized in a FIFO order (queue)
2. DFS contains two processing opportunities for each vertex v, when itis “discovered” and when it is “finished”
BFS contains only one processing opportunity for each vertex v, andthen it is dequeued
8 / 8
![Page 21: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/21.jpg)
DFS vs. BFS
1. DFS: vertices from which the exploring is incomplete are processed ina LIFO order (stack)
BFS: vertices to be explored are organized in a FIFO order (queue)
2. DFS contains two processing opportunities for each vertex v, when itis “discovered” and when it is “finished”
BFS contains only one processing opportunity for each vertex v, andthen it is dequeued
8 / 8
![Page 22: Depth-First Search (DFS)bai/ECS122A/Notes/DFS.pdfDepth-First Search (DFS) I Another archetype for many important graph algorithms I Methodically explore every vertex and every edge](https://reader035.vdocument.in/reader035/viewer/2022071105/5fdf341d28021723c649b073/html5/thumbnails/22.jpg)
DFS vs. BFS
1. DFS: vertices from which the exploring is incomplete are processed ina LIFO order (stack)
BFS: vertices to be explored are organized in a FIFO order (queue)
2. DFS contains two processing opportunities for each vertex v, when itis “discovered” and when it is “finished”
BFS contains only one processing opportunity for each vertex v, andthen it is dequeued
8 / 8