CS 401: Computer Algorithm I
DFS / Topological Ordering
Xiaorui Sun
1
CS 401: Computer Algorithm I DFS / Topological Ordering Xiaorui - - PowerPoint PPT Presentation
CS 401: Computer Algorithm I DFS / Topological Ordering Xiaorui Sun 1 BFS Application: Testing Bipartiteness Problem: Given a graph ! , is it bipartite? Many graph problems become: Easier/Tractable if the underlying graph is bipartite
Xiaorui Sun
1
2
v1 v2 v3 v6 v5 v4 v7 v2 v4 v5 v7 v1 v3 v6 a bipartite graph G another drawing of G
3
Case (i)
L1 L2 L3
Case (ii)
L1 L2 L3
4
5
6
7
8
Suppose edge lists at each vertex are sorted alphabetically Color code: undiscovered discovered fully-explored Call Stack (Edge list): A (B,J) st[] = {1}
9
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) st[] = {1,2}
10
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) st[] = {1,2,3}
11
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) D (C,E,F) st[] = {1,2,3,4}
12
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) D (C,E,F) E (D,F) st[] = {1,2,3,4,5}
13
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) D (C,E,F) E (D,F) F (D,E,G) st[] = {1,2,3,4,5, 6}
14
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) D (C,E,F) E (D,F) F (D,E,G) G(C,F) st[] = {1,2,3,4,5, 6,7}
15
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) D (C,E,F) E (D,F) F (D,E,G) G(C,F) st[] = {1,2,3,4,5, 6,7}
16
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) D (C,E,F) E (D,F) F (D,E,G) st[] = {1,2,3,4,5, 6}
17
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) D (C,E,F) E (D,F) st[] = {1,2,3,4,5}
18
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) D (C,E,F) st[] = {1,2,3,4}
19
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) st[] = {1,2,3}
20
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) st[] = {1,2,3,8}
21
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) I (H) st[] = {1,2,3,8,9}
22
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) st[] = {1,2,3,8}
23
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) J (A,B,H,K,L) st[] = {1,2,3,8, 10}
24
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) J (A,B,H,K,L) K (J,L) st[] = {1,2,3,8,10 ,11}
25
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) J (A,B,H,K,L) K (J,L) L (J,K,M) st[] = {1,2,3,8,10 ,11,12}
26
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) J (A,B,H,K,L) K (J,L) L (J,K,M) M(L) st[] = {1,2,3,8,10 ,11,12,13}
27
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) J (A,B,H,K,L) K (J,L) L (J,K,M) st[] = {1,2,3,8,10 ,11,12}
28
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) J (A,B,H,K,L) K (J,L) st[] = {1,2,3,8,10 ,11}
29
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) J (A,B,H,K,L) st[] = {1,2,3,8, 10}
30
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) J (A,B,H,K,L) st[] = {1,2,3,8, 10}
31
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) H (C,I,J) st[] = {1,2,3,8}
32
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) C (B,D,G,H) st[] = {1,2,3}
33
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) st[] = {1,2}
34
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) B (A,C,J) st[] = {1,2}
35
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) st[] = {1}
36
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) A (B,J) st[] = {1}
37
Color code: undiscovered discovered fully-explored Call Stack: (Edge list) TA-DA!! st[] = {}
38
Edge code: Tree edge Back edge
39
Edge code: Tree edge Back edge No Cross Edges!
40
41
42
44
Multi edge self loop
45
46
47
a DAG
2 3 6 5 4 7 1
a topological ordering of that DAG– all edges left-to-right
1 2 3 4 5 6 7
48
1
i
j
n
the directed cycle C
the supposed topological order: 1,2,…,n
49
G has a topological order G is a DAG
Lemma: If ! is a DAG, then ! has a node with no incoming edges (i.e., a source).
Suppose that ! is a DAG and it has no source Pick any node ", and begin following edges backward from ". Since " has at least one incoming edge ($, ") we can walk backward to $. Then, since $ has at least one incoming edge (', $), we can walk backward to '. Repeat until we visit a node, say w, twice. Let C be the sequence of nodes encountered between successive visits to w. C is a cycle.
50
w x u v
C
w x u v
Lemma: If ! is a DAG, then ! has a topological order
Base case: true if " = 1. Hypothesis: Every DAG with " − 1 vertices has a topological ordering. Inductive Step: Given DAG with " > 1 nodes, find a source node '. ! − { ' } is a DAG, since deleting ' cannot create cycles. By hypothesis, ! − { ' } has a topological ordering. Place ' first in topological ordering; then append nodes of ! − {'} in topological order. This is valid since ' has no incoming edges.
51
Reminder: Always remove vertices/edges to use hypothesis
52
G has a topological order G is a DAG
53
2 3 6 5 4 7 1
54
2 3 6 5 4 7 1 1 2 3 4 5 6 7
Running time: O(n+m)