graph search algorithms - york university

Post on 03-Feb-2022

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

CSE 31011

Graph Search Algorithms

CSE 31012

Graph

a

c

b Node ~ city or computer

Edge ~ road or data cable

Undirected or Directed

A surprisingly large number of computational problems can be expressed as graph problems.

CSE 31013

Directed and Undirected Graphs

(c) The subgraph of the graph in part (a) induced by the vertex set {1,2,3,6}.

(a) A directed graph G = (V, E), where V = {1,2,3,4,5,6} and E = {(1,2), (2,2), (2,4), (2,5), (4,1), (4,5), (5,4), (6,3)}. The edge (2,2) is a self-loop.

(b) An undirected graph G = (V,E), where V = {1,2,3,4,5,6} and E = {(1,2), (1,5), (2,5), (3,6)}. The vertex 4 is isolated.

CSE 31014

Trees

Tree Forest Graph with Cycle

A tree is a connected, acyclic, undirected graph.

A forest is a set of trees (not necessarily connected)

CSE 31015

Running Time of Graph Algorithms

• Running time often a function of both |V| and |E|.

• For convenience, drop the | . | in asymptotic notation, e.g. O(V+E).

End of Lecture 10

April 6, 2009

CSE 31017

Representations: Undirected Graphs

Adjacency List Adjacency Matrix

Space complexity:

Time to find all neighbours of vertex :u

Time to determine if ( , ) : ∈u v E

( )θ +V E

(degree( ))θ u

(degree( ))θ u

2( )θ V

( )θ V

(1)θ

CSE 31018

Representations: Directed Graphs

Adjacency List Adjacency Matrix

Space complexity:

Time to find all neighbours of vertex :u

Time to determine if ( , ) : ∈u v E

( )θ +V E

(degree( ))θ u

(degree( ))θ u

2( )θ V

( )θ V

(1)θ

CSE 31019

Breadth-First Search

• Goal: To recover the shortest paths from a source node s to all other reachable nodes v in a graph.– The length of each path and the paths themselves are returned.

• Notes:– There are an exponential number of possible paths

– This problem is harder for general graphs than trees because of cycles!

s

?

CSE 310110

Breadth-First Search

• Idea: send out search ‘wave’ from s.

• Keep track of progress by colouring vertices:– Undiscovered vertices are coloured black

– Just discovered vertices (on the wavefront) are coloured red.

– Previously discovered vertices (behind wavefront) are coloured grey.

Graph ( , ) (directed or undirected) and sourceInput: vertex .G V E s V= ∈

[ ] shortest path distance ( , ) from to , . [ ] such that ( , ) is las

Outpu

t edg

t:

e on shortest path from a to

.d v s v s v v V

v u u v s vδ

π= ∀ ∈

=

CSE 310111

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

First-In First-Out (FIFO) queuestores ‘just discovered’ vertices

CSE 310112

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

s

d=0

d=0

CSE 310113

BFS FoundNot Handled

Queue

d=0a

bgd

d=1

s

a

c

h

k

f

i

l

m

j

e

b

gd

d=0d=1

CSE 310114

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

a

bgd

d=0d=1

d=1

CSE 310115

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

bgd

cf

d=0d=1

d=2

d=1

d=2

CSE 310116

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

bg

cfme

d=0d=1

d=2

d=1

d=2

CSE 310117

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queued=0

d=1

d=2

b

j

cfme

d=1

d=2

CSE 310118

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queued=0

d=1

d=2

j

cfme

d=1

d=2

CSE 310119

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

cfmej

d=0d=1

d=2

d=2

CSE 310120

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

fmejhi

d=0d=1

d=2

d=3

d=2

d=3

CSE 310121

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

mejhi

d=0d=1

d=2

d=3

d=2

d=3

CSE 310122

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

ejhil

d=0d=1

d=2

d=3

d=2

d=3

CSE 310123

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

jhil

d=0d=1

d=2

d=3

d=2

d=3

CSE 310124

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

hil

d=0d=1

d=2

d=3

d=2

d=3

CSE 310125

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

h

d=0d=1

d=3

d=2

il

d=3

CSE 310126

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

ilk

d=0d=1

d=3d=4

d=2

d=3

d=4

CSE 310127

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

lk

d=0d=1

d=3d=4

d=2

d=3

d=4

CSE 310128

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

k

d=0d=1

d=3d=4

d=2

d=3

d=4

CSE 310129

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queue

k

d=0d=1

d=3d=4

d=2

d=4

CSE 310130

BFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Queued=0

d=1

d=3d=4

d=2

d=4d=5

CSE 310131

Breadth-First Search Algorithm

• Q is a FIFO queue.

• Each vertex assigned finite dvalue at most once.

• Q contains vertices with d values {i, …, i, i+1, …, i+1}

• d values assigned are monotonically increasing over time.

BLACK

RED

BLACKRED

GRAY

CSE 310132

Breadth-First-Search is Greedy

• Vertices are handled:– in order of their discovery (FIFO queue)

– Smallest d values first

CSE 310133

Basic Steps:

su

The shortest path to uhas length d

v

& there is an edge from u to v

d

There is a path to v with length d+1.

Correctness

CSE 310134

Correctness

• Vertices are discovered in order of their distance from the source vertex s.

• When we discover v, how do we know there is not a shorter path to v?– Because if there was, we would already have discovered it!

su vd

CSE 310135

Correctness

Graph ( , ) (directed or undirected) and sourceInput: vertex .G V E s V= ∈

[ ] distance from to , . [ ] such that ( , ) is last edge on s

Output:

hortest path from to . d v s v v V

v u u v s vπ= ∀ ∈

=

1. [ ] ( , )d v s v v Vδ≥ ∀ ∈

2. [ ] ( , ) d v s v v Vδ> ∀ ∈/

Two-step proof:

On exit:

CSE 310136

δ≥ ∀ ∈Claim 1. is never too small: [ ] ( , )d d v s v v V There exists a path from to of length [ ].Proof: v vs d

By Induction:

Suppose it is true for all vertices thus far discovered ( an grre d d ey).

is discovered from some adjacent vertex being handled.uv

→ = +[ ] [ ] 1d v d uδ≥ +( , ) 1usδ≥ ( , )s v u v

s

since each vertex is assigned a value exactly once, it follows that o [ ]n exit, ( ., )d v s v

vv V

dδ≥ ∀ ∈

CSE 310137

<LI>: [ ] ( , ) 'disco rvered' ( o gr )eyred d v s v v Vδ← ≥ ∀ ∈

( , ) 1s uδ≥ + ( , )s vδ≥

δ≥ ∀ ∈Claim 1. is never too small: [ ] ( , )d d v s v v V

BLACK

RED

BLACKRED

GRAY

There exists a path from to of length [ ].Proof: v vs d

su v

CSE 310138

δ≤ ∀ ∈Claim 2. is never too big: [ ] ( , ) d d v s v v VProof by contradiction:

δSuppose one or more vertices receive a value greater than .d

δLet be the vertex with minimum ( , ) that receives such a value.s dv v

Let be 's predecessor on a shortest path from to .u sv v

su v

Suppose that is discovered and assigned this d value when vertex is dequeued.v x

= −[ ] [ ] 1d x d v

δ= −[ ] ( , ) 1d s vu

δ <( , ) [ ]vs d v

vertices are dequeued in increasing order of Reca v .ll: alued

→ u was dequeued before x.

δ→ = + =[ ] [ ] 1 ( , )dvd u s v

xδ→ − < −( , ) 1 [ ] 1v d vs

Then

→ <[ ] [ ]d u d x

Contradiction!

CSE 310139

Correctness

δ≥ ∀ ∈Claim 1. is never too small: [ ] ( , )d d v s v v V

δ≤ ∀ ∈Claim 2. is never too big: [ ] ( , ) d d v s v v V

δ⇒ = ∀ ∈ is just right: [ ] ( , ) d d v s v v V

CSE 310140

Progress?

• On every iteration one vertex is processed (turns gray).

BLACK

RED

BLACKRED

GRAY

CSE 310141

Running Time

Each vertex is enqueued at most once ( )O V→

Each entry in the adjacency lists is scanned at most once O(E)→

Thus run time is ( ).O V E+BLACK

RED

RED

GRAY

BLACK

CSE 310142

• The shortest path problem has the optimal substructure property:– Every subpath of a shortest path is a shortest path.

• The optimal substructure property– is a hallmark of both greedy and dynamic programming algorithms.

– allows us to compute both shortest path distance and the shortest paths themselves by storing only one d value and one predecessor value per vertex.

Optimal Substructure Property

u vs

shortest path

shortest path shortest path

CSE 310143

Recovering the Shortest PathFor each node v, store predecessor of v in π(v).

su v

π(v)

π(v) = u.Predecessor of v is

CSE 310144

Recovering the Shortest Path

Precondition: and are vertices of graph Postcondition: the vertices on the shortest path from to have been prin

P

if then

RINT-PATH( , , )

pr

print

ted in o

else

intif

rd

then [ ] I "

e

L

r

N

s v Gs v

s

v

v

ss

G

v

π

=

=

elseno path from" "to" "exists"

PRINT-PATH( , , [ ])print

s v

G s vv

π

CSE 310145

Colours are actually not required

CSE 310146

Depth First Search (DFS)

• Idea:– Continue searching “deeper” into the graph, until we get

stuck.

– If all the edges leaving v have been explored we “backtrack”to the vertex from which v was discovered.

• Does not recover shortest paths, but can be useful for extracting other properties of graph, e.g.,– Topological sorts

– Detection of cycles

– Extraction of strongly connected components

CSE 310147

Depth-First Search

• Explore every edge, starting from different vertices if necessary.

• As soon as vertex discovered, explore from it.

• Keep track of progress by colouring vertices:– Black: undiscovered vertices

– Red: discovered, but not finished (still exploring from it)

– Gray: finished (found everything reachable from it).

Graph ( , ) (directed or In undirectep : )t du G V E=

2 timestamps on each vertex: [ ] discovery time. [ ] finishing tim

Output

.

:

ed vf v

=

=1 [ ] [ ] 2| |d v f v V≤ < ≤

CSE 310148

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Stack <node,# edges>

/

/

//

/

/

/

/

/

/

/

/

/

/

d fNote: Stack is Last-In First-Out (LIFO)

CSE 310149

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

FoundNot Handled

Stack <node,# edges>

s,0

/

1/

//

/

/

/

/

/

/

/

/

/

/

CSE 310150

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,0/

1/

/2/

/

/

/

/

/

/

/

/

/

/

CSE 310151

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,0/

1/

/2/

3/

/

/

/

/

/

/

/

/

/

CSE 310152

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,1h,0

/

1/

/2/

3/

/

/

/

/

/

/

/

4/

/

CSE 310153

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,1h,1k,0

/

1/

/2/

3/

/

/

/

/

/

/

5/

4/

/

CSE 310154

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,1h,1

Tree Edge

Path on Stack /

1/

/2/

3/

/

/

/

/

/

/

5/6

4/

/

CSE 310155

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,1/

1/

/2/

3/

/

/

/

/

/

/

5/6

4/7

/

CSE 310156

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,0

8/

1/

/2/

3/

/

/

/

/

/

/

5/6

4/7

/

CSE 310157

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,1

Cross Edge to handled node: d[h]<d[i]

8/

1/

/2/

3/

/

/

/

/

/

/

5/6

4/7

/

CSE 310158

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,2

8/

1/

/2/

3/

/

/

/

/

/

/

5/6

4/7

/

CSE 310159

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,3l,0

8/

1/

/2/

3/

/

/

/

/

/

9/

5/6

4/7

/

CSE 310160

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,3l,1

8/

1/

/2/

3/

/

/

/

/

/

9/

5/6

4/7

/

CSE 310161

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,3

8/

1/

/2/

3/

/

/

/

/

/

9/10

5/6

4/7

/

CSE 310162

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,4g,0

8/

1/

/2/

3/

/

/

11/

/

/

9/10

5/6

4/7

/

CSE 310163

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,4g,1j,0

8/

1/

/2/

3/

/

/

11/

12/

/

9/10

5/6

4/7

/

CSE 310164

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,4g,1j,1

Back Edge to node on Stack:

8/

1/

/2/

3/

/

/

11/

12/

/

9/10

5/6

4/7

/

CSE 310165

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,4g,1j,2m,0

8/

1/

/2/

3/

/

/

11/

12/

13/

9/10

5/6

4/7

/

CSE 310166

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,4g,1j,2m,1

8/

1/

/2/

3/

/

/

11/

12/

13/

9/10

5/6

4/7

/

CSE 310167

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,4g,1j,2

8/

1/

/2/

3/

/

/

11/

12/

13/14

9/10

5/6

4/7

/

CSE 310168

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,4g,1

8/

1/

/2/

3/

/

/

11/

12/15

13/14

9/10

5/6

4/7

/

CSE 310169

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,4

8/

1/

/2/

3/

/

/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310170

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,5f,0

8/

1/

/2/

3/

17/

/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310171

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,5f,1

8/

1/

/2/

3/

17/

/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310172

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,2i,5

8/

1/

/2/

3/

17/18

/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310173

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,28/19

1/

/2/

3/

17/18

/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310174

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,1c,38/19

1/

/2/

3/

17/18

/

11/16

12/15

13/14

9/10

5/6

4/7

/

Forward Edge

CSE 310175

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,18/19

1/

/2/

3/19

17/18

/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310176

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

a,28/19

1/

/2/

3/19

17/18

/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310177

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,1

FoundNot Handled

Stack <node,# edges>

8/19

1/

/2/20

3/19

17/18

/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310178

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,2

FoundNot Handled

Stack <node,# edges>

d,08/19

1/

/2/20

3/19

17/18

21/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310179

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,2

FoundNot Handled

Stack <node,# edges>

d,18/19

1/

/2/20

3/19

17/18

21/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310180

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,2

FoundNot Handled

Stack <node,# edges>

d,28/19

1/

/2/20

3/19

17/18

21/

11/16

12/15

13/14

9/10

5/6

4/7

/

CSE 310181

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,2

FoundNot Handled

Stack <node,# edges>

d,3e,08/19

1/

/2/20

3/19

17/18

21/

11/16

12/15

13/14

9/10

5/6

4/7

22/

CSE 310182

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,2

FoundNot Handled

Stack <node,# edges>

d,3e,18/19

1/

/2/20

3/19

17/18

21/

11/16

12/15

13/14

9/10

5/6

4/7

22/

CSE 310183

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,2

FoundNot Handled

Stack <node,# edges>

d,38/19

1/

/2/20

3/19

17/18

21/

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310184

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,2

FoundNot Handled

Stack <node,# edges>

8/19

1/

/2/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310185

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,3

FoundNot Handled

Stack <node,# edges>

8/19

1/

/2/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310186

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,4

FoundNot Handled

Stack <node,# edges>

b,08/19

1/

25/2/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310187

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,4

FoundNot Handled

Stack <node,# edges>

b,18/19

1/

25/2/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310188

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,4

FoundNot Handled

Stack <node,# edges>

b,28/19

1/

25/2/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310189

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,4

FoundNot Handled

Stack <node,# edges>

b,38/19

1/

25/2/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310190

DFS

s

a

c

h

k

f

i

l

m

j

e

b

gd

s,4

FoundNot Handled

Stack <node,# edges>

8/19

1/

25/262/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310191

DFS

s

FoundNot Handled

Stack <node,# edges>

Finished!

Tree EdgesBack Edges

a

c

h

k

f

i

l

m

j

e

b

gd

Cross Edges

8/19

1/27

25/262/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

Forward Edges

CSE 310192

Classification of Edges in DFS1. Tree edges are edges in the depth-first forest Gπ. Edge (u, v) is a tree edge if

v was first discovered by exploring edge (u, v).

2. Back edges are those edges (u, v) connecting a vertex u to an ancestor v in a depth-first tree.

3. Forward edges are non-tree edges (u, v) connecting a vertex u to a descendant v in a depth-first tree.

4. Cross edges are all other edges. They can go between vertices in the same depth-first tree, as long as one vertex is not an ancestor of the other.

s

a

c

h

k

f

i

l

m

j

e

b

gd

8/19

1/27

25/262/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

CSE 310193

Classification of Edges in DFS1. Tree edges: Edge (u, v) is a tree edge if v was black when (u, v) traversed.

2. Back edges: (u, v) is a back edge if v was red when (u, v) traversed.

3. Forward edges: (u, v) is a forward edge if v was gray when (u, v) traversed and d[v] > d[u].

4. Cross edges (u,v) is a cross edge if v was gray when (u, v) traversed and d[v] < d[u].

s

a

c

h

k

f

i

l

m

j

e

b

gd

8/19

1/27

25/262/20

3/19

17/18

21/24

11/16

12/15

13/14

9/10

5/6

4/7

22/23

Classifying edges can help to identify properties of the graph, e.g., a graph is acyclic iff DFS yields no back edges.

CSE 310194

Undirected Graphs

• In a depth-first search of an undirected graph, every edge is either a tree edge or a back edge.

• Why?

CSE 310195

Undirected Graphs

• Suppose that (u,v) is a forward edge or a cross edge in a DFS of an undirected graph.

• (u,v) is a forward edge or a cross edge when vis already handled (grey) when accessed from u.

• This means that all vertices reachable from vhave been explored.

• Since we are currently handling u, u must be red.

• Clearly v is reachable from u.

• Since the graph is undirected, u must also be reachable from v.

• Thus u must already have been handled: u must be grey.

• Contradiction!

u

v

End of Lecture 11

Apr 8, 2009

CSE 310197

Depth-First Search Algorithm

RED

BLACK

GRAY GRAY

BLACK

Precondition: vertex is undiscoveredPostcondition: all vertices reachable from have

DFS-Vi

been p

si

ro

t

s

( )

ces edu

u

u

BLACK

BLACK

DFS(G)

CSE 310198

Depth-First Search Algorithm

BLACK

BLACK

RED

BLACK

GRAY GRAY

BLACK

Precondition: vertex is undiscoveredPostcondition: all vertices reachable from have

DFS-Vi

been p

si

ro

t

s

( )

ces edu

u

u

DFS(G)

θ∈

=∑total work = | [ ] | ( )v V

Adj v E

θtotal work = ( )V

θ +Thus running time = ( )V E

Topological Sorting (e.g., putting tasks in linear order)

An application of Depth-First Search

CSE 3101100

Linear Order

underwear

pants

socks

shoes

underwearpantssocksshoes

socks underwearpantsshoes

CSE 3101101

Linear Order

underwear

pants

socks

shoes

Too many video games?

CSE 3101102

Linear Order

a

b hc id je k

f l

g

Precondition:A Directed Acyclic Graph(DAG)

Post Condition:Find one valid linear order

Algorithm:•Find a terminal node (sink).•Put it last in sequence.•Delete from graph & repeat

Θ(V)Θ(V2)

….. lWe can do better!

CSE 3101103

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

degf

l

….. f

CSE 3101104

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

degl

lWhen node is popped off stack, insert at front of linearly-ordered “to do” list.

….. fLinear Order:

CSE 3101105

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

deg

l

l,fLinear Order:

CSE 3101106

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

del

g,l,fLinear Order:

CSE 3101107

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

dl

e,g,l,fLinear Order:

CSE 3101108

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

l

d,e,g,l,fLinear Order:

CSE 3101109

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

il

d,e,g,l,f

jk

Linear Order:

CSE 3101110

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

il

k,d,e,g,l,f

j

Linear Order:

CSE 3101111

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

il

j,k,d,e,g,l,fLinear Order:

CSE 3101112

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

l

i,j,k,d,e,g,l,fLinear Order:

CSE 3101113

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

blc

i,j,k,d,e,g,l,fLinear Order:

CSE 3101114

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

bl

c,i,j,k,d,e,g,l,fLinear Order:

CSE 3101115

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

l

b,c,i,j,k,d,e,g,l,fLinear Order:

CSE 3101116

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

alh

b,c,i,j,k,d,e,g,l,fLinear Order:

CSE 3101117

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

al

h,b,c,i,j,k,d,e,g,l,fLinear Order:

CSE 3101118

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

l

a,h,b,c,i,j,k,d,e,g,l,f Done!Linear Order:

CSE 3101119

Linear OrderFound

Not HandledStack

Proof:•Case 1: u goes on stack first before v.

•Because of edge,v goes on before u comes off

•v comes off before u comes off•v goes after u in order. ☺

u vv…u…

Consider each edge

v

u

CSE 3101120

Linear OrderFound

Not HandledStack

Proof:•Case 1: u goes on stack first before v.•Case 2: v goes on stack first before u.

v comes off before u goes on.•v goes after u in order. ☺

u vv…u…

Consider each edge

u

v

CSE 3101121

Linear OrderFound

Not HandledStack

Proof:•Case 1: u goes on stack first before v.•Case 2: v goes on stack first before u.

v comes off before u goes on.Case 3: v goes on stack first before u.

u goes on before v comes off.•Panic: u goes after v in order. •Cycle means linear order

is impossible ☺

u vu…v…

Consider each edge

u

v

The nodes in the stack form a path starting at s.

CSE 3101122

Linear Order

a

b hc id je k

f

g

FoundNot Handled

Stack

Alg: DFS

l

a,h,b,c,i,j,k,d,e,g,l,f Done!Linear Order:

ΘAnalysis: (V+E)

Shortest Paths Revisited

CSE 3101124

3

Back to Shortest Path

• BFS finds the shortest paths from a source node s to every vertex v in the graph.

• Here, the length of a path is simply the number of edges on the path.

• But what if edges have different ‘costs’?

s

v

( , ) 3s vδ = ( , ) 12s vδ =

2s

v517

2

Single-Source (Weighted) Shortest Paths

CSE 3101126

The Problem

• What is the shortest driving route from Toronto to Ottawa? (e.g.MAPQuest, Google Maps)

• Input:

0 1 11

Weight of path , ,..., ( , )k

i iki

p v v v w v v−=

=< > = ∑Shortest-path weight from to :u v

min{ ( ) : } if a path ,( , ) otherwise.

pw p u v u vu vδ

⎧⎪ → → ∃ → →= ⎨∞⎪⎩

Shortest path from to is any path such that ( ) ( , ).u v p w p u vδ=

Directed Graph ( , )G V E=

Edge weights :w E →

CSE 3101127

Example

Single-source shortest path search induces a search tree rooted at s.

This tree, and hence the paths themselves, are not necessarily unique.

CSE 3101128

Shortest path variants

• Single-source shortest-paths problem: – the shortest path from s to each vertex v. (e.g. BFS)

• Single-destination shortest-paths problem: Find a shortest path to a given destination vertex t from each vertex v.

• Single-pair shortest-path problem: Find a shortest path from u to v for given vertices u and v.

• All-pairs shortest-paths problem: Find a shortest path from u to v for every pair of vertices u and v.

CSE 3101129

Negative-weight edges

• OK, as long as no negative-weight cycles are reachable from the source.– If we have a negative-weight cycle, we can just keep going

around it, and get w(s, v) = −∞ for all v on the cycle.

– But OK if the negative-weight cycle is not reachable from the source.

– Some algorithms work only if there are no negative-weight edges in the graph.

CSE 3101130

Optimal substructure

• Lemma: Any subpath of a shortest path is a shortest path

• Proof: Cut and paste.

Now suppose there exists a shorter path .xyp

x y′

→ →

Then ( ) ( ).xy xyw p w p′ <

Construct p :′

Then ( ) ( ) ( ) ( )ux xy yvw p w p w p w p′ ′= + + ( ) ( ) ( )ux xy yvw p w p w p< + + ( ).w p=

So p wasn't a shortest path after all!

Suppose this path is a shortest path from to .p u v

Then ( , ) ( ) ( ) ( ) ( ).ux xy yvu v w p w p w p w pδ = = + +

CSE 3101131

Cycles

• Shortest paths can’t contain cycles:

– Already ruled out negative-weight cycles.

– Positive-weight: we can get a shorter path by omitting the cycle.

– Zero-weight: no reason to use them assume that our solutions won’t use them.

CSE 3101132

Output of a single-source shortest-path algorithm

• For each vertex v in V:

– d[v] = δ(s, v).

• Initially, d[v]=∞.

• Reduce as algorithm progresses. But always maintain d[v] ≥ δ(s, v).

• Call d[v] a shortest-path estimate.

– π[v] = predecessor of v on a shortest path from s.

• If no predecessor, π[v] = NIL.

• π induces a tree — shortest-path tree.

CSE 3101133

Initialization

• All shortest-paths algorithms start with the same initialization:

INIT-SINGLE-SOURCE(V, s)

for each v in Vdo d[v]←∞

π[v] ← NIL

d[s] ← 0

CSE 3101134

Relaxing an edge

• Can we improve shortest-path estimate for v by going through u and taking (u,v)?

RELAX(u, v,w)

if d[v] > d[u] + w(u, v) then

d[v] ← d[u] + w(u, v)

π[v]← u

CSE 3101135

General single-source shortest-path strategy

1. Start by calling INIT-SINGLE-SOURCE

2. Relax Edges

Algorithms differ in the order in which edges are taken and

how many times each edge is relaxed.

CSE 3101136

Example: Single-source shortest paths in a directed acyclic graph (DAG)

• Since graph is a DAG, we are guaranteed no negative-weight cycles.

CSE 3101137

Algorithm

Time: ( )V EΘ +

CSE 3101138

Example

CSE 3101139

Example

CSE 3101140

Example

CSE 3101141

Example

CSE 3101142

Example

CSE 3101143

Example

CSE 3101144

Correctness: Path relaxation property (Lemma 24.15)

0 1 0Let , , . . . , be a shortest path from .k kp v v v s v to v=< > =

0 1 1 2 -1If we relax, in order, ( , ), ( , ), . . . , ( , ), k kv v v v v v

even intermixed with other relaxations,

then [ ] ( , ).k kd v s vδ=

CSE 3101145

Correctness of DAG Shortest Path Algorithm

• Because we process vertices in topologically sorted order, edges of any path are relaxed in order of appearance in the path.

– Edges on any shortest path are relaxed in order.

– By path-relaxation property, correct.

CSE 3101146

Example: Dijkstra’s algorithm

• Applies to general weighted directed graph (may contain cycles).

• But weights must be non-negative.

• Essentially a weighted version of BFS.– Instead of a FIFO queue, uses a priority queue.

– Keys are shortest-path weights (d[v]).

• Maintain 2 sets of vertices:– S = vertices whose final shortest-path weights are determined.

– Q = priority queue = V-S.

CSE 3101147

Dijkstra’s algorithm

Dijkstra’s algorithm can be viewed as greedy, since it always chooses the “lightest” vertex in V − S to add to S.

CSE 3101148

Dijkstra’s algorithm: Analysis

Analysis:Using minheap, queue operations takes O(logV) time

( )O V

(log )O V ( ) iterationsO V×

(log )O V ( ) iterationsO E×

Running Time is ( log )O E V→

CSE 3101149

Example⇔

⇔⇔Grey Handling

B

White N

lack

ot Fo

Ha

und

ndled

Key:

CSE 3101150

Example

CSE 3101151

Example

CSE 3101152

Example

CSE 3101153

Example

CSE 3101154

Example

CSE 3101155

Correctness of Dijkstra’s algorithm

• Loop invariant: d[v] = δ(s, v) for all v in S.– Initialization: Initially, S is empty, so trivially true.

– Termination: At end, Q is empty S = V d[v] = δ(s, v) for all v in V.

– Maintenance:• Need to show that

– d[u] = δ(s, u) when u is added to S in each iteration.

– d[u] does not change once u is added to S.

CSE 3101156

Correctness of Dijkstra’s Algorithm: Upper Bound Property

• Upper Bound Property:1. [ ] ( , )d v s v v Vδ≥ ∀ ∈

• Proof:By induction.

[ ] ( , ) immediately after initialization, since[ ] 0 ( ,

Base Cas :

[ ]

e)

d v s v v Vd s s sd v v s

δδ

≥ ∀ ∈= == ∞∀ ≠

δ≥ ∀ ∈SupposeInductive Step:

[ ] ( , )d x s x x V

( , ) ( , )s u w u vδ≥ +

( , )s vδ≥

If [ ] changes, then [ ] [ ] ( , )d v d v d u w u v= +

Suppose we relax edge ( , ).u v

2. Once [ ] ( , ), it doesn't changed v s vδ=

CSE 3101157

Correctness of Dijkstra’s Algorithm

When is added to Clai , [ ] (m ): ,u S d u s uδ=

Let be first vertex in on shortest path to y V S u−

Let be the predecessor of on the shortest path to x y u

[ ] ( , ) when is added toCl : .aim d y s y u Sδ=

Proof:[ ] ( , ), since x .d x s x Sδ= ∈

( , ) was relaxed when was added to x y x S [ ] ( , ) ( , ) ( , )d y s x w x y s yδ δ→ = + =

Handled

Let be the first vertex added to such thaProof by Con

t [ ] ( , ) when is added.tradiction: u S

d u s u uδ≠

CSE 3101158

Correctness of Dijkstra’s AlgorithmThus [ ] ( , ) when is added to .d y s y u Sδ=

[ ] ( , ) ( , ) [ ] (upper bound property)d y s y s u d uδ δ→ = ≤ ≤

But [ ] [ ] when added to d u d y u S≤

Thus [ ] ( , ) ( , ) [ ]!d y s y s u d uδ δ= = =

Thus when is added to , [ ] ( , )u S d u s uδ=

There is a shortest path to such that the predecessor of [ ]Conse

whequences

n is added to .:

u u u S u Sπ ∈

π [ ]u

=2The path through can only be a shortest path if [ ] 0.y w p

Handled

CSE 3101159

Correctness of Dijkstra’s algorithm

• Loop invariant: d[v] = δ(s, v) for all v in S.– Maintenance:

• Need to show that – d[u] = δ(s, u) when u is added to S in each iteration.

– d[u] does not change once u is added to S.

δ=Thus once [ ] ( , ), it will not be changed.d v s v

can only decRelax(u rease ],v,w) [ .d v

δ≥upper bound prBy the , operty [ ] ( , ).d v s v

?

top related