0% found this document useful (0 votes)
828 views

Depth-First Search: COMP171

The document summarizes depth-first search (DFS) and breadth-first search (BFS) algorithms on graphs. DFS recursively explores as far as possible along each branch before backtracking, marking nodes visited. It uses a stack and has O(V+E) time complexity. BFS uses a queue to explore neighboring nodes level-by-level, constructing a BFS tree. It runs in O(V+E) time with adjacency lists but O(V^2) with adjacency matrices. Both algorithms mark nodes visited to avoid cycles.

Uploaded by

api-3825915
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
828 views

Depth-First Search: COMP171

The document summarizes depth-first search (DFS) and breadth-first search (BFS) algorithms on graphs. DFS recursively explores as far as possible along each branch before backtracking, marking nodes visited. It uses a stack and has O(V+E) time complexity. BFS uses a queue to explore neighboring nodes level-by-level, constructing a BFS tree. It runs in O(V+E) time with adjacency lists but O(V^2) with adjacency matrices. Both algorithms mark nodes visited to avoid cycles.

Uploaded by

api-3825915
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 32

COMP171

Depth-First Search
Graph / Slide 2

Summary of BFS

☛ Graph and representations


☛ BFS, and BFS tree
☛ Complexity of BFS
Graph / Slide 3
Two representations:
Adjacency List vs. Matrix
☛ Two sizes: n = |V| and m=|E|,
■ m = O(n^2)

☛ Adjacency List
■ More compact than adjacency matrices if graph has few edges

■ Requires a scan of adjacency list to check if an edge exists


■ Requires a scan to obtain all edges!

☛ Adjacency Matrix
■ Always require n2 space
This can waste a lot of space if the number of edges are sparse

■ find if an edge exists in O(1)


■ Obtain all edges in O(n)
Graph / Slide 4

BFS Tree
BFS tree for vertex s=2.
Graph / Slide 5

Time Complexity of BFS


(Using Adjacency List)

O(n + m)

Each vertex will enter Q


at most once.

Each iteration takes time


proportional to deg(v) + 1 (the
number 1 is to account for the
case where deg(v) = 0 --- the
work required is 1, not 0).
Graph / Slide 6

Time Complexity of BFS


(Using Adjacency Matrix)

O(n2)

Finding the adjacent vertices of v


requires checking all elements in the
row. This takes linear time O(n).

Summing over all the n iterations, the


total running time is O(n2).
So, with adjacency matrix, BFS is O(n2)
independent of the number of edges m.
With adjacent lists, BFS is O(n+m); if
m=O(n2) like in a dense graph,
O(n+m)=O(n2).
Graph / Slide 7

Depth-First Search (DFS)


☛ DFS is another popular graph search strategy
■ Idea is similar to pre-order traversal (visit node,
then visit children recursively)

☛ DFS can provide certain information about


the graph that BFS cannot
■ It can tell whether we have encountered a cycle or
not
Graph / Slide 8

DFS Algorithm
☛ DFS will continue to visit neighbors in a
recursive pattern
■ Whenever we visit v from u, we recursively visit all
unvisited neighbors of v. Then we backtrack
(return) to u.

■ Note: it is possible that w2 was unvisited when we


recursively visit w1, but became visited by the time
we return from the recursive call.
u

v w3
w1 w2
Graph / Slide 9

DFS Algorithm

Flag all vertices as not


visited

Flag yourself as visited

For unvisited neighbors,


call RDFS(w) recursively

We can also record the paths using pred[ ].


Graph / Slide 10

Example
Adjacency List Visited Table (T/F)
0 0 F -

8 1 F -

2 F -

source 2 9
3 F -

4 F -
1
5 F -

3 7 6 F -

6 7 F -
4
5 8 F -

9 F -

Pred
Initialize visited
table (all False)

Initialize Pred to -1
Graph / Slide 11

Adjacency List Visited Table (T/F)


0 0 F -

1 F -
8 2 T -

3 F -
source 2 9 4 F -

1 5 F -

6 F -
3 7
7 F -
6
4 8 F -
5 9 F -

Pred
Mark 2 as visited

RDFS( 2 )
Now visit RDFS(8)
Graph / Slide 12

Adjacency List Visited Table (T/F)


0
0 F -
8 1 F -

2 T -
source 2 9 3 F -

1 4 F -

5 F -

3 7 6 F -
6 7 F -
4
5 8 T 2

9 F -

Pred
Mark 8 as visited
Recursive RDFS( 2 )
calls RDFS(8) mark Pred[8]
2 is already visited, so visit RDFS(0)
Graph / Slide 13

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 F -

2 T -
source 2 9 3 F -

1 4 F -

5 F -

3 7 6 F -
6 7 F -
4
5 8 T 2

9 F -

Pred
Mark 0 as visited
Recursive RDFS( 2 )
calls RDFS(8) Mark Pred[0]
RDFS(0) -> no unvisited neighbors, return
to call RDFS(8)
Graph / Slide 14

Back to 8
Adjacency List Visited Table (T/F)
0
0 T 8
8 1 F -

2 T -
source 2 9 3 F -

1 4 F -

5 F -

3 7 6 F -
6 7 F -
4
5 8 T 2

9 F -

Pred

Recursive RDFS( 2 )
calls RDFS(8)
Now visit 9 -> RDFS(9)
Graph / Slide 15

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 F -

2 T -
source 2 9 3 F -

1 4 F -

5 F -

3 7 6 F -
6 7 F -
4
5 8 T 2

9 T 8

Pred
Mark 9 as visited
Recursive RDFS( 2 )
calls RDFS(8) Mark Pred[9]
RDFS(9)
-> visit 1, RDFS(1)
Graph / Slide 16

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 T 9

2 T -
source 2 9 3 F -

1 4 F -

5 F -

3 7 6 F -
6 7 F -
4
5 8 T 2

9 T 8

Pred
Mark 1 as visited
Recursive RDFS( 2 )
calls RDFS(8) Mark Pred[1]
RDFS(9)
RDFS(1)
visit RDFS(3)
Graph / Slide 17

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 T 9

2 T -
source 2 9 3 T 1

1 4 F -

5 F -

3 7 6 F -
6 7 F -
4
5 8 T 2

9 T 8

Pred
Mark 3 as visited
Recursive RDFS( 2 )
calls RDFS(8) Mark Pred[3]
RDFS(9)
RDFS(1)
RDFS(3)
visit RDFS(4)
Graph / Slide 18

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 T 9

2 T -
source 2 9 3 T 1

1 4 T 3

5 F -

3 7 6 F -
6 7 F -
4
5 8 T 2

9 T 8

Pred
RDFS( 2 ) Mark 4 as visited
RDFS(8)
Recursive
calls RDFS(9) Mark Pred[4]
RDFS(1)
RDFS(3)
RDFS(4)  STOP all of 4’s neighbors have been visited
return back to call RDFS(3)
Graph / Slide 19

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 T 9

2 T -
source 2 9 3 T 1

1 4 T 3

5 F -

3 7 6 F -
6 7 F -
4
5 8 T 2

9 T 8
Back to 3
Pred
RDFS( 2 )
RDFS(8)
Recursive
calls RDFS(9)
RDFS(1)
RDFS(3)
visit 5 -> RDFS(5)
Graph / Slide 20

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 T 9

2 T -
source 2 9 3 T 1

1 4 T 3

5 T 3

3 7 6 F -
6 7 F -
4
5 8 T 2

9 T 8

Pred
RDFS( 2 )
RDFS(8) Mark 5 as visited
Recursive
calls RDFS(9)
RDFS(1) Mark Pred[5]
RDFS(3)
RDFS(5)
3 is already visited, so visit 6 -> RDFS(6)
Graph / Slide 21

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 T 9

2 T -
source 2 9 3 T 1

1 4 T 3

5 T 3

3 7 6 T 5
6 7 F -
4
5 8 T 2

9 T 8

Pred
RDFS( 2 )
RDFS(8)
Recursive RDFS(9) Mark 6 as visited
calls RDFS(1) Mark Pred[6]
RDFS(3)
RDFS(5)
RDFS(6)
visit 7 -> RDFS(7)
Graph / Slide 22

Adjacency List Visited Table (T/F)


0
0 T 8
8 1 T 9

2 T -
source 2 9 3 T 1

1 4 T 3

5 T 3

3 7 6 T 5
6 7 T 6
4
5 8 T 2

9 T 8

Pred
RDFS( 2 )
RDFS(8)
Recursive RDFS(9) Mark 7 as visited
calls RDFS(1) Mark Pred[7]
RDFS(3)
RDFS(5)
RDFS(6)
RDFS(7) -> Stop no more unvisited neighbors
Graph / Slide 23

Adjacency List Visited Table (T/F)


0 0 T 8

1 T 9
8
2 T -

3 T 1
source 2 9 4 T 3
1 5 T 3

3 7 6 T 5

6 7 T 6

4 8 T 2
5
9 T 8

Pred
RDFS( 2 )
RDFS(8)
Recursive RDFS(9)
calls RDFS(1)
RDFS(3)
RDFS(5)
RDFS(6) -> Stop
Graph / Slide 24

Adjacency List Visited Table (T/F)


0 0 T 8

1 T 9
8
2 T -

3 T 1
source 2 9 4 T 3
1 5 T 3

3 7 6 T 5

6 7 T 6

4 8 T 2
5
9 T 8

Pred
RDFS( 2 )
RDFS(8)
Recursive RDFS(9)
calls RDFS(1)
RDFS(3)
RDFS(5) -> Stop
Graph / Slide 25

Adjacency List Visited Table (T/F)


0 0 T 8

1 T 9
8
2 T -

3 T 1
source 2 9 4 T 3
1 5 T 3

3 7 6 T 5

6 7 T 6

4 8 T 2
5
9 T 8

Pred
RDFS( 2 )
RDFS(8)
Recursive RDFS(9)
calls RDFS(1)
RDFS(3) -> Stop
Graph / Slide 26

Adjacency List Visited Table (T/F)


0 0 T 8

1 T 9
8
2 T -

3 T 1
source 2 9 4 T 3
1 5 T 3

3 7 6 T 5

6 7 T 6

4 8 T 2
5
9 T 8

Pred
RDFS( 2 )
RDFS(8)
Recursive RDFS(9)
calls RDFS(1) -> Stop
Graph / Slide 27

Adjacency List Visited Table (T/F)


0 0 T 8

1 T 9
8
2 T -

3 T 1
source 2 9 4 T 3
1 5 T 3

3 7 6 T 5

6 7 T 6

4 8 T 2
5
9 T 8

Pred
RDFS( 2 )
RDFS(8)
Recursive RDFS(9) -> Stop
calls
Graph / Slide 28

Adjacency List Visited Table (T/F)


0 0 T 8

1 T 9
8
2 T -

3 T 1
source 2 9 4 T 3
1 5 T 3

3 7 6 T 5

6 7 T 6

4 8 T 2
5
9 T 8

Pred
RDFS( 2 )
RDFS(8) -> Stop
Recursive
calls
Graph / Slide 29

Example Finished
Adjacency List Visited Table (T/F)
0 0 T 8

1 T 9
8
2 T -

3 T 1
source 2 9 4 T 3
1 5 T 3

3 7 6 T 5

6 7 T 6

4 8 T 2
5
9 T 8

Pred
RDFS( 2 ) -> Stop

Recursive calls finished


Graph / Slide 30

DFS Path Tracking


0 Adjacency List Visited Table (T/F)
8 0 T 8

1 T 9

source 2 9
2 T -

3 T 1
1
4 T 3

3 7 5 T 3

6 6 T 5
4
5 7 T 6

8 T 2

9 T 8

DFS find out path too Pred

Try some examples.


Path(0) ->
Path(6) ->
Path(7) ->
Graph / Slide 31

DFS Tree
Resulting DFS-tree.
Notice it is much “deeper”
than the BFS tree.

Captures the structure of the


recursive calls
- when we visit a neighbor w of v,
we add w as child of v
- whenever DFS returns from a
vertex v, we climb up in the tree
from v to its parent
Graph / Slide 32

Time Complexity of DFS


(Using adjacency list)
☛ We never visited a vertex more than once

☛ We had to examine all edges of the vertices


■ We know Σvertex v degree(v) = 2m where m is the number of
edges

☛ So, the running time of DFS is proportional to the


number of edges and number of vertices (same as BFS)
■ O(n + m)

☛ You will also see this written as:


■ O(|v|+|e|) |v| = number of vertices (n)
|e| = number of edges (m)

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy