6.006 lecture 14: depth-first search (dfs), topological sorting

7
Lecture 14 Graphs II: DFS 6.006 Fall 2011 Lecture 14: Graphs II: Depth-First Search Lecture Overview Depth-First Search Edge Classification Cycle Testing Topological Sort Recall: graph search: explore a graph e.g., find a path from start vertex s to a desired vertex adjacency lists: array Adj of |V | linked lists for each vertex u V , Adj[u] stores u’s neighbors, i.e., {v V | (u, v) E} (just outgoing edges if directed) For example: a b c a b c c c b a Adj Figure 1: Adjacency Lists Breadth-first Search (BFS): Explore level-by-level from s — find shortest paths 1

Upload: truongtram

Post on 04-Jan-2017

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 6.006 Lecture 14: Depth-first search (DFS), topological sorting

Lecture 14 Graphs II: DFS 6.006 Fall 2011

Lecture 14: Graphs II: Depth-First Search

Lecture Overview

• Depth-First Search

• Edge Classification

• Cycle Testing

• Topological Sort

Recall:

• graph search: explore a graph

e.g., find a path from start vertex s to a desired vertex

• adjacency lists: array Adj of |V | linked lists

– for each vertex u ∈ V , Adj[u] stores u’s neighbors, i.e., {v ∈ V | (u, v) ∈ E}(just outgoing edges if directed)

For example:

a

b c

a

b

c

c

c

b

a

Adj

Figure 1: Adjacency Lists

Breadth-first Search (BFS):

Explore level-by-level from s — find shortest paths

1

Page 2: 6.006 Lecture 14: Depth-first search (DFS), topological sorting

Lecture 14 Graphs II: DFS 6.006 Fall 2011

Depth-First Search (DFS)

This is like exploring a maze.

s

Figure 2: Depth-First Search Frontier

Depth First Search Algorithm

• follow path until you get stuck

• backtrack along breadcrumbs until reach unexplored neighbor

• recursively explore

• careful not to repeat a vertex

parent = {s: None}

DFS-visit (V, Adj, s): for v in Adj [s]: if v not in parent: parent [v] = s DFS-visit (V, Adj, v)

DFS (V, Adj) parent = { } for s in V: if s not in parent: parent [s] = None DFS-visit (V, Adj, s)

}}search from start vertex s(only see stuff reachable from s)

explore entire graph

(could do same to extend BFS)

start v

�nish v

Figure 3: Depth-First Search Algorithm

2

Page 3: 6.006 Lecture 14: Depth-first search (DFS), topological sorting

Lecture 14 Graphs II: DFS 6.006 Fall 2011

Example

1

3

2 6

back edge

7

5

4

8

back edge

forward edge

cross edge

a b c

d e f

S1 S2

Figure 4: Depth-First Traversal

Edge Classification

back edge: to ancestor

forward edge: to descendantcross edge (to another subtree)

tree edges (formed by parent)nontree edges

Figure 5: Edge Classification

• to compute this classification (back or not), mark nodes for duration they are “on the

stack”

• only tree and back edges in undirected graph

Analysis

• DFS-visit gets called with

=⇒ time in DFS-visit =s

∑a vertex s only once (because then parent[s] set)

|Adj[s]| = O(E)∈V

• DFS outer loop adds just O(V )

=⇒ O(V + E) time (linear time)

3

Page 4: 6.006 Lecture 14: Depth-first search (DFS), topological sorting

Lecture 14 Graphs II: DFS 6.006 Fall 2011

Cycle Detection

Graph G has a cycle ⇔ DFS has a back edge

Proof

tree edgesis a cycle

back edge: to tree ancestor

(<=)

(=>) consider �rst visit to cycle:

FIRST!

v2

v3

vk

v1 v0

• before visit to vi finishes,

will visit vi+1 (& finish):

will consider edge (vi, vi+1)

=⇒ visit vi+1 now or already did

• =⇒ before visit to v0 finishes,

will visit vk (& didn’t before)

• =⇒ before visit to vk (or v0) finishes,

will see (vk, v0) as back edge

Job scheduling

Given Directed Acylic Graph (DAG), where vertices represent tasks & edges represent

dependencies, order tasks without violating dependencies

4

Page 5: 6.006 Lecture 14: Depth-first search (DFS), topological sorting

Lecture 14 Graphs II: DFS 6.006 Fall 2011

G

A

H

B C F

D E

I

1234

78 9

56

Figure 6: Dependence Graph: DFS Finishing Times

Source:

Source = vertex with no incoming edges

= schedulable at beginning (A,G,I)

Attempt:

BFS from each source:

• from A finds A, BH, C, F

• from D finds D, BE, CF ← slow . . . and wrong!

• from G finds G, H

• from I finds I

Topological Sort

DFS-Visit(v)

. . .Reverse of DFS finishing times (time at which DFS-Visit(v) finishes)

order.append(v) order.reverse()

5

Page 6: 6.006 Lecture 14: Depth-first search (DFS), topological sorting

Lecture 14 Graphs II: DFS 6.006 Fall 2011

Correctness

For any edge (u, v) — u ordered before v, i.e., v finished before u

u v

• if u visited before v:

– before visit to u finishes, will visit v (via (u, v) or otherwise)

– =⇒ v finishes before u

• if v visited before u:

– graph is acyclic

– =⇒ u cannot be reached from v

– =⇒ visit to v finishes before visiting u

6

Page 7: 6.006 Lecture 14: Depth-first search (DFS), topological sorting

MIT OpenCourseWarehttp://ocw.mit.edu

6.006 Introduction to Algorithms Fall 2011 For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.