Depth-First Search

1 / 17

# Depth-First Search - PowerPoint PPT Presentation

G is completely traversed before exploring G and G. 1. 2. 3. Depth-First Search. Idea : Keep going forward as long as there are unseen nodes to be visited. Backtrack when stuck. v. G. 3. G. G. 2. 1. From Computer Algorithms by S. Baase and A. van Gelder.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about 'Depth-First Search' - ishi

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

G is completely traversed

before exploring G and G .

1

2

3

Depth-First Search

Idea: Keep going forward as long as there are unseen nodes

to be visited. Backtrack when stuck.

v

G

3

G

G

2

1

From Computer Algorithms by S. Baase and A. van Gelder

The DFS Algorithm

DFS(G)

time  0 // global variable

for eachv  V(G) do

disc(v)  unseen

for eachv  V(G) do

if disc(v) = unseen then

DFS-visit(v)

DFS-visit(v)

time  time + 1

disc(v)  time

ifdisc(u) = unseen then

DFS-visit(u)

8

9

4

10

6

7

5

11

12

A DFS Example

time = 1

a

h

i

c

d

e

j

f

k

l

b

g

2

3

Recursive DFS Calls

DFS(G)

DFS-visit(a)

DFS-visit(b)

DFS-visit(g)

DFS-visit(e)

DFS-visit(f)

DFS-visit(c)

DFS-visit(d)

DFS-visit(h)

DFS-visit(i)

DFS-visit(j)

DFS-visit(k)

DFS-visit(l)

1

a

c

d

e

4

6

7

5

f

2

3

b

g

8

9

h

i

10

j

k

l

DFS-visit(v) explores every unvisited vertex

reachable from v before it returns.

12

11

Depth-First Search Forest

a

h

i

c

d

e

j

f

k

l

b

g

Edges that, during DFS, lead to an unexplored vertex form a depth-first

search forest.

DFS-visit is called exactly once for each node.

|V| such calls in total.

Each call timestamps a node and then

increments the time, which takes O(1) time.

Each edge is examined O(1) time.

Running Time of DFS

O(|V| + |E|)

Edge Classification – Undirected Graphs

1. Tree edges are those in the DFS forest.

2. Back edges go from a vertex to one of its ancestors.

a

h

j

b

c

d

i

k

g

l

f

e

Edge Classification – Directed Graphs

Besides tree edges and back edges, there are also

3. Forward edges go from a vertex to one of its descendants.

4. Cross edges: all other edges.

a

h

b

c

g

d

e

i

Find connected components of G.

Determine if G has a cycle.

Determine if removing a vertex or edge will disconnect G.

Determine if G is planar.

Applications of DFS

InO(|V| + |E|)time, we can

a

b

c

v has not been explored at the time of the

initial call to DFS-visit(u).

v

v will be visited before returning from

DFS-visit(u).

u

Back Edge

TheoremA directed graph G has a cycle if and only if its DFS

forest has a back edge.

 A back edge leads to a cycle.

Proof

 Suppose there is a cycle. Let u be the

vertex with smallest time stamp on the

cycle and v be the predecessor of u in the cycle.

Therefore at the time of visiting v, a back edge (v, u) is found.

The above sufficient and necessary condition carries over to an undirected graph.

root

u

v

Algorithm for Detecting Cycle

(v, u) is a back edge if v is a descendant of u in the DFS tree.

for eachu Vdo

onpath(u)  false// on path from the root of the DFS tree

DFS-visit(v)

time  time + 1

disc(v)  time

onpath(v)  true

ifdisc(u) = unseen then

DFS-visit(u)

else if onpath(u) then

a cycle has been found; halt

onpath(v)  false// backtrack: v no longer on path from root

Some topological sorts:

a

b

• a, c, e, b, d, g, f
• a, b, c, d, g, f, e
• b, d, g, a, c, f, e

d

c

e

f

g

Topological Sort of Digraph

Ordering < over V(G) such that u < v whenever (u, v)  E(G).

Each node represents an activity; e.g., taking a class.

(u, v)  E(G) implies activity u must be scheduled

before activity v.

Topological sort schedules all activities.

More than one schedule may exist.

Intuition: Precedence Diagram

a

b

Existence of Topological Sort

Lemma G can be topologically sorted iff it has no cycle, that

is, iff it is a dag(directed acyclic graph).

 If G has a cycle, then it cannot be topologically sorted.

Proof

 If G has no cycle, then it can be topologically sorted.

Constructive proof: An algorithm that sorts any dag.

Courtesy: Dr. Fernandez-Baca

Initialize a global queue L   within DFS(G)

Algorithm for Topological Sort

DFS-visit-topo(v)

time  time + 1

disc(v)  time

ifdisc(u) = unseen then

DFS-visit(u)

L insert(v, L)// insert v in the front of L

u

v

v

u

Correctness of the Algorithm

Claim Let G be a directed acyclic graph (dag). If (u, v)  E(G),

then DFS-visit-topo(u) finishes after DFS-visit-topo(v).

Proof Consider the time when DFS-visit-topo(u) first scans (u, v):

Obviously, DFS-visit-topo(u) finishes

afterwards. And (u, v) is a cross edge.

Case 2:DFS-visit-topo(v) has already started, but not yet finished.

Then (u, v) is a back-edge and G has a

cycle, contradicting that it is a dag!

u

v

Correctness (cont’d)

Case 3: DFS-visit-topo(v) has not yet started.

Then the procedure call will start

immediately. So (u, v) is a tree edge.

Hence DFS-visit-topo(u) will finish after

DFS-visit-topo(v).

Combining cases 1 and 3, u will always be inserted in front

of v in the queue L.

Theorem If G is a dag, then at termination of DFS, L is a

topological ordering of V(G).