Title: Elementary Graph Algorithm
1Elementary Graph Algorithm
- 10144017 ???
- 10144019 ???
- 10144044 ???
2Contents
- Representations of graphs
- Breadth-first search
- Depth-first search
- Topological sort
- Strongly connected components
3Elementary Graph Algorithms
- Searching a graph means systematically following
the edges of the graph so as to visit the
vertices of the graph - A graph-searching algorithm can discover much
about the structure of a graph - Other graph algorithms are organized as simple
elaborations of basic graph-searching algorithms
4Representations of graphs
- Two standard ways to represent a graph G (V, E)
- As a collection of adjacency list preferred when
graph is sparse - As a collection of adjacency matrix preferred
when graph is dense - Either way is applicable to both directed and
undirected graph
5Adjacency-list representation
6Adjacency-list representation
- Adjacency-list representation of a graph G (V,
E) consists of an array Adj of V lists, one for
each vertex in V. - Sum of the lengths of all the adjacency lists
- Directed graph E
- Undirected graph 2E
- Memory requirement
- both directed and undirected T(V E)
- Adjacency lists can readily be adopted to
represent weighted graph simply stores weight
with vertex
7Adjacency-matrix representation
8Adjacency-matrix representation
- Adjacency-matrix representation of a graph G
consists of a V x V matrix such A aij that - Aij 1 if(I, j) ? E, 0 otherwise
- Transpose of a matrix A (aij) to be AT aTij
(aji) - Since in an undirected graph A AT, memory
needed to store the graph almost in half - Simplicity of an adjacency matrix may make it
preferable when when graph are resonably small - When a graph is undirected, adjacncy matrix uses
only one bit per entry
9Breadth-first search
- Simplest algorithms for searching a graph
- Breadth-first search systematically explores the
edges of graph to discover every vertex that
reachable from source vertex - Discovers all vertices at distance k from s
before discovering any vertices at distance k1 - u is the predecessor or parent of v Vertex v
discovered in the course of scanning
adjacency-list of already discovered vertex u
10- BFS(G, s)
- 1 for each vertex u ? VG s
- 2 do coloru lt- WHITE
- 3 du lt- 8
- 4 pu lt- NIL
- 5 Colors lt- GRAY
- 6 ds lt- 0
- 7 ps lt- NIL
- 8 Q lt- Æ
- 9 ENQUEUE(Q, s)
- 10 while Q ¹ Æ
- 11 do u lt- DEQUEUE(Q)
- 12 for each v ÃŽ Adju
- 13 do if colorv WHITE
- 14 then colorv lt- GRAY
- 15 dv lt- du 1
- 16 pv lt- u
- 17 ENQUEUE(Q, v)
- 18 Coloru lt- BLACK
11Figure 22.3
12Figure 22.3
13Figure 22.3
14Figure 22.3
15Figure 22.3
16BFS Analysis
- Operations of enqueueing and dequeueing take O(1)
time, so the total time devoted to queue
operation is O(V) - Total time spent in scanning adjacency lists is
O(E) - Total running time of breadth-first search is O(V
E)
17Shortest Paths
- Shortest path distance d(s, v) from s to v as
the minimum number of edges in any path from
vertex s to vertex v - If there is no path from s to v, then d(s, v)
8 - Shortest path a path length d(s, v) from s to v
is said to be shortest path - Breadth first search actually computes shortest
path distances
18Lemma 22.1
- Let G (V, E) be a directed or undirected graph,
and let s?V be an arbitary vertex - Then, for any edge (u,v) ? E, d(s,v) ?
d(s,u)1 - Proof If u is reachable from s, then so is v. In
this case, the shortest path from s to v cannot
be longer than the shortest path from s to u
followed by the edge(u,v), and thus the
inequality holds. If u is not reachable from s,
then d(s,u) ?, and the inequality holds
19Lemma 22.2
- Let G(V,E) be a directed or undirected graph,
and suppose that BFS is run on G from a given
source vertex s ? V - Then upon termination, for each vertex v ? V, the
value dv computed by BFS satisfies dv ?
d(s,v)
20Lemma 22.3
- Suppose that during the execution of BFS on a
graph G(V,E), the queue Q contains the vertices
ltv1, v2, , vrgt, where v1 is the head of Q and
vr is the tail. - Then, dvr ? dv11 and dvi ? dvi12 for i
1, 2, . , r-1
21Corollary 22.4
- Suppose that vertices vi and vj are enqueued
during the execution of BFS, and that vi is
enqueued before vj - Then dvi ? dvj at the time that vj is
enqueued - Proof immediate from Lemma 22.3 and the property
that each vertex receives a finite d value at
most once during the course of BFS
22Theorem 22.5(Correctness of breadth-first search)
- Let G(V,E) be a directed or undirected graph,
and suppose that BFS is run on G from a given
source vertex s ? V - Then, during its execution, BFS discovers every
vertex v ? V that is reachable from the source,
and upon termination, dv d(s,v) for all v ? V
23Breadth-first trees
- Predecessor subgraph of G as Gp(Vp,Ep), where
- Vp v ? V pv? NIL ? s
- Ep (pv,v) v ? Vp- s
- The predecessor subgraph Gp is a beadth-first
tree if Vp consists of the vertices reachable
from s and, for all v ? Vp, there is a unique
simple path from s to v in Gp that is also a
shortest path from s to v in G
24Lemma 22.6
- When applied to a directed or undirected graph G
(V, E), procedure BFS constructs p so that the
predecessor subgraph Gp (Vp,Ep) is a
breadth-first tree
25Depth-first search
- In depth-first search, edges are explored out of
the most recently discovered vertex v that still
has unexplored edges leaving it - Predecessor subgraph of a depth-first search
forms a depth-first forest composed of several
depth-first tree - Gp(V, Ep) where Ep (pv,v) v?V and
pv?NIL
26Depth-first search(cont)
- Besides creating a depth-first forest,
depth-first search also timestamps each vertex - Each vertex has two timestaps
- dv timestamp records when v is first
discovered - fv timestamp records when the search finishes
examining vs adjacency list - Timestamps are integers between 1 and 2V
- For every vertex v, dv lt fv
- The running time of DFS_VISIT is Q(E)
- the running time of DFS Q(VE)
27DFS(G) for each vertex u ? VG do coloru lt-
WHITE pu lt- NIL time lt- 0 for each vertex u ?
VG do if coloru WHITE then
DFS-VISIT(u) DFS-VISIT(u) coloru lt-
GRAY ?White vertex u has just been
discovered time lt- time 1 du lt- time for each
v ? Adju ? Explore edge (u, v) do if colorv
WHITE then pv lt- u DFS-VISIT(v) coloru
lt- BLACK ? Blacken u it is finished fu lt-
time lt- time 1
28Figure 22.4
29Figure 22.4
30Figure 22.4
31Figure 22.4
32Figure 22.4
33Figure 22.4
34Figure 22.4
35Figure 22.4
36Properties of depth-first search
- The predecessor subgraph Gp does indeed from a
forest of trees, since the structure of the depth
first-tree exactly mirrors the structure of
recursive calls of DFS-VISIT - Discovery and finishing times have parenthesis
structure (figrure 22.5)
37Threorem 22.7 (Parenthesis theorem)
- In any depth-first search of a (directed of
undirected) graph G (V, E), for any two
vertices u and v, exactly one of the following
three conditions hold - The intervals du,fu and dv,fv are
entirely disjoint, and neither u nor v is a
descendant of the other in the depth-first forest - ZThe intervals du,fu is contained entirely
within the interval dv,fv, and u is a
descendant of v in a depth-first tree,or - The intervals dv,fv is contained entirely
within the interval du,fu, and u is a
descendant of u in a depth-first tree
38Figure 22.5
s
t
z
y
1/10
11/16
3/6
2/9
F
B
B
C
4/5
7/8
14/15
12/13
C
C
C
w
v
x
u
(a)
39Figure 22.5
s
t
z
v
u
y
w
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14
15 16 (s (z (y (x x) y) (w w) z)
s) (t (v v) (u u) t)
(b)
40Figure 22.5
s
t
B
C
C
F
z
v
u
B
C
y
w
C
x
(c)
41Corollary 22.8 (Nesting of descendants
intervals)
- Vertex is a proper descendant of vertex u in the
depth-first forest for a (directed or undirected)
graph G if and only if du lt dv lt fv lt fu - Immediate from Theorem 22.7
42Threorem 22.9 (White-path theorem)
- In a depth-first forest of a (directed or
undirected) graph G (V, E), vertex v is a
descendant of vertex u if any only if at the time
du that the search discovers u, vertex v can be
reached from u along a path consisting entirely
of white vertices
43Classification of edges
- Tree edges edges in the depth-first forest Gp.
Edge(u,v) is a tree edge if v was first
discovered by exploring edge(u, v) - Back edges edges (u, v) connecting a vertex u to
an ancestor v in a depth-first tree(include
self-loop) - Forward edges nontree edges (u, v) connecting a
vertex u to a descendant v in a depth-first tree - Cross edges all other edges
44Theorem 22.10
- In a depth-first search of an undirected graph G,
every edge of G is either a tree edge or a back
edge.
45Topological sort
- Topological sort of a dag G (V, E)
- Linear ordering of all its vertices such that if
G contains an edge(u, v), then u appears before v
in the ordering - Can be viewed as an ordering of its vertices
along a horizontal line so thatall directed edges
go from left to right - Different usual kind of sorting(ex. Quicksort)
- TOPOLOGICAL-SORT(G)
- call DFS(G) to compute finishing times fv for
each vectex v - as each vertex is finished, insert it onto the
front of a linked list - return the linked list of vertices
46Figure 22.7
undershorts
socks
11/16
17/18
watch
9/10
pants
shoes
12/15
13/14
shirt
1/8
belt
6/7
tie
2/5
jacket
3/4
(a)
47Figure 22.7
undershorts
pants
belt
shirt
tie
jacket
shoes
socks
watch
11/16
12/15
6/7
1/8
2/5
3/4
17/18
13/14
9/10
(b)
48Lemma 22.11
- A directed graph G is acyclic if and only if a
depth-first search of G yields no back edges.
49Figure 22.8
n
o
p
m
s
r
q
t
u
v
w
x
y
z
50Theorem 22.12
- TOPOLOGICAL-SORT(G) produces a topological sort
of a directed acyclic graph G.
51Strongly connected components
- Many algorithm that work with directed graphs
begin with decomposing a directed graph into its
strongly connected components
- STRONGLY-CONNECTED-COMPONENTS(G)
- call DFS(G) to compute finishing times fu for
each vertex u - compute Gt
- call DFS(Gt), but in the main loop of DFS,
consider the vertices in order of decreasing
fu(as computed in line 1) - Output the vertices of each tree in the
depth-first forest formed in line 3 as a separate
strongly connected component
52Figure 22.9
c
d
b
a
1/10
8/9
13/14
11/16
12/15
3/4
5/6
2/7
f
g
e
h
(a)
53Figure 22.9
c
d
b
a
f
g
e
h
(b)
54Figure 22.9
cd
abe
h
fg
(c)
55Lemma 22.13
- Let C and C be distinct strongly connected
components in directed graph G (V,E), let
u,v?C, let u, v ?C, and suppose that there is
a path ugtu in G. Then there cannot also be a
path v gtv in G.
56Lemma 22.14
- Let C and C be distinct strongly connected
components in directed graph G(V,E). Suppose
that there is an edge (u,v)?ET. where u?C
andv?C. Then f(C)ltf(C). - Proof 2 cases depending on which strongly
connected component, C or C, had the first
discovered vertex during the DFS.
57Corollary 22.15
- Let C and C be distinct strongly connected
components in directed graph G(V,E). Suppose
that there is an edge (u,v)?ET. where u?C
andv?C. Then f(C)ltf(C). - Proof Since(u,v)?ET, we have (v,u)?E. Since the
strongly connected components of G and GT are the
same, Lemma 22.14 implies that f(C)ltf(C).
58Theorem 22.16
- STRONGLY-CONNECTED-COMPONENTS(G) correctly
computes the strongly connected components of a
directed graph G.