Depth first search
This presentation is the property of its rightful owner.
Sponsored Links
1 / 17

Depth-First Search PowerPoint PPT Presentation


  • 43 Views
  • Uploaded on
  • Presentation posted in: General

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.

Download Presentation

Depth-First Search

An Image/Link below is provided (as is) to download presentation

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


Depth first search

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

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

for eachu  Adj(v) do

ifdisc(u) = unseen then

DFS-visit(u)


A dfs example

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


Depth first search

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

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.


Depth first search

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|)


Depth first search

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


Depth first search

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


Depth first search

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


Depth first search

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.


Depth first search

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

for eachu  Adj(v) do

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


Depth first search

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).


Depth first search

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


Depth first search

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


Depth first search

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

Add a line to DFS-visit

Algorithm for Topological Sort

DFS-visit-topo(v)

time  time + 1

disc(v)  time

for eachu  Adj(v) do

ifdisc(u) = unseen then

DFS-visit(u)

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


Depth first search

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):

Case 1:DFS-visit-topo(v) has already finished.

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!


Depth first search

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).


  • Login