Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DREXEL UNIVERSITY
DEPT. OF COMPUTER SCIENCE
G 1 Adj[1] = {2,3}
2 4
Adj[2] = {3}
Adj[3] = {}
3
Adj[4] = {3}
Drexel CS Fall, 2013
Depth First Search (DFS)
8
Predecessor pointers
Discovery time
Finishing time
DFS(G) DFSVisit(u)
1 for each u in V 1 color[u] = gray;
2 color[u] = white; 2 d[u] = ++time;
3 pred[u] = nil; 3 for each v in Adj(u)
4 time = 0; 4 if (color[v] == white)
5 for each u in V 5 pred[v] = u;
6 if (color[u] == white) 6 DFSVisit(v);
7 DFSVisit(u); 7 color[u] = black;
8 f[u] = ++time;
Total = (V + E )
Drexel CS Fall, 2013
Example
14
a a a
d e
DFS(a) 1/ 1/ 1/
b a f DFS(b) Return(c) b
b DFS(f) b f
DFS(c) Return(b)
2/ 2/5 DFS(g) 2/5 6/
g
c c c g
3/ 3/4 3/4 7/
c
a DFS(d)
Return(g) DFS(e) a d
Return(f) 1/10 11/14
Return(e) 1/10
Return(a) f Return(d)
b f e
2/5 6/9 b
2/5 6/9 12/13
c g
3/4 7/8 c g
3/4 7/8
a d
11/14
1/10 b f
f e
b 12/13
2/5 6/9
c g c
c g
3/4 7/8
1 2 3 4 5 6 7 8 9 10 11 12 13 14
(a (b (c c) b) (f (g g) f) a) (d (c c) d)
w( p) : u p
min{ v} if there is a path between u and v
( u, v ) =
otherwise
u 6 v
3 4
s 1
2 2 7
3
5
6 y
x
u 6 v u v
6
3 9 3 9
3 4 3
s 1 s 4
2 2 7 2 1
0 3 0 2 7
3
5 5 11 5
6 5 11
x y 6 y
x
v1 vi vj vk
Pij
Drexel CS Fall, 2013
Sub-optimality
21
v
Drexel CS Fall, 2013
Relaxation
23
Drexel CS Fall, 2013
Relaxation
24
Relax(u,v,w)
if d[v]> d[u]+w(u,v) then
d[v]= d[u]+ w(u,v)
End
2 v u 2 v
u 5 6
5 9
Relax(u,v) Relax(u,v)
2 v u 2 v
u 5 6
5 7
SSSP(G)
for each v V do Initialize of d[ ] to inf
d [v ] =
Relaxation: each vertex can
d [s] = 0
S =
be subject to relaxation as
Q =V many times as its in-degree.
while Q do The changes due to
u = Extract - Min(Q ) relaxation will be handled
S = S {u} by Decrease-Key
for each v Adj[u ] do function.
if d [v] > d [u ] + w(u , v) then
d [v] = d [u ] + w(u , v)
5
Drexel CS Fall, 2013
Example
28
9
10 B Extract-Min: C
2
0 6 Decrease-Key: B,D
A
4
D
4 Q: (D,6)
5
C 1 (B,9)
5
8
10 B Extract-Min: D
2
0 6 Decrease-Key: B
A
4
D
4 Q: (B,9)
5
C 1
5
Drexel CS Fall, 2013
Example
29
8
10 B Extract-Min: B
2
0 6
A
4
D
3 Q: EMPTY
5
C 1
5
SSSP(G)
for each v V do
Extract-Min:
d [v ] =
|V| times.
d [s] = 0
S = Decrease-Key:
Q =V |E| times.
while Q do
u = Extract - Min(Q )
S = S {u} O(V logV + E logV )
for each v Adj[u ] do
if d [v] > d [u ] + w(u , v) then
d [v] = d [u ] + w(u , v)
k
p1 p2
i j
wij , if k = 0
Lemma: d (k )
=
ij
min{dij( k 1) , dikk 1 + d kjk 1} , if k 1
Floyd-Warshall(W)
1) n = W.rows d is a matrix
with indexes I
2) d ij(0) = copy(W )
and j
3) for k = 0 to n 1 do
Running time:
4) let dij(k ) = copy(dijk1 ) Q(n3)
5) for i = 0 to n 1 do
6) for j = 0 to n 1 do
7) dij(k ) = min(dij(k1), dik(k1) + dkj(k1) )
8) return d (n1)
NIL if i = j or w ij =
( 0)
=
ij
i if i j and w ij <
( k 1)
ij if dij( k 1)
dik( k 1)
+ d kj( k 1)
(k )
ij = ( k 1)
kj if dij( k 1)
> dik( k 1)
+ d kj( k 1)
.
wij , if k = 0 .
d (k )
=
ij
min{dij( k 1) , dikk 1 + d kjk 1} , if k 1 .
Drexel CS Winter, 2014