Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs:...

78
03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first search (dfs) (generalisation of a pre-order traversal of tree) is one way of navigating through the graph select one v in V and mark as visited select each unvisited vertex w adjacent to v - dfs(w) (recursive!) if all vertices marked => search complete otherwise select an unmarked node and apply dfs implementation: adjacency list

Transcript of Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs:...

Page 1: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 1

Digraphs: Depth First Search

Given G = (V, E) and all v in V are marked unvisited, a depth-first search (dfs) (generalisation of a pre-order traversal of

tree) is one way of navigating through the graph

select one v in V and mark as visited select each unvisited vertex w adjacent to v - dfs(w)

(recursive!) if all vertices marked => search complete otherwise select an unmarked node and apply dfs

implementation: adjacency list

Page 2: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 2

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA, B, C, D, E, F, G

Page 3: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 3

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B

Page 4: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 4

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C

Page 5: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 5

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C

Page 6: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 6

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C, B D

Page 7: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 7

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C, B D

Page 8: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 8

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C, B DStart E

Page 9: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 9

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C, B DStart: EE F

Page 10: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 10

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C, B DStart: EE F

Page 11: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 11

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C, B DStart: EE F, E G

Page 12: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 12

DFS: Example

G

FE

B

D C

A ABCDE

GF

BC DAA CF GBD F

Start: AA B C, B DStart: EE F, E G

Page 13: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 13

Depth First Spanning Forest

in a dfs of a directed graph, certain edges, when visited, lead to unvisited verticessuch edges are called TREE EDGES and form aDEPTH FIRST SPANNING FOREST for the given digraph

G

FE

B

D C

AA

B

C D

E

F G

Page 14: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 14

Depth First Spanning Forest

Other edges are back edge

vertex to an ancestor

forward edge non-tree edge from a

vertex to a proper descendant (in the tree)

cross edge edge from V1 to V2 -

neither an ancestor nor descendant

G

FE

B

D C

A

A

B

C D

E

F G

back

cross

crosscross

cross

back

treetree

tree tree tree

Page 15: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 15

Depth First Spanning Forest

Nota Bene (NB) all cross edges go from

right to left assuming that children added to tree

in order visited (l to r) new trees added to

forest in left to right order

vertices can be numbered (dfn) in depth first order

A B C D E F G1 2 3 4 5 6 7

G

FE

B

D C

A

A

B

C D

E

F G

back

cross

crosscross

cross

back

treetree

tree tree tree

Page 16: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 16

Depth First Spanning Forest

All descendants of vhave dfn >= dfn(v)

forward edgeslow dfn to high dfn

back edgeshigh dfn to low dfn

cross edgeshigh dfn to low dfn

back edge => cycle

w is a descendant of v iff dfn(v) <= dfn(w) <=

dfn(v) + number of descendants of v

A1

B2

C3 D4

E5

F6 G7

back

cross

crosscross

cross

back

treetree

tree tree tree

Page 17: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 17

Digraphs: Breadth First Search

Given G = (V, E) and all v in V are marked unvisited, a breadth-first search (bfs) is another way of navigating through the graphselect one v in V and mark as visited; enqueue v in Qwhile not is_empty(Q) {

x = front(Q); dequeue(Q);for each y in adjacent (x) if unvisited (y) {

mark(y); enqueue y in Q; process (x,y) // (e.g. add to tree);

}

Page 18: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 18

BFS: Example

Start: EOutput: E, F, G, B, D, C, A

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 19: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 19

BFS: Example

Start: EQ: E

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 20: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 20

BFS: Example

Start: EQ: F, G

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 21: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 21

BFS: Example

Start: EQ: G

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 22: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 22

BFS: Example

Start: E, FQ: G, B

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 23: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 23

BFS: Example

Start: E, F, GQ: B, D

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 24: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 24

BFS: Example

Start: E, F, G, BQ: D

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 25: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 25

BFS: Example

Start: E, F, G, BQ: D, C

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 26: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 26

BFS: Example

Start: E, F, G, B, DQ: C, A

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 27: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 27

BFS: Example

Start: E, F, G, B, D, CQ: A

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 28: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 28

BFS: Example

Start: E, F, G, B, D, C, AQ: empty

G1

F1E0

B2

D2 C3

A3 ABCDE

GF

BC DAA CF GBD F

Page 29: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 29

Breadth First Spanning Forest

in a bfs of a directed graph, certain edges, when visited, lead to unvisited vertices- such edges are called TREE EDGES and form a BREADTH FIRST SPANNING FOREST for the given digraph

NB only tree & non-tree (cross) edges

G

FE

B

D C

A

A

B

C

D

E

F Gtree

treetree

tree

treetree

Page 30: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 30

Directed Acyclic Graphs (DAGs)

DAG - digraph with no cycles compare: tree, DAG, digraph with cycle

Tree in-degree = 1 out-degree = 2 (binary) DAG in-degree >= 1 out-degree >= 1

D E

CB

A

D E

CB

A

D E

CB

A

Page 31: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 31

DAG: use

Syntactic structure of arithmetic expressions with common sub-expressions

e.g. ((a+b)*c + ((a+b)+e)*(e+f)) * ((a+b)*c)

*+

**+ ++

a bc

e f

Page 32: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 32

DAG: use

To represent partial orders A partial order R on a set S is a binary relation such that

for all a in S a R a is false (irreflexive) for all a, b, c in S if a R b and b R c then a R c

(transitive) examples: “less than” (<) and proper containment on sets

S ={1, 2, 3} P(S) - power set of S

(set of all subsets)

{1, 2, 3}

{1, 2} {1, 3} {2, 3}

{1} {2} {3}

{ }

Page 33: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 33

DAG: use

To model course prerequisites or dependent tasks

Year 1 Year 2 Year 3 Year 4

Compilerconstruction

Prog.LanguagesDS&APUMA

Data &Prog.

DiscreteMath

DataComm 1

DataComm 2

OpSystems

Real timesystems

DistributedSystems

Page 34: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 34

Topological sort

Given a DAG of prerequisites for courses, a topological sort can be used to determine an order in which to take the courses

(TS: DAG => sequence) (modified dfs) prints reverse topological order of a DAG from v

tsort(v) {mark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

Page 35: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 35

Topological sort: example

start: A

tsort(A) => G K H D E C A Breverse => B A C E D H K G

KE

GC

HB

DA ABCDE

HG

CEDG HH

KK

E

Page 36: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {Amark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A output:reverse:

03/12/2016 DFR - DSA - Graphs 2 36

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 37: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

A for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A Coutput:reverse:

03/12/2016 DFR - DSA - Graphs 2 37

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 38: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {Cmark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C output:reverse:

03/12/2016 DFR - DSA - Graphs 2 38

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 39: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

Cfor each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C Doutput:reverse:

03/12/2016 DFR - DSA - Graphs 2 39

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 40: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {D mark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D output:reverse:

03/12/2016 DFR - DSA - Graphs 2 40

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 41: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

Dfor each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D Goutput:reverse:

03/12/2016 DFR - DSA - Graphs 2 41

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 42: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {Gmark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D Goutput:reverse:

03/12/2016 DFR - DSA - Graphs 2 42

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 43: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

G for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D Goutput:reverse:

03/12/2016 DFR - DSA - Graphs 2 43

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 44: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)

Gdisplay(v)}

path: A C D Goutput: Greverse:

03/12/2016 DFR - DSA - Graphs 2 44

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 45: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

D for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D output: Greverse:

03/12/2016 DFR - DSA - Graphs 2 45

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 46: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

D for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D Houtput: Greverse:

03/12/2016 DFR - DSA - Graphs 2 46

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 47: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {H mark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D Houtput: Greverse:

03/12/2016 DFR - DSA - Graphs 2 47

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 48: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

H for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D H Koutput: Greverse:

03/12/2016 DFR - DSA - Graphs 2 48

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 49: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {Kmark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D H Koutput: Greverse:

03/12/2016 DFR - DSA - Graphs 2 49

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 50: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

K for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D H Koutput: Greverse:

03/12/2016 DFR - DSA - Graphs 2 50

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 51: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)

Kdisplay(v)}

path: A C D H Koutput: G Kreverse:

03/12/2016 DFR - DSA - Graphs 2 51

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 52: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

H for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D Houtput: G Kreverse:

03/12/2016 DFR - DSA - Graphs 2 52

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 53: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)

Hdisplay(v)}

path: A C D Houtput: G K Hreverse:

03/12/2016 DFR - DSA - Graphs 2 53

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 54: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

D for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C D output: G K Hreverse:

03/12/2016 DFR - DSA - Graphs 2 54

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 55: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)

Ddisplay(v)}

path: A C D output: G K H Dreverse:

03/12/2016 DFR - DSA - Graphs 2 55

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 56: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

C for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C output: G K H Dreverse:

03/12/2016 DFR - DSA - Graphs 2 56

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 57: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

C for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C E output: G K H Dreverse:

03/12/2016 DFR - DSA - Graphs 2 57

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 58: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {Emark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C E output: G K H Dreverse:

03/12/2016 DFR - DSA - Graphs 2 58

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 59: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

E for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A C E output: G K H Dreverse:

03/12/2016 DFR - DSA - Graphs 2 59

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 60: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)

E display(v)}

path: A C E output: G K H D Ereverse:

03/12/2016 DFR - DSA - Graphs 2 60

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 61: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

C for each w adjacent to v if w unvisited tsort(w)display(v)}

path: A Coutput: G K H D Ereverse:

03/12/2016 DFR - DSA - Graphs 2 61

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 62: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)

Cdisplay(v)}

path: A C output: G K H D E Creverse:

03/12/2016 DFR - DSA - Graphs 2 62

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 63: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

A for each w adjacent to v if w unvisited tsort(w)display(v)}

path: Aoutput: G K H D E Creverse:

03/12/2016 DFR - DSA - Graphs 2 63

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 64: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)

Adisplay(v)}

path: A output: G K H D E C Areverse:

03/12/2016 DFR - DSA - Graphs 2 64

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 65: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)display(v)}

path:output: G K H D E C Areverse:

03/12/2016 DFR - DSA - Graphs 2 65

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 66: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {Bmark v visited

for each w adjacent to v if w unvisited tsort(w)display(v)}

path: B output: G K H D E C Areverse:

03/12/2016 DFR - DSA - Graphs 2 66

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 67: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visited

Bfor each w adjacent to v if w unvisited tsort(w)display(v)}

path: B output: G K H D E C Areverse:

03/12/2016 DFR - DSA - Graphs 2 67

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 68: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)

Bdisplay(v)}

path: Boutput: G K H D E C A B reverse:

03/12/2016 DFR - DSA - Graphs 2 68

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 69: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

Topological Sort example

tsort(v) {mark v visitedfor each w adjacent to v if w unvisited tsort(w)display(v)}

path:output: G K H D E C A B reverse: B A C E D H K G

03/12/2016 DFR - DSA - Graphs 2 69

ABCDE

HG

CEDG HH

KK

E

KE

GC

HB

DA

Page 70: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 70

Detecting Cycles

Use Warshall Use depth first search

A

C D

B A

C D

B

0 1 1 10 0 0 10 0 0 10 0 0 0

1 1 1 11 1 1 11 1 1 11 1 1 1

A

C D

B A

C D

B

A

B

D

Ccross

A

B

D

C

back

Page 71: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 71

Connectivity - & Reachability (Warshall) Strongly Connected Components (SCCs)

Strongly connected component of a digraph - set of vertices in which there is a path from any one vertex in the set to any other vertex in the set

partition V into equivalence classes Vi , 1 <= i <= r such that v and w are equivalent iff there is a path from v to w and from w to v

let Ei be the set of edges with head and tail in Vi the graphs Gi = (Vi, Ei) are called STRONGLY

CONNECTED COMPONENTS (SCCs) of G a STRONGLY CONNECTED GRAPH has only one

SCC

Page 72: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 72

SCC: example

a digraph and its strongly connected components

every vertex of G is in some SCC NOT every edge of G is in some SCC SCC = Strongly Connected Component

a

d c

b a

d c

b

Page 73: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 73

Reduced Graph

In a reduced graph (RG), the vertices are the strongly connected components of G

edge from vertex C to C’ in RG if there is an edge from some vertex in C to some vertex in C’

RG is always a DAG since if there were a cycle, all components in the cycle would be one strong component

a

d c

b a

d c

b a,b,c

d

Page 74: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 74

SCCs: algorithm

1. Perform a dfs and assign a number to each vertex

dfs(v) { mark v visited

for each w adjacent to v if w unvisited dfs(w)

number v

}

2. construct digraph Gr by reversing every edge in G

3. perform a dfs on Gr starting at highest numbered vertex (repeat on next highest if all vertices not reached)

4. each tree in resulting spanning forest is an SCC of G

Page 75: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 75

SCCs: example

a

d c

b a

d c

b

after step 1

a4

b3

c2

d1a4

d1 c2

b3

Graph Gr

a4

c2

b3

d1

df spanning forest for Gr

Graph SCCs

dfs(v) { mark v visitedfor each w adjacent to v if w unvisited dfs(w)number v}

Page 76: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 76

Graphs: terminology

G = (V,E) V = set of vertices, E = set of edges (v,w) (v,w) ordered = digraph (directed graph) (v,w) non-ordered = undirected graph digraph: w is adjacent to v if there is an edge from v to w DAG: directed acyclic graph path: sequence of vertices v1..vn where (v1,v2)…(vn-1,vn) are

edges path length: number of edges in a path simple path: all vertices are distinct (except possibly the first

and last) simple cycle: simple path, length >=1, begin/end on same

vertex

Page 77: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 77

Graphs: terminology

Strongly Connected Component: set of vertices in which there is a path from any vertex in the set to any other vertex in the set

Reduced Graph: vertices are strongly connect components of G

Strongly Connected Digraph: a path from every vertex to every other vertex

Complete graph: if there is an edge between every pair of vertices

Implementation: adjacency matrix or adjacency list

Page 78: Digraphs: Depth First Search - Karlstad University · 03/12/2016 DFR - DSA - Graphs 2 1 Digraphs: Depth First Search Given G = (V, E) and all v in V are marked unvisited, a depth-first

03/12/2016 DFR - DSA - Graphs 2 78

Graphs: algorithms

Dijkstra: single source shortest path Floyd: all pairs shortest path Warshall: transitive closure (determines if a path exists from v to w)

Depth First Search: used to derive the depth first spanning forest for the graph used in cycle detection used to derive the strong components

Breadth First Search: used to derive the breadth first spanning forest for the graph

Topological Sort: DAG => sequence