Documente Academic
Documente Profesional
Documente Cultură
http://en.wikipedia.org/wiki/Tarjan%27s_stro
ngly_connected_components_algorithm
Proiectarea Algoritmilor 2016 2
Parcurgere în adâncime (DFS)
Nu mai avem nod de start, nodurile fiind parcurse în
ordine.
explorare(u)
d(u) = ++ timp; // timpul de descoperire al nodului u
c(u) = gri; // nod în curs de explorare
Pentru fiecare nod v (v ∈ succs(u)) // încerc sa prelucrez vecinii
Dacă c(v) este alb
Atunci {p(v) = u; explorare(v);} // dacă nu au fost prelucrați deja
c(u) = negru; // am terminat de explorat nodul u
f(u) = ++ timp; // timpul de finalizare al nodului u
A J
B
G K
C
H
D L
E
I I I I I I
A A A A A A
J J J J J J
B B B B B B
G
G
K
G
K
G
K
G
K … G
K … K
C C C C C C
H H H H H H
L L L L L L
D D D D D D
E E E E E E
F F F F F F
I 17/
I
A 1/16
A J 18/
J B 2/5
B
G K K
G 6/15
C C 7/14
H
L H 3/4
D L
D 8/9
E
F E 10/13
F 11/12
A J
B
G K
C
H
L
D
I
A
J
B
G K
C
H
L
Complexitate:
O(n+m)
n = număr noduri
m = număr muchii
Optimalitate: NU
pantofi haină
cravată
pantaloni vestă
șosete
cămașă
Ex:
cămașă, cravată, vestă, haină, șosete, pantaloni, pantofi
cămașă, pantaloni, cravată, vestă, haină, șosete, pantofi
șosete, cămașă, cravată, vestă, haină, pantaloni, pantofi
șosete, cămașă, pantaloni, cravată, vestă, haină, pantofi
șosete, cămașă, pantaloni, pantofi, cravată, vestă, haină
Complexitate?
Complexitate:
O(n+m)
n = număr noduri
m = număr muchii
Proiectarea Algoritmilor 2016 25
Componente Tare Conexe (CTC)
Definiție: Fie G = (V,E) un graf orientat. G este tare-
conex ⇔ u,vV o cale u..v și o cale v..u (uR(v)
și vR(u)).
A
J
G
B
K
C
H
L
D
E
F
I
I
A A
J J
G G
B B
K K
C C
H H
L L
D D
E E
F
F
E
E
F F
D K
5/6 H 19/22
12/13
I
17/24
A
1/16 J
G 18/23
11/14
B
2/15 K
19/22
C
3/10 H
12/13 L
D 20/21
5/6
E
4/9
F
7/8
Cazuri în DFS(GT): A
9/16
G
v este în CTC descoperita din u v 11/14
DFS(GT). 10/15
C
17/22
se explorează u.
3/4
G
A
11/14
9/16
CTC(G)
DFS(G)
GT = transpune(G)
DFS(GT) (în bucla principală se tratează nodurile în ordinea
descrescătoare a timpilor de finalizare de la primul DFS)
Complexitate?
Proiectarea Algoritmilor 2016 41
Algoritmul lui Kosaraju
Complexitate
O(n+m)
n = numar noduri
m = numar muchii
Proiectarea Algoritmilor 2016 42
Corectitudine algoritm CTC (1)
Teoremă: Algoritmul CTC calculează corect
componentele tare conexe ale unui graf G = (V,E).
Dem. prin inducție după nr. de arbori de adâncime
găsiți de DFS al GT că vârfurile din fiecare arbore
formează o CTC:
Fiecare pas demonstrează că arborele format în acel pas
e o CTC, presupunând că toți arborii produși deja sunt
CTC.
P1: trivial pentru că ∄ arbori anteriori.
Pn Pn+1: Fie arborele T obținut in pasul curent având
rădăcina r. Notăm Cr = {vV | (v) = r}.