Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
60 views52 pages

Graph Traversals: Slides by Carl Kingsford

The document discusses graph traversal algorithms breadth-first search (BFS) and depth-first search (DFS). BFS explores the closest nodes first by exploring all of the neighbor nodes at the present distance from the source before moving to nodes at a greater distance. DFS prioritizes going deeper first by exploring paths as far as possible until reaching a node with no unexplored edges, then backtracks and tries another unexplored path if available. Examples of running BFS and DFS on sample graphs are provided to illustrate the differences between the two approaches.

Uploaded by

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

Graph Traversals: Slides by Carl Kingsford

The document discusses graph traversal algorithms breadth-first search (BFS) and depth-first search (DFS). BFS explores the closest nodes first by exploring all of the neighbor nodes at the present distance from the source before moving to nodes at a greater distance. DFS prioritizes going deeper first by exploring paths as far as possible until reaching a node with no unexplored edges, then backtracks and tries another unexplored path if available. Examples of running BFS and DFS on sample graphs are provided to illustrate the differences between the two approaches.

Uploaded by

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

Graph Traversals

Slides by Carl Kingsford

Feb. 1, 2013

Based on/Reading: Chapter 3 of Kleinberg & Tardos


Breadth-First Search

Breadth-first search explores the nodes of a graph in increasing


distance away from some starting vertex s.

It decomposes the component into layers Li such that the shortest


path from s to each of nodes in Li is of length i.

Breadth-First Search:

1. L0 is the set {s}.


2. Given layers L0 , L1 , . . . , Lj , then Lj+1 is the set of nodes that
are not in a previous layer and that have an edge to some
node in layer Lj .
BFS Tree

1 2 3 4 5

6 7 8 9

10 11 12 13 14 15 16
BFS Tree Example
A BFS traversal of a graph results in a breadth-first search tree:

2
1 3

s 2 3

1
3
BFS Tree Example
A BFS traversal of a graph results in a breadth-first search tree:

2
1 3

s 2 3

1
3
Can we say anything about the non-tree edges?
Example BFS

8:-1 3:-1

12:-1 6:-1

14:-1 9:-1

2:-1 7:-1 1:-1

4:-1

0:0

5:-1

10:-1 13:-1 11:-1


Example BFS

8:-1 3:-1

12:-1 6:-1

14:-1 9:-1

2:-1 7:1 1:1

4:-1

0:0

5:1

10:1 13:1 11:1


Example BFS

8:-1 3:2

12:-1 6:-1

14:-1 9:-1

2:2 7:1 1:1

4:-1

0:0

5:1

10:1 13:1 11:1


Example BFS

8:-1 3:2

12:-1 6:-1

14:-1 9:-1

2:2 7:1 1:1

4:-1

0:0

5:1

10:1 13:1 11:1


Example BFS

8:-1 3:2

12:-1 6:2

14:-1 9:2

2:2 7:1 1:1

4:-1

0:0

5:1

10:1 13:1 11:1


Example BFS

8:-1 3:2

12:-1 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:-1 3:2

12:-1 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:-1 3:2

12:-1 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:-1 3:2

12:3 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:-1 3:2

12:3 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:3 3:2

12:3 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:3 3:2

12:3 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:3 3:2

12:3 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:3 3:2

12:3 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Example BFS

8:3 3:2

12:3 6:2

14:2 9:2

2:2 7:1 1:1

4:2

0:0

5:1

10:1 13:1 11:1


Depth-First Search
DFS keeps walking down a path
until it is forced to backtrack. s
It backtracks until it finds a
new path to go down.
1
Think: Solving a maze. 2
It results in a search tree, called
the depth-first search tree. 3
4
In general, the DFS tree will be
very different than the BFS
tree.
5
7 6
Depth-First Search

2
1 3

s 5 4

7
6
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:-1:-1 9:-1:-1

6:-1:-1 13:-1:-1

5:-1:-1

8:-1:-1

7:-1:-1 12:-1:-1

1:-1:-1 2:-1:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:1:-1 9:-1:-1

6:-1:-1 13:-1:-1

5:-1:-1

8:-1:-1

7:-1:-1 12:-1:-1

1:-1:-1 2:-1:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:1:-1 9:-1:-1

6:-1:-1 13:-1:-1

5:2:-1

8:-1:-1

7:-1:-1 12:-1:-1

1:-1:-1 2:-1:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:1:-1 9:-1:-1

6:-1:-1 13:-1:-1

5:2:-1

8:-1:-1

7:-1:-1 12:3:-1

1:-1:-1 2:-1:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:1:-1 9:-1:-1

6:-1:-1 13:-1:-1

5:2:-1

8:-1:-1

7:-1:-1 12:3:-1

1:-1:-1 2:4:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:1:-1 9:-1:-1

6:-1:-1 13:-1:-1

5:2:-1

8:-1:-1

7:-1:-1 12:3:-1

1:5:-1 2:4:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:1:-1 9:-1:-1

6:-1:-1 13:-1:-1

5:2:-1

8:-1:-1

7:6:-1 12:3:-1

1:5:-1 2:4:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:1:-1 9:-1:-1

6:7:-1 13:-1:-1

5:2:-1

8:-1:-1

7:6:-1 12:3:-1

1:5:-1 2:4:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:-1:-1 14:1:-1 9:-1:-1

6:7:-1 13:8:-1

5:2:-1

8:-1:-1

7:6:-1 12:3:-1

1:5:-1 2:4:-1
Example DFS

0:0:-1

10:-1:-1 3:-1:-1 4:-1:-1

11:9:-1 14:1:-1 9:-1:-1

6:7:-1 13:8:-1

5:2:-1

8:-1:-1

7:6:-1 12:3:-1

1:5:-1 2:4:-1
Example DFS

0:0:-1

10:10:-1 3:-1:-1 4:-1:-1

11:9:-1 14:1:-1 9:-1:-1

6:7:-1 13:8:-1

5:2:-1

8:-1:-1

7:6:-1 12:3:-1

1:5:-1 2:4:-1
Example DFS

0:0:-1

10:10:11 3:-1:-1 4:-1:-1

11:9:12 14:1:-1 9:-1:-1

6:7:14 13:8:13

5:2:-1

8:15:-1

7:6:-1 12:3:-1

1:5:-1 2:4:-1
Example DFS

0:0:-1

10:10:11 3:-1:-1 4:23:-1

11:9:12 14:1:22 9:-1:-1

6:7:14 13:8:13

5:2:21

8:15:16

7:6:17 12:3:20

1:5:18 2:4:19
Example DFS

0:0:-1

10:10:11 3:24:-1 4:23:-1

11:9:12 14:1:22 9:-1:-1

6:7:14 13:8:13

5:2:21

8:15:16

7:6:17 12:3:20

1:5:18 2:4:19
Example DFS

0:0:-1

10:10:11 3:24:-1 4:23:-1

11:9:12 14:1:22 9:25:-1

6:7:14 13:8:13

5:2:21

8:15:16

7:6:17 12:3:20

1:5:18 2:4:19
Example DFS

0:0:29

10:10:11 3:24:27 4:23:28

11:9:12 14:1:22 9:25:26

6:7:14 13:8:13

5:2:21

8:15:16

7:6:17 12:3:20

1:5:18 2:4:19
General Tree Growing (following Gross & Yellen)
We can think of BFS and DFS (and several other algorithms) as
special cases of tree growing:
I Let T be the current tree T , and
I Maintain a list of frontier edges: the set of edges of G that
have one endpoint in T and one endpoint not in T :

I Repeatedly choose a frontier edge (somehow) and add it to T .


Tree Growing

TreeGrowing(graph G, vertex v, func nextEdge):


T = (v,)
S = set of edges incident to v
While S is not empty:
e = nextEdge(G, S)
T = T + e // add edge e to T
S = updateFrontier(G, S, e)
return T

I The function nextEdge(G, S) returns a frontier edge from S.


I updateFrontier(G, S, e) returns the new frontier after we
add edge e to T.
Tree Growing

These algorithms are all special cases / variants of Tree Growing,


with different versions of nextEdge:

1. Depth-first search
2. Breadth-first search
3. Prims minimum spanning tree algorithm
4. Dijkstras shortest path
5. A*
BFS & DFS as Tree Growing

Whats nextEdge for DFS?

Whats nextEdge for BFS?


BFS & DFS as Tree Growing

Whats nextEdge for DFS?

Select a frontier edge whose tree endpoint was discovered


most recently.

Why? We can use a stack to implement DFS.


Runtime: O(|Edges|)

Whats nextEdge for BFS?


BFS & DFS as Tree Growing

Whats nextEdge for DFS?

Select a frontier edge whose tree endpoint was discovered


most recently.

Why? We can use a stack to implement DFS.


Runtime: O(|Edges|)

Whats nextEdge for BFS?

Select a frontier edge whose tree endpoint was discovered earliest.

Why? We can use a queue to implement BFS.


Runtime: O(|Edges|)
Prims Algorithm
Prims Algorithm: Run TreeGrowing starting with any root
node, adding the frontier edge with the smallest weight.

Theorem. Prims algorithm produces a minimum spanning tree.

v
e
r u

S = set of nodes already in


the tree when e is added
Implementations of BFS and DFS
BFS implementation

procedure bfs(G, s):


Q := queue containing only s
while Q not empty
v := Q.front(); Q.remove front()
for w G.neighbors(v):
if w not seen:
mark w seen
Q.enqueue(w)
Recursive implementation of DFS

procedure dfs(G, u):


while u has an unvisited neighbor in G
v := an unvisited neighbor of u
mark v visited
dfs(G, v)
Stack-based implementation of DFS

procedure dfs(G, s):


S := stack containing only s
while S not empty
v := S.pop()
if v not visited:
mark v visited
for w G.neighbors(v): S.push(w)
Properties of BFS and DFS
Property of Non-BFS-Tree Edges
Theorem. Choose x Li and y Lj such that {x, y } is an edge
in undirected graph G . Then i and j differ by at most 1.

In other words, edges of G that do not appear in the tree connect


nodes either in the same layer or adjacent layer.

Proof. Suppose not, and that i < j 1.

All the neighbors of x will be found by layer i + 1.

Therefore, the layer of y is less than i + 1, so j i + 1, which


contradicts i < j 1.
A property of Non-DFS-Tree Edges
Theorem. Let x and y be nodes in the DFS tree TG such that
{x, y } is an edge in undirected graph G . Then one of x or y is an
ancestor of the other in TG .

Proof. Suppose, wlog, x is reached first in the DFS.

All the nodes that are marked explored between first encountering
x and leaving x for the last time are descendants of x in TG .

When we reach x, node y must not yet have been explored.

It must become explored before leaving x for the last time


(otherwise, we should add {x, y } to TG ). Hence, y is a descendent
of x in TG .

You might also like