dfs on directed graphs

14
Directed Graphs DFS 1.3 1 DFS on Directed Graphs JFK BOS MIA ORD LAX DFW SFO Directed Graphs DFS 1.3 2 Outline and Reading (§6.4) Reachability (§6.4.1) Directed DFS Strong connectivity Directed Acyclic Graphs (DAG’s) (§6.4.4) Topological Sorting Directed Graphs DFS 1.3 3 Digraphs A digraph is a graph whose edges are all directed Short for “directed graph” Applications one-way streets flights task scheduling A C E B D

Upload: others

Post on 03-Feb-2022

14 views

Category:

Documents


0 download

TRANSCRIPT

Shortest Path 2/27/2003 6:40 PM

1

Directed Graphs DFS 1.3 1

DFS on Directed GraphsJFK

BOS

MIA

ORD

LAXDFW

SFO

Directed Graphs DFS 1.3 2

Outline and Reading (§6.4)

Reachability (§6.4.1)Directed DFSStrong connectivity

Directed Acyclic Graphs (DAG’s) (§6.4.4)

Topological Sorting

Directed Graphs DFS 1.3 3

Digraphs

A digraph is a graph whose edges are all directed

Short for “directed graph”

Applicationsone-way streetsflightstask scheduling A

C

E

B

D

Shortest Path 2/27/2003 6:40 PM

2

Directed Graphs DFS 1.3 4

Digraph ApplicationScheduling: edge (a,b) means task a must be completed before b can be started

The good life

ics141ics131 ics121

ics53 ics52ics51

ics23ics22ics21

ics161

ics151

ics171

Directed Graphs DFS 1.3 5

Directed DFSDFS on digraphs traverses edges only along their proper directionIn the directed DFS algorithm, we have four types of edges

discovery edgesback edgesforward edgescross edges

A directed DFS starting at a vertex s determines the vertices reachable from s

A

C

E

B

D

Directed Graphs DFS 1.3 6

Directed DFS example

DFS_Sweep starts at A, then B,…tree, back, cross

C

A

E

B

D

FC

A

E D

C

A

B

D

F

Shortest Path 2/27/2003 6:40 PM

3

Directed Graphs DFS 1.3 7

DAGs and Topological OrderingA directed acyclic graph (DAG) is a digraph that has no directed cyclesA topological ordering of a digraph is a numbering

v1 , …, vn

of the vertices such that for every edge (vi , vj), we have i < jExample: in a task scheduling digraph, a topological ordering a task sequence that satisfies the precedence constraints

TheoremA digraph admits a topological ordering if and only if it is a DAG

B

A

D

C

E

DAG G

B

A

D

C

E

Topological ordering of G

v1

v2

v3

v4 v5

Directed Graphs DFS 1.3 8

write c.s. program

play

Topological SortingNumber vertices, so that (u,v) in E implies u < v

wake up

eat

nap

study computer sci.

more c.s.

work out

sleep

dream about graphs

A typical student day1

2 3

4 5

6

7

8

9

1011

make cookies for professors

Directed Graphs DFS 1.3 9

Note: This algorithm is different than the one in Goodrich-Tamassia

Running time: O(n + m) [with smart implementation] How…?

Algorithm for Topological Sorting

Method TopologicalSort(G)H ← G // Temporary copy of Gn ← G.numVertices()while H is not empty do

Let v be a vertex with no outgoing edgesLabel v ← nn ← n - 1Remove v from H

Shortest Path 2/27/2003 6:40 PM

4

Directed Graphs DFS 1.3 10

Topological Sorting Algorithm using DFS

Simulate the algorithm by using depth-first search

O(n+m) time.

Algorithm topologicalDFS(G, v)Input graph G and a start vertex v of GOutput a labeling of the vertices of G

in the connected component of v in topological order

setLabel(v, VISITED)for all e ∈ G.outIncidentEdges(v)

if getLabel(e) = UNEXPLOREDw ← opposite(v,e)if getLabel(w) = UNEXPLORED

setLabel(e, DISCOVERY)topologicalDFS(G, w)

else{e is a forward or cross edge}setLabel(e, VISITED)

Label v with topological number nn ← n - 1

Algorithm topoDFS_Sweep(G)Input dag GOutput topological ordering of G

n ← G.numVertices()for all u ∈ G.vertices()

setLabel(u, UNEXPLORED)for all e ∈ G.edges()

setLabel(e, UNEXPLORED)for all v ∈ G.vertices()

if getLabel(v) = UNEXPLOREDtopologicalDFS(G, v)

Directed Graphs DFS 1.3 11

Topological Sorting Example

Directed Graphs DFS 1.3 12

Topological Sorting Example

9

Shortest Path 2/27/2003 6:40 PM

5

Directed Graphs DFS 1.3 13

Topological Sorting Example

8

9

Directed Graphs DFS 1.3 14

Topological Sorting Example

78

9

Directed Graphs DFS 1.3 15

Topological Sorting Example

78

6

9

Shortest Path 2/27/2003 6:40 PM

6

Directed Graphs DFS 1.3 16

Topological Sorting Example

78

56

9

Directed Graphs DFS 1.3 17

Topological Sorting Example

7

4

8

56

9

Directed Graphs DFS 1.3 18

Topological Sorting Example

7

4

8

56

3

9

Shortest Path 2/27/2003 6:40 PM

7

Directed Graphs DFS 1.3 19

Topological Sorting Example2

7

4

8

56

3

9

Directed Graphs DFS 1.3 20

Topological Sorting Example2

7

4

8

56

1

3

9

Directed Graphs DFS 1.3 21

Strong ConnectivityEach vertex can reach all other vertices

a

d

c

b

e

f

g

Shortest Path 2/27/2003 6:40 PM

8

Directed Graphs DFS 1.3 22

Pick a vertex v in G.Perform a DFS from v in G.

If there’s a w not visited, print “no”.

Let G’ be G with edges reversed.Perform a DFS from v in G’.

If there’s a w not visited, print “no”.Else, print “yes”.

Running time: O(n+m).

Strong Connectivity Algorithm

G:

G’:

a

d

c

b

e

f

g

a

d

c

b

e

f

g

Directed Graphs DFS 1.3 23

Maximal subgraphs such that each vertex can reach all other vertices in the subgraphCan be computed in O(n+m) time using DFS

Strongly Connected Components

{ a , c , g }

{ f , d , e , b }

a

d

c

b

e

f

g

Directed Graphs DFS 1.3 24

SCC algorithm

Using DFS_Sweep for directed graphs, construct list L of reverse finish order of the vertices in the traversal.

Node is finished when traversal leaves it permanently.

Do another DFS_Sweep on GR, (G with edges reversed), with the following modification: in DFS_Sweep outer loop, start DFS calls on vertices according to the order in list L.Each spanning tree produced by DFS_Sweep on GR

will contain all nodes from exactly one SCC of G

Shortest Path 2/27/2003 6:40 PM

9

Directed Graphs DFS 1.3 25

Strongly Connected Components

Directed Graphs DFS 1.3 26

Strongly Connected Components

Directed Graphs DFS 1.3 27

SCC Algorithm, more detail// Phase 1Run DFS_Sweep on G, returning a list L of nodes in reverse finish order. Done by adding vertex v to the front of L after traversal on v is finished in DFS_Sweep.

// Phase 2aConstruct GR from G by copying the vertices, and then adding the reverse of every edge from G to GR.

// Phase 2bDo a modified DFS_Sweep traversal on GR, where list L is used to order the DFS calls. Each DFS call labels vertices traversed with a different SCC number.

// Final Phase: Label vertices and edges of G.

Shortest Path 2/27/2003 6:40 PM

10

Directed Graphs DFS 1.3 28

DFS Phase 1Construct list LSimilar to topological sort

O(n+m) time.

Algorithm SCC1DFS(G, v)Input graph G and a start vertex v of GOutput vertices of G in the connected

component of v added to L,according to reverse finish order

setLabel(v, VISITED)for all e ∈ G.outIncidentEdges(v)

if getLabel(e) = UNEXPLOREDw ← opposite(v,e)if getLabel(w) = UNEXPLORED

setLabel(e, DISCOVERY)SCC1DFS(G, w)

else{e is a forward or cross edge}

L.insertFirst(v)

Algorithm SCC1DFS_Sweep(G)Input dag GOutput list L of vertices of G in

reverse finish order.L ← empty listfor all u ∈ G.vertices()

setLabel(u, UNEXPLORED)for all e ∈ G.edges()

setLabel(e, UNEXPLORED)for all v ∈ G.vertices()

if getLabel(v) = UNEXPLOREDSCC1DFS(G, v)

Directed Graphs DFS 1.3 29

DFS Phase 2bSimilar to Connected Components

O(n+m) time.

Algorithm SCC2bDFS(GR, v, sccNum)Input graph GR and a start vertex vOutput vertices of GR in the connected

component of v labeled by sccNum

setLabel(v, VISITED)Label v with sccNumfor all e ∈ G.outIncidentEdges(v)

if getLabel(e) = UNEXPLOREDw ← opposite(v,e)if getLabel(w) = UNEXPLORED

setLabel(e, DISCOVERY)SCC2bDFS(G, w)

else{e is a forward or cross edge}

Algorithm SCC2bDFS_Sweep(GR,L)Input dag GR, list LOutput Labeling of vertices in GR by scc component number

sccNum←1for all u ∈ G.vertices()

setLabel(u, UNEXPLORED)for all e ∈ G.edges()

setLabel(e, UNEXPLORED)for all v ∈ L, {traverse L in order}

if getLabel(v) = UNEXPLOREDSCC2bDFS(G, v, sccNum)sccNum++

Directed Graphs DFS 1.3 30

Correctness of SCC algorithm

Lemma 1: In terms of vertices, SCC’s of G are the same as the SCC’s of GR.Lemma 2: For graph G, let F be a forest generated by DFS_Sweep on G. Let S be a tree of F. Then S contains one or more complete SCC’s of G. (No partial SCC’s).Lemma 3a: Let F be the forest generated by SCC phase 2b, and S be a spanning tree in F. Let x be the root of S, and v be a descendent of x. Then there is a path from v to x in GR. Lemma 3b: Let S be as in Lemma 3a. S combined with other edges in GR form a strongly connected subgraph of GR.

Shortest Path 2/27/2003 6:40 PM

11

Directed Graphs DFS 1.3 31

Breadth-First Search

CB

A

E

D

L0

L1

FL2

Directed Graphs DFS 1.3 32

Outline and ReadingBreadth-first search (§6.3.3)

AlgorithmExamplePropertiesAnalysisApplications

DFS vs. BFS (§6.3.3)Comparison of applicationsComparison of edge labels

Directed Graphs DFS 1.3 33

Breadth-First Search

Breadth-first search (BFS) is general graph traversal techniqueVisits all the vertices and edgeswith n vertices and m edges takes O(n + m ) timeLike searching a binary tree level by level

A BFS can Determine whether G is connectedCompute the connected components of GCompute a spanning forest of GFind and report a path with the minimum number of edges between two given vertices Find a simple cycle, if there is one

Shortest Path 2/27/2003 6:40 PM

12

Directed Graphs DFS 1.3 34

Example

CB

A

E

D

discovery edgecross edge

A visited vertexA unexplored vertex

unexplored edge

L0

L1

F

CB

A

E

D

L0

L1

F

CB

A

E

D

L0

L1

F

Directed Graphs DFS 1.3 35

Example (cont.)

CB

A

E

D

L0

L1

F

CB

A

E

D

L0

L1

FL2

CB

A

E

D

L0

L1

FL2

CB

A

E

D

L0

L1

FL2

Directed Graphs DFS 1.3 36

Example (cont.)

CB

A

E

D

L0

L1

FL2

CB

A

E

D

L0

L1

FL2

CB

A

E

D

L0

L1

FL2

Shortest Path 2/27/2003 6:40 PM

13

Directed Graphs DFS 1.3 37

BFS AlgorithmThe algorithm uses a queue to keep track of vertices

Algorithm BFS(G, s)Q ← new empty queueQ.enqueue(s)setLabel(s, VISITED)while ¬Q.isEmpty()

v ← Q.dequeue() for all e ∈ G.incidentEdges(v)

if getLabel(e) = UNEXPLOREDw ← opposite(v,e)if getLabel(w) = UNEXPLORED

setLabel(e, DISCOVERY)setLabel(w, VISITED)Q.enqueue(w)

elsesetLabel(e, CROSS)

Algorithm BFS_Sweep(G)Input graph GOutput labeling of the edges

and the vertices of G for all u ∈ G.vertices()setLabel(u, UNEXPLORED)

for all e ∈ G.edges()setLabel(e, UNEXPLORED)

for all v ∈ G.vertices()if getLabel(v) = UNEXPLORED

BFS(G, v)

Directed Graphs DFS 1.3 38

PropertiesNotation

Gs: connected component of sLi: nodes at depth i in BFS tree.

Property 1BFS(G, s) visits all the vertices and edges of Gs

Property 2The discovery edges labeled by BFS(G, s) form a spanning tree Tsof Gs; Ts called BFS tree

Property 3For each vertex v in Li

The path of Ts from s to v has iedges Every path from s to v in Gs has at least i edges

CB

A

E

D

L0

L1

FL2

CB

A

E

D

F

Directed Graphs DFS 1.3 39

AnalysisSetting/getting a vertex/edge label takes O(1) timeEach vertex is labeled twice

once as UNEXPLOREDonce as VISITED

Each edge is labeled twiceonce as UNEXPLOREDonce as DISCOVERY or CROSS

Each vertex is inserted once into QInner loop of BFS runs in O(deg(v)) timeBFS runs in O(n + m) time provided the graph is represented by the adjacency list structure

Recall that Σv deg(v) = 2m

Shortest Path 2/27/2003 6:40 PM

14

Directed Graphs DFS 1.3 40

ApplicationsCan specialize the BFS traversal of a graph Gto solve the following problems in O(n + m)time

Compute the connected components of GCompute a spanning forest of GFind a simple cycle in G, or report that G is a forestGiven two vertices of G, find a minimum length path in G (if it exists)

Directed Graphs DFS 1.3 41

DFS vs. BFS

CB

A

E

D

L0

L1

FL2

CB

A

E

D

F

DFS BFS

√Topological sort, Biconnectedcomponents, SCC

√Shortest paths

√√Spanning forest, connected components, paths, cycles

BFSDFSApplications

Directed Graphs DFS 1.3 42

DFS vs. BFS (cont.)

Back edge (v,w)w is an ancestor of v in the tree of discovery edges

Cross edge (v,w)w is in the same level as v or in the next level in the tree of discovery edges

CB

A

E

D

L0

L1

FL2

CB

A

E

D

F

DFS BFS

On undirected graphs