0% found this document useful (0 votes)
39 views40 pages

DS - Lecture - 19 (DFS)

The document discusses depth-first search (DFS), an algorithm for traversing graphs. DFS explores edges out of the most recently discovered vertex as deeply as possible. It creates a depth-first forest by exploring all edges of a vertex before backtracking. DFS runs in O(V+E) time on graphs represented with adjacency lists and outputs discovery and finish times for each vertex.

Uploaded by

Tauhid Tanjim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
39 views40 pages

DS - Lecture - 19 (DFS)

The document discusses depth-first search (DFS), an algorithm for traversing graphs. DFS explores edges out of the most recently discovered vertex as deeply as possible. It creates a depth-first forest by exploring all edges of a vertex before backtracking. DFS runs in O(V+E) time on graphs represented with adjacency lists and outputs discovery and finish times for each vertex.

Uploaded by

Tauhid Tanjim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 40

Data Structure (CSE 2101)

Instructor: Anna Fariha


Department of CSE, University of Dhaka

Source: Slide of Syed Monowar Hossain


Lecture 17: DFS

Instructor: Anna Fariha


Department of CSE, University of Dhaka
Depth-First Search

● Input: 1 2
■ G = (V, E) (No source vertex given!) 3
● Goal: 5 4
■ Explore the edges of G to “discover” every vertex in V starting at the most
recent visited node
■ Search may be repeated from multiple sources

● Output:
■ 2 timestamps on each vertex:
○ d[v] = discovery time
○ f[v] = finishing time (done with examining v’s adjacency list)

■ Depth-first forest
Depth-First Search

● Search “deeper” in the graph whenever possible 1 2

● Edges are explored out of the most recently 3


discovered vertex v that still has unexplored edges 5 4

• After all edges of v have been explored, the search


“backtracks” from the parent of v
• The process continues until all vertices reachable from the
original source have been discovered
• If undiscovered vertices remain, choose one of them as a
new source and repeat the search from that vertex
• DFS creates a “depth-first forest”
DFS Additional Data Structures
● Global variable: time-stamp
■ Incremented when nodes are discovered or finished
● color[u] – similar to BFS
■ White before discovery, gray while processing and black
when finished processing
● prev[u] – predecessor of u
● d[u], f[u] – discovery and finish times

1 ≤ d[u] < f [u] ≤ 2 |V|

WHITE GRAY BLACK


0 d[u] f[u] 2V
Depth-First Search: The Code
Data: color[V], time, DFS_Visit(u)
prev[V],d[V], f[V] {
DFS(G) // where prog starts color[u] = GREY;
time = time+1;
{ Initialize d[u] = time;
for each vertex u  V
for each v  Adj[u]
{ {
color[u] = WHITE; if(color[v] == WHITE){
prev[u]=NIL; prev[v]=u;
f[u]=inf; d[u]=inf; DFS_Visit(v);}
}
}
color[u] = BLACK;
time = 0;
time = time+1;
for each vertex u  V f[u] = time;
if (color[u] == WHITE) }
DFS_Visit(u);
}
6
Depth-First Search: The Code
Data: color[V], time, DFS_Visit(u)
prev[V],d[V], f[V] {
color[u] = GREY;
DFS(G) // where prog starts
time = time+1;
{ d[u] = time;
for each vertex u  V for each v  Adj[u]
{ {
if(color[v] == WHITE){
color[u] = WHITE;
prev[v]=u;
prev[u]=NIL; DFS_Visit(v);
f[u]=inf; d[u]=inf; }
} }
color[u] = BLACK;
time = 0;
time = time+1;
for each vertex u  V f[u] = time;
if (color[u] == WHITE) }
DFS_Visit(u);
}
Will all vertices eventually be colored black?
7
DFS Example
source
vertex
S D F

B C G

8
DFS Example
source
vertex
dS f D F

1 | | |

A
| |
E

| | |
B C G

9
DFS Example
source
vertex
dS f D F

1 | | |

A
2 | |
E

| | |
B C G

10
DFS Example
source
vertex
dS f D F

1 | | |

A
2 | |
E

3 | | |
B C G

11
DFS Example
source
vertex
dS f D F

1 | | |

A
2 | |
E

3 | 4 | |
B C G

12
DFS Example
source
vertex
dS f D F

1 | | |

A
2 | |
E

3 | 4 5 | |
B C G

13
DFS Example
source
vertex
dS f D F

1 | | |

A
2 | |
E

3 | 4 5 | 6 |
B C G

14
DFS Example
source
vertex
dS f D F

1 | | |

A
2 | 7 |
E

3 | 4 5 | 6 |
B C G

15
DFS Example
source
vertex
dS f D F

1 | 8 | |

A
2 | 7 |
E

3 | 4 5 | 6 |
B C G

16
DFS Example
source
vertex
dS f D F

1 | 8 | |

A
2 | 7 9 |
E

3 | 4 5 | 6 |
B C G
What is the structure of the grey vertices?
What do they represent?
17
DFS Example
source
vertex
dS f D F

1 | 8 | |

A
2 | 7 9 |10
E

3 | 4 5 | 6 |
B C G

18
DFS Example
source
vertex
dS f D F

1 | 8 |11 |

A
2 | 7 9 |10
E

3 | 4 5 | 6 |
B C G

19
DFS Example
source
vertex
dS f D F

1 |12 8 |11 |

A
2 | 7 9 |10
E

3 | 4 5 | 6 |
B C G

20
DFS Example
source
vertex
dS f D F

1 |12 8 |11 13|

A
2 | 7 9 |10
E

3 | 4 5 | 6 |
B C G

21
DFS Example
source
vertex
dS f D F

1 |12 8 |11 13|

A
2 | 7 9 |10
E

3 | 4 5 | 6 14|
B C G

22
DFS Example
source
vertex
dS f D F

1 |12 8 |11 13|

A
2 | 7 9 |10
E

3 | 4 5 | 6 14|15
B C G

23
DFS Example
source
vertex
dS f D F

1 |12 8 |11 13|16

A
2 | 7 9 |10
E

3 | 4 5 | 6 14|15
B C G

24
Depth-First Search Analysis
● This running time argument is an informal
example of amortized analysis
■ “Charge” the exploration of edge to the edge:
○ Each loop in DFS_Visit can be attributed to an edge in
the graph
○ Runs once per edge if directed graph, twice if undirected
○ Thus loop will run in O(E) time, algorithm O(V+E)
 Considered linear for graph, adj list requires O(V+E) storage

25
DFS: Kinds of edges
● DFS introduces an important distinction
among edges in the original graph:
■ Tree edge: encounter new (white) vertex
○ The tree edges form a spanning forest
○ Can tree edges form cycles? Why or why not?
 No

26
DFS Example
source
vertex
d f
1 |12 8 |11 13|16

2 | 7 9 |10

3 | 4 5 | 6 14|15

Tree edges
27
DFS: Kinds of edges
● DFS introduces an important distinction
among edges in the original graph:
■ Tree edge: encounter new (white) vertex
■ Back edge: from descendent to ancestor
○ Encounter a grey vertex (grey to grey)
○ Self loops are considered as to be back edge.

28
DFS Example
source
vertex
d f
1 |12 8 |11 13|16

2 | 7 9 |10

3 | 4 5 | 6 14|15

Tree edges Back edges


29
DFS: Kinds of edges
● DFS introduces an important distinction
among edges in the original graph:
■ Tree edge: encounter new (white) vertex
■ Back edge: from descendent to ancestor
■ Forward edge: from ancestor to descendent
○ Not a tree edge, though
○ From grey node to black node

30
DFS Example
source
vertex
d f
1 |12 8 |11 13|16

2 | 7 9 |10

3 | 4 5 | 6 14|15

Tree edges Back edges Forward edges


31
DFS: Kinds of edges
● DFS introduces an important distinction
among edges in the original graph:
■ Tree edge: encounter new (white) vertex
■ Back edge: from descendent to ancestor
■ Forward edge: from ancestor to descendent
■ Cross edge: between a tree or subtrees
○ From a grey node to a black node

32
DFS Example
source
vertex
d f
1 |12 8 |11 13|16

2 | 7 9 |10

3 | 4 5 | 6 14|15

Tree edges Back edges Forward edges Cross edges


33
DFS: Kinds of edges
● DFS introduces an important distinction
among edges in the original graph:
■ Tree edge: encounter new (white) vertex
■ Back edge: from descendent to ancestor
■ Forward edge: from ancestor to descendent
■ Cross edge: between a tree or subtrees
● Note: tree & back edges are important; most
algorithms don’t distinguish forward & cross

34
More about the edges
● Let (u,v) is an edge.
■ If (color[v] = WHITE) then (u,v) is a tree edge
■ If (color[v] = GRAY) then (u,v) is a back edge
■ If (color[v] = BLACK) then (u,v) is a
forward/cross edge
○ Forward Edge: d[u]<d[v]
○ Cross Edge: d[u]>d[v]

35
Depth-First Search - Timestamps

a b s c
3/6 2/9 1/10 11/16
B F C
B
4/5 7/8 12/13 14/15
d C e C f C g

36
Depth-First Search - Timestamps

s c
C B

F
b f g
C
a e C
B

C
d

37
Depth-First Search: Detect Edge
Data: color[V], time, DFS_Visit(u)
prev[V],d[V], f[V] {
color[u] = GREY;
DFS(G) // where prog starts time = time+1;
{ d[u] = time;
for each vertex u  V for each v  Adj[u]
{
{
detect edge type using “color[v]”
color[u] = WHITE; if(color[v] == WHITE){
prev[u]=NIL; prev[v]=u;
DFS_Visit(v);
f[u]=inf; d[u]=inf;
}}
} color[u] = BLACK;
time = 0; time = time+1;
for each vertex u  V f[u] = time;
}
if (color[u] == WHITE)
DFS_Visit(u);
}
38
Cycle Detection
● How to detect if there is a cycle using DFS?
● Look for back edges.

39
Reference
● Cormen –
■ Chapter 22 (Elementary Graph Algorithms)
● Exercise –
■ 22.3-4 –Detect edge using d[u], d[v], f[u], f[v]

40

You might also like