Documente Academic
Documente Profesional
Documente Cultură
Sortare topologic
Arbore de acoperire minim
Algoritmul lui Kruskal
Algoritmul lui Prim
2013 - 2014
Sortare topologic
Digrafurile aciclice pot modela precedena
ntre evenimente.
O sortare topologic a unui digraf D=
(V, A) este o ordonare a vrfurilor sale
astfel nct dac (i,j) A, atunci i apare
naintea lui j.
Structuri de date
2013 - 2014
lenjerie
ceas
pantaloni
pantofi
cma
curea
cravat
sacou
ciorapi
lenjerie
pantaloni
pantofi
ceas
cma
curea
cravat
sacou
2013 - 2014
Sortare topologic
procedure SortareTopologica(D)
begin
1. DFSCompTareConexe(D)
2. Afiseaz vrfurile n ordinea descresctoare a
timpilor finali de vizitare timpFinal[i]
end
Complexitatea: O(n+m)
Structuri de date
2013 - 2014
ciorapi 17/18
lenjerie
ceas
12/15 pantaloni
9/10
pantofi 13/14
cma 1/8
6/7
cravat 2/5
curea
sacou 3/4
ciorapi
18
lenjerie
pantaloni
pantofi
ceas
cma
curea
cravat
16
15
14
10
sacou
2013 - 2014
Structuri de date
2013 - 2014
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
T
for i 0 to n-1 do singleton(i)
sorteaz muchiile din E n ordinea cresctoare
a costului w
for (fiecare muchie {i,j} E n ordinea
cresctoare a costului w) do
if (find(i) != find(j)) then
T T {{i,j}}
union(i,j)
O(m lg m)
end
Structuri de date
2013 - 2014
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
10
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
11
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
12
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
13
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
14
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
15
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
16
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
17
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
18
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
19
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
20
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
21
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
22
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
23
3.
cheie[i] ; insereaza(Q, i)
4. cheie[radacina] 0; tata[radacina] -1
5. while (not esteVida(Q)) do
6.
i citeste(Q); elimina(Q)
7.
for (fiecare vrf j n listaDeAdiac(i)) do
8.
if (j Q and w({i,j}) < cheie[j]) then
9.
tata[j] i
10.
cheie[j] w({i,j})
O(m lg n)
end
Structuri de date
2013 - 2014
24
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
25
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
26
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
27
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
28
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
29
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
30
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
31
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
32
9
2
11
8
7
14
10
Q=[ (4,9) ]
Structuri de date
2013 - 2014
33
9
2
11
8
7
14
10
Q=[ ]
Structuri de date
2013 - 2014
34
9
2
11
8
7
14
10
Structuri de date
2013 - 2014
35
,
altfel
Structuri de date
2013 - 2014
36
3
2
4
2
3
Structuri de date
2013 - 2014
37
3
2
4
2
3
4
5
Structuri de date
2013 - 2014
11
38
3
2
4
2
3
4
5
Structuri de date
2013 - 2014
11
39
3.
cheie[i] ; insereaza(Q, i); tata[i] -1;
4. cheie[radacina] 0; S
5. while (not esteVida(Q)) do
6.
i citeste(Q); elimina(Q); S S {i}
7.
for (fiecare vrf j n listaDeAdiacExt(i)) do
8.
if (cheie[j] > cheie[i] + w(i,j) then
9.
tata[j] i
10.
cheie[j] cheie[i] + w(i,j)
end
Structuri de date
O(n lg n + m)
2013 - 2014
40
10
9
4
Structuri de date
2013 - 2014
41
10
2
0 0
9
4
Structuri de date
2013 - 2014
42
14
10
2
0 0
9
4
Structuri de date
2013 - 2014
43
13
10
2
0 0
9
4
Structuri de date
2013 - 2014
44
10
2
0 0
9
4
Q=[ (2,9) ]
Structuri de date
2013 - 2014
45
10
2
0 0
9
4
Q=[ ]
Structuri de date
2013 - 2014
46
10
2
0 0
9
4
7
Structuri de date
2013 - 2014
47
2013 - 2014
48
Exemplu
0
2
1
6
5
7
3
4
8
Structuri de date
2013 - 2014
49
2013 - 2014
50
M
while (exist P un drum de cretere
relativ la M) do
M M xor P
end
O(m n)
Structuri de date
2013 - 2014
51
2013 - 2014
52
2013 - 2014
53
2013 - 2014
54
2013 - 2014
55
2013 - 2014
56