Depth First Search (DFS) Lecture 16 Thursday, October 26, 2017 - - PowerPoint PPT Presentation

depth first search dfs
SMART_READER_LITE
LIVE PREVIEW

Depth First Search (DFS) Lecture 16 Thursday, October 26, 2017 - - PowerPoint PPT Presentation

Algorithms & Models of Computation CS/ECE 374, Fall 2017 Depth First Search (DFS) Lecture 16 Thursday, October 26, 2017 Sariel Har-Peled (UIUC) CS374 1 Fall 2017 1 / 60 Today Two topics: Structure of directed graphs DFS and its


slide-1
SLIDE 1

Algorithms & Models of Computation

CS/ECE 374, Fall 2017

Depth First Search (DFS)

Lecture 16

Thursday, October 26, 2017

Sariel Har-Peled (UIUC) CS374 1 Fall 2017 1 / 60

slide-2
SLIDE 2

Today

Two topics: Structure of directed graphs DFS and its properties One application of DFS to obtain fast algorithms

Sariel Har-Peled (UIUC) CS374 2 Fall 2017 2 / 60

slide-3
SLIDE 3

Part I Depth First Search (DFS)

Sariel Har-Peled (UIUC) CS374 3 Fall 2017 3 / 60

slide-4
SLIDE 4

Depth First Search

1

DFS special case of Basic Search.

2

DFS is useful in understanding graph structure.

3

DFS used to obtain linear time (O(m + n)) algorithms for

1

Finding cut-edges and cut-vertices of undirected graphs

2

Finding strong connected components of directed graphs

3

Linear time algorithm for testing whether a graph is planar

4

...many other applications as well.

Sariel Har-Peled (UIUC) CS374 4 Fall 2017 4 / 60

slide-5
SLIDE 5

DFS in Undirected Graphs

Recursive version. Easier to understand some properties.

DFS(G)

for all u ∈ V (G) do

Mark u as unvisited Set pred(u) to null T is set to ∅

while ∃ unvisited u do

DFS(u) Output T DFS(u) Mark u as visited

for each uv in Out(u) do if v is not visited then

add edge uv to T set pred(v) to u DFS(v)

Implemented using a global array Visited for all recursive calls. T is the search tree/forest.

Sariel Har-Peled (UIUC) CS374 5 Fall 2017 5 / 60

slide-6
SLIDE 6

Example

1 2 3 4 5 6 7 8 9 10

Edges classified into two types: uv ∈ E is a

1

tree edge: belongs to T

2

non-tree edge: does not belong to T

Sariel Har-Peled (UIUC) CS374 6 Fall 2017 6 / 60

slide-7
SLIDE 7

Properties of DFS tree

Proposition

1

T is a forest

2

connected components of T are same as those of G.

3

If uv ∈ E is a non-tree edge then, in T, either:

1

u is an ancestor of v, or

2

v is an ancestor of u.

Question: Why are there no cross-edges?

Sariel Har-Peled (UIUC) CS374 7 Fall 2017 7 / 60

slide-8
SLIDE 8

DFS with Visit Times

Keep track of when nodes are visited.

DFS(G)

for all u ∈ V (G) do

Mark u as unvisited T is set to ∅ time = 0

while ∃unvisited u do

DFS(u) Output T DFS(u) Mark u as visited pre(u) = ++time

for each uv in Out(u) do if v is not marked then

add edge uv to T DFS(v) post(u) = ++time

Sariel Har-Peled (UIUC) CS374 8 Fall 2017 8 / 60

slide-9
SLIDE 9

Example

1 2 3 4 5 6 7 8 9 10

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-10
SLIDE 10

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-11
SLIDE 11

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-12
SLIDE 12

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-13
SLIDE 13

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-14
SLIDE 14

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-15
SLIDE 15

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-16
SLIDE 16

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-17
SLIDE 17

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-18
SLIDE 18

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-19
SLIDE 19

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-20
SLIDE 20

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-21
SLIDE 21

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 7 [8, ]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-22
SLIDE 22

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 7 [8, ] 8 [9, ]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-23
SLIDE 23

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 7 [8, ] 8 [9, 10]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-24
SLIDE 24

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, ] 7 [8, 11] 8 [9, 10]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-25
SLIDE 25

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, ] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-26
SLIDE 26

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, ] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-27
SLIDE 27

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, ] 4 [3, 14] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-28
SLIDE 28

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, ] 2 [2, 15] 4 [3, 14] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-29
SLIDE 29

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, 16] 2 [2, 15] 4 [3, 14] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-30
SLIDE 30

Example

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

vertex [pre, post] 1 [1, 16] 2 [2, 15] 4 [3, 14] 5 [4, 13] 6 [5, 6] 3 [7, 12] 7 [8, 11] 8 [9, 10] 9 [17, 20] 10 [18, 19]

Sariel Har-Peled (UIUC) CS374 9 Fall 2017 9 / 60

slide-31
SLIDE 31

pre and post numbers

Node u is active in time interval [pre(u), post(u)]

Proposition

For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other.

Proof.

Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS

Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

slide-32
SLIDE 32

pre and post numbers

Node u is active in time interval [pre(u), post(u)]

Proposition

For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other.

Proof.

Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS

Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

slide-33
SLIDE 33

pre and post numbers

Node u is active in time interval [pre(u), post(u)]

Proposition

For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other.

Proof.

Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS

Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

slide-34
SLIDE 34

pre and post numbers

Node u is active in time interval [pre(u), post(u)]

Proposition

For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other.

Proof.

Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS

Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

slide-35
SLIDE 35

pre and post numbers

Node u is active in time interval [pre(u), post(u)]

Proposition

For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other.

Proof.

Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS

Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

slide-36
SLIDE 36

pre and post numbers

Node u is active in time interval [pre(u), post(u)]

Proposition

For any two nodes u and v, the two intervals [pre(u), post(u)] and [pre(v), post(v)] are disjoint or one is contained in the other.

Proof.

Assume without loss of generality that pre(u) < pre(v). Then v visited after u. If DFS(v) invoked before DFS(u) finished, post(v) < post(u). If DFS(v) invoked after DFS(u) finished, pre(v) > post(u). pre and post numbers useful in several applications of DFS

Sariel Har-Peled (UIUC) CS374 10 Fall 2017 10 / 60

slide-37
SLIDE 37

DFS in Directed Graphs

DFS(G) Mark all nodes u as unvisited T is set to ∅ time = 0

while there is an unvisited node u do

DFS(u) Output T DFS(u) Mark u as visited pre(u) = ++time

for each edge (u, v) in Out(u) do if v is not visited

add edge (u, v) to T DFS(v) post(u) = ++time

Sariel Har-Peled (UIUC) CS374 11 Fall 2017 11 / 60

slide-38
SLIDE 38

Example

A B C D E F G H

Sariel Har-Peled (UIUC) CS374 12 Fall 2017 12 / 60

slide-39
SLIDE 39

Example

A B C D E F G H [1, 16] [2, 11] [12, 15] [13, 14] [3, 10] [6, 7] [4, 5] [8, 9] A B C D E F G H

Sariel Har-Peled (UIUC) CS374 12 Fall 2017 12 / 60

slide-40
SLIDE 40

DFS Properties

Generalizing ideas from undirected graphs:

1

DFS(G) takes O(m + n) time.

2

Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered.

3

If u is the first vertex considered by DFS(G) then DFS(u)

  • utputs a directed out-tree T rooted at u and a vertex v is in

T if and only if v ∈ rch(u)

4

For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the

  • ther.

Note: Not obvious whether DFS(G) is useful in directed graphs but it is.

Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

slide-41
SLIDE 41

DFS Properties

Generalizing ideas from undirected graphs:

1

DFS(G) takes O(m + n) time.

2

Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered.

3

If u is the first vertex considered by DFS(G) then DFS(u)

  • utputs a directed out-tree T rooted at u and a vertex v is in

T if and only if v ∈ rch(u)

4

For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the

  • ther.

Note: Not obvious whether DFS(G) is useful in directed graphs but it is.

Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

slide-42
SLIDE 42

DFS Properties

Generalizing ideas from undirected graphs:

1

DFS(G) takes O(m + n) time.

2

Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered.

3

If u is the first vertex considered by DFS(G) then DFS(u)

  • utputs a directed out-tree T rooted at u and a vertex v is in

T if and only if v ∈ rch(u)

4

For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the

  • ther.

Note: Not obvious whether DFS(G) is useful in directed graphs but it is.

Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

slide-43
SLIDE 43

DFS Properties

Generalizing ideas from undirected graphs:

1

DFS(G) takes O(m + n) time.

2

Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered.

3

If u is the first vertex considered by DFS(G) then DFS(u)

  • utputs a directed out-tree T rooted at u and a vertex v is in

T if and only if v ∈ rch(u)

4

For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the

  • ther.

Note: Not obvious whether DFS(G) is useful in directed graphs but it is.

Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

slide-44
SLIDE 44

DFS Properties

Generalizing ideas from undirected graphs:

1

DFS(G) takes O(m + n) time.

2

Edges added form a branching: a forest of out-trees. Output of DFS(G) depends on the order in which vertices are considered.

3

If u is the first vertex considered by DFS(G) then DFS(u)

  • utputs a directed out-tree T rooted at u and a vertex v is in

T if and only if v ∈ rch(u)

4

For any two vertices x, y the intervals [pre(x), post(x)] and [pre(y), post(y)] are either disjoint or one is contained in the

  • ther.

Note: Not obvious whether DFS(G) is useful in directed graphs but it is.

Sariel Har-Peled (UIUC) CS374 13 Fall 2017 13 / 60

slide-45
SLIDE 45

DFS Tree

Edges of G can be classified with respect to the DFS tree T as:

1

Tree edges that belong to T

2

A forward edge is a non-tree edges (x, y) such that pre(x) < pre(y) < post(y) < post(x).

3

A backward edge is a non-tree edge (y, x) such that pre(x) < pre(y) < post(y) < post(x).

4

A cross edge is a non-tree edges (x, y) such that the intervals [pre(x), post(x)] and [pre(y), post(y)] are disjoint.

Sariel Har-Peled (UIUC) CS374 14 Fall 2017 14 / 60

slide-46
SLIDE 46

Types of Edges

A C D Cross Forward Backward B

Sariel Har-Peled (UIUC) CS374 15 Fall 2017 15 / 60

slide-47
SLIDE 47

Cycles in graphs

Question: Given an undirected graph how do we check whether it has a cycle and output one if it has one? Question: Given an directed graph how do we check whether it has a cycle and output one if it has one?

Sariel Har-Peled (UIUC) CS374 16 Fall 2017 16 / 60

slide-48
SLIDE 48

Using DFS...

... to check for Acylicity and compute Topological Ordering

Question

Given G, is it a DAG? If it is, generate a topological sort. Else

  • utput a cycle C.

DFS based algorithm:

1

Compute DFS(G)

2

If there is a back edge e = (v, u) then G is not a DAG. Output cyclce C formed by path from u to v in T plus edge (v, u).

3

Otherwise output nodes in decreasing post-visit order. Note: no need to sort, DFS(G) can output nodes in this order. Algorithm runs in O(n + m) time. Correctness is not so obvious. See next two propositions.

Sariel Har-Peled (UIUC) CS374 17 Fall 2017 17 / 60

slide-49
SLIDE 49

Using DFS...

... to check for Acylicity and compute Topological Ordering

Question

Given G, is it a DAG? If it is, generate a topological sort. Else

  • utput a cycle C.

DFS based algorithm:

1

Compute DFS(G)

2

If there is a back edge e = (v, u) then G is not a DAG. Output cyclce C formed by path from u to v in T plus edge (v, u).

3

Otherwise output nodes in decreasing post-visit order. Note: no need to sort, DFS(G) can output nodes in this order. Algorithm runs in O(n + m) time. Correctness is not so obvious. See next two propositions.

Sariel Har-Peled (UIUC) CS374 17 Fall 2017 17 / 60

slide-50
SLIDE 50

Using DFS...

... to check for Acylicity and compute Topological Ordering

Question

Given G, is it a DAG? If it is, generate a topological sort. Else

  • utput a cycle C.

DFS based algorithm:

1

Compute DFS(G)

2

If there is a back edge e = (v, u) then G is not a DAG. Output cyclce C formed by path from u to v in T plus edge (v, u).

3

Otherwise output nodes in decreasing post-visit order. Note: no need to sort, DFS(G) can output nodes in this order. Algorithm runs in O(n + m) time. Correctness is not so obvious. See next two propositions.

Sariel Har-Peled (UIUC) CS374 17 Fall 2017 17 / 60

slide-51
SLIDE 51

Back edge and Cycles

Proposition

G has a cycle iff there is a back-edge in DFS(G).

Proof.

If: (u, v) is a back edge implies there is a cycle C consisting of the path from v to u in DFS search tree and the edge (u, v). Only if: Suppose there is a cycle C = v1 → v2 → . . . → vk → v1. Let vi be first node in C visited in DFS. All other nodes in C are descendants of vi since they are reachable from vi. Therefore, (vi−1, vi) (or (vk, v1) if i = 1) is a back edge.

Sariel Har-Peled (UIUC) CS374 18 Fall 2017 18 / 60

slide-52
SLIDE 52

Proof

Proposition

If G is a DAG and post(v) > post(u), then (u, v) is not in G.

Proof.

Assume post(v) > post(u) and (u, v) is an edge in G. We derive a contradiction. One of two cases holds from DFS property. Case 1: [pre(u), post(u)] is contained in [pre(v), post(v)]. Implies that u is explored during DFS(v) and hence is a descendent of v. Edge (u, v) implies a cycle in G but G is assumed to be DAG! Case 2: [pre(u), post(u)] is disjoint from [pre(v), post(v)]. This cannot happen since v would be explored from u.

Sariel Har-Peled (UIUC) CS374 19 Fall 2017 19 / 60

slide-53
SLIDE 53

Example a b c d e f g h

Sariel Har-Peled (UIUC) CS374 20 Fall 2017 20 / 60

slide-54
SLIDE 54

Part II Strong connected components

Sariel Har-Peled (UIUC) CS374 21 Fall 2017 21 / 60

slide-55
SLIDE 55

Strong Connected Components (SCCs)

Algorithmic Problem

Find all SCCs of a given directed graph. Previous lecture: Saw an O(n · (n + m)) time algorithm. This lecture: sketch of a O(n + m) time algorithm.

A B C D E F G H

Sariel Har-Peled (UIUC) CS374 22 Fall 2017 22 / 60

slide-56
SLIDE 56

Graph of SCCs

G:

A B C D E F G H

B, E, F G H A, C, D Graph of SCCs GSCC

Meta-graph of SCCs

Let S1, S2, . . . Sk be the strong connected components (i.e., SCCs)

  • f G. The graph of SCCs is GSCC

1

Vertices are S1, S2, . . . Sk

2

There is an edge (Si, Sj) if there is some u ∈ Si and v ∈ Sj such that (u, v) is an edge in G.

Sariel Har-Peled (UIUC) CS374 23 Fall 2017 23 / 60

slide-57
SLIDE 57

Reversal and SCCs

Proposition

For any graph G, the graph of SCCs of G rev is the same as the reversal of GSCC.

Proof.

Exercise.

Sariel Har-Peled (UIUC) CS374 24 Fall 2017 24 / 60

slide-58
SLIDE 58

SCCs and DAGs

Proposition

For any graph G, the graph GSCC has no directed cycle.

Proof.

If GSCC has a cycle S1, S2, . . . , Sk then S1 ∪ S2 ∪ · · · ∪ Sk should be in the same SCC in G. Formal details: exercise.

Sariel Har-Peled (UIUC) CS374 25 Fall 2017 25 / 60

slide-59
SLIDE 59

Part III Directed Acyclic Graphs

Sariel Har-Peled (UIUC) CS374 26 Fall 2017 26 / 60

slide-60
SLIDE 60

Directed Acyclic Graphs

Definition

A directed graph G is a directed acyclic graph (DAG) if there is no directed cycle in G. 1 2 3 4

Sariel Har-Peled (UIUC) CS374 27 Fall 2017 27 / 60

slide-61
SLIDE 61

Is this a DAG?

a c b g v d s i f w u k t m

  • l

n p q r h j e

k p r

j

m

  • g

i h q s t n l v w u f e c a b d

Sariel Har-Peled (UIUC) CS374 28 Fall 2017 28 / 60

slide-62
SLIDE 62

Sources and Sinks

source sink 1 2 3 4

Definition

1

A vertex u is a source if it has no in-coming edges.

2

A vertex u is a sink if it has no out-going edges.

Sariel Har-Peled (UIUC) CS374 29 Fall 2017 29 / 60

slide-63
SLIDE 63

Simple DAG Properties

Proposition

Every DAG G has at least one source and at least one sink.

Proof.

Let P = v1, v2, . . . , vk be a longest path in G. Claim that v1 is a source and vk is a sink. Suppose not. Then v1 has an incoming edge which either creates a cycle or a longer path both of which are

  • contradictions. Similarly if vk has an outgoing edge.

1

G is a DAG if and only if Grev is a DAG.

2

G is a DAG if and only each node is in its own strong connected component. Formal proofs: exercise.

Sariel Har-Peled (UIUC) CS374 30 Fall 2017 30 / 60

slide-64
SLIDE 64

Simple DAG Properties

Proposition

Every DAG G has at least one source and at least one sink.

Proof.

Let P = v1, v2, . . . , vk be a longest path in G. Claim that v1 is a source and vk is a sink. Suppose not. Then v1 has an incoming edge which either creates a cycle or a longer path both of which are

  • contradictions. Similarly if vk has an outgoing edge.

1

G is a DAG if and only if Grev is a DAG.

2

G is a DAG if and only each node is in its own strong connected component. Formal proofs: exercise.

Sariel Har-Peled (UIUC) CS374 30 Fall 2017 30 / 60

slide-65
SLIDE 65

Simple DAG Properties

Proposition

Every DAG G has at least one source and at least one sink.

Proof.

Let P = v1, v2, . . . , vk be a longest path in G. Claim that v1 is a source and vk is a sink. Suppose not. Then v1 has an incoming edge which either creates a cycle or a longer path both of which are

  • contradictions. Similarly if vk has an outgoing edge.

1

G is a DAG if and only if Grev is a DAG.

2

G is a DAG if and only each node is in its own strong connected component. Formal proofs: exercise.

Sariel Har-Peled (UIUC) CS374 30 Fall 2017 30 / 60

slide-66
SLIDE 66

Topological Ordering/Sorting

1 2 3 4 Graph G

1 2 3 4

Topological Ordering of G

Definition

A topological ordering/topological sorting of G = (V , E) is an

  • rdering ≺ on V such that if (u, v) ∈ E then u ≺ v.

Informal equivalent definition:

One can order the vertices of the graph along a line (say the x-axis) such that all edges are from left to right.

Sariel Har-Peled (UIUC) CS374 31 Fall 2017 31 / 60

slide-67
SLIDE 67

DAGs and Topological Sort

Lemma

A directed graph G can be topologically ordered iff it is a DAG. Need to show both directions.

Sariel Har-Peled (UIUC) CS374 32 Fall 2017 32 / 60

slide-68
SLIDE 68

DAGs and Topological Sort

Lemma

A directed graph G can be topologically ordered if it is a DAG.

Proof.

Consider the following algorithm:

1

Pick a source u, output it.

2

Remove u and all edges out of u.

3

Repeat until graph is empty. Exercise: prove this gives topological sort. Exercise: show algorithm can be implemented in O(m + n) time.

Sariel Har-Peled (UIUC) CS374 33 Fall 2017 33 / 60

slide-69
SLIDE 69

Topological Sort: Example a b c d e f g h

Sariel Har-Peled (UIUC) CS374 34 Fall 2017 34 / 60

slide-70
SLIDE 70

DAGs and Topological Sort

Lemma

A directed graph G can be topologically ordered only if it is a DAG.

Proof.

Suppose G is not a DAG and has a topological ordering ≺. G has a cycle C = u1, u2, . . . , uk, u1. Then u1 ≺ u2 ≺ . . . ≺ uk ≺ u1! That is... u1 ≺ u1. A contradiction (to ≺ being an order). Not possible to topologically order the vertices.

Sariel Har-Peled (UIUC) CS374 35 Fall 2017 35 / 60

slide-71
SLIDE 71

DAGs and Topological Sort

Note: A DAG G may have many different topological sorts. Question: What is a DAG with the most number of distinct topological sorts for a given number n of vertices? Question: What is a DAG with the least number of distinct topological sorts for a given number n of vertices?

Sariel Har-Peled (UIUC) CS374 36 Fall 2017 36 / 60

slide-72
SLIDE 72

Cycles in graphs

Question: Given an undirected graph how do we check whether it has a cycle and output one if it has one? Question: Given an directed graph how do we check whether it has a cycle and output one if it has one?

Sariel Har-Peled (UIUC) CS374 37 Fall 2017 37 / 60

slide-73
SLIDE 73

To Remember: Structure of Graphs

Undirected graph: connected components of G = (V , E) partition V and can be computed in O(m + n) time. Directed graph: the meta-graph GSCC of G can be computed in O(m + n) time. GSCC gives information on the partition of V into strong connected components and how they form a DAG structure. Above structural decomposition will be useful in several algorithms

Sariel Har-Peled (UIUC) CS374 38 Fall 2017 38 / 60

slide-74
SLIDE 74

Part IV Linear time algorithm for finding all strong connected components of a directed graph

Sariel Har-Peled (UIUC) CS374 39 Fall 2017 39 / 60

slide-75
SLIDE 75

Finding all SCCs of a Directed Graph

Problem

Given a directed graph G = (V , E), output all its strong connected components. Straightforward algorithm:

Mark all vertices in V as not visited.

for each vertex u ∈ V not visited yet do

find SCC(G, u) the strong component of u: Compute rch(G, u) using DFS(G, u) Compute rch(G rev, u) using DFS(G rev, u) SCC(G, u) ⇐ rch(G, u) ∩ rch(G rev, u) ∀u ∈ SCC(G, u): Mark u as visited.

Running time: O(n(n + m)) Is there an O(n + m) time algorithm?

Sariel Har-Peled (UIUC) CS374 40 Fall 2017 40 / 60

slide-76
SLIDE 76

Finding all SCCs of a Directed Graph

Problem

Given a directed graph G = (V , E), output all its strong connected components. Straightforward algorithm:

Mark all vertices in V as not visited.

for each vertex u ∈ V not visited yet do

find SCC(G, u) the strong component of u: Compute rch(G, u) using DFS(G, u) Compute rch(G rev, u) using DFS(G rev, u) SCC(G, u) ⇐ rch(G, u) ∩ rch(G rev, u) ∀u ∈ SCC(G, u): Mark u as visited.

Running time: O(n(n + m)) Is there an O(n + m) time algorithm?

Sariel Har-Peled (UIUC) CS374 40 Fall 2017 40 / 60

slide-77
SLIDE 77

Finding all SCCs of a Directed Graph

Problem

Given a directed graph G = (V , E), output all its strong connected components. Straightforward algorithm:

Mark all vertices in V as not visited.

for each vertex u ∈ V not visited yet do

find SCC(G, u) the strong component of u: Compute rch(G, u) using DFS(G, u) Compute rch(G rev, u) using DFS(G rev, u) SCC(G, u) ⇐ rch(G, u) ∩ rch(G rev, u) ∀u ∈ SCC(G, u): Mark u as visited.

Running time: O(n(n + m)) Is there an O(n + m) time algorithm?

Sariel Har-Peled (UIUC) CS374 40 Fall 2017 40 / 60

slide-78
SLIDE 78

Structure of a Directed Graph

A B C D E F G H

Graph G

B, E, F G H A, C, D

Graph of SCCs GSCC

Reminder

GSCC is created by collapsing every strong connected component to a single vertex.

Proposition

For a directed graph G, its meta-graph GSCC is a DAG.

Sariel Har-Peled (UIUC) CS374 41 Fall 2017 41 / 60

slide-79
SLIDE 79

Linear-time Algorithm for SCCs: Ideas

Exploit structure of meta-graph...

Wishful Thinking Algorithm

1

Let u be a vertex in a sink SCC of GSCC

2

Do DFS(u) to compute SCC(u)

3

Remove SCC(u) and repeat

Justification

1

DFS(u) only visits vertices (and edges) in SCC(u)

2 3 4 Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

slide-80
SLIDE 80

Linear-time Algorithm for SCCs: Ideas

Exploit structure of meta-graph...

Wishful Thinking Algorithm

1

Let u be a vertex in a sink SCC of GSCC

2

Do DFS(u) to compute SCC(u)

3

Remove SCC(u) and repeat

Justification

1

DFS(u) only visits vertices (and edges) in SCC(u)

2 3 4 Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

slide-81
SLIDE 81

Linear-time Algorithm for SCCs: Ideas

Exploit structure of meta-graph...

Wishful Thinking Algorithm

1

Let u be a vertex in a sink SCC of GSCC

2

Do DFS(u) to compute SCC(u)

3

Remove SCC(u) and repeat

Justification

1

DFS(u) only visits vertices (and edges) in SCC(u)

2

... since there are no edges coming out a sink!

3 4 Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

slide-82
SLIDE 82

Linear-time Algorithm for SCCs: Ideas

Exploit structure of meta-graph...

Wishful Thinking Algorithm

1

Let u be a vertex in a sink SCC of GSCC

2

Do DFS(u) to compute SCC(u)

3

Remove SCC(u) and repeat

Justification

1

DFS(u) only visits vertices (and edges) in SCC(u)

2

... since there are no edges coming out a sink!

3

DFS(u) takes time proportional to size of SCC(u)

4 Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

slide-83
SLIDE 83

Linear-time Algorithm for SCCs: Ideas

Exploit structure of meta-graph...

Wishful Thinking Algorithm

1

Let u be a vertex in a sink SCC of GSCC

2

Do DFS(u) to compute SCC(u)

3

Remove SCC(u) and repeat

Justification

1

DFS(u) only visits vertices (and edges) in SCC(u)

2

... since there are no edges coming out a sink!

3

DFS(u) takes time proportional to size of SCC(u)

4

Therefore, total time O(n + m)!

Sariel Har-Peled (UIUC) CS374 42 Fall 2017 42 / 60

slide-84
SLIDE 84

Big Challenge(s)

How do we find a vertex in a sink SCC of GSCC? Can we obtain an implicit topological sort of GSCC without computing GSCC? Answer: DFS(G) gives some information!

Sariel Har-Peled (UIUC) CS374 43 Fall 2017 43 / 60

slide-85
SLIDE 85

Big Challenge(s)

How do we find a vertex in a sink SCC of GSCC? Can we obtain an implicit topological sort of GSCC without computing GSCC? Answer: DFS(G) gives some information!

Sariel Har-Peled (UIUC) CS374 43 Fall 2017 43 / 60

slide-86
SLIDE 86

Big Challenge(s)

How do we find a vertex in a sink SCC of GSCC? Can we obtain an implicit topological sort of GSCC without computing GSCC? Answer: DFS(G) gives some information!

Sariel Har-Peled (UIUC) CS374 43 Fall 2017 43 / 60

slide-87
SLIDE 87

Linear Time Algorithm

...for computing the strong connected components in G

do DFS(G rev) and output vertices in decreasing post order.

Mark all nodes as unvisited

for each u in the computed order do if u is not visited then

DFS(u) Let Su be the nodes reached by u Output Su as a strong connected component Remove Su from G

Theorem

Algorithm runs in time O(m + n) and correctly outputs all the SCCs

  • f G.

Sariel Har-Peled (UIUC) CS374 44 Fall 2017 44 / 60

slide-88
SLIDE 88

Linear Time Algorithm: An Example - Initial steps

Graph G:

G F E B C D H A

= ⇒ Reverse graph G rev:

G F E B C D H A

= ⇒ DFS of reverse graph:

G F E B C D H A

= ⇒ Pre/Post DFS numbering

  • f reverse graph:

6] [1, [7, 12] [9, 10] [8, 11] [13 , 16] [14 , 15] [2, 5] [3, 4] G F E B C D H A Sariel Har-Peled (UIUC) CS374 45 Fall 2017 45 / 60

slide-89
SLIDE 89

Linear Time Algorithm: An Example

Removing connected components: 1

Original graph G with rev post numbers:

G F E B C D H A

16 11 6 12 10 15 5 4

= ⇒ Do DFS from vertex G remove it.

F E B C D H A

11 6 12 10 15 5 4

SCC computed: {G}

Sariel Har-Peled (UIUC) CS374 46 Fall 2017 46 / 60

slide-90
SLIDE 90

Linear Time Algorithm: An Example

Removing connected components: 2

Do DFS from vertex G remove it.

F E B C D H A

11 6 12 10 15 5 4

SCC computed: {G} = ⇒ Do DFS from vertex H, remove it.

F E B C D A

11 6 12 10 5 4

SCC computed: {G}, {H}

Sariel Har-Peled (UIUC) CS374 47 Fall 2017 47 / 60

slide-91
SLIDE 91

Linear Time Algorithm: An Example

Removing connected components: 3

Do DFS from vertex H, remove it.

F E B C D A

11 6 12 10 5 4

SCC computed: {G}, {H} = ⇒ Do DFS from vertex B Remove visited vertices: {F, B, E}.

C D A

6 5 4

SCC computed: {G}, {H}, {F, B, E}

Sariel Har-Peled (UIUC) CS374 48 Fall 2017 48 / 60

slide-92
SLIDE 92

Linear Time Algorithm: An Example

Removing connected components: 4

Do DFS from vertex F Remove visited vertices: {F, B, E}.

C D A

6 5 4

SCC computed: {G}, {H}, {F, B, E} = ⇒ Do DFS from vertex A Remove visited vertices: {A, C, D}. SCC computed: {G}, {H}, {F, B, E}, {A, C, D}

Sariel Har-Peled (UIUC) CS374 49 Fall 2017 49 / 60

slide-93
SLIDE 93

Linear Time Algorithm: An Example

Final result

G F E B C D H A

SCC computed: {G}, {H}, {F, B, E}, {A, C, D} Which is the correct answer!

Sariel Har-Peled (UIUC) CS374 50 Fall 2017 50 / 60

slide-94
SLIDE 94

Obtaining the meta-graph...

Once the strong connected components are computed.

Exercise:

Given all the strong connected components of a directed graph G = (V , E) show that the meta-graph GSCC can be obtained in O(m + n) time.

Sariel Har-Peled (UIUC) CS374 51 Fall 2017 51 / 60

slide-95
SLIDE 95

Solving Problems on Directed Graphs

A template for a class of problems on directed graphs: Is the problem solvable when G is strongly connected? Is the problem solvable when G is a DAG? If the above two are feasible then is the problem solvable in a general directed graph G by considering the meta graph GSCC?

Sariel Har-Peled (UIUC) CS374 52 Fall 2017 52 / 60

slide-96
SLIDE 96

Part V An Application to make

Sariel Har-Peled (UIUC) CS374 53 Fall 2017 53 / 60

slide-97
SLIDE 97

Make/Makefile

(A) I know what make/makefile is. (B) I do NOT know what make/makefile is.

Sariel Har-Peled (UIUC) CS374 54 Fall 2017 54 / 60

slide-98
SLIDE 98

make Utility [Feldman]

1

Unix utility for automatically building large software applications

2

A makefile specifies

1

Object files to be created,

2

Source/object files to be used in creation, and

3

How to create them

Sariel Har-Peled (UIUC) CS374 55 Fall 2017 55 / 60

slide-99
SLIDE 99

An Example makefile

project: main.o utils.o command.o cc -o project main.o utils.o command.o main.o: main.c defs.h cc -c main.c utils.o: utils.c defs.h command.h cc -c utils.c command.o: command.c defs.h command.h cc -c command.c

Sariel Har-Peled (UIUC) CS374 56 Fall 2017 56 / 60

slide-100
SLIDE 100

makefile as a Digraph

project main.o utils.o command.o main.c utils.c defs.h command.h command.c

Sariel Har-Peled (UIUC) CS374 57 Fall 2017 57 / 60

slide-101
SLIDE 101

Computational Problems for make

1

Is the makefile reasonable?

2

If it is reasonable, in what order should the object files be created?

3

If it is not reasonable, provide helpful debugging information.

4

If some file is modified, find the fewest compilations needed to make application consistent.

Sariel Har-Peled (UIUC) CS374 58 Fall 2017 58 / 60

slide-102
SLIDE 102

Algorithms for make

1

Is the makefile reasonable? Is G a DAG?

2

If it is reasonable, in what order should the object files be created? Find a topological sort of a DAG.

3

If it is not reasonable, provide helpful debugging information. Output a cycle. More generally, output all strong connected components.

4

If some file is modified, find the fewest compilations needed to make application consistent.

1

Find all vertices reachable (using DFS/BFS) from modified files in directed graph, and recompile them in proper order. Verify that one can find the files to recompile and the ordering in linear time.

Sariel Har-Peled (UIUC) CS374 59 Fall 2017 59 / 60

slide-103
SLIDE 103

Take away Points

1

Given a directed graph G, its SCCs and the associated acyclic meta-graph GSCC give a structural decomposition of G that should be kept in mind.

2

There is a DFS based linear time algorithm to compute all the SCCs and the meta-graph. Properties of DFS crucial for the algorithm.

3

DAGs arise in many application and topological sort is a key property in algorithm design. Linear time algorithms to compute a topological sort (there can be many possible orderings so not unique).

Sariel Har-Peled (UIUC) CS374 60 Fall 2017 60 / 60