Sunteți pe pagina 1din 104

Prefat a

Rapida dezvoltare a algoritmicii grafurilor s-a datorat n primul rand progresului


exponent ial cunoscut de dezvoltarea calculatoarelor. Solicitata a participa la procesul
de optimizare combinatorie, algoritmica grafurilor si-a construit un fond de teoreme
proprii, pe baza carora s-au elaborat o mult ime de algoritmi ce formeaza astazi ins-
trumentul de baza al acestui domeniu. Aplicat iile algoritmicii grafurilor n diverse
doemnii, de la fundamentarea deciziilor politice la probleme macroeconomice, de la
probleme de product ie la studiul ret elelor electrice, i confera o important a crescuta.
Deoarece aceasta lucrare se adreseaza n primul rand student ilor din domeniul in-
formatica, ea cont ine principalele probleme ale algoritmicii grafurilor: not iuni de baza,
parcurgeri de grafuri, arbori si arborescent e, distant e si drumuri, probleme euleriene si
hamiltoniene. Expunerea estensot ita de numeroase exemple care faciliteazant elegerea
corecta si completa a algoritmilor prezentat i. De asemenea, ecare capitol cont ine si
aplicat ii n diverse domenii ale algoritmilor prezentat i n capitolul respectiv.
Cartea se adreseaza si altor categorii de cititori: student ilor din domeniile care stu-
diaza la anumite discipline si algoritmica grafurilor, elevilor de la clasele de informatica,
profesorilor de liceu care predau not iuni de algoritmica grafurilor, ingineri, economisti
etc. Cititorii interesat i sa studieze si alte capitole de algoritmica grafurilor pot consulta
bibliograa prezentata la sfarsitul lucrarii.
i
ii PREFAT

A
Cuprins
Prefat a iii
1 Not iuni introductive 1
1.1 Vocabularul de baza n teoria grafurilor . . . . . . . . . . . . . . . . . . 1
1.2 Clase de grafuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Operat ii cu grafuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Reprezentarea grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Complexitatea algoritmilor n teoria grafurilor . . . . . . . . . . . . . . . 16
1.6 Aplicat ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6.1 Ret ele de comunicat ii . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6.2 Probleme de programare dinamica . . . . . . . . . . . . . . . . . 23
2 Parcurgeri de grafuri 27
2.1 Parcurgerea generica a grafurilor . . . . . . . . . . . . . . . . . . . . . . 27
2.2 Parcurgerea BF a grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Parcurgerea DF a grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4 Aplicat ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4.1 Sortarea topologica . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4.2 Componentele conexe ale unui graf . . . . . . . . . . . . . . . . . 38
2.4.3 Componentele tare conexe ale unui graf . . . . . . . . . . . . . . 40
3 Arbori si arborescent e 43
3.1 Cicluri si arbori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2 Arbori part iali minimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.1 Condit ii de optimalitate . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.2 Algoritmul generic . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.2.3 Algoritmul Prim . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2.4 Algoritmul Kruskal . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.2.5 Algoritmul Boruvka . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3 Arborescent e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.4 Aplicat ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.4.1 Proiectarea unui sistem zic . . . . . . . . . . . . . . . . . . . . . 57
3.4.2 Transmiterea optima a mesajelor . . . . . . . . . . . . . . . . . . 57
3.4.3 Problema lant ului minimax ntre oricare doua noduri . . . . . . 58
iii
iv CUPRINS
4 Distant e si drumuri minime 59
4.1 Principalele probleme de drum minim . . . . . . . . . . . . . . . . . . . 59
4.2 Ecuat iile lui Bellman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.3 Algoritmi pentru distant e si drumuri minime . . . . . . . . . . . . . . . 61
4.3.1 Algoritmul Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.3.2 Algoritmul Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . 64
4.3.3 Algoritmul Floyd-Warshall . . . . . . . . . . . . . . . . . . . . . 66
4.4 Aplicat ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.4.1 Ret ele de comunicat ii . . . . . . . . . . . . . . . . . . . . . . . . 69
4.4.2 Problema rucsacului . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.4.3 Programarea proiectelor . . . . . . . . . . . . . . . . . . . . . . . 71
5 Probleme euleriene si hamiltoniene 75
5.1 Probleme euleriene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2 Probleme hamiltoniene . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.3 Aplicat ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.3.1 Problema postasului . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.3.2 Problema comis-voiajorului . . . . . . . . . . . . . . . . . . . . . 94
Bibliograe 99
Capitolul 1
Not iuni introductive
1.1 Vocabularul de baza n teoria grafurilor
Avertizam cititorul ca terminologia din Teoria Grafurilor nu este complet unitara.
Vom pastra, n cea mai mare parte, terminologia consacrata n literatura romana de
specialitate.
Denit ia 1.1. Se numeste graf orientat un triplet G = (N, A, g) format dintr-o
mult ime N de elemente numite noduri sau varfuri, dintr-o familie A de elemente numite
arce si dintr-o aplicat ie g : A N N numita funct ie de incident a, prin care ecarui
element a A i se asociaza o pereche ordonata (x, y) NN cu x ,= y; daca eliminam
condit ia x ,= y atunci arcul de forma (x, x) se numeste bucla, iar G se numeste graf
general orientat.

In continuare vom presupune ca graful orientat Geste nit, adica mult imea nodurilor
N = . . . , x, . . . este nita si familia arcelor A = (. . . , a, . . .) este un sir nit. Cardi-
nalul mult imii N notat [N[ = n, se numeste ordinul grafului orientat G.
Un graf orientat G = (N, A, g) se reprezinta grac n modul urmator:
i. ecare nod x N se reprezinta printr-un punct sau cerculet n plan;
ii. ecare arc a A, a = (x, y) se reprezinta printr-o linie care uneste cele doua noduri
si pe care se aa o sageata cu sensul de la x la y.
Exemplul 1.1. Graful din gura 1.1. este de ordinul 8.
Fig.1.1
1
2 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Observat ia 1.1. Reprezentarea graca a unui graf orientat G = (N, A, g) nu este
unica.

In primul rand nodurile se pot plasa n plan la ntamplare.

In al doilea rand nu
este obligatoriu ca arcele sa e segmente de dreapta.
Exemplul 1.2. Cele trei grafuri din gura 1.2. reprezinta acelasi graf.
Fig.1.2
Denit ia 1.2. Doua grafuri orientate, G
1
= (N
1
, A
1
, g
1
) si G
2
= (N
2
, A
2
, g
2
) se numesc
izomorfe, daca exista o biject ie : N
1
N
2
cu proprietatea ca aplicat ia : A
1
A
2
,
denita prin (x
1
, y
1
) = ((x
1
), (y
1
)), (x
1
, y
1
) A
1
, ((x
1
),
(y
1
)) = (x
2
, y
2
) A
2
, este o biject ie.
Exemplul 1.3. Grafurile G
1
= (N
1
, A
1
, g
1
) si G
2
= (N
2
, A
2
, g
2
) prezentate n gura
1.3 sunt izomorfe.
Fig.1.3
Daca denim biject ia prin (1) = 4, (2) = 3, (3) = 5, (4) = 6, (5) = 1, (6) =
2, atunci (1, 2) = ((1), (2)) = (4, 3), (1, 4) = ((1), (4)) = (4, 6), (1, 6) =
((1), (6)) = (4, 2) etc. este evident biject ia : A
1
A
2
.
Denit ia 1.3. Daca oricare pereche ordonata (x, y) N N este imaginea a cel mult
q, q > 1, elemente din A, atunci G = (N, A, g) se numeste multigraf orientat.
1.1. VOCABULARUL DE BAZ

A

IN TEORIA GRAFURILOR 3
Exemplul 1.4.

In gura 1.1. avem un multigraf orientat cu q = 2.

In paragrafele si capitolele urmatoare ne vom ocupa de grafuri orientate cu q = 1.

In acest caz funct ia g este injectiva si familia A este o mult ime. Un astfel de graf se
numeste digraf si se noteaza G = (N, A).
Denit ia 1.4. Se numeste graf neorientat un triplet G = (N, A, g) format dintr-
o mult ime N de elemente numite noduri sau varfuri, dintr-o familie A de elemente
numite muchii si dintr-o aplicat ie g : A T
2
(N) numita funct ie de incident a, prin
care ecarui element a A i se asociaza o pereche x, y T
2
(N); daca consideram
g : A T
(2)
(N), unde: T
(2)
(N) = T
2
(N) T
1
(N), atunci aplicat ia g asociaza ecarui
element a A, e o pereche de noduri x, y T
2
(N) care se noteaza [x, y] sau [y, x],
e un nod x T
1
(N) care se noteaza [x, x] si se numeste bucla, iar G se numeste
graf general neorientat.

In continuare vom presupune ca graful neorientat G este nit, adica mult imea
nodurilor N este nita si familia muchiilor A este un sir nit.
Un graf neorientat G = (N, A, g) se reprezinta grac la fel ca n cazul grafurilor
orientate cu deosebirea ca o muchie a = [x, y] se reprezinta printr-o linie care uneste
cele doua noduri fara sageata care precizeaza sensul n cazul arcului. De asemenea, la
fel ca n cazul grafurilor orientate se denet e izomorsmul a doua grafuri neorientate.
Denit ia 1.5. Daca oricare pereche [x, y] T
2
(N) este imaginea a cel mult q, q > 1,
elemente din A atunci G = (N, A, g) se numet e multigraf neorientat.
Exemplul 1.5. Daca se elimina sageata de pe ecare arc al grafului din gura 1.1,
atunci ecare arc (x, y) devine o muchie [x, y] si graful devine un multigraf neorientat
cu q = 3.

In paragrafele si capitolele urmatoare ne vom ocupa de grafuri neorientate cu q = 1.

In acest caz funct ia g este injectiva si familia A este o mult ime. Un graf neorientat cu
q = 1 se numeste graf simplu si se noteaza G = (N, A).

In majoritatea problemelor prezentate n continuare, se presupune ca graful este


orientat. De aceea, vom prezenta denit iile pentru grafurile orientate. Denit iile pentru
grafurile neorientate se pot deduce, n cele mai multe cazuri, cu usurint a din denit iile
corespunzatoare pentru grafuri orientate. Totusi, vom face unele precizari referitoare
la unele denit ii pentru grafurile neorientate.
Denit ia 1.6. Fie un arc a = (x, y) A. Nodurile x, y se numesc extremitat ile
arcului, nodul x este extremitatea init iala si y extremitatea nala; nodurile x si y se
numesc adiacente.
Evident ca, pentru o muchie a = [x, y] A, nu se pot preciza extremitatea init iala
si extremitatea nala.
Denit ia 1.7. Fie un arc a = (x, y) A. Nodul x se numeste predecesor al nodului
y si nodul y se numeste succesor al nodului x. Mult imea succesorilor nodului x este
mult imea V
+
(x) = y[(x, y) A si mult imea predecesorilor nodului x este mult imea
V

(x) = y[(y, x) A. Mult imea V (x) = V


+
(x) V

(x) se numeste vecinatatea


nodului x. Daca V (x) = , atunci x se numeste nod izolat.
Exemplul 1.6. Pentru 2 - graful din gura 1.1. avem V
+
(4) = 2, 5, V

(4) =
2, V (4) = 2, 5.
Denit ia 1.8. Se spune ca nodul x este adiacent cu submult imea N

N, daca x / N

si x V (N

), V (N

) = V (y)[y N

.
4 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Observat ia 1.2. Conceptul de digraf se poate deni si prin perechea G = (N, ),
unde N = . . . , x, . . . este mult imea nodurilor si aplicat ia multivoca : N
T(N), (x) = V
+
(x), x N. Cele doua denit ii sunt echivalente.

Intr-adevar, daca
digraful este dat sub forma G = (N, A), atunci (x) = V
+
(x), x N. Reciproc, daca
digraful este dat sub forma G = (N, ), (x) = V
+
(x), x N, atunci se determina
E
+
(x) = (x, y)[y V
+
(x), x N si A = E
+
(x)[x N. De asemenea, se
deneste
1
(x) = V

(x), x N. Recursiv avem

2
(x) = ((x)), . . . ,
k
(x) =
_

k1
(x)
_
, . . .
si analog

2
(x) =
1
(
1
(x)), . . . ,
k
(x) =
1
_

(k1)
(x)
_
, . . .
Un nod y
k
(x) se numeste descendent al nodului x si un nod z
k
(x) se
numeste ascendent al nodului x.
Exemplul 1.7. Fie digraful din gura 1.4.
Fig.1.4
Daca digraful este dat sub forma G = (N, A) cu N = 1, 2, 3, A = a
1
, a
2
, a
3
, a
4
=
(1, 2), (1, 3), (2, 1), (2, 3), atunci (1) = V
+
(1) = 2, 3, (2) = V
+
(2) = 1, 3, (3) =
V
+
(3) = si am obt inut digraful sub forma G = (N, ).
Daca digraful este dat sub forma G = (N, ) cu N = 1, 2, 3, (1) = 2, 3, (2) =
1, 3, (3) = , atunci E
+
(1) = (1, 2), (1, 3), E
+
(2) = (2, 1), (2, 3), E
+
(3) = si
A = E
+
(1) E
+
(2) E
+
(3) = (1, 2), (1, 3), (2, 1), (2, 3) = a
1
, a
2
, a
3
, a
4
.
Denit ia 1.9. Doua arce se numesc adiacente daca au cel put in o extremitate n
comun.
Denit ia 1.10. Fie arcul a = (x, y) A. Se spune ca arcul a este incident catre
exterior la nodul x si incident catre interior la nodul y. Mult imea arcelor incidente
catre exterior la nodul x este E
+
(x) = a
i
[ a
i
= (x, y) A, mult imea arcelor inci-
dente catre interior la nodul x este E

(x) = a
j
[ a
j
= (y, x) A si mult imea arcelor
incidente la nodul x este E(x) = E
+
(x)E

(x). Numarul
+
(x) = [E
+
(x)[ se numeste
semigradul exterior al nodului x, numarul

(x) = [E

(x)[ se numeste semigradul in-


terior al nodului x si numarul (x) =
+
(x) +

(x) se numeste gradul nodului x.


1.1. VOCABULARUL DE BAZ

A

IN TEORIA GRAFURILOR 5
Exemplul 1.8. Se considera multigraful orientat din gura 1.1. Avem
+
(3) =
3,

(3) = 1, deci (3) = 3 + 1 = 4.


Daca G = (N, A, g) este un graf neorientat atunci (x) =
+
(x) =

(x).

In cazul
n care G = (N, A, g) este multigraf orientat atunci
+
(x) [V
+
(x)[,

(x) [V

(x)[
si n care G = (N, A) este un digraf relat iile sunt vericate cu egalitat i. Evident ca
daca x este nod izolat atunci (x) = 0. Un nod x cu (x) = 1 se numeste perdant. Daca
toate nodurile lui G au acelasi grad atunci G se numeste graf - regulat. Un graf
0-regulat se numeste graf nul si un graf 3-regulat se numeste graf trivalent sau cubic.
Denit ia 1.11.

Intr-un graf orientat G = (N, A, g) se numeste lant de la nodul x
1
la
nodul x
k+1
, o secvent a L = (x
1
, a
1
, x
2
, . . . , x
k
, a
k
, x
k+1
), x
i
N, i = 1, . . . , k + 1, a
i

A, i = 1, . . . , k, cu proprietatea ca ecare arc a
i
este de forma (x
i
, x
i+1
) sau (x
i+1
, x
i
).
Daca a
i
= (x
i
, x
i+1
) , atunci a
i
se numeste arc direct al lant ului si daca a
i
= (x
i+1
, x
i
),
atunci a
i
se numeste arc invers al lant ului. Numarul de arce din secvent a este, prin
denit ie, lungimea lant ului L. Lant ul L se numeste simplu daca ecare arc a
i
din
secvent a este utilizat o singura data si se numeste elementar daca ecare nod x
i
din
secvent a este utilizat o singura data. Daca x
k+1
= x
1
atunci lant ul simplu L se numeste
ciclu si se noteaza

L.
Un lant poate reprezentat si ca o secvent a de arce L = (a
1
, . . . , a
k
) si n cazul
cand G = (N, A) este digraf ca o secvent a de noduri L = (x
1
, . . . , x
k+1
).
Exemplul 1.9. Se considera graful orientat din gura 1.1. Secvent a L = (1, a
1
, 2, a
8
, 4,
a
3
, 2, a
6
, 3, a
2
, 2, a
8
, 4) = (a
1
, a
8
, a
3
, a
6
, a
2
, a
8
) este un lant , dar nu este nici lant simplu,
nici lant elementar. Secvent a L = (1, a
1
, 2, a
3
, 4, a
4
, 2, a
2
, 3, a
6
, 2) = (a
1
, a
3
, a
4
, a
2
, a
6
)
este un lant simplu, dar nu este lant elementar. Secvent a L = (1, a
1
, 2, a
6
, 3, a
7
, 5, a
9
, 4) =
(a
1
, a
6
, a
7
, a
9
) este un lant elementar.
Not iunea de lant se poate deni si ntr-un graf neorientat G = (N, A, g) ca o secvent a
L = (x
1
, a
1
, x
2
, . . . , x
k
, a
k
, x
k+1
) cu proprietatea ca ecare muchie a
i
din secvent a este
de forma a
i
= [x
i
, x
i+1
] si lant ul poate reprezentat si sub forma L = (a
1
, . . . , a
k
). Un
lant L = (x
1
, a
1
, x
2
, . . . , x
k
, a
k
, x
k+1
), al grafului orientat G = (N, A, g), n care ecare
arc a
i
este arc direct, adica este de forma a
i
= (x
i
, x
i+1
), se numeste lant orientat sau
drum si se noteaza prin D. Un lant simplu orientat cu x
k+1
= x
1
se numeste ciclu
orientat sau circuit si se noteaza prin

D. Not iunile de drum si circuit au sens numai
pentru grafuri orientate.
Exemplul 1.10. Se considera graful orientat din gura 1.1. Secvent a D = (1, a
1
, 2, a
3
, 4,
a
8
, 2, a
2
, 3, a
6
, 2, a
3
, 4, a
8
, 2) = (a
1
, a
3
, a
8
, a
2
, a
6
, a
3
, a
8
) este un drum, dar nici drum sim-
plu, nici drum elementar. Secvent a D = (1, a
1
, 2, a
3
, 4, a
8
, 2, a
2
, 3, a
7
, 5) = (a
1
, a
3
, a
8
, a
2
, a
7
)
este un drum simplu, dar nu este un drum elementar. Secvent a D = (3, a
6
, 2, a
4
, 4, a
9
, 5) =
(a
6
, a
4
, a
9
) este un drum elementar.

In paragrafele urmatoare vom considera, n general, lant uri si drumuri elementare,


dar fara a mai specica de ecare data atributul elementar, ci numai n cazurile cand
este necesar.
Denit ia 1.12. Se spune ca graful orientat G

= (N

, A

, g

) este un subgraf al grafului


orientat G = (N, A, g) daca N

N si A

A. Daca N

N si A

= (N

) A
atunci G

= (N

, A

, g

) se numeste subgraf indus n G de mult imea de noduri N

. Daca
N

= N si A

A atunci G

= (N

, A

, g

) se numeste subgraf part ial al lui G.


6 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Concepte similare se pot deni n mod analog si pentru grafuri neorientate.
Fie G = (N, A) un digraf cu mult imea nodurilor N = 1, . . . , n si mult imea arcelor
A = 1, . . . , m. Matricea de adiacent a asociata digrafului G este matricea
M = (m
ij
)
nn
unde
m
ij
=
_
1 daca (i, j) A
0 daca (i, j) , A
Evident ca au loc relat iile:

+
(i) =
n

j=1
m
ij
, i N,

(j) =
n

i=1
m
ij
, j N.
Matricea de incident a asociata digrafului G este matricea M = (m
ij
)
nm
unde
m
ij
=
_

_
1 daca j E
+
(i)
1 daca j E

(i)
0 daca j , E(i)

In acest caz au loc relat iile:

+
(i) =

j|m
ij
>0
m
ij
, i N,

(i) =

j|m
ij
<0
[m
ij
[, i N.
Exemplul 1.11. Pentru digraful din gura 1.4. avem:
M =
_

_
0 1 1
1 0 1
0 0 0
_

_, M =
_

_
1 1 1 0
1 0 1 1
0 1 0 1
_

_
Se remarca faptul ca matricea de incident a M are pe ecare coloana un 1, un -1, si
n 2 zerouri.
Daca G = (N, A) este un graf simplu neorientat atunci
m
ij
=
_
1 daca [i, j] A,
0 daca [i, j] , A
si
m
ij
=
_
1 daca j E(i),
0 daca j , E(i)
Evident ca n cazul unui graf simplu neorientat matricea de adiacenta M este si-
metrica, adica m
ij
= m
ji
pentru i = 1, . . . , n si j = 1, . . . , n.
1.2. CLASE DE GRAFURI 7
1.2 Clase de grafuri
O clasa de grafuri este alcatuita din grafuri cu proprietat i particulare.
Denit ia 1.13. Se spune ca digraful G = (N, A) este simetric daca oricare ar
(x, y) A implica (y, x) A.
Cu alte cuvinte, digraful G = (N, A) este simetric daca orice pereche de noduri
adiacente este legata prin arce n ambele sensuri.
Denit ia 1.14. Se spune ca digraful G = (N, A) este antisimetric daca oricare ar
(x, y) A implica (y, x) , A.
Deci, digraful G = (N, A) este antisimetric daca orice pereche de noduri adiacente
este legata cel mult printr-un singur arc.
Exemplul 1.12. Digraful reprezentat n gura 1.5(a) este simetric si digraful reprezen-
tat n gura 1.5(b) este antisimetric.
Fig.1.5
Denit ia 1.15. Se spune ca digraful G = (N, A) este pseudosimetric daca
+
(x) =

(x) pentru ecare nod x N.


Orice digraf simetric este si pseudosimetric. Reciproca nu este adevarata.
Exemplul 1.13. Digraful reprezentat n gura 1.5(a) este simetric deci este si pseudosi-
metric, iar cel reprezentat n gura 1.5(b) este antisimetric, dar nu este pseudosimetric.
Digraful reprezentat n gura 1.6(a) este pseudosimetric, dar nu este simetric si nici
antisimetric, iar cel reprezentat n gura 1.6(b) este antisimetric si pseudosimetric.
Denit ia 1.16. Se spune ca digraful G = (N, A) este nesimetric daca exista un arc
(x, y) A pentru care (y, x) , A.
Cu alte cuvinte, digraful G = (N, A) este nesimetric daca nu este simetric. Orice
graf antisimetric este nesimetric. Reciproca nu este adevarata. Orice graf pseudosi-
metric care nu este simetric este nesimetric. Reciproca nu este adevarata.
Denit ia 1.17. Se spune ca digraful G = (N, A) este complet daca oricare ar
(x, y) , A implica (y, x) A.
Un graf simplu neorientat G = (N, A) cu n noduri care este complet se noteaza cu
K
n
si are n(n 1)/2 muchii.
8 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Fig.1.6
Exemplul 1.14. Digraful din gura 1.5(b) este antisimetric deci este nesimetric si
digrafurile reprezentate n gura 1.6 sunt pseudosimetrice care nu sunt simetrice, deci
sunt nesimetrice. Digraful din gura 1.7(a) este nesimetric, dar nu este nici antisimetric
si nici pseudosimetric.
Fig.1.7
Digraful reprezentat n gura 1.5(b) este complet. Graful K
4
este reprezentat n
gura 1.7(b).
Denit ia 1.18. Se spune ca digraful G = (N, A) este graf turneu daca este antisimetric
si complet.
Denumirea de graf turneu se justica prin faptul ca un astfel de graf poate reprezenta
un turneu sportiv n care ecare jucator (echipa) joaca cate un meci cu tot i (toate)
ceilalt i (celelalte) jucatori (echipe).
Denit ia 1.19. Se spune ca digraful G = (N, A) este tranzitiv daca oricare ar
(x, y) A si (y, z) A implica (x, z) A.
Exemplul 1.15. Digraful reprezentat n gura 1.5.(b) este un graf turneu si de aseme-
nea este tranzitiv.
Denit ia 1.20. Se spune ca digraful G = (N, A) este o clica daca este simetric si
complet.
1.2. CLASE DE GRAFURI 9
Denumirea de clica se justica prin faptul ca un digraf simetric si complet poate
reprezenta o coalit ie sociologica, politica etc. Not iunea de clica are sens si pentru grafuri
neorientate, astfel graful K
n
este o clica.
Denit ia 1.21. Se spune ca digraful G = (N, A) este bipartit daca mult imea nodurilor
N admite o partit ie n doua submult imi N
1
si N
2
(N
1
,= , N
2
,= , N
1
N
2
= , N
1

N
2
= N), astfel ncat orice arc (x, y) A are una dintre extremitat i n N
1
, iar cealalta
extremitate n N
2
.
Un digraf bipartit se noteaza G = (N
1
, N
2
, A) si se caracterizeaza prin inexistent a
ciclurilor care cont in un numar impar de arce. Un graf neorientat bipartit si complet
G = (N
1
, N
2
, A) cu [N
1
[ = n
1
si [N
2
[ = n
2
se noteaza K
n
1
,n
2
.
Exemplul 1.16. Digraful reprezentat n gura 1.8(a) este o clica.

In gura 1.8.(b)
este reprezentat graful K
2,3
.
Fig.1.8
Denit ia 1.22. Se spune ca digraful G = (N, A) este planar daca este posibil sa-l
reprezentam pe un plan astfel ncat oricare doua arce sa se ntalneasca eventual numai
n extremitat ile lor.
Analog se deneste un graf simplu neorientat planar. Arcele (muchiile) unui graf
planar G = (N, A) determina contururi care marginesc regiuni numite fet e. Exista o
singura regiune din plan fara contur numita fat a nemarginita.
Exemplul 1.17. Digraful reprezentat n gura 1.5(b) este planar, deoarece poate
reprezentat ca n gura 1.9.
Fet ele 1,2,3 sunt fet ele marginite, iar fat a 4 este fat a nemarginita. Exemple de
grafuri neplanare minimale sunt K
5
si K
3,3
.
O alta clasa de grafuri este alcatuita din grafuri asociate unui graf dat.

In paragraful 1.1. s-a denit subgraful G

= (N

, A

) al unui graf dat G = (N, A).


Denit ia 1.23. Se spune ca digraful G = (N, A) este complementarul digrafului
G = (N, A) daca N = N si A = (x, y) [ x, y N, x ,= y, (x, y) / A.
Analog se deneste complementarul unui graf simplu neorientat. Operat ia de com-
plementare este involutiva, adica complementarul complementarului este graful init ial.
10 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Fig.1.9
Exemplul 1.18. Digraful reprezentat n gura 1.10(b) este complementarul digrafului
reprezentat n gura 1.10.(a)
Denit ia 1.24. Se spune ca digraful G
1
= (N
1
, A
1
) este inversul digrafului
G = (N, A) daca N
1
= N si A
1
se obt ine din A prin inversarea sensului arcelor.
Fig.1.10
Operat ia de inversare este involutiva, adica inversul inversului este graful init ial
((G
1
)
1
= G). Graful autoreciproc (G
1
= G) este simetric.
Exemplul 1.19. Digraful reprezentatn gura 1.11(b) este inversul digrafului reprezen-
tat n gura 1.11(a).
Fig.1.11
1.3. OPERAT II CU GRAFURI 11
1.3 Operat ii cu grafuri
Denit ia 1.25. Suma cartezian a a doua digrafuri G
1
= (N
1
, A
1
) si G
2
= (N
2
, A
2
) este
notata G
1
+G
2
si este digraful G = (N, A) denit astfel:
N = N
1
N
2
= x
1
x
2
[x
1
N
1
, x
2
N
2
,
A = (x
1
x
2
, y
1
y
2
)[x
1
, y
1
N
1
, x
2
, y
2
N
2
,
x
1
= y
1
si (x
2
, y
2
) A
2
sau x
2
= y
2
si(x
1
, y
1
) A
1
.
Denit ia 1.26. Produsul cartezian al doua digrafuri G
1
= (N
1
, A
1
) si G
2
= (N
2
, A
2
)
este notat G
1
G
2
si este digraful G = (N, A) denit astfel:
N = N
1
N
2
= x
1
x
2
[x
1
N
1
, x
2
N
2
,
A = (x
1
x
2
, y
1
y
2
)[x
1
, y
1
N
1
, x
2
, y
2
N
2
,
(x
1
, y
1
) A
1
si (x
2
, y
2
) A
2
.
Suma carteziana si produsul cartezian a doua grafuri simple neorientate se denesc
analog ca pentru doua digrafuri. De asemenea suma carteziana si produsul cartezian
a p grafuri, p > 2, se denesc asemanator ca pentru doua grafuri. Exemplul 1.20.
Digraful reprezentat n gura 1.13(a) este suma carteziana a digrafurilor reprezentate
n gura 1.12.
Fig.1.12
Arcul (x
1
x
2
, x
1
y
2
) A deoarece x
1
= x
1
si (x
2
, y
2
) A
2
; arcul (x
1
x
2
, y
1
x
2
) A
deoarece x
2
= x
2
si (x
1
, y
1
) A
1
etc. Digraful reprezentat n gura 1.13(b) este
produsul cartezian al digrafurilor reprezentate n gura 1.12.
Arcul (x
1
x
2
, z
1
y
2
) A deoarece (x
1
, z
1
) A
1
si (x
2
, y
2
) A
2
; arcul (y
1
y
2
, z
1
x
2
) A
deoarece (y
1
, z
1
) A
1
si (y
2
, x
2
) A
2
etc.
1.4 Structuri de date utilizate n reprezentarea grafurilor
Performant a unui algoritm utilizat pentru rezolvarea unei probleme din teoria grafu-
rilor depinde nu numai de structura algoritmului utilizat ci si de modul de reprezentare
n calculator a topologiei grafului.
12 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Fig.1.13
Fie un digraf G = (N, A) cu N = 1, . . . , n si A = 1, . . . , m. Se considera funct ia
valoare b : A ' si funct ia capacitate c : A '
+
. Funct ia valoare b reprezinta e
funct ia lungime, e funct ia cost etc. Funct iile b, c etc. se pot deni si pe mult imea
nodurilor.
Denit ia 1.27. Un digraf G = (N, A) pe care s-a/s-au denit funct ia b sau/si funct ia
c se numeste ret ea orientata si se noteaza e G = (N, A, b), e G = (N, A, c), respectiv
G = (N, A, b, c).
Analog se deneste o ret ea neorientata.

In acest paragraf se vor prezenta cele mai uzuale structuri de date utilizate pentru
reprezentarea ret elelor. Pentru reprezentarea unei ret ele este necesar, n general, sa
memoram doua tipuri de informat ii:
a) informat ii privind topologia ret elei;
b) informat ii privind funct ia b sau/si funct ia c.

In acest paragraf se prezinta reprezentarile ret elelor orientate. Reprezentarile cores-


punzatoare ret elelor neorientate sunt similare cu reprezentarile ret elelor orientate. La
sfarsitul acestui paragraf sunt prezentate pe scurt si reprezentarile ret elelor neorientate.
Reprezentarea prin matricea de adiacent a constan memorarea matricei de adiacent a
M = (m
ij
)
nn
unde
m
ij
=
_
1 daca (i, j) A
0 daca (i, j) , A
Daca este necesar sa memoram funct ia b sau/si funct ia c, atunci memoram matricea
valoare
B = (b
ij
)
nn
1.4. REPREZENTAREA GRAFURILOR 13
unde
b
ij
=
_
b(i, j) daca (i, j) A,
0 daca (i, j) , A
sau/si matricea capacitate
C = (c
ij
)
nn
unde
c
ij
=
_
c(i, j) daca (i, j) A,
0 daca (i, j) , A
Reprezentarea prin matricea de incident a consta n memorarea matricei de incident a
M = (m
ij
)
nm
unde
m
ij
=
_

_
1 daca j E
+
(i),
1 daca j E

(i),
0 daca j , E(i)
Exemplul 1.21.Consideram ret eaua orientata din gura 1.14.
Fig.1.14
Matricele M, B, C, M sunt urmatoarele:
M =
_

_
0 1 1 0 0
0 0 0 1 0
0 1 0 0 0
0 0 1 0 1
0 0 1 1 0
_

_
, B =
_

_
0 25 35 0 0
0 0 0 15 0
0 45 0 0 0
0 0 15 0 45
0 0 25 35 0
_

_
14 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
C =
_

_
0 30 50 0 0
0 0 0 40 0
0 10 0 0 0
0 0 30 0 60
0 0 20 50 0
_

_
, M =
_

_
1 1 0 0 0 0 0 0
1 0 1 1 0 0 0 0
0 1 0 1 1 0 1 0
0 0 1 0 1 1 0 1
0 0 0 0 0 1 1 1
_

_
Matricele M, B, C au ecare n
2
elemente si numai m elemente nenule. Matricea
M are nm elemente si numai 2m elemente nenule (pe ecare coloana cate 2 elemente
nenule, un 1 si un -1). Rezulta ca reprezentarea prin matrice asociate ret elei este
ecienta numai n cazul ret elelor dense (m n). Pentru ret elele rare (m n
2
) este
ecient sa utilizam liste de adiacent a sau liste de incident a.
Lista nodurilor adiacente catre exterior nodului i este V
+
(i) = j[(i, j) A si lista
arcelor incidente catre exterior nodului i este E
+
(i) = (i, j)[j V
+
(i).
Consideram ca listele V
+
(i) si E
+
(i) sunt ordonate, si avem [V
+
(i)[ = [E
+
(i)[ =

+
(i), i = 1, . . . , n.
Reprezentarea prin liste de adiacent a poate utilizata n una din urmatoarele doua
variante:
- reprezentarea cu ajutorul tablourilor;
- reprezentarea cu ajutorul listelor simplu nlant uite.
Reprezentarea cu ajutorul tablourilor consta n a deni doua tablouri unidimension-
ale. Primul tablou, notat P, are n+1 elemente si reprezinta o lista de pointeri. Tabloul
P se deneste astfel:P(1) = 1, P(i +1) = P(i) +
+
(i), i = 1, . . . , n. Al doilea tablou,
notat V , are m elemente si reprezinta o lista de noduri. Tabloul V cont ine nodurile j
din lista V
+
(i), n ordinea stabilita, ntre locat iile P(i) si P(i + 1) 1, i = 1, . . . , n.
Reprezentarea cu ajutorul tablourilor poate realizata si prin utilizarea unui tablou
bidimensional
T =
_
T(1, 1) . . . T(1, p)
T(2, 1) . . . T(2, p)
_
unde p = n+m. Elementele T(1, k), k = 1, . . . , p sunt noduri si elementele T(2, k), k =
1, . . . , p sunt pointeri. Prima linie a tabloului T se deneste astfel:
T(1, k) =
_
k, pentru k = 1, . . . , n,
V (k n), pentru k = n + 1, . . . , p
Elementul T(1, k) reprezinta:
- nodul k, daca 1 k n,
- un nod j din V
+
(i), daca n +P(i) k n +P(i + 1), i = 1, . . . , n.
A doua linie a tabloului T se deneste astfel:
T(2, k) =
_

_
n +P(k), daca V
+
(k) ,= , pentru k = 1, . . . , n
0, daca V
+
(k) = , pentru k = 1, . . . , n
k + 1, daca T
(
1, k) = j nu este ultimul nod din V
+
(i)
pentru k = n +P(i), . . . , n +P(i + 1) 1, i = 1, . . . , n
0, daca T
(
1, k) = j este ultimul nod din V
+
(i)
pentru k = n +P(i), . . . , n +P(i + 1) 1, i = 1, . . . , n
1.4. REPREZENTAREA GRAFURILOR 15
Elementul T(2, k) ,= 0 reprezinta adresa (coloana) din T(1, k

), adica k

= T(2, k):
- a primului nod j din V
+
(k), daca 1 k n,
- a urmatorului nod j

a lui j = T(1, k) din V


+
(i), daca n + P(i) k < n + P(i +
1) 1, i = 1, . . . , n.
Reprezentarea cu ajutorul listelor simplu nlant uite consta din n liste, ecare lista
corespunde la un nod i si are
+
(i) locat ii. Fiecare locat ie corespunde unui arc (i, j)
si cont ine mai multe campuri: un camp pentru memorarea nodului j, un camp pen-
tru memorarea pointerului care indica legatura la urmatoarea locat ie si eventual un
camp sau doua campuri pentru b(i, j) sau/si c(i, j). Daca locat ia este ultima din lista
nlant uita atunci prin convent ie n campul pointerului punem valoarea 0. Deoarece
avem n liste, una pentru ecare nod i cu
+
(i) locat ii, este necesar un tablou unidi-
mensional, notat CAP, cu n elemente ce cont ine pointeri care indica prima locat ie din
ecare lista nlant uita. Daca
+
(i) = 0 atunci CAP(i) = 0.
Exemplul 1.22. Considerand ret eaua din gura 1.14 avem urmatoarele reprezentari
cu ajutorul tablourilor si cu ajutorul listelor simplu nlat uite:
V
+
(1) = 2, 3,
+
(1) = 2, V
+
(2) = 4,
+
(2) = 1, V
+
(3) = 2,
+
(3) =
1, V
+
(4) = 3, 5,
+
(4) = 2, V
+
(5) = 3, 4,
+
(5) = 2; P = (1, 3, 4, 5, 7, 9), V =
(2, 3, 4, 2, 3, 5, 3, 4); n = 5, m = 8, n +m = 5 + 8 = 13.
T =
_
1 2 3 4 5 2 3 4 2 3 5 3 4
6 8 9 10 12 7 0 0 0 11 0 13 0
_
Reprezentarea prin liste de adiacent a revine la descrierea matricei de adiacent a
linie cu linie.

In mod similar se poate descrie matricea de incident a coloana cu coloana
utilizand liste de incident a.
16 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Reprezentarea prin liste de incident a consta n utilizarea tabloului unidimensional
P al pointerilor si a unui tablou bidimensional notat E. Daca reprezentam o ret ea
G = (N, A, b) sau o ret ea G = (N, A, c) atunci tabloul E are trei linii si m coloane
si daca reprezentam ret eaua G = (N, A, b, c) atunci tabloul E are patru linii si m
coloane. Fiecare coloana k, corespunde unui arc (i, j) si anume E(1, k) = i, E(2, k) =
j, E(3, k) = b(i, j) sau c(i, j) daca ret eaua este G = (N, A, b) sau G = (N, A, c) si
E(1, k) = i, E(2, k) = j, E(3, k) = b(i, j), E(4, k) = c(i, j) daca ret eaua este G =
(N, A, b, c). Tabloul E cont ine arcele din E
+
(i), n ordinea stabilita, si informat iile
asociate acestor arce, de la coloana P(i) inclusiv pana la coloana P(i +1) 1 inclusiv.
Exemplul 1.23. Consideram ret eaua reprezentata n gura 1.14 Tablourile P si E
sunt urmatoarele:
P = (1, 3, 4, 5, 7, 9)
E =
_

_
1 1 2 3 4 4 5 5
2 3 4 2 3 5 3 4
25 35 15 45 15 45 25 35
30 50 40 10 30 60 20 50
_

_
Un alt avantaj al reprezentarii prin liste de adiacent a sau liste de incident a este
ca permite reprezentarea ret elelor care cont in arce paralele, adica arce care au aceeasi
extremitate init iala si aceeasi extremitate nala.
Reprezentarea prin liste de adiacent a este avantajoasa cand este implementata ntr-
un limbaj care are posibilitatea sa lucreze cu liste nlant uite (PASCAL, C).

In acest
caz topologia ret elei se poate modica usor. Reprezentarea prin liste de incident a
are avantajul ca are nevoie de mai put ina memorie decat reprezentarea prin liste de
adiacent a. Alegerea unei reprezentari depinde de problema de rezolvat si de limbajul
ales.
O ret ea neorientata G = (N, A, b, c) se transforma ntr-o ret ea orientata

G =
(

N,

A,

b, c) cu

N = N,

A = (i, j), (j, i) [ [i, j] A, funct iile

b si c sunt denite n
raport cu problema de rezolvat si

G se reprezinta prin una din metodele descrise mai
sus.
1.5 Not iuni de complexitatea algoritmilor n teoria grafu-
rilor

In acest paragraf se va nota cu r| cel mai mic ntreg mai mare sau egal cu r pentru
r '.
Fie un digraf G = (N, A) cu [N[ = n noduri si [A[ = m arce. Se considera
funct ia valoare b : A ' si funct ia capacitate c : A '. Funct ia valoare b
reprezinta e funct ia lungime, e funct ia cost etc. Fie b = maxb(x, y)[(x, y) A
si c = maxc(x, y)[(x, y) A.
Denit ia 1.28. Prin problema se nt elege o funct ie total denita P : I F, unde I
este mult imea informat iilor init iale (datele de intrare ale problemei) si F este mult imea
informat iilor nale (datele de iesire ale problemei).
Se presupune ca mult imile I si F sunt nevide si cel mult numarabile.
1.5. COMPLEXITATEA ALGORITMILOR

IN TEORIA GRAFURILOR 17
Exemplul 1.24.

In ret eaua G = (N, A, b) se poate formula problema drumului minim,
iar n ret eaua G = (N, A, c) problema uxului maxim.
Denit ia 1.29.Se numeste instant a a problemei P, precizarea problemei P(i) pentru
o valoare specicata i I.
Pentru o instant a P(i) se va folosi si notat ia p, iar prin abuz de notat ie uneori vom
scrie p P.
Exemplul 1.25.

In problema drumului minim n ret eaua G = (N, A, b), pentru a
deni o instant a a acestei probleme este necesar sa specicam topologia digrafului
G = (N, A), nodurile sursa si destinat ie si funct ia b.
Un algoritm este o procedura care rezolva pas cu pas o instant a p, p P.
Denit ia 1.30.Se spune ca algoritmul rezolva problema P daca algoritmul determina
solut ia oricarei instant e p P.
Un algoritm care rezolva instant a p va porni de la o codicare a informat iei init iale
i I si va furniza o codicare a rezultatului.
Denit ia 1.31. Se numeste dimensiunea problemei P un numar natural notat d(p), p
P, care reprezinta lungimea unei codicari binare a informat iei init iale.

In general, d(p) este un numar natural care reprezinta dimensiunea structurala a


informat iei init iale, deoarece lungimea codicarii binare a unei informat ii init iale va
marginita de o funct ie avand ca argument dimensiunea sa structurala.
Exemplul 1.26. Sa consideram o problema care are ca data de intrare un digraf
G = (N, A) reprezentat prin matricea sa de adiacent a M. Pentru aceasta problema
trebuie log n| bit i pentru codul numarului n si n
2
bit i pentru reprezentarea matricei.
Dimensiunea problemei, este log n|+n
2
. Pentru n sucient de mare se poate considera
dimensiunea problemei egala cu n
2
.
Exemplul 1.27. Sa consideram o problema care are ca data de intrare, o ret ea G =
(N, A, b). Presupunem ca pentru reprezentarea digrafului G = (N, A) se folosesc listele
de adiacent a P (lista de pointeri) si V (lista nodurilor). Daca notam cu
+
(i) semigradul
exterior al nodului i N, atunci lista P este un tablou unidimensional ce are n + 1
elemente cu P(1) = 1 si P(i+1) = P(i)+
+
(i), i = 1, 2, . . . , n. Lista V este un tablou
unidimensional ce are m elemente si V (P(i)) pana la V (P(i +1) 1) cont in succesorii
nodului i. Rezulta 1 P(i) m + 1, i = 1, . . . , n + 1 si 1 V (i) n, i = 1, . . . , m.
Deci pentru a descrie aceasta problema sunt necesari:
log n| bit i pentru codicarea lui n;
log m| bit i pentru codicarea lui m;
(n + 1)log(m+ 1)| bit i pentru codicarea elementelor tabloului P;
mlog n| bit i pentru codicarea elementelor tabloului V ;
mlog b| bit i pentru codicarea valorilor numerice b(x, y), (x, y) A.
Rezulta ca dimensiunea problemei este log n| + log m| + (n + 1)log(m + 1)| +
mlog n| + mlog b|. Pentru m si n sucient i de mari se poate considera ca problema
are dimensiunea mlog n|.

In continuare se vor prezenta diferite abordari ale complexitat ii unui algoritm.


Resursele de calcul asociate execut iei unui algoritm sunt spat iul de memorie si
timpul necesar de execut ie. Ne vom ocupa numai de resursa timp, deoarece progresele
tehnologice din ultima perioada conduc la o scadere a important ei memoriei folosite de
algoritm.
18 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Vom nota T

(p) timpul de execut ie necesar algoritmului pentru rezolvarea instant ei


p, p P. Acest timp reprezinta numarul pasilor efectuat i de algoritm pentru rezolvarea
instant ei p. Un pas al unui algoritm este o operat ie elementara (instruct iune elemen-
tara).

In general, operat iile elementare sunt: operat ii de atribuire, operat ii aritmetice
(+, -, , /), operat ii logice (comparat ii). Se presupune, ca execut ia unei instruct iuni ele-
mentare nu depinde de marimea operanzilor si de timpul de memorare a rezultatelor.
Aceasta nseamna ca resursa timp este studiata independent de sistemul de calcul pe
care se face implementarea algoritmului.

In literatura de specialitate exista trei tipuri de abordari ale complexitat ii unui al-
goritm : analiza empirica, analiza cazului mediu si analiza cazului cel mai defavorabil.
Obiectivul analizei empirice consta n studierea comportarii n practica a unui al-
goritm. Se scrie un program pentru algoritmul respectiv si se testeaza performant ele
programului pe diferite clase de instant e ale problemei. Aceasta analiza are cateva deza-
vantaje majore: (1) performant ele unui program depind de limbajul de programare, de
calculatorul folosit si de priceperea programatorului care a scris programul; (2) de obi-
cei aceasta analiza este mare consumatoare de timp si este scumpa; (3) compararea
algoritmilor prin aceasta analiza poate sa conduca la rezultate eronate.
Obiectivul analizei cazului mediu consta n studierea comportarii n medie a unui
algoritm, care presupune rezolvarea urmatoarelor doua etape: (a) precizarea unei
distribut ii de probabilitate pe mult imea instant elor p, p P; (b) determinarea me-
diei variabilei aleatoare T

(p), T
m

(k) = M(T

(p) [ p P, d(p) = k).


Analiza cazului mediu are, de asemenea, dezavantaje majore: (1) n general, este dicil
sa se determine o distribut ie de probabilitate corecta pe mult imea instant elor p, p P;
(2) aceasta analiza depinde de distribut ia de probabilitate aleasa; (3) n general, deter-
minarea mediei T
m

(k) se reduce la calculul unor sume nite care sunt evaluate cu mari
dicultat i. Totusi aceasta analiza este folosita n cazul cand algoritmul are performant e
bune pentru majoritatea instant elor si pentru un numar mic de instant e, care apar rar
n practica, algoritmul funct ioneaza prost sau foarte prost.
Analiza cazului cel mai defavorabil elimina multe din dezavantajele prezentate mai
sus. Aceasta analiza consta n a determina T

(k) = supT

(p)[p P, d(p) = k.
Rezulta ca analiza cazului cel mai defavorabil: (1) furnizeaza o margine superioara
pentru numarul operat iilor elementare (instruct iunilor elementare) necesare algoritmu-
lui pentru rezolvarea oricarei instant e p, p P; (2) este independenta de calculatorul
pe care se face implementarea algoritmului; (3) face posibila compararea algoritmilor;
(4) are si avantajul ca T

(k) se determina mai usor decat T


m

(k). Totusi, analiza cazului


cel mai defavorabil nu este perfecta. Un dezavantaj major este faptul ca T

(k) poate
determinata de instant e patologice care apar destul de rar n practica. Dar avantajele
acestei analize depasesc dezavantajele si de aceea este cea mai folosita metoda pentru
a masura performant ele unui algoritm.
Deoarece determinarea exacta a lui T

(k) este uneori dicila, iar pe de alta parte,


aceasta ar nsemna considerarea unor detalii de implementare, se vor cauta margini
superioare si inferioare pentru T

(k), se va studia comportarea sa asimptotica.

In cele ce urmeaza se vor introduce notat iile O, , si se vor deni algoritmii


polinomiali si cei exponent iali.
1.5. COMPLEXITATEA ALGORITMILOR

IN TEORIA GRAFURILOR 19
Fie funct ia f : ^ ^. Se folosesc urmatoarele notat ii:
O(f) = g[g : ^ ^, r
1
'

+
, k
0
^ : g(k) r
1
f(k), k k
0
;
(f) = g[g : ^ ^, r
2
'

+
, k
0
^ : g(k) r
2
f(k), k k
0
;
(f) = g [ g : N N, g O(f) (f).
Se obisnueste ca n loc de a scrie g O(f) sa se foloseasca notat ia g = O(f) (similar
pentru si ).
Denit ia 1.32. Se numeste complexitatea timp (sau simplu complexitate) a algoritmu-
lui comportarea asimptotica a lui T

(k).
Denit ia 1.33. Se spune ca o problema algoritmica P are complexitatea O(f(k))
daca exista un algoritm care rezolva problema P si algoritmul are complexitatea
T

(k) = O(f(k)).
Denit ia 1.34. Se spune ca o problema algoritmica P are complexitatea (f(k)) daca
orice algoritm care rezolva problema P are complexitatea T

(k) = (f(k)).
Denit ia 1.35. Se spune ca un algoritm pentru rezolvarea problemei P este optimal
daca problema P are complexitatea (T

(k)).
Demonstrarea optimalitat ii unui algoritm pentru o problema P este o activitate
foarte complicata. Exista foarte put ine rezultate de acest fel.
Denit ia 1.36. Se numeste algoritm polinomial un algoritm cu complexitatea
O(f(k)) unde f(k) este un polinomn k. Un algoritm care nu este polinomial se numeste
exponent ial.
Exemplul 1.28. Presupunem ca o operat ie elementara necesita pentru execut ie 10
6
secunde, adica O(1) = 10
6
secunde.

In tabelul de mai jos sunt prezentate com-
plexitat ile timp pentru cateva funct ii, unde m nseamna minute, z nseamna zile si s
nseamna secole.
n n n
5
2
n
n
n
20 0, 33 10
6
m 5, 33 10
2
m 1, 66 10
2
m 3 10
10
s
40 0, 66 10
6
m 0, 17 10
1
m 1, 27 10 z . . .
Exemplul 1.29. Sa consideram graful G = (N, A) cu N = 1, . . . , n, A = 1, . . . , m
reprezentat prin matricea sa de adiacent a M. Unele probleme de teoria grafurilor
necesita calcularea matricei M
n1
, unde prin M
i
notam, n acest exemplu, puterea
booleana de ordinul i a matricei M. Deci problema P consta n calculul matricei
M
n1
.
Dintr-un exemplu prezentat mai sus rezulta ca dimensiunea problemei este n
2
.
Daca avem de efectuat produsul boolean a doua matrice boolene (cu elemente 0 si
1) B si C patratice de dimensiune n, atunci pentru calculul matricei produs D = B

C
trebuie determinate toate elementele d
ij
= b
i1

c
1j

+. . .

+b
in

c
nj
, unde

,

+ reprezinta
nmult irea booleana, respectiv adunarea booleana. Convenim sa consideram ca operat ie
elementara perechea ordonata (

,

+). Rezulta ca, pentru calculul unui element d
ij
sunt
necesare n operat ii elementare. Deci pentru calculul celor n
2
elemente d
ij
sunt necesare
n
3
operat ii elementare. Fie:
n 1 =
k

i=0
a
i
2
i
, a
k
,= 0, a
i
0, 1.
20 CAPITOLUL 1. NOT IUNI INTRODUCTIVE

In acest caz avem M


n1
= M
a
0

(M
2
)
a
1

. . .

(M
2
k
)
a
k
. Acest produs boolean
cont ine cel mult log(n 1)| nmult iri boolene, deoarece daca a
i
= 0 atunci (M
2
i
)
a
i
=
U (matricea unitate) si nu se mai efectueaza nmult irea. Consideram cazul cel mai
defavorabil cu a
i
= 1, i = 0, . . . , k, k = log(n 1)| 1 (2
k
< n1 < 2
k+1
) si k =
log(n 1)| (n 1 = 2
k
). Algoritmul necesita atunci
1) calculul matricelor booleene:
M, M
2
= M

M, . . . , M
2
k
= M
2
k1

M
2
k1
ce reprezinta k nmult iri booleene de matrice booleene;
2) calculul matricelor booleene:
M
3
= M

M
2
, M
7
= M
3

M
4
, M
15
= M
7

M
8
, . . .
ce reprezinta k nmult iri booleene de matrice booleene.
Deci pentru a calcula M
n1
trebuie sa efectuam, n cazul cel mai defavorabil, 2k
nmult iri booleene de matrice booleene. Cum pentru nmult irea booleana a doua ma-
trice booleene sunt necesare n
3
operat ii elementare, rezulta ca pentru calculul matricei
M
n1
sunt necesare 2n
3
k operat ii elementare. Deoarece k = log(n 1)| 1 si di-
mensiunea problemei este n
2
, rezulta ca algoritmul pentru calculul matricei M
n1
are
complexitatea O(n
3/2
log n).
Referitor la problemele din teoria grafurilor, n practica curenta, se exprima com-
plexitatea unui algoritmn funct ie de m, n, b, c. Cum problema este din teoria grafurilor
se considera ca algoritmul pentru calculul matricei M
n1
are complexitatea O(n
3
log n).

In teoria grafurilor, referitor la complexitatea algoritmilor, avem urmatoarele not iuni


specice. Daca complexitatea algoritmului este O(f(n, m, log b, log c)), unde f(n, m,
log b, log c) este o funct ie polinomiala de n, m, log b, log c, atunci se spune ca algorit-
mul este polinomial. Un algoritm polinomial se spune ca este algoritm tare polinomial
daca f este o funct ie polinomiala numai de n si m si algoritm slab polinomial altfel.

In general, algoritmii tare polinomial sunt preferat i fat a de algoritmii slab polinomial,
deoarece ei pot rezolva probleme cu valori arbitrar de mari pentru funct iile b si c. Re-
marcam faptul ca denit ia algoritmului polinomial din teoria grafurilor se ncadreaza
n denit ia algoritmului polinomial pentru cazul general (Denit ia 1.36). De asemenea,
conform denit iei 1.36, un algoritm din teoria grafurilor este exponent ial daca nu este
polinomial. De exemplu, O(2
n
), O(n!), O(m n c) sunt complexitat i pentru algoritmi
exponent iali. Se spune ca un algoritm este pseudopolinomial daca f este o funct ie poli-
nomiala de m, n, b, c. Algoritmii pseudopolinomiali constituie o subclasa importanta a
clasei algoritmilor exponent iali.
Evident, ca sunt preferat i algoritmii polinomiali fat a de algoritmii exponent iali si
n cadrul algoritmilor exponent iali sunt preferat i algoritmii pseudopolinomiali.

In continuare se vor prezenta anumite reguli de calcul pentru O, , . Mai ntai


sa precizam ca relat iile O, , pot considerate ca relat ii ntre funct ii: O este relat ia
este dominata asimptotic de, este relat ia domina asimptotic pe si este relat ia
are acelasi ordin de marime ca. Se constata usor ca relat iile O si sunt relat ii de
preordine (reexive si tranzitive) si ca relat ia este o relat ie de echivalent a (reexiva,
simetrica si tranzitiva). Regulile de calcul pentru O, , sunt urmatoarele:
1.5. COMPLEXITATEA ALGORITMILOR

IN TEORIA GRAFURILOR 21
1) Reexivitatea relat iilor O, , :
a)f = O(f), b)f = (f), c)f = (f).
2) Simetria relat iei :
g = (f) implica f = (g).
3) Tranzitivitatea relat iilor O, , :
a)g = O(f) si f = O(h) implica g = O(h),
b)g = (f) si f = (h) implica g = (h),
c)g = (f) si f = (h) implica g = (h).
4) Fie c '

+
:
a)g = O(f) implica cg = O(f),
b)g = (f) implica cg = (f),
c)g = (f) implica cg = (f).
5) Fie g
1
g
2
sau g
1
g
2
:
a)g
1
= O(f
1
) si g
2
= O(f
2
) implica g
1
+g
2
= O(max(f
1
, f
2
)),
b)g
1
= (f
1
) si g
2
= (f
2
) implica g
1
+g
2
= (min(f
1
, f
2
)),
c)g
1
= (f
1
) si g
2
= (f
2
) implica g
1
+g
2
= (max(f
1
, f
2
)).
6) Fie g
1
g
2
:
a)g
1
= O(f
1
) si g
2
= O(f
2
) implica g
1
g
2
= O(f
1
),
b)g
1
= (f
1
) si g
2
= (f
2
) implica g
1
g
2
= (f
2
),
c)g
1
= (f
1
), g
2
= (f
2
) si f
1
= (f
2
), f
2
= O(f
1
) implica g
1
g
2
= (f
1
).
7) Fie g
1
g
2
sau g
1
g
2
:
a)g
1
= O(f
1
) si g
2
= O(f
2
) implica g
1
g
2
= O(f
1
f
2
),
b)g
1
= (f
1
) si g
2
= (f
2
) implica g
1
g
2
= (f
1
f
2
),
c)g
1
= (f
1
) si g
2
= (f
2
) implica g
1
g
2
= (f
1
f
2
).
Aceste reguli sunt consecint e evidente ale denit iilor.
Deseori se pot compara funct iile f si g calculand
lim
n
g(n)
f(n)
.
Se obt in urmatoarele proprietat i:
lim
n
g(n)
f(n)
= c > 0 implica g = (f) (1.1)
lim
n
g(n)
f(n)
= 0 implica g = O(f) si g ,= (f) (1.2)
lim
n
g(n)
f(n)
= implica g = (f) si g ,= (f) (1.3)
Aceste proprietat i rezulta din denit ia limitei: de exemplu pentru proprietatea (1.1)
avem: > 0, n
0
^ astfel ncat n n
0
avem

g(n)
f(n)
c

< sau > 0, n


0
^
astfel ncat n n
0
avem
(c )f(n) < g(n) < (c +)f(n).
Reciprocile proprietat ilor (1.1), (1.2), (1.3) sunt false.

In cazul cand nu exista limita,
trebuie revenit la denit iile O, , pentru a putea compara g si f. De exemplu, daca
22 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
f(n) = 2n, g(n) = n pentru n = 2k + 1 si g(n) = 2n pentru n = 2k, atunci limita de
mai sus nu exista, dar g (f) deoarece pentru orice n avem
1
2
f(n) g(n) f(n).
1.6 Aplicat ii
1.6.1 Ret ele de comunicat ii
O ret ea de comunicat ie se poate descrie printr-o ret ea G = (N, A, b, c). Astfel, pot
descrise traseele dintre localitat i pe sosele, autostrada sau cale ferata, traseele din
localitat i ale autobuzelor, troleibuzelor sau tramvaielor, traseele aeriene sau maritime,
ret elele cristalograce, geograce, topograce, cartograce, cadastrale, hidrograce, de
irigat ii, de drenaj, de alimentare cu apa, gaze sau energie electrica, de termocare,
telefonice, telecomunicat ii, telegrace, radio, televiziune, calculatoare. De asemenea
repartit iile de materiale sunt ret ele de comunicat ii, uxuri tehnologice, programele de
investit ii, de organizare a muncii, sistemul informat ional. Totodata sunt ret ele aparatul
circulator al sangelui, sistemul nervos, sistemul limfatic etc.
Exemplul 1.30.

In gura 1.15 este reprezentata ret eaua G = (N, A, b) a traseelor pe
sosele din judet ul Brasov, unde ecare nod x N reprezinta un oras din judet , o muchie
[x, y] A reprezinta faptul ca orasele x, y sunt conectate printr-o sosea modernizata si b
reprezinta funct ia distant a. S-a considerat ret eaua G = (N, A, b) neorientata, deoarece
pe o sosea [x, y] se circula n ambele sensuri. Pe ecare muchie s-a trecut distant a n
kilometri.
Fig.1.15 B - Brasov; B - Bran; C - Codlea; F - Fagaras; P - Predeal; R - Rasnov; R -
Rupea; S - Sacele; V - Victoria; Z - Zarnesti
1.6. APLICAT II 23
Exemplul 1.31.

In digraful din gura 1.16. este schematizata circulat ia sangelui n
corpul omenesc.
Fig.1.16 1 - auricul drept; 2 - ventricul drept; 3 - auricul stang;
4 - ventricul stang; 5 - plamani; 6 - membre superioare;
7 - cap; 8 - trunchi celiac; 9 - membre inferioare.
Daca pentru o persoana ar exista arcul (1, 3), atunci aceasta persoana ar avea boala
lui Roger, iar daca pentru o persoana se instituie comunicarea directa de la nodul 4 la
nodul 2, n digraf ar aparea arcul (4, 2), atunci persoana decedeaza.
Multe alte aplicat ii ale grafurilor vor prezentate n capitolele urmatoare.
1.6.2 Probleme de programare dinamica
Metoda programarii dinamice se aplica problemelor de optimizare n care solut ia
poate privita ca rezultatul unui sir de decizii din mult imea deciziilor D =
n
i=1
D
0i
.
Fie sistemul S cu mult imea starilor X. Presupunem ca trecerea sistemului S dintr-o
stare n alta are loc numai n urma unei decizii. Un vector x = (x
0
, . . . , x
n
) , x
i

X, i = 0, . . . , n reprezinta o solut ie si un vector d = (d
1
, . . . , d
n
) , d
i
D, i = 1, . . . , n
reprezinta o politica a sistemului S. Un vector x
ij
= (x
i
, . . . ,
j
) este o solut ie part iala
si un vector d
ij
= (d
i+1
, . . . , d
j
) 0 i < j n, este o subpolitica a sistemului S.
Printre politicile d care determina evolut ia sistemului S dintr-o stare init iala x
0
ntr-
o stare nala x
n
poate exista o politica d

= (d

1
, . . . , d

n
) care optimizeaza funct ia
obiectiv data. Aceasta politica se numeste politica optima si solut ia x

= (x

0
, . . . , x

n
)
determinata de politica optima d

se numeste solut ie optima.


24 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Principiul optimalitat ii are urmatoarea formulare:
Daca x

= (x

0
, . . . , x

n
) este o solut ie optima atunci oricare solut ie part iala x
ij
=
_
x

i
, . . . , x

j
_
a sa este optima.
Deci programarea dinamica se poate aplica problemelor pentru care optimul total
implica optimul part ial.
Analiza de luarea deciziilor ncepand cu starea init iala x
0
, continuand cu starile
x
1
, x
2
, . . . si terminand cu starea nala x
n
se numeste analiza prospectiva. Analiza de
luarea deciziilor ncepand cu starea nala x
n
, continuand cu starile x
n1
, x
n2
, . . . si
terminand cu starea init iala x
0
se numeste analiza retrospectiva.

In analiza prospectiva, daca sistemul S se aa n starea x


i1
si se ia decizia d
i

D
0i
(x
i1
) atunci S trece n starea x
i
, i = 1, . . . , n. Aceasta evolut ie poate descrisa
prin relat iile:
x
i
= t
0i
(x
i1
, d
i
), d
i
D
0i
(x
i1
), i = 1, . . . , n.
Fie u
0i
(x
i
, d
i
) utilitatea trecerii sistemului S de la starea x
i1
, la starea x
i
, i =
1, . . . , n. utilitatea totala este funct ia f
0n
(u
01
, . . . , u
0n
) si reprezinta funt ia obiectiv.
Consideram cazul aditiv f
0n
(u
01
, . . . , u
0n
) = u
01
+. . . +u
0n
.
Fie X
0i
, 0 i n, mult imea starilor accesibile la momentul i. prin urmare, avem:
X
0i
= y[y X, exista x X
0i1
si d D
0i
(x) astfel ncat y = t
0i
(x, d).
Oricarui proces secvent ial de decizii i se poate asocia un digraf G = (N, ) unde N =

n
i=0
X
0i
, (x) = y[y X
0i
, y = t
0i
(x, d), d D
0i
(x) pentru orice x X
0i1
. Digraful
poate exprimat echivalent prin G = (N, A), unde (x, y) A daca si numai daca y
(x). Un drumn digraful G de la starea x
i1
X
0i1
la starea x
j
X
oj
, 1 i < j n,
determina n mod unic o subpolitica d
ij
= (d
i
, . . . , d
j
) si reciproc.

In particular, un
drum de la starea init iala x
0
X
00
la starea nala x
n
X
0n
determina n mod unic
o politica d = (d
1
, . . . , d
n
) si reciproc. Digraful G = (N, A) are o structura particulara
deoarece mult imea nodurilor N este partit ionatan n+1 mult imi X
00
, . . . , X
0n
si pentru
orice arc (x, y) A, daca x X
0i1
atunci y X
0i
. Un digraf G = (N, A) cu aceste
proprietat i se numeste digraf secvent ial.

Intr-un digraf secvent ial G = (N, A) nu exista
circuite. Denim funct ia v : A ' prin v(x, y) = u
0i
(x, d), daca x X
0i1
, d
D
0i
(x) pentru orice arc (x, y) A. Astfel, n cazul funct iei obiectiv aditive, problema
determinarii unei politici optime este echivalenta cu problema determinarii unui drum
de valoare optima (minima sau maxima) n digraful G = (N, A).
Exemplul 1.32. Se considera sistemul S cu mult imea starilor X = x
0
, x
1
, x
2
, x
3

si mult imea starilor init iale X


00
= x
0
. Mult imile deciziilor D
0i
(x) si transformarile
t
0i
(x, d) sunt urmatoarele:
D
01
(x
0
) = d
1
, d
2
, t
01
(x
0
, d
1
) = x
1
, t
01
(x
0
, d
2
) = x
2
;
D
02
(x
1
) = d
3
, d
4
, t
02
(x
1
, d
3
) = x
1
, t
02
(x
1
, d
4
) = x
2
;
D
02
(x
2
) = d
5
, d
6
, t
02
(x
2
, d
5
) = x
1
, t
02
(x
2
, d
6
) = x
0
;
D
03
(x
0
) = d
1
, d
7
, t
03
(x
0
, d
1
) = x
1
, t
03
(x
0
, d
7
) = x
0
,
D
03
(x
1
) = d
3
, d
4
, d
8
, t
03
(x
1
, d
3
) = x
1
, t
03
(x
1
, d
4
) = x
2
, t
03
(x
1
, d
8
) = x
0
,
D
03
(x
2
) = d
5
, t
03
(x
2
, d
5
) = x
1
.
Rezulta ca mult imile X
0i
ale starilor accesibile sunt urmatoarele: X
00
= x
0
, X
01
=
x
1
, x
2
, X
02
= x
0
, x
1
, x
2
, X
03
= x
0
, x
1
, x
2
. Digraful secvent ial G = (N, ) este
1.6. APLICAT II 25
denit n modul urmator: N = X
00
X
01
X
02
X
03
= x
0
, x
1
, x
2
. Aplicat ia este
denita astfel:
Daca x X
00
atunci (x) = x
1
, x
2
pentru x = x
0
Daca x X
01
atunci
(x) =
_
x
1
, x
2
pentru x = x
1
x
0
, x
1
pentru x = x
2
Daca x X
02
atunci
(x) =
_

_
x
0
, x
1
pentru x = x
0
x
0
, x
1
, x
2
pentru x = x
1
x
1
pentru x = x
2
Reprezentarea graca a digrafului G = (N, ) este prezentata n gura 1.17.
Fig.1.17
Drumul care corespunde starii init iale x
0
si politicii (d
2
, d
5
, d
8
) este trasat cu linie
groasa.
Digraful secvent ial G = (N, ) asociat unui proces secvent ial de decizii denit ca
mai sus este un digraf dinamic care pune n evident a natura secvent iala n timp a
procesului. Se poate asocia procesului de decizii un alt digraf care este un digraf static
si nu mai pune n evident a natura secvent iala a procesului.

In acest caz digraful static
G

= (N

) se deneste n modul urmator.


N

= X,

(x) = y[y X, y = t
0
(x, d), d D
0
(x), x N

t
0
(x, d) = t
0i
(x
i1
, d
i
) = . . . = t
0j
(x
j
1
, d
j
) daca
d = d
i
= . . . = d
j
, D
0
(x) =
n
i=1
D
0i
(x), x N

.
26 CAPITOLUL 1. NOT IUNI INTRODUCTIVE
Exemplul 1.33. Se considera sistemul S cu mult imea starilor X, mult imea starilor
init iale X
00
, mult imea deciziilor D
0i
(x) si transformarile t
0i
(x, d) prezentaten exemplul
1.32. Reprezentarea graca a digrafului G

= (N

) este prezentata n gura 1.18.


Capitolul 2
Parcurgeri de grafuri
Problema parcurgerii unui digraf G = (N, A), N = 1, . . . , n, A = 1, . . . , m
are urmatoarea formulare: sa se genereze mult imea W N a nodurilor y pentru care
exista drum de la un nod sursa dat s la nodul y n digraful G. Daca exista drum, n
digraful G, de la nodul sursa s la nodul y atunci se spune ca nodul y este accesibil din
nodul s.
Algoritmii pe care i vom prezenta pentru rezolvarea problemei parcurgerii unui di-
graf G sunt metode sistematice de vizitare a nodurilor y accesibile din s. Fiecare iterat ie
a execut iei oricarui algoritm de parcurgere stabileste pentru ecare nod apartenent a la
una din urmatoarele trei stari:
nevizitat;
vizitat si neanalizat, adica un nod vizitat ai carui succesori au fost part ial vizitat i;
vizitat si analizat, adica un nod vizitat ai carui succesori au fost n totalitate vizitat i.
Daca nodul x este vizitat si neanalizat, exista arc (x, y) si nodul y este nevizitat,
atunci se poate vizita nodul y.

In acest caz se spune ca arcul (x, y) este arc admisibil
si daca nodul y este vizitat explorand arcul (x, y) se spune ca nodul x este predecesorul
parcurgere al nodului y.

In acest capitol se vor prezenta urmatorii algoritmi pentru parcurgerea unui di-
graf: algoritmul generic, algoritmul BF si algoritmul DF. Acesti algoritmi utilizeaza
urmatoarele notat ii comune:
U mult imea nodurilor nevizitate;
V mult imea nodurilor vizitate si neanalizate;
W mult imea nodurilor vizitate si analizate;
p tabloul predecesor, care este unidimensional cu n elemente.
2.1 Parcurgerea generica a grafurilor
Se folosesc notat iile precizate mai sus si n plus notam cu o tabloul ordine care este
unidimensional si are n elemente.
Algoritmul parcurgerii generice (algoritmul PG) este urmatorul:
27
28 CAPITOLUL 2. PARCURGERI DE GRAFURI
(1) PROGRAM PG;
(2) BEGIN
(3) U := N s; V := s; W := ;
(4) FOR tot i y N DO p(y) := 0;
(5) k := 1; o(s) := 1;
(6) FOR tot i y U DO o(y) := ;
(7) WHILE V ,= DO
(8) BEGIN
(9) se selecteaza un nod x din V ;
(10) IF exista arc(x, y) A si y U
(11) THEN U := U y; V := V y;
p(y) := x; k := k + 1; o(y) := k
(12) ELSE V := V x; W := W x;
(13) END;
(14) END.
Teorema 2.1 Algoritmul PG este convergent si la terminarea execut iei determina
mult imea tuturor nodurilor care sunt accesibile din nodul sursa s n digraful G = (N, A) .
Demonstrat ie Din liniile (10), (11) si (12) ale algoritmului rezulta ca toate nodurile
introduse n V sunt eliminate dupa ce sunt analizate. Deci dupa un numar nit de
iterat ii se obt ine V = si execut ia algoritmului se opreste. Pentru a arata ca la ter-
minarea execut iei, algoritmul determina mult imea tuturor nodurilor care sunt accesibile
din nodul sursa s n digraful G = (N, A), trebuie sa aratam ca la terminarea execut iei
algoritmului mult imea W este:
W = y[y N si exista drum de la s la y .
Din liniile (10), (11) si (12) ale algoritmului rezulta ca n V sunt introduse numai
noduri y care sunt accesibile din s si ca dupa ce un nod x V a fost analizat el este
eliminat din V si introdus n W. Deoarece algoritmul se opreste cand V = rezulta
ca W cont ine toate nodurile y N care sunt accesibile din s si introduse n V . Sa
aratam ca W cont ine toate nodurile y N care sunt accesibile din s. Prin reducere la
absurd sa presupunem ca exista un drum D = (y
1
, y
2
, . . . , y
k1
, y
k
) cu y
1
= s, y
k
= y
n G si y / W. Rezulta ca y
k
/ V . Deoarece y
k
/ V si (y
k1
, y
k
) A deducem ca
y
k1
/ V , astfel y
k
ar fost introdus n V . Continuand procedeul vom deduce n nal
ca s = y
1
/ V . Aceasta contrazice faptul ca n linia (3) a algoritmului init ializam
V :=s. Rezulta ca y V , deci y W si teorema este demonstrata.
Teorema 2.2 Algoritmul PG are complexitatea O(m) .
Demonstrat ie Din liniile (10) , (11) si (12) ale algoritmului rezulta ca ecare nod
al digrafului G este introdus si eliminat din V cel mult o data. Deoarece execut ia
algoritmului se termina cand V = deducem ca algoritmul executa cel mult 2n iterat ii.
Fiecare arc (x, y) A este explorat cel mult o data pentru identicarea arcelor admisi-
bile. Deci complexitatea algoritmului PG este O(m+n) = O(m).
Un digraf

G =
_

N,

A
_
se numeste arborescent a cu radacina s daca este fara cicluri
si

(s) = 0,

(x) = 1 pentru toate nodurile x din



N cu x ,= s.
2.1. PARCURGEREA GENERIC

A A GRAFURILOR 29
Subgraful G
p
= (N
p
, G
p
) cu N
p
= y N [ p (y) ,= 0 s , A
p
= (p (y) , y)
A [ y N
p
s se numeste subgraf predecesor al digrafului G = (N, A). Daca N
p
= W
si G
p
este o arborescent a atunci G
p
se numeste arborescent a parcurgere. Arcele din A
p
se numesc arce arborescent a.
Teorema 2.3 Algoritmul PG determina elementele tabloului p astfel ncat subgraful
predecesor G
p
= (N
p
, A
p
) este o arborescent a parcurgere.
Demonstrat ie Din liniile (10) , (11) si (12) ale algoritmului rezulta ca p (y) := x nu-
mai daca y este accesibil din s. Evident ca la terminarea execut iei algoritmului avem
N
p
= W. Din modul cum sunt denite N
p
si A
p
rezulta ca G
p
este o arborescent a.
Deci subgraful predecesor G
p
este o arborescent a parcurgere a digrafului G = (N, A).
Observat ia 2.1. Mult imea W este n general o submult ime a mult imii nodurilor N.
Pentru parcurgerea ntregului digraf G = (N, A) se utilizeaza algoritmul parcurgerii
totale generice (algoritmul PTG). Algoritmul PTG este urmatorul:
(1) PROGRAM PTG;
(2) BEGIN;
(3) U := N s ; V := s ; W := ;
(4) FOR tot i y N DO p (y) := 0;
(5) k := 1; o (s) := 1;
(6) FOR tot i y U DO o (y) := ;
(7) WHILE W ,= N DO
(8) BEGIN
(9) WHILE V ,= DO
(10) BEGIN
(11) se selecteaza un nod x din V ;
(12) IF exista arc (x, y) A si y U
(13) THEN U := U y ; V := V y ; p (y) := x;
k := k + 1; o (y) := k
(14) ELSE V := V x ; W := W x ;
(15) END;
(16) se selecteaza s U; U := U s ; V := s ;
k := k + 1; o (s) := k;
(17) END;
(18) END.
Este evident ca algoritmul PTG are complexitatea tot O(m) si ca vectorul p deter-
mina una sau mai multe arborescent e parcurgere.
Observat ia 2.2. Din modul cum se calculeaza o (y) := k, n linia (11) a algoritmului
PG sau n liniile (13) sau (16) a algoritmului PTG, rezulta ca y este al k-lea nod vizitat
n parcurgerea digrafului G = (N, A).
Observat ia 2.3. Algoritmul PG sau PTG poate aplicat si grafurilor neorientate.

In acest caz subgraful predecesor G


p
= (N
p
, A
p
) este tot o arborescent a sau mai multe
arborescent e.
Observat ia 2.4. Drumul unic de la nodul sursa s la un nod y din arborescent a par-
curgere G
p
= (N
p
, A
p
) este furnizat de urmatoarea procedura:
30 CAPITOLUL 2. PARCURGERI DE GRAFURI
(1) PROCEDURA DRUM(G, s, y);
(2) BEGIN;
(3) se tipareste y;
(4) WHILE p (y) ,= 0 DO
(5) BEGIN
(6) x := p (y);
(7) se tipareste x;
(8) y := x
(9) END;
(10) END.
Dupa ordinea de selectare si adaugare a nodurilor la mult imea V se cunosc mai multe
moduri de parcurgere a unui digraf G = (N, A). Cele mai uzuale moduri de parcurgere
sunt:
parcurgerea se face mai ntai n lat ime, n engleza breadth rst (BF);
parcurgerea se face mai ntai n adancime, n engleza depth rst (DF).
2.2 Parcurgerea BF a grafurilor
Fie digraful G = (N, A) cu nodul sursa s si T
x
mult imea drumurilor de la nodul
sursa s la nodul x N. Numarul de arce ce compun un drum D
x
T
x
deneste
lungimea acestui drum pe care o notam l (D
x
). Distant a de la nodul s la nodul x se
deneste n modul urmator:
d(x) =
_
minl(D
x
) [ D
x
T
x
daca T
x
,=
daca T
x
=
Un drum

D
x
T
x
cu l
_

D
x
_
= d (x) se numeste cel mai scurt drum de la nodul
sursa s la nodul x.
Observat ia 2.5. Pentru orice arc (x, y) A avem d (y) d (x) + 1.

Intr-adevar daca T
x
= atunci d (x) = si inegalitatea se pastreaza. Daca T
x
,=
atunci evident T
y
,= . Fie

D
x
un cel mai scurt drum de la s la x, deci l
_

D
x
_
= d (x).
Mult imea T
y
poate cont ine un drum D
y
astfel ncat l (D
y
) < d (x) + 1. Conform
denit iei distant ei avem d (y) l (D
y
) si rezulta ca d (y) < d (x) + 1. Avem egalitate
cand un drum cel mai scurt

D
y
de la s la y are lungimea d (y) = l
_

D
y
_
= d (x) +1, de
exemplu

D
y
=

D
x
(x, y).

In algoritmul parcurgerii BF (algoritmul PBF) se folosesc aceleasi notat ii ca n


algoritmul PG cu deosebirea ca n locul tabloului ordine o se utilizeaza tabloul lungime
l care este unidimensional si are n elemente. Mult imea nodurilor vizitate si neanalizate
V este organizata, ca structura de date, ca o coada.
Algoritmul PBF este urmatorul:
2.2. PARCURGEREA BF A GRAFURILOR 31
(1) PROGRAM PBF;
(2) BEGIN;
(3) U := N s ; V := s ; W := ;
(4) FOR tot i y N DO p (y) := 0;
(5) l (s) := 0;
(6) FOR tot i y U DO l (y) := ;
(7) WHILE V ,= DO
(8) BEGIN
(9) se selecteaza cel mai vechi nod x introdus n V ;
(10) FOR (x, y) A DO
(11) IF y U
(12) THEN U := U y ; V := V y ; p (y) := x;
l (y) := l (x) + 1;
(13) V := V x ; W := W x ;
(14) END;
(15) END.
Teorema 2.4 (1) Algoritmul PBF calculeaza elementele tabloului l astfel ncat d (y)
l (y) , y N;
(2) Daca la iterat ia k oarecare a algoritmului PBF avem V = x
1
, . . . , x
r
n aceasta
ordine, atunci l (x
r
) l (x
1
) + 1 si l (x
i
) l (x
i+1
) , i = 1, . . . , r 1.
Demonstrat ie (1) Utilizam induct ia dupa k numarul de iterat ii ale ciclului WHILE.
Init ial l (s) := 0, l (y) := pentru y U si evident d (y) l (y) , y N. Presupunem
ca la iterat ia k avem d (y) l (y)pentru y N. La iterat ia k + 1 pot exista cazurile:
(c1) Exista arc (x, y) admisibil ((x, y) A si y U).

In acest caz l (y) = l (x) +1 si
d (y) d (x) + 1 l (x) + 1 = l (y) ( l (x) pentru x V nu se modica). Deci pentru
toate arcele (x, y) A si y U avem d (y) l (y). Pentru celelalte noduri y, conform
ipotezei induct iei, avem d (y) l (y), deoarece la iterat ia k +1 l (y) nu se mai modica.
(c2) Nu exista arc (x, y) admisibil ((x, y) / A sau y / U).

In acest caz la iterat ia
k + 1 nu se modica nici un element l (y) si conform ipotezei induct iei d (y) l (y)
pentru y N.
(2) Utilizam induct ia dupa k numarul de iterat ii ale ciclului WHILE. Init ial V := s.
Deci x
1
= s, x
r
= s si l (s) < l (s) + 1, l (s) = l (s) . Presupunem ca la iterat ia k avem
l (x
r
) l (x
1
) +1 si l (x
i
) < l (x
i+1
), pentru i = 1, . . . , r 1. La iterat ia k +1 pot exista
cazurile:
(c1) Exista arc (x, y) admisibil ((x, y) A si y U).

In acest caz V = x
1
, . . . , x
r
,
x
r+1
, x
1
= x, x
r+1
= y. Astfel l (x
r+1
) = l (y) = l (x) + 1 = l (x
1
) + 1. De
asemenea, avem l (x
r
) l (x
1
) + 1 = l(x) + 1 = l (y) = l (x
r+1
) si inegalitat ile
l (x
i
) l (x
i+1
) , i = 1, . . . , r 1 au ramas nemodicate.
(c2) Nu exista arc (x, y) admisibil ((x, y) / A sau y / U).

In acest caz V = x
2
, . . . , x
r
.
Avem l (x
r
) l (x
1
) +1 l (x
2
) +1 si inegalitat ile l (x
i
) l (x
i+1
) , i = 1, . . . , r 1 au
ramas nemodicate.
Teorema 2.5. Algoritmul PBF este convergent si determina:
(1) mult imea tuturor nodurilor care sunt accesibile din nodul sursa s;
(2) elementele tabloului l astfel ncat l (y) = d (y) pentru y N.
32 CAPITOLUL 2. PARCURGERI DE GRAFURI
Demonstrat ie Convergent a si punctul (1) se demonstreaza la fel ca Teorema 2.1.
Punctul (2) se demonstreaza prin induct ie dupa k numarul iterat iilor ciclului WHILE.
Fie mult imea N
k
= y N [ d (y) = k. Pentru k = 0 avem N
0
= s si deci d (s) =
l (s) = 0. Presupunem armat ia adevarata pentru k. Armat ia pentru k + 1 rezulta
cu usurint a, deoarece, n conformitate cu Teorema 2.4 punctul (2), un nod y N
k+1
este vizitat plecand de la un nod x N
k
numai dupa ce toate nodurile din N
k
sunt
vizitate. Deci, daca y N
k+1
si este vizitat explorand arcul (x, y), x N
k
, atunci,
l (y) = l (x) + 1 = d (x) + 1 = k + 1 = d (y) .
Teorema 2.6. Algoritmul PBF are complexitatea O(m).
Demonstrat ie Evident ca algoritmul PBF are aceeasi complexitate ca a algoritmului
PG, adica O(m).

In parcurgerea BF, daca N


p
= W si subgraful predecesor G
p
= (N
p
, A
p
) este o
arborescent a atunci G
p
se numeste arborescent a parcurgere BF.
Teorema 2.7. Algoritmul PBF determina elementele tabloului p astfel nc at subgraful
predecesor G
p
= (N
p
, A
p
)este o arborescent a parcurgere BF.
Demonstrat ie Se demonstreaza analog cu Teorema 2.3.
Observat ia 2.6. Algoritmul parcurgerii totale BF (algoritmul PTBF) se obt ine din
algoritmul PBF analog cum s-a obt inut algoritmul PTG din algoritmul PG.
Observat ia 2.7. Drumul unic de la nodul sursa s la un nod y din arborescent a par-
curgere BF este un cel mai scurt drum de la nodul sursa s la acelasi nod y din digraful
G, conform punctului (2) al Teoremei 2.5.
Observat ia 2.8. Algoritmul PBF sau PTBF se poate aplica si grafurilor neorientate.

In acest caz subgraful predecesor G


p
= (N
p
, A
p
) este o arborescent a sau mai multe
arborescent e.
Observat ia 2.9. Drumul unic de la nodul sursa s la un nod y din arborescent a par-
curgere BF se poate determina cu PROCEDURA DRUM prezentata n Observat ia 2.4.
Exemplu 2.1. Se aplica algoritmul PBF digrafului din gura 2.1.
Fig.2.1
Init ializari: s = 1, U = 2, 3, 4, 5, 6 , V = 1 , W = , p = (0, 0, 0, 0, 0, 0) ,
l = (0, , , , , ).
Iterat ia 1: x = 1, (1, 2) A, 2 U : U = 3, 4, 5, 6 , V = 1, 2 ,
p = (0, 1, 0, 0, 0, 0) , l = (0, 1, , , , ) ; (1, 3) A,
3 U : U = 4, 5, 6 , V = 1, 2, 3 , p = (0, 1, 1, 0, 0, 0) ,
l = (0, 1, 1, , , ) ; V = 2, 3 ; W = 1.
2.3. PARCURGEREA DF A GRAFURILOR 33
Iterat ia 2: x = 2, (2, 4) A, 4 U : U = 5, 6 , V = 2, 3, 4 ,
p = (0, 1, 1, 2, 0, 0) , l = (0, 1, 1, 2, , ) ; (2, 5) A,
5 U : U = 6 , V = 2, 3, 4, 5 , p = (0, 1, 1, 2, 2, 0) ,
l = (0, 1, 1, 2, 2, ) ; V = 3, 4, 5 ; W = 1, 2.
Iterat ia 3: x = 3, V = 4, 5 , W = 1, 2, 3.
Iterat ia 4: x = 4, (4, 6) A, 6 U : U = , V = 4, 5, 6 ,
p = (0, 1, 1, 2, 2, 4) , l = (0, 1, 1, 2, 2, 3) ; V = 5, 6 ; W = 1, 2, 3, 4.
Iterat ia 5: x = 5, V = 6 , W = 1, 2, 3, 4, 5.
Iterat ia 6: x = 6, V = , W = 1, 2, 3, 4, 5, 6.
N
p
= 1, 2, 3, 4, 5, 6 = W.
Arborescent a parcurgere BF este prezentata n gura 2.2.
Fig.2.2
Drumul unic de la nodul 1 la nodul 6 se obt ine cu PROCEDURA DRUMn modul
urmator:
y = 6 este ultimul nod al drumului;
Iterat ia 1: x = p (6) = 4, y = 4.
Iterat ia 2: x = p (4) = 2, y = 2.
Iterat ia 3: x = p (2) = 1, y = 1.
Drumul este: 1, 2, 4, 6.
2.3 Parcurgerea DF a grafurilor

In algoritmul parcurgerii DF (algoritmul PDF) se folosesc aceleasi notat ii ca n


algoritmul PG cu deosebirea ca n locul tabloului unidimensional ordine o se utilizeaza
tablourile timp unidimensionale t
1
si t
2
care au ecare n elemente. Mult imea nodurilor
vizitate si neanalizate V este organizata, ca structura de date, ca stiva.
Algoritmul PDF este urmatorul:
(1) PROGRAM PDF;
(2) BEGIN;
(3) U := N s ; V := s ; W := ;
(4) FOR tot i y N DO p (y) := 0;
(5) t := 1; t
1
(s) := 1; t
2
(s) := ;
(6) FOR tot i y U DO t
1
(y) := ; t
2
(y) := ;
34 CAPITOLUL 2. PARCURGERI DE GRAFURI
(7) WHILE V ,= DO
(8) BEGIN
(9) se selecteaza cel mai nou nod x introdus n V ;
(10) IF exista arc (x, y) A si y U
(11) THEN U := U y ; V := V y ; p (y) := x;
t := t + 1; t
1
(y) := t
(12) ELSE V := V x ; W := W x ; t := t + 1; t
2
(x) := t;
(13) END;
(14) END.
Din liniile (10), (11), (12) ale algoritmului PDF rezulta ca elementul t
1
(y) reprezinta
momentul cand y devine nod vizitat si neanalizat si elementul t
2
(x) reprezinta momen-
tul cand x devine nod vizitat si analizat.
Deoarece algoritmul parcurgerii totale DF (algoritmul PTDF) are multiple aplicat ii,
se va studia n continuare acest algoritm.
Algoritmul PTDF este urmatorul:
(1) PROGRAM PTDF;
(2) BEGIN;
(3) U := N s ; V := s ; W := ;
(4) FOR tot i y N DO p (y) := 0;
(5) t := 1; t
1
(s) := 1; t
2
(s) := ;
(6) FOR tot i y U DO t
1
(y) := ; t
2
(y) := ;
(7) WHILE W ,= N DO
(8) BEGIN
(9) WHILE V ,= DO
(10) BEGIN
(11) se selecteaza cel mai nou nod x introdus n V ;
(12) IF exista arc (x, y) A si y U
(13) THEN U := U y ; V := V y ; p (y) := x;
t := t + 1; t
1
(y) := t
(14) ELSE V := V x ; W := W x ;
t := t + 1; t
2
(x) := t;
(15) END;
(16) se selecteaza s U; U := U s ; V := s ;
t := t + 1; t
1
(s) := t;
(17) END;
(18) END.
Fie mult imea S = s [ s N, s selectate n linia (3) si linia (16).
Teorema 2.8. Algoritmul PTDF este convergent si determina mult imile nodurilor
accesibile din s, s S.
Demonstrat ie. Se demonstreaza la fel ca Teorema 2.1.
Teorema 2.9 Algoritmul PTDF are complexitatea O(m).
2.3. PARCURGEREA DF A GRAFURILOR 35
Demonstrat ie. Evident ca algoritmul PTDF are aceeasi complexitate ca a algoritmu-
lui PTG, adica O(m).
Un digraf

G =
_

N,

A
_
se numeste padure daca este format din una sau mai multe
arborescent e. Un graf neorientat

G =
_

N,

A
_
se numeste padure daca este format din
unul sau mai mult i arbori.

In parcurgerea totala DF, daca subgraful predecesor G


p
= (N
p
, A
p
) , N
p
= y [ p(y)
,= 0S, A
p
= (p (y) , y ) [ y N
p
S este o padure si N
p
= W, atunci G
p
se numeste
padure parcurgere DF.
Teorema 2.10. Algoritmul PTDF determina elementele tabloului p astfel ncat sub-
graful predecesor G
p
= (N
p
, A
p
) este o padure parcurgere DF.
Demonstrat ie. Se demonstreaza analog ca Teorema 2.3.
Teorema 2.11.

In orice parcurgere totala DF a unui digraf G = (N, A) pentru oricare
doua noduri x si y, una din urmatoarele trei condit ii este ndeplinita:
(c1) intervalele [t
1
(x), t
2
(x)] si [t
1
(y), t
2
(y)] sunt disjuncte;
(c2) intervalul [t
1
(x), t
2
(x)] include strict intervalul [t
1
(y), t
2
(y)] si x este un ascendent
al lui y n padurea parcurgere DF;
(c3) intervalul [t
1
(x), t
2
(x)] este inclus strict n intervalul [t
1
(y), t
2
(y)] si x este un des-
cendent al lui y n padurea parcurgere DF.
Demonstrat ie. Exista patru posibilitat i de considerat:
(p1) t
1
(x) < t
1
(y) si t
2
(x) < t
1
(y). Rezulta t
1
(x) < t
2
(x) < t
1
(y) < t
2
(y), adica (c1).
(p2) t
1
(x) < t
1
(y) si t
2
(x) > t
1
(y). Rezulta ca x este mai vechi decat y n V si deci x
va introdus dupa y n W. Evident ca x este ascendent al lui y n padurea parcurgere
DF si t
2
(x) > t
2
(y), adica (c2).
(p3) t
1
(x) > t
1
(y) si t
1
(x) > t
2
(y). Rezulta t
1
(y) < t
2
(y) < t
1
(x) < t
2
(x), adica (c1).
(p4) t
1
(x) > t
1
(y) si t
1
(x) < t
2
(y). Rezulta ca x este mai nou decat y n V si deci x
va introdus naintea lui y n W. Evident ca x este descendent al lui y n padurea
parcurgere DF si t
2
(x) < t
2
(y) , adica (c3).
Parcurgerea totala DF poate utilizata la clasicarea arcelor digrafului G = (N, A)
n raport cu padurea parcurgere DF.

In aceasta clasicare exista doua clase de arce:
arce arborescent a;
arce nonarborescent a.
Mult imea arcelor arborescent a, notata P, este P = A
p
. Aceste arce introduc, n
timpul parcurgerii totale DF a digrafului G = (N, A), noduri n mult imea nodurilor
vizitate si neanalizate V . Mult imea arcelor nonarborescent a, notata P, este P = AA
p
.
Aceste arce introduc, n timpul parcurgerii totale DF a digrafului G = (N, A), noduri
n mult imea nodurilor vizitate si analizate W.
Clasa arcelor nonarborescent a P este alcatuita din trei subclase:
arce de naintare;
arce de revenire;
arce de traversare.
Mult imea arcelor de naintare, notata I, este alcatuita din acele arce (x, y) pentru
care nodul x este un ascendent al nodului y n padurea parcurgere DF. Mult imea arcelor
de revenire, notata R, este alcatuita din acele arce (x, y) pentru care nodul x este un
descendent al nodului y n padurea parcurgere DF. Mult imea arcelor de traversare,
36 CAPITOLUL 2. PARCURGERI DE GRAFURI
notata T, este alcatuita din acele arce (x, y) pentru care nodul x nu este nici ascendent
nici descendent al nodului y n padurea parcurgere DF. Aceste trei mult imi de arce
nonarborescent a sunt disjuncte doua cate doua si P = I R T.
Teorema 2.12.

Intr-o parcurgere totala DF a unui digraf G = (N, A), arcul (x, y)
este:
(1) un arc arborescent a sau de naintare daca si numai daca t
1
(x) < t
1
(y) < t
2
(y) <
t
2
(x);
(2) un arc de revenire daca si numai daca t
1
(y) < t
1
(x) < t
2
(x) < t
2
(y);
(3) un arc de traversare daca si numai daca t
1
(y) < t
2
(y) < t
1
(x) < t
2
(x).
Demonstrat ie. Rezulta din Teorema 2.11 si denit iile clasicarii arcelor.
Observat ia 2.10. Algoritmul PDF sau PTDF se poate aplica si grafurilor neorientate.

In acest caz subgraful predecesor G


p
= (N
p
, A
p
) este tot o arborescent a respectiv o
padure.

Intr-o parcurgere totala DF a unui graf neorientat G = (N, A) avem I =
si T = .

Intr-adevar, e [x, y] A si presupunem fara a restrange generalitatea ca
t
1
(x) < t
1
(y).

In acest caz, nodul x este introdus nainte de nodul y n V si dupa nodul
y n W. Daca muchia [x, y] este explorata de la x la y, atunci [x, y] devine un arc arbore
(x, y). Daca muchia [x, y] este explorata de la y la x, atunci muchia [x, y] devine un arc
de revenire (y, x), deoarece x este nod vizitat la acest timp.
Exemplul 2.2. Se aplica algoritmul PTDF digrafului reprezentat n gura 2.3.
Fig.2.3
Init ializari: s = 1, U = 2, 3, 4, 5, 6, 7, 8, V = 1, W = ,
p = (0, 0, 0, 0, 0, 0, 0, 0), t = 1, t
1
= (1, , , , , , , ),
t
2
= (, , , , , , , ).
Iterat ia 1: x = 1, (1, 2) A, 2 U : U = 3, 4, 5, 6, 7, 8, V = 1, 2,
p = (0, 1, 0, 0, 0, 0, 0, 0), t = 2, t
1
= (1, 2, , , , , , ).
Iterat ia 2: x = 2, (2, 3) A, 3 U : U = 4, 5, 6, 7, 8, V = 1, 2, 3,
p = (0, 1, 2, 0, 0, 0, 0, 0), t = 3, t
1
= (1, 2, 3, , , , , ).
Iterat ia 3: x = 3, (3, 4) A, 4 U : U = 5, 6, 7, 8, V = 1, 2, 3, 4,
p = (0, 1, 2, 3, 0, 0, 0, 0), t = 4, t
1
= (1, 2, 3, 4, , , , ).
Iterat ia 4: x = 4 : V = 1, 2, 3, W = 4, t = 5, t
2
= (, , , 5, , , , ).
Iterat ia 5: x = 3 : V = 1, 2, W = 4, 3, t = 6, t
2
= (, , 6, 5, , , , ).
Iterat ia 6: x = 2, (2, 5) A, 5 U : U = 6, 7, 8, V = 1, 2, 5, p = (0, 1, 2, 3, 2, 0, 0, 0), t =
7, t
1
= (1, 2, 3, 4, 7, , , ).
2.4. APLICAT II 37
Iterat ia 7: x = 5 : V = 1, 2, W = 4, 3, 5, t = 8, t
2
= (, , 6, 5, 8, , , ).
Iterat ia 8: x = 2 : V = 1, W = 4, 3, 5, 2, t = 9, t
2
= (, 9, 6, 5, 8, , , ).
Iterat ia 9: x = 1 : V = , W = 4, 3, 5, 2, 1, t = 10, t
2
= (10, 9, 6, 5, 8, , , ).
Actualizari: s = 6, U = 7, 8, V = 6, t = 11, t
1
= (1, 2, 3, 4, 7, 11, , )
Iterat ia 10: x = 6, (6, 7) A, 7 U : U = 8, V = 6, 7, p = (0, 1, 2, 3, 2, 0, 6, 0),
t = 12, t
1
= (1, 2, 3, 4, 7, 11, 12, ).
Iterat ia 11: x = 7 : V = 6, W = 4, 3, 5, 2, 1, 7, t = 13, t
2
= (10, 9, 6, 5, 8, , 13, ).
Iterat ia 12: x = 6, (6, 8) A, 8 U : U = , V = 6, 8, p = (0, 1, 2, 3, 2, 0, 6, 6),
t = 14, t
1
= (1, 2, 3, 4, 7, 11, 12, 14).
Iterat ia 13: x = 8 : V = 6, W = 4, 3, 5, 2, 1, 7, 8, t = 15, t
2
= (10, 9, 6, 5, 8, , 13, 15).
Iterat ia 14: x = 6 : V = , W = 4, 3, 5, 2, 1, 7, 8, 6, t = 16, t
2
= (10, 9, 6, 5, 8, 16, 13, 15).

In gura 2.4 se prezinta padurea parcurgere DF formata din doua arborescent e par-
curgere DF si se prezinta intervalele [t
1
(x), t
2
(x)] .
Fiecare dreptunghi n care este nscris un nod x acopera intervalul [t
1
(x), t
2
(x)] .
Tabloul predecesor este p = (0, 1, 2, 3, 2, 0, 6, 6).
Fig.2.4

In gura 2.5 se prezinta redesenat graful din gura 2.3. Toate arcele arbore si de
naintare sunt orientate de sus n jos. Pe ecare arc se specica clasa la care apart ine.
2.4 Aplicat ii
2.4.1 Sortarea topologica
Teorema 2.13. Un digraf G = (N, A) este fara circuite daca si numai daca orice
parcurgere totala DF a lui G nu produce arce de revenire.
Demonstrat ie. Presupunem ca digraful G este fara circuite. Prin reducere la absurd
presupunem ca o parcurgere totala DF a lui G produce arce de revenire (R ,= ). Fie
arcul (z, x) R.

In acest caz nodul z este un descendent al nodului x n padurea
parcurgere DF. Deci exista un drum D de la x la z n G. Atunci

D= D z, x este
un circuit n G si aceasta contrazice ipoteza ca digraful G este fara circuite.
38 CAPITOLUL 2. PARCURGERI DE GRAFURI
Fig.2.5
Reciproc, presupunem ca o parcurgere totala DF a digrafului G nu produce arce de
revenire (R = ). Prin reducere la absurd presupunem ca G cont ine un circuit

D. Fie
x primul nod vizitat din

D si e arcul (z, x)

D. Deoarece nodurile x, z

D rezulta
faptul ca exista un drum D de la x la z. De asemenea x ind primul nod vizitat din

D
rezulta ca nodul z devine un descendent al nodului x la padurea PDF. Deci (z, x) este
un arc de revenire ce contrazice ipoteza R = .
Sortarea topologica a unui digraf G = (N, A) fara circuite consta ntr-o ordonare
liniara a nodurilor din N astfel ncat daca (x, y) A atunci x apare naintea lui y n
ordonare.
Algoritmul sortare topologica (algoritmul ST) se obt ine din algoritmul PTDF facand
urmatoarele doua completari:
(1) n partea de init ializari (liniile (3)-(6)) se init ializeaza o lista a nodurilor;
(2) n linia (16) dupa calculul lui t
2
(x), nodul x se introduce la nceputul listei.
La terminarea algoritmului ST, lista furnizeaza sortarea topologica a digrafului
G = (N, A) fara circuite si nodurile x sunt plasate n lista n ordinea des-crescatoare a
timpilor t
2
(x).
2.4.2 Componentele conexe ale unui graf
Denit ia 2.1 Un digraf G = (N, A) se numeste slab conex sau conex daca pentru
oricare doua noduri diferite x, y exista un lant care are aceste doua noduri drept ex-
tremitat i.
Not iunea de conexitate are sens si pentru grafuri neorientate.
Denit ia 2.2. Se numeste componenta conexa a unui digraf G = (N, A) un subgraf
G

= (N

, A

) al lui G, care este conex si care este maximal n raport cu incluziunea


fat a de aceasta proprietate (oricare ar x N

= N N

, subgraful G

x
generat de
N

x
= N

x nu este conex).
O componenta conexa G

= (N

, A

) a unui digraf G = (N, A) se poate identica


cu mult imea N

care genereaza subgraful G

.
2.4. APLICAT II 39
Deoarece n problema conexitat ii sensul arcelor nu conteaza se va considera ca
grafurile sunt neorientate. Daca G = (N, A) este digraf atunci i se asociaza graful
neorientat

G = (

N,

A), unde

N = N,

A = [x, y] [ (x, y) A si /sau (y, x) A. Este
evident ca G si

G au aceleasi componente conexe.
Algoritmul componentelor conexe (algoritmul CC) este o adaptare a algoritmului
PTDF aplicat unui graf neorientat G = (N, A). Nu se calculeaza tablourile timp t
1
, t
2
si prin p notam o variabila scalara a carei valoare reprezinta numarul componentelor
conexe. Algoritmul CC este urmatorul:
(1) PROGRAM CC;
(2) BEGIN
(3) U := N s; V := s; W := ; p := 1; N

= s;
(4) WHILE W ,= N DO
(5) BEGIN
(6) WHILE V ,= DO
(7) BEGIN
(8) se selecteaza cel mai nou nod x introdus n V ;
(9) IF exista muchie [x, y] A si y U
(10) THEN U := U y; V := V y; N

:= N

y
(11) ELSE V := V x; W := W x;
(12) END;
(13) se tiparesc p si N

;
(14) se selecteaza s U; U := U s; V := s; p := p + 1;
N

:= s;
(15) END;
(16) END.
La terminarea algoritmului pot exista cazurile:
(c1) se tipareste o singura componenta conexa si n acest caz graful G = (N, A) este
conex;
(c2) se tiparesc mai multe componente conexe si n acest caz graful G = (N, A) nu este
conex, obt inandu-se toate componentele conexe ale lui G.
Teorema 2.14. Algoritmul CC determina componentele conexe ale unui graf neorien-
tat G = (N, A).
Demonstrat ie. La terminarea execut iei ciclului WHILE se determina mult imea N

a
tuturor nodurilor accesibile printr-un lant cu aceeasi extremitate, nodul s. Mult imea
N

genereaza evident o componenta conexa G

= (N

, A

). Deoarece la terminarea
execut iei algoritmului avem W = N rezulta ca algoritmul CC determina toate compo-
nentele conexe ale lui G = (N, A).
Teorema 2.15. Algoritmul CC are complexitatea O(m).
Demonstrat ie. Algoritmul CC are aceeasi complexitate cu a algoritmului PTDF,
adica O(m).
Exemplul 2.3. Fie digraful din gura 2.6. Pentru a determina componentele conexe
ale acestui digraf se transforma ntr-un graf neorientat reprezentat n gura 2.7 caruia
i se aplica algoritmul CC.
40 CAPITOLUL 2. PARCURGERI DE GRAFURI
Fig.2.6
Fig.2.7
Init ializari: s = 1, U = 2, 3, 4, 5, 6, 7, 8, V = 1, W = , p = 1, N

= 1.
Iterat ia 1: x = 1, [1, 2] A, 2 U : U = 3, 4, 5, 6, 7, 8, V = 1, 2, N

= 1, 2.
Iterat ia 2: x = 2, [2, 3] A, 3 U : U = 4, 5, 6, 7, 8, V = 1, 2, 3, N

= 1, 2, 3.
Iterat ia 3: x = 3, [3, 4] A, 4 U : U = 5, 6, 7, 8, V = 1, 2, 3, 4, N

= 1, 2, 3, 4.
Iterat ia 4: x = 4 : V = 1, 2, 3, W = 4.
Iterat ia 5: x = 3 : V = 1, 2, W = 4, 3.
Iterat ia 6: x = 2, V = 1, W = 4, 3, 2.
Iterat ia 7: x = 1 : V = , W = 4, 3, 2, 1.
Se tiparesc p = 1 si N

= 1, 2, 3, 4
Actualizari: s = 5, U = 6, 7, 8, V = 5, p = 2, N

= 5.
Iterat ia 8: x = 5, [5, 6] A, 6 U : U = 7, 8, V = 5, 6, N

= 5, 6.
Iterat ia 9: x = 6, [6, 8] A, 8 U : U = 7, V = 5, 6, 8, N

= 5, 6, 8.
Iterat ia 10: x = 6, [8, 7] A, 7 U : U = , V = 5, 6, 8, 7, N

= 5, 6, 8, 7.
Iterat ia 11: x = 7 : V = 5, 6, 8, W = 4, 3, 2, 1, 7.
Dupa nca trei iterat ii se obt ine V = , W = 4, 3, 2, 1, 7, 8, 6, 5 se tiparesc p =
2, N

= 5, 6, 8, 7 si execut ia algoritmului se opreste.


2.4.3 Componentele tare conexe ale unui graf
Denit ia 2.3 Un digraf G = (N, A) se numeste tare conex daca pentru oricare doua
noduri x, y exista un drum de la x la y si un drum de la y la x.
Not iunea de tare conexitate are sens numai pentru grafuri orientate.
2.4. APLICAT II 41
Denit ia 2.4. Se numeste componenta tare conexa a unui digraf G = (N, A) un
subgraf G

= (N

, A

) al lui G care este tare conex si care este maximal n raport cu


incluziunea fat a de acesta proprietate (oricare ar x N

= N N

, subgraful G

x
generat de N

x
= N

x nu este tare conex).


O componenta tare conexa G

= (N

, A

) a unui digraf G = (N, A) se poate identica


cu mult imea N

care genereaza subgraful G

.
Denit ia 2.5. Se numeste digraf condensat asociat digrafului G = (N, A) digraful

G =
_

N,

A
_
,

N = N

1
, . . . , N

p
,

A =
_
N

i
, N

j
_
[ N

i
, N

j


N, exista (x, y) A
cu x N

i
, , y N

j
, unde N

i
, . . . , N

p
sunt componentele tare conexe ale digrafului
G = (N, A).
Algoritmul componentelor tare conexe (algoritmul CTC) este urmatorul:
(1) PROGRAM CTC;
(2) BEGIN
(3) PROCEDURA PTDF(G);
(4) PROCEDURA INVERSARE(G);
(5) PROCEDURA PTDF(G
1
);
(6) PROCEDURA SEPARARE(G
1
);
(7) END.
Procedurile din program rezolva urmatoarele probleme:
PROCEDURA PTDF(G) aplica algoritmul PTDF digrafului G;
PROCEDURA INVERSARE(G) determina inversul G
1
al digrafului G;
PROCEDURA PTDF(G
1
) aplica algoritmul PTDF digrafului G
1
, unde nodul s este
selectat ntotdeauna astfel ncat t
2
(s) > t
2
(x), x U
1
s cu t
2
calculat n PRO-
CEDURA PTDF(G);
PROCEDURA SEPARARE(G
1
) extrage nodurile ecarei arborescent e parcurgere DF
din padurea parcurgere DF obt inuta n PROCEDURA PTDF (G
1
) pentru separarea
componentelor tare conexe.
Se spune ca nodul r(x) N este ascendent radacina al nodului x n parcurgerea to-
tala DF a digrafului G = (N, A) daca r(x) este accesibil din x si t
2
(r(x)) = maxt
2
(z) [ z
este accesibil din x.
Teorema 2.16.

In oricare parcurgere totala DF a unui digraf G = (N, A) :
(1) toate nodurile din aceeasi componenta tare conexa apart in la aceeasi arborescent a a
padurii parcurgere DF;
(2) pentru orice nod x N, ascendentul radacina r(x) este un ascendent al lui x n
padurea parcurgere DF si nodurile x, r(x) se gasesc n aceeasi componenta tare conexa.
Demonstrat ie. Se recomanda cititorului comentariile bibliograce din acest capitol.
Teorema 2.17. Algoritmul CTC determina componentele tare conexe ale unui digraf
G = (N, A).
Demonstrat ie. Se bazeaza pe Teorema 2.16.
Teorema 2.18. Algoritmul CTC are complexitatea O(m).
Demonstrat ie. Algoritmul CTC are aceeasi complexitate cu a algoritmului PTDF,
adica O(m).
42 CAPITOLUL 2. PARCURGERI DE GRAFURI
Exemplul 2.4. Fie digraful din gura 2.8. Pentru a determina componentele tare
conexe ale acestui digraf se aplica algoritmul CTC.
Fig.2.8
PROCEDURA PTDF determina p = (5, 0, 0, 3, 2, 7, 3, 7), t
1
= (13, 11, 1, 8, 12, 3, 2, 5),
t
2
= (14, 16, 10, 9, 15, 4, 7, 6). Init ial s = 3 si apoi s = 2.
PROCEDURA INVERSARE determina inversul G
1
al digrafului Gsi este reprezen-
tat n gura 2.9.
Fig.2.9
PROCEDURA PTDF aplicata digrafului G
1
determina: p
1
= (2, 0, 0, 3, 1, 7, 0, 0),
t
1
1
= (2, 1, 7, 8, 3, 12, 11, 15), t
1
2
= (5, 6, 10, 9, 4, 13, 14, 16) si nodurile s au fost selectate
astfel nat t
2
(s) > t
2
(t), , x U
1
s.
PROCEDURA SEPARARE determina componentele tare conexe reprezentate ca
noduri ale digrafului condensat

G = (

N,

A), din gura 2.10.
Fig.2.10
Capitolul 3
Arbori si arborescent e
3.1 Cicluri si arbori

In acest paragraf se va lucra cu cicluri si cicluri elementare.


Fie digraful G = (N, A) cu N = 1, . . . , n si A = a
1
, . . . , a
m
. Pentru un ciclu

L vom nota cu

L
+
mult imea arcelor directe si prin

mult imea arcelor inverse ale


ciclului. Unui ciclu

L i se poate asocia un vector

l
=
_

e
1
, . . . ,

e
m
_
, unde

e
i
=
_

_
1 daca a
i

,
1 daca a
i

L
+
,
0 daca a
i
,

In acest paragraf un ciclu



L va identicat uneori cu vectorul

l
pe care l deneste,
iar orice suma de cicluri

L
1
+. . . +

L
s
va suma lor vectoriala

l
1
+. . . +

l
s
.
Teorema 3.1. Orice ciclu

L al digrafului G = (N, A) este o suma de cicluri elementare
fara arce comune.
Demonstrat ie. Cand se parcurge ciclul

L se obt in cicluri elementare

L
i
(i = 1, . . . , s

) ,
de ecare data cand se ajunge ntr-un nod deja ntalnit. Ciclurile elementare nu au
arce comune deoarece ciclul

L nu are arce care se repeta.
Denit ia 3.1. Se spune ca ciclurile

l
1
, . . . ,

l
s
sunt independente daca egalitatea r
1

l
1
+. . . + r
s

l
s
= 0 cu r
1
, . . . , r
s
numere reale implica r
1
= r
2
= . . . = r
s
= 0, altfel se
spune ca ciclurile

l
1
, . . . ,

l
s
sunt dependente.
Denit ia 3.2. Se spune ca ciclurile

l
1
, . . . ,

l
s
formeaza o baza de cicluri daca sunt
cicluri elementare independente si oricare alt ciclu

l
se poate exprima sub forma

l
=
r
1

l
1
+. . . +r
s

l
s
cu r
1
, . . . , r
s
numere reale.
Numarul s al ciclurilor care formeaza o baza este dimensiunea subspat iului liniar
S
l
al lui '
m
generat de ciclurile digrafului G = (N, A).
43
44 CAPITOLUL 3. ARBORI SI ARBORESCENT E
Exemplul 3.1. Fie digraful din gura 3.1. Ciclul

L= (a
1
, a
4
, a
9
, a
8
, a
7
, a
6
) este suma
ciclurilor elementare fara arce comune

L
1
= (a
1
, a
4
, a
6
) si

L
2
= (a
9
, a
8
, a
7
) sau

l
=

l
1
+

l
2
cu

l
= (1, 0, 0, 1, 0, 1, 1, 1, 1),

l
1
= (1, 0, 0, 1, 0, 1, 0, 0, 0),

l
2
= (0, 0, 0, 0, 0, 0, 1, 1, 1).
Fig.3.1
Evident ca ciclurile

l
,

l
1
,

l
2
sunt dependente.
Denit ia 3.3. Se numeste numar ciclomatic al digrafului G = (N, A) cu n noduri, m
arce si p componente conexe numarul (G) = mn +p.
Teorema 3.2. Subspat iul S
l
al lui '
m
, generat de ciclurile digrafului G = (N, A),
admite o baza formata din (G) cicluri elementare independente.
Demonstrat ie. Vom arata ca digraful G admite (G) = mn +p cicluri elementare
independente. Pentru aceasta vom construi un sir de grafuri part iale G
i
= (N, A
i
) ale
digrafului G = (N, A) cu (G
i
) = m
i
n + p
i
cicluri elementare independente. Acest
sir se construieste cu algoritmul urmator.
(1) PROGRAM CICLURI;
(2) BEGIN
(3) A
0
:= ;
(4) FOR i := 1 TO m DO A
i
:= A
i1
a
i
;
(5) END.
Prin induct ie dupa i vom arata ca G
i
= (N, A
i
) admite (G
i
) = m
i
n + p
i
ci-
cluri elementare independente. Pentru i = 0 avem A
0
= si obt inem m
0
= 0, deci
(G
0
) = 0. Deoarece p
0
= n rezulta ca (G
0
) = m
0
n +p
0
.
Presupunem armat ia adevarata pentru i si o demonstram pentru i + 1.
La iterat ia i + 1 poate exista unul din cazurile:
(c1) arcul a
i+1
nu nchide un nou ciclu elementar. Deci (G
i+1
) = (G
i
) si m
i+1
=
m
i
+ 1, p
i+1
= p
i
1. Rezulta (G
i+1
) = m
i
n +p
i
= m
i+1
n +p
i+1
.
3.1. CICLURI SI ARBORI 45
(c2) arcul a
i+1
nchide un nou ciclu elementar

L
k
. Deoarece arcul a
i+1
apart ine
ciclului elementar

L
k
si nu apart ine ciclurilor elementare independente

L
1
, . . . ,

Lk1
obt inute pana la aceasta iterat ie, rezulta ca ciclurile elementare

L
1
, . . . ,

Lk1
,

L
k
sunt
independente. Rezulta ca (G
i+1
) = (G
i
) + 1, m
i+1
= m
i
+ 1, p
i+1
= p
i
. Deci
(G
i+1
) = m
i
n +p
i
+ 1 = m
i+1
n +p
i+1
.
Deci armat ia este adevarata pentru orice i. La terminarea execut iei algoritmului
avem G
m
= G, m
m
= m, p
m
= p si (G) = (G
m
) = m
m
n +p
m
= mn +p.

In continuare vom arata ca G nu admite mai mult de (G) = m n + p cicluri


elementare independente. Fie

L un ciclu elementar diferit de ciclurile

L
1
, . . . ,

con-
struite cu algoritmul de mai sus. Din modul cum au fost determinate ciclurile ele-
mentare

L
1
, . . . ,

rezulta ca oricare ar un arc a


j
al ciclului

L exista cel put in un

L
i
, i 1, . . . , , astfel ncat a
j
apart ine ciclului

L
i
. Deci exista o relat ie r
1

l
1
+. . . +r

+r

l
= 0 fara ca r
1
= . . . = r

= r = 0. Aceasta relat ie implica faptul ca ci-


clurile

L
1
, . . . ,

, L sunt dependente. Am demonstrat ca dim


_
S
l
_
= (G) = mn+p.
Denit ia 3.4. Se spune ca un digraf G

= (N, A

) este un arbore daca este un digraf


fara cicluri si conex. Se spune ca digraful G

= (N, A

) este o padure daca ecare


componenta conexa a lui G

este un arbore.
Din denit ie rezulta ca o padure este un digraf G

= (N, A) fara cicluri. Not iunile


de arbore si padure au sens si pentru grafuri neorientate.
Exemplul 3.2. Digraful reprezentat n gura 3.2. este o padure compusa din doi
arbori. Orientarea arcelor poate ignorata.
Fig.3.2
46 CAPITOLUL 3. ARBORI SI ARBORESCENT E
Teorema 3.3. Fie G

= (N, A

) un digraf cu n 2. Proprietat ile urmatoare sunt


echivalente si caracterizeaza un arbore:
(1). G

este fara cicluri si conex;


(2). G

este fara cicluri si are n 1 arce;


(3). G

este conex si are n 1 arce;


(4). G

este fara cicluri si daca se adauga un singur arc ntre oricare doua noduri
atunci graful obt inut

G

=
_
N,

A

_
cont ine un ciclu unic;
(5). G

este conex si daca se elimina un arc oarecare, atunci digraful obt inut

G

=
_
N,

A

_
nu este conex;
(6). G

are un lant unic ntre oricare doua noduri ale lui.


Demonstrat ie. (1) (2). Din (1) rezulta ca (G

) = 0 si p

= 1. Deci m

n+1 = 0,
de unde m

= n 1. Deducem ca G

este fara cicluri si are n 1 arce.


(2) (3). Din (2) rezulta ca (G

) = 0 si m

n + p

= n 1 n + p

= 0, de unde
p

= 1. Deducem ca G

este conex si are n 1 arce.


(3) (4). Din (3) rezulta p

= 1 si m

= n1. Deci (G

) = m

n+p

= n1n+1 = 0
si G

este fara cicluri. Digraful



G

= (N,

A

) are p

= p

= 1, m

= m

+ 1 = n si

_
= m

n + p

= 1. Rezulta ca

G

are un singur ciclu.


(4) (5). Din (4) rezulta (G

) = 0 si p

= 1.

Intr-adevar, daca p

> 1 atunci arcul


adaugat la A

poate lega doua componente conexe si



G

nu cont ine ciclu. Din (G

) = 0
si p

= 1 rezulta m

= n 1. Digraful

G

= (N,

A

) are m

= m

1 = n 2, (

) =
0, p

= 2 si deci

G

nu este conex.
(5) (6). Daca G

este conex atunci ntre oricare doua noduri exista un lant . Deoarece

este neconex rezulta ca lant ul este unic.


(6) (1). Daca ntre oricare doua noduri ale lui G

exista un lant unic atunci este


evident ca G

este conex si fara cicluri.


Teorema 3.4. Un digraf G = (N, A) admite un subgraf part ial G

= (N, A

) care este
un arbore daca si numai daca G este conex.
Demonstrat ie. Obt inem subgraful part ial G

= (N, A

) cu urmatorul algoritm:
(1) PROGRAM ARBORE1;
(2) BEGIN
(3) A
m
:= A;
(4) FOR i := m DOWNTO n DO
(5) BEGIN
(6) se selecteaza un arc a din A
i
care nu deconexeaza G
i
;
(7) A
i1
:= A
i
a;
(8) END;
(9) END.
Se obt ine G

= (N, A

) = (N, A
n1
). Din modul cum este construit G

rezulta ca
el este conex si are n 1 arce. Deci G

este arbore.
Reciproca este evidenta.
Deoarece arborele G

construit n Teorema 3.4 are aceeasi mult ime de noduri ca a


digrafului G se numeste arbore part ial al lui G.
3.2. ARBORI PART IALI MINIMI 47
Observat ia 3.1. Un arbore part ial G

= (N, A

) al digrafului G = (N, A) se poate


construi si cu algoritmul urmator:
(1) PROGRAM ARBORE2;
(2) BEGIN
(3) A
0
:= ;
(4) FOR i := 0 TO n 2 DO
(5) BEGIN
(6) se selecteaza un arc a din A
i
= AA
i
care nu formeaza
ciclu n G
i
;
(7) A
i+1
:= A
i
a;
(8) END;
(9) END.
Se obt ine G

= (N, A

) = (N, A
n1
). Deoarece G

este fara ciclu si are n 1 arce


el este un arbore.
Teorema 3.5. Daca G = (N, A) este un digraf conex, G

= (N, A

) este un arbore
part ial al lui G si A

= A A

, atunci oricare arc a


i
A

determina cu arcele din


A

un ciclu unic

L
k
si ciclurile

L
1
, . . . ,

L
s
obt inute n acest mod cu toate arcele din A

formeaza o baza de cicluri a digrafului G.


Demonstrat ie. Daca arcul a
i
A

, atunci digraful

G

= (N,

A

) cu

A

= A

a
i

cont ine un ciclu



L
k
conform proprietat ii (4) din Teorema 3.3. Ciclurile

L
1
, . . . ,

L
s
obt inute n acest mod sunt independente, deoarece ecare ciclu

L
k
cont ine un arc a
i
care nu este cont inut de celelalte cicluri. Numarul acestor cicluri este s = [A

[ =
[A[ [A

[ = m (n 1) = m n + 1 = m n + p = (G). Deci ciclurile



L
1
, . . . ,

L
s
formeaza o baza de cicluri.
Teorema 3.5 ne furnizeaza un algoritm pentru a construi o baza de cicluri a unui
digraf conex G.
Exemplul 3.3. Fie digraful G = (N, A) reprezentat n gura 3.1. Un arbore part ial
G

= (N, A

), A

= a
1
, a
2
, a
3
, a
5
al digrafului G este reprezentat n gura 3.3. Avem
A

= a
4
, a
6
, a
7
, a
8
, a
9
.
Se obt in ciclurile

L
1
= (a
1
, a
4
, a
2
),

L
2
= (a
1
, a
5
, a
9
, a
2
),

L
3
= (a
1
, a
5
, a
8
, a
3
),

L
4
=
(a
2
, a
6
),

L
5
= (a
2
, a
7
, a
3
).
3.2 Arbori part iali minimi
3.2.1 Condit ii de optimalitate
Se considera un graf neorientat si conex G = (N, A) cu N = 1, . . . , x, . . . , n,
A = 1, . . . , a, . . . , m si o funct ie b : A ' care asociaza ecarei muchii a A un
numar real b(a) numit valoarea acestei muchii, care poate reprezenta lungime, cost etc.
Deoarece graful G = (N, A) este conex, el admite un arbore part ial G

= (N, A

).
48 CAPITOLUL 3. ARBORI SI ARBORESCENT E
Fig.3.3
Valoarea unui arbore part ial G

= (N, A

), notata b (G

) , este prin denit ie


b
_
G

_
=

A

b(a).
Daca notam cu /
G
mult imea arborilor part iali ai grafului G, atunci problema ar-
borelui part ial minim este urmatoarea: sa se determine G

/
G
astfel ncat b (G

) =
minb (G

) [ G

/
G
.
Daca eliminam o muchie arbore oarecare a = [x, x] din A

atunci se obt ine o partit ie


a mult imii nodurilor N = X X, x X, x X.
Mult imea de muchii
[X, X]
a
= [y, y] [ [y, y] A, y X, y X
se numeste taietura generata de eliminarea muchiei arbore a = [x, x] sau cociclu generat
de eliminarea muchiei arbore a = [x, x].
Pentru problema arborelui part ial minim se pot formula condit ii de optimalitate
n doua moduri: condit ii de optimalitate ale taieturii si condit ii de optimalitate ale
lant ului.
Teorema 3.6. (Condit iile de optimalitate ale taieturii)
Fie G = (N, A) un graf neorientat si conex. Un arbore part ial G

= (N, A

) al grafului
G este minim daca si numai daca, pentru ecare muchie arbore a = [x, x] A

, avem:
b[x, x] b[y, y] pentru toate muchiile [y, y] [X, X]
a
(3.1)
Demonstrat ie. Presupunem ca arborele part ial G

= (N, A

) al grafului G = (N, A)
este minim. Prin reducere la absurd presupunem ca nu sunt satisfacute condit iile
(3.1). Atunci exista o muchie arbore a = [x, x] A

si o muchie nonarbore [y, y]


[X, X]
a
cu b[x, x] > b[y, y]. Arborele part ial G

= (N, A

) cu A

= A

[x, x]
[y, y] are valoarea b (G

) = b (G

) b[x, x] + b[y, y]. Deoarece b[x, x] > b[y, y] rezulta


b (G

) < b (G

) . Aceasta relat ie contrazice faptul ca arborele part ial G

este minim.
Deci condit iile (3.1) sunt satisfacute.
3.2. ARBORI PART IALI MINIMI 49
Presupunem ca sunt satisfacute condit iile (3.1). Prin reducere la absurd pre-
supunem ca arborele part ial G

= (N, A

) nu este minim. Atunci exista un arbore


part ial G

0
= (N, A

0
) cu b (G

0
) < b (G

) . Deoarece A

0
,= A

, exista o muchie a =
[x, x] A

si a = [x, x] / A

0
. Muchia a = [x, x] genereaza taietura [X, X]
a
si un ciclu

L
a
cu muchiile din A

0
(vezi gura 3.4). Atunci exista o muchie [y, y]

L
a
astfel ncat
[y, y] [X, X]
a
, [y, y] A

0
si [y, y] / A

. Deoarece condit iile (3.1) sunt satisfacute


avem b[x, x] b[y, y]. Arborele part ial G

= (N, A

) cu A

= A

[x, x][y, y] are


valoarea b(G

) = b(G

) b[x, x] +b[y, y]. Rezulta b(G

) b(G

) si G

are n comun cu
G

0
cu o muchie mai mult decat G

. Iterand acest procedeu se obt ine un sir de arbori


part iali G

, G

, . . . , G

0
cu b(G

) b(G

) . . . b(G

0
). Deci obt inem b(G

) b(G

0
)
care contrazice presupunerea ca b(G

0
) < b(G

). Rezulta ca arborele part ial G

este
minim.
Fig.3.4

Intre doua noduri y, y N exista un lant unic L

yy
n arborele part ial G

= (N, A

)
al grafului neorientat si conex G = (N, A).
Teorema 3.7. (Condit iile de optimalitate ale lant ului)
Fie G = (N, A) un graf neorientat si conex. Un arbore part ial G

= (N, A

) al grafului
G = (N, A) este minim daca si numai daca, pentru ecare muchie nonarbore [y, y] A

,
avem
b[x, x] b[y, y] pentru toate muchiile [x, x] L

yy
(3.2)
Demonstrat ie. Presupunem ca arborele part ial G

= (N, A

) al grafului G = (N, A)
este minim. Prin reducere la absurd presupunem ca nu sunt satisfacute condit iile
(3.2). Atunci exista o muchie nonarbore [y, y] A

si o muchie arbore [x, x] L

yy
cu b[x, x] > b[y, y]. Arborele part ial G

= (N, A

) cu A

= A

[x, x] [y, y] are


valoarea b(G

) = b(G

)b[x, x]+b[y, y]. Rezulta ca b(G

) < b(G

) care contrazice faptul


ca arborele part ial G

este minim. Deci condit iile (3.2) sunt satisfacute.


Presupunem ca sunt satisfacute condit iile (3.2). Fie o muchie arbore oarecare a =
[x, x] A

si [X, X]
a
taietura generata de muchia a. Se considera o muchie oarecare
nonarbore [y, y] [X, X]
a
. Atunci exista lant ul unic L

yy
n G

astfel ncat [x, x] L

yy
(vezi gura 3.4). Condit iile (3.2) implica faptul ca b[x, x] b[y, y]. Deoarece muchiile
[x, x], [y, y] sunt oarecare rezulta ca sunt satisfacute condit iile (3.1). Conform Teoremei
3.6 arborele part ial G

este minim.
50 CAPITOLUL 3. ARBORI SI ARBORESCENT E
Observat ia 3.2. Sucient a Teoremei 3.7 a fost demonstrata utilizand sucient a Teo-
remei 3.6. Aceasta stabileste echivalent a dintre condit iile de optimalitate ale taieturii
si condit iile de optimalitate ale lant ului.

In continuare se prezinta algoritmi pentru determinarea arborelui part ial minim.


Mai ntai se prezinta algoritmul generic. Ceilalt i algoritmi sunt cazuri speciale ale
algoritmului generic.
3.2.2 Algoritmul generic
Fie G = (N, A, b) o ret ea neorientata si conexa cu mult imea nodurilor N = 1, . . . , n
si mult imea muchiilor A = 1, . . . , a, . . . , m, a = [x, x].
(1) PROGRAM GENERIC;
(2) BEGIN
(3) FOR i := 1 TO n DO
(4) BEGIN
(5) N
i
:= i; A

i
:= ;
(6) END;
(7) FOR k := 1 TO n 1 DO
(8) BEGIN
(9) se selecteaza N
i
cu N
i
,= ;
(10) se selecteaza [y, y] cu b[y, y] := minb[x, x] [ x N
i
, x / N
i
;
(11) se determina indicele j pentru care y N
j
;
(12) N
i
:= N
i
N
j
; N
j
:= ; A

i
= A

i
A

j
[y, y]; A

j
= ;
(13) IF k = n 1
(14) THEN A

:= A

i
;
(15) END;
(16) END.
Teorema 3.8. Algoritmul generic determina un arbore part ial minim G

= (N, A

)
al grafului G = (N, A).
Demonstrat ie. Prin induct ie dupa k, numarul de iterat ii ale ciclului FOR de la linia
(7) la linia (15), vom arata ca G

i
= (N
i
, A

i
) este cont inut ntr-un arbore part ial minim
al lui G

. Pentru k = 0 (nainte de prima iterat ie a ciclului) avem G

i
= (i, ) si
armat ia este adevarata. Presupunem armat ia adevarata pentru execut ia a k 1
iterat ii ale ciclului FOR. Aceasta nseamna ca G

i
= (N
i
, A

i
), determinat dupa execut ia
a k1 iterat ii ale ciclului FOR este cont inut ntr-un arbore part ial minim G

= (N, A

)
al lui G

.
Dupa execut ia a k iterat ii ale ciclului FOR, referitor la muchia [y, y] selectata n
linia (10), pot exista cazurile:
(c1) [y, y] A

;
(c2) [y, y] / A

In cazul (c1) demonstrat ia prin induct ie dupa k s-a terminat.



In cazul (c2), existan
G

un lant unic L

yy
. Deoarece y N
i
si y / N
i
, evident ca exista o muchie [x, x] astfel
ncat [x, x] L

yy
cu x N
i
si x / N
i
. Conform Teoremei 3.7 avem b[x, x] b[y, y].
3.2. ARBORI PART IALI MINIMI 51
Pe de alta parte, muchia [y, y] este selectata n linia (10) astfel ncat b[x, x] b[y, y].
Rezulta ca b[x, x] = b[y, y]. Arborele part ial G

= (N, A

) cu A

= A

[x, x][y, y]
are valoarea b(G

) = b(G

) b[x, x] + b[y, y] = b(G

). Deci G

este un arbore part ial


minim al lui G si cont ine G

i
= (N
i
, A

i
) .
Evident ca pentru k = n 1 G

i
= (N
i
, A

i
) are N
i
= N, [A

i
[ = n 1 si G

= G

i
este
arborele part ial minim al grafului G.
Observat ia 3.3. Nu se poate da complexitatea precisa a algoritmului generic, deoarece
ea depinde atat de modul de selectare a mult imii N
i
n linia (9) cat si de modul de
implementare.

In algoritmii care vor prezentat i n continuare se precizeaza selectarea din liniile


(9) si (10) ale algoritmului generic.
3.2.3 Algoritmul Prim
Fie G = (N, A, b) o ret ea neorientata si conexa cu mult imea nodurilor N = 1, . . . , n
si mult imea muchiilor A = 1, . . . , a, . . . , m, a = [x, x]. Graful G este reprezentat prin
listele de incident a E(x). Algoritmul utilizeaza doua funct ii: v : N ' si e : N A
pentru a selecta mai usor muchia [y, y] din linia (10) a algoritmului generic.
(1) PROGRAM PRIM;
(2) BEGIN
(3) v(1) := 0; N
1
:= ; A

:= ; N
1
:= N N
1
;
(4) FOR i := 2 TO n DO
(5) v(i) := ;
(6) WHILE N
1
,= N DO
(7) BEGIN
(8) v(y) := minv(x) [ x N
1
;
(9) N
1
:= N
1
y; N
1
:= N
1
y;
(10) IF y ,= 1
(11) THEN A

:= A

e(y);
(12) FOR [y, y] E(y) [N
1
, N
1
] DO
(13) IF v(y) > b[y, y]
(14) THEN BEGIN v(y) := b[y, y], e(y) := [y, y];END;
(15) END;
(16) END.
Teorema 3.9. Algoritmul Prim determina un arbore part ial minim G

= (N, A

)
al grafului G = (N, A).
Demonstrat ie. Algoritmul Prim s-a obt inut facand urmatoarele doua modicari n
algoritmul generic:
n linia (9) se selecteaza ntotdeauna N
1
;
selectarea muchiei [y, y] n linia (10) se face cu ajutorul funct iilor v si e.
Deci, conform Teoremei 3.8 algoritmul Prim este corect.
Teorema 3.10. Algoritmul Prim are complexitatea O
_
n
2
_
.
52 CAPITOLUL 3. ARBORI SI ARBORESCENT E
Demonstrat ie. Ciclul WHILE se executa de n ori.

In ecare iterat ie se executa,
n linia (8), n
1
comparat ii cu n
1
= [N
1
[ si 1 n
1
< n. Ciclul FOR se executa de cel
mult n 1 ori. Rezulta ca algoritmul Prim are complexitatea O
_
n
2
_
.
Exemplul 3.4. Fie ret eaua G = (N, A, b) reprezentata n gura 3.5(a). Sa se de-
termine un arbore part ial minim G

= (N, A

) al grafului G = (N, A) cu algoritmul


Prim.
Iterat ia 1: v(1) = 0, N
1
= 1, A

= ; v(2) = 35, e(2) = [1, 2], v(3) = 40, e(3) =


[1, 3.]
Iterat ia 2: v(2) = 35, N
1
= 1, 2, A

= [1, 2]; v(3) = 25, e(3) = [2, 3], v(4) =


10, e(4) = [2, 4.]
Iterat ia 3: v(4) = 10, N
1
= 1, 2, 4, A

= [1, 2], [2, 4]; v(3) = 20, e(3) =


[4, 3], v(5) = 30, e(5) = [4, 5.]
Iterat ia 4: v(3) = 20, N
1
= 1, 2, 4, 3, A

= [1, 2], [2, 4], [4, 3]; v(5) = 15, e(5) =


[3, 5].
Iterat ia 5: v(5) = 15, N
1
= 1, 2, 4, 3, 5, A

= [1, 2], [2, 4], [4, 3], [3, 5]; [N


1
, N
1
] =
.
Fig.3.5
Arborele part ial minim G

= (N, A

) obt inut este reprezentat n gura 3.5(b).


3.2.4 Algoritmul Kruskal
Fie G = (N, A, b) o ret ea neorientata si conexa cu mult imea nodurilor N = 1, . . . , n
si mult imea muchiilor A = 1, . . . , a, . . . , m, a = [x, x].
(1) PROGRAM KRUSKAL;
(2) BEGIN
(3) SORTARE (G);
(4) A

:= ;
(5) FOR i := 1 TO m DO
(6) IF a
i
nu formeaza ciclu cu A

;
(7) THEN A

:= A

a
i
;
(8) END.
3.2. ARBORI PART IALI MINIMI 53
(1) PROCEDURA SORTARE (G);
(2) BEGIN
(3) se ordoneaza muchiile din A astfel ncat A = a
1
, . . . , a
m

cu b(a
1
) . . . b(a
m
);
(4) END;
Teorema 3.11.Algoritmul Kruskal determina un arbore part ial minim G

= (N, A

) al
grafului G = (N, A).
Demonstrat ie. Algoritmul Kruskal s-a obt inut folosind procedura SORTARE si
condit ia din linia (6) pentru selectarile din linia (9) si (10) din algoritmul generic.
Deci, conform Teoremei 3.8 algoritmul Kruskal este corect.
Observat ia 3.4. Complexitatea algoritmului Kruskal depinde de modul de imple-
mentare a procedurii din linia (3) si a condit iei din linia (6). Astfel complexitatea
poate O(max(mlog n, n
2
)) sau O(mlog n) etc.
Exemplul 3.5. Fie ret eaua G = (N, A, b) reprezentata n gura 3.5(a). Sa se de-
termine un arbore part ial minim G

= (N, A

) al grafului G = (N, A) cu algoritmul


Kruskal.
Procedura SORTARE ordoneaza muchiile din A si se obt ine A = [2, 4], [3, 5], [3, 4],
[2, 3], [4, 5], [1, 2], [1, 3].
Iterat ia 1: A

= [2, 4]
Iterat ia 2: A

= [2, 4], [3, 5]


Iterat ia 3: A

= [2, 4], [3, 5], [3, 4]


Iterat ia 4: [2, 3] formeaza ciclu cu A

Iterat ia 5: [4, 5] formeaza ciclu cu A

Iterat ia 6: A

= [2, 4], [3, 5], [3, 4], [1, 2]


Iterat ia 7: [1, 3] formeaza ciclu cu A

.
Arborela part ial minim G

= (N, A

) obt inut este prezentat n gura 3.5(b).


3.2.5 Algoritmul Boruvka
Fie G = (N, A, b) o ret ea neorientata si conexa cu mult imea nodurilor N = 1, . . . , n
si mult imea muchiilor A = 1, . . . , a, . . . , m, a = [x, x]. Funct ia valoare b : A ' are
toate valorile muchie diferite.
(1) PROGRAM BORUVKA;
(2) BEGIN
(3) FOR i := 1 TO n DO
(4) N
i
:= i;
(5) A

:= ; M := N
1
, . . . , N
n
;
(6) WHILE [A

[ < n 1 DO
(7) BEGIN
(8) FOR N
i
M DO
(9) BEGIN
(10) se selecteaza [y, y] cu b[y, y] := minb[x, x] [ x N
i
, x / N
i
;
54 CAPITOLUL 3. ARBORI SI ARBORESCENT E
(11) se determina indicele j pentru care y N
j
;
(12) A

:= A

[y, y];
(13) END;
(14) FOR N
i
M DO BEGIN N
i
:= N
i
N
j
; N
j
:= N
i
; END;
(15) M := . . . , N
i
, . . . , N
j
, . . . [N
i
N
j
= , N
i
= N;
(16) END;
(17) END.
Mult imile N
j
din operat ia N
i
:= N
i
N
j
executatan linia (14) sunt cele determinate
n linia (11).
Teorema 3.12. Algoritmul Boruvka determina un arbore part ial minim G

= (N, A

)
al grafului G = (N, A).
Demonstrat ie. Este evident ca algoritmul Boruvka este o varianta a algoritmului
generic. Ipoteza ca funct ia valoare b are toate valorile muchie diferite asigura ca nu
se creeaza cicluri n G

= (N, A

) n timpul execut iei ciclului WHILE. Deci, conform


Teoremei 3.8 algoritmul Boruvka este corect.
Teorema 3.13. Algoritmul Boruvka are complexitatea O(mlog n).
Demonstrat ie. Deoarece numarul componentelor conexe N
i
din M este cel put in
njumatat it la ecare iterat ie, ciclul WHILE este executat de cel mult log n ori. Operat iile
din liniile (10), (11) au complexitatea O(m). Deci algoritmul Boruvka are complexitatea
O(mlog n).
Observat ia 3.5. Algoritmul Boruvka este cunoscut n literatura de specialitate si sub
numele de algoritmul Sollin.
Exemplul 3.6. Fie ret eaua G = (N, A, b) reprezentata n gura 3.5(a). Sa se de-
termine un arbore part ial minim G

= (N, A

) al grafului G = (N, A) cu algoritmul


Boruvka.
Init ial A

= , M = 1, 2, 3, 4, 5.
Iterat ia 1.
N
1
, [y, y] = [1, 2], N
j
= N
2
, A

= [1, 2];
N
2
, [y, y] = [2, 4], N
j
= N
4
, A

= [1, 2], [2, 4];


N
3
, [y, y] = [3, 5], N
j
= N
5
, A

= [1, 2], [2, 4], [3, 5];


N
4
, [y, y] = [4, 2], N
j
= N
2
, A

= [1, 2], [2, 4], [3, 5];


N
5
, [y, y] = [5, 3], N
j
= N
3
, A

= [1, 2], [2, 4], [3, 5];


M = N
4
= 1, 2, 4, N
5
= 3, 5;
Iterat ia 2.
N
4
, [y, y] = [4, 3], N
j
= N
5
, A

= [1, 2], [2, 4], [3, 5], [4, 3];


N
5
, [y, y] = [3, 4], N
j
= N
4
, A

= [1, 2], [2, 4], [3, 5], [4, 3];


M = N
5
= 1, 2, 3, 4, 5.
Arborele part ial minim G

= (N, A

) obt inut este prezentat n gura 3.5(b).


3.3 Arborescent e
Denit ia 3.5. Un nod r N al unui digraf G = (N, A) se numeste nod radacina daca
pentru orice alt nod x N exista un drum de la r la x.
3.3. ARBORESCENT E 55
Observat ia 3.6. Not iunea de nod radacina are sens numai pentru grafuri orientate.
Un nod radacina nu exista ntotdeauna.
Exemplul 3.7. Nodul 1 al digrafului reprezentat n gura 3.6 este un nod radacina.
Fig.3.6
Denit ia 3.6. Un digraf G = (N, A) se numeste quasi-tare conex daca pentru oricare
doua noduri x, y N exista un nod z N (care poate coincide cu x sau cu y) de la
care pleaca un drum care ajunge n x si un drum care ajunge n y.
Observat ia 3.7. Un digraf tare conex este quasi tare conex, dar reciproca nu este
adevarata. Un digraf quasi tare conex este conex, dar reciproca nu este adevarata.
Denit ia 3.7. Un digraf G

= (N, A

) se numeste arborescent a daca este fara cicluri


si quasi tare conex.
Exemplul 3.8. Digraful reprezentat n gura 3.6 este o arborescent a.
Teorema 3.14. Un digraf G = (N, A) admite un nod radacina daca si numai daca el
este quasi tare conex.
Demonstrat ie. Daca digraful G admite un nod radacina atunci el este quasi tare
conex deoarece pentru oricare doua noduri x, y N exista un nod z (de exemplu nodul
radacina r) de la care pleaca un drum care ajunge n x si un drum care ajunge n y.
Daca digraful G = (N, A), [N[ = n este quasi tare conex, atunci exista un nod
z
1
de la care pleaca un drum care ajunge n x
1
si un drum care ajunge n x
2
; exista
un nod z
2
de la care pleaca un drum care ajunge n z
1
si un drum care ajunge n x
3
.
Continuand acest procedeu exista un nod z
n1
de la care pleaca un drum care ajunge
n z
n2
si un drum care ajunge n x
n
. Este evident ca nodul r = z
n1
este nod radacina
al digrafului G = (N, A).
Teorema 3.15. Fie G

= (N, A

) un digraf de ordinul n 2. Proprietat ile urmatoare


sunt echivalente si caracterizeaza o arborescent a:
(1). G

este fara cicluri si quasi tare conex;


(2). G

este quasi tare conex si are n 1 arce;


(3). G

este un arbore si admite un nod radacina r;


(4). G

cont ine un nod r si un drum unic de la nodul r la oricare alt nod x N;


(5). G

este quasi tare conex si prin eliminarea unui arc oarecare se obt ine digraful

=
_
N,

A

_
care nu este quasi tare conex;
56 CAPITOLUL 3. ARBORI SI ARBORESCENT E
(6). G

este conex si cont ine un nod r astfel ncat

(r) = 0,

(x) = 1 pentru oricare


nod x ,= r;
(7). G

este fara cicluri si cont ine un nod r astfel ncat

(r) = 0,

(x) = 1 pentru
oricare nod x ,= r.
Demonstrat ie.
(1) (2). Daca (1) este adevarata, atunci G

este conex si fara cicluri, adica G

este
un arbore. Deci G

are n 1 arce si (2) este adevarata.


(2) (3). Daca (2) este adevarata, atunci G

este conex si are n 1 arce, adica G

este un arbore.

In plus, conform Teoremei 3.14 G

admite un nod radacina r si (3) este


adevarata.
(3) (4). Daca (3) este adevarata, atunci exista un drum de la nodul r la oricare alt
nod x N. Deoarece G

este arbore rezulta ca acest drum este unic.


(4) (5). Daca (4) este adevarata, atunci nodul r este un nod radacina si conform
Teoremei 3.14 G

este quasi tare conex. Fie un arc oarecare (x, y) A

. Construim
digraful

G

= (N,

A

), unde

A

= A

(x, y). Prin reducere la absurd, presupunem


ca digraful

G

este quasi tare conex. Deci n



G

exista un drum D
1
de la un nod z la
nodul x si un drum D
2
de la nodul z la nodul y. Rezulta ca n G

exista doua drumuri


de la z la y(D
2
si D
3
= D
1
(x, y)). Prin urmare exista doua drumuri de la r la y ce
contrazice (4). Deci

G

nu este quasi tare conex si (5) este adevarata.


(5) (6). Daca (5) este adevarata, atunci G

este conex si conform Teoremei 3.14,


admite un nod radacina r. Deci

(r) 0 si

(x) 1 pentru oricare nod x ,= r.


Daca

(r) > 0, atunci exista cel put in un arc (y, r) A

. Digraful

G

= (N,

A

) cu

= A

(y, r), admite evident nodul r ca nod radacina, adica



G

este quasi tare


conex ce contrazice (5) si deci

(r) = 0. Daca

(x) > 1, atunci exista cel put in doua


arce (y, x), (z, x) n A

. Aceasta nseamna ca exista cel put in doua drumuri distincte de


la r la x. Digraful

G

= (N,

A

) cu

A

= A

(y, x) admite nodul r ca nod radacina,


adica

G

este quasi tare conex ce contrazice (5) si deci

(x) = 1. Rezulta ca (6) este


adevarata.
(6) (7). Daca (6) este adevarata, atunci numarul de arce al digrafului G

= (N, A

)
este m

=

N

(x) = n 1, adica G

este un arbore. Rezulta ca G

este fara cicluri


si (7) este adevarata.
(7) (1). Daca (7) este adevarata, atunci nodul r este evident un nod radacina. Con-
form Teoremei 3.14 digraful G

este quasi tare conex si (1) este adevarata.


Teorema 3.16. Un digraf G = (N, A) admite un subgraf part ial G

= (N, A

) care este
o arborescent a daca si numai daca el este quasi tare conex.
Demonstrat ie. Daca digraful G admite un subgraf part ial G

care este o arborescent a


atunci el admite un nod radacina r si conform Teoremei 3.14 digraful G este quasi tare
conex.
Reciproc, daca digraful G este quasi tare conex, atunci conform proprietat ii (5) din
Teorema 3.15 se poate obt ine un subgraf part ial G

= (N, A

) care este o arborescent a


cu procedura urmatoare:
3.4. APLICAT II 57
(1) PROCEDURA ARBORESCENTA;
(2) BEGIN
(3) A

:= A;
(4) FOR i := 1 TO m DO
(5) IF prin eliminarea arcului a
i
A

noul digraf ramane quasi


tare conex
(6) THEN A

:= A

a
i

(7) END.
3.4 Aplicat ii
Problema arborelui part ial minim apare n aplicat ii n doua moduri: direct si in-
direct.

In aplicat iile directe se doreste conectarea unor puncte prin legaturi care au
asociate lungimi sau costuri. Punctele reprezinta entitat i zice ca utilizatori ai unui
sistem sau componente ale unui cip care trebuie conectate ntre ele sau cu un alt punct
ca procesorul principal al unui calculator.

In aplicat iile indirecte problema practica nu
apare evident ca o problema a arborelui part ial minim si n acest caz este necesar sa
modelam problema practica astfel ncat sa o transformam ntr-o problema a arborelui
part ial minim.

In continuare se vor prezenta cateva aplicat ii directe si indirecte ale
arborelui part ial minim.
3.4.1 Proiectarea unui sistem zic
Proiectarea unui sistem zic consta n proiectarea unei ret ele care conecteaza an-
umite componente. Sistemul zic trebuie sa nu aiba redundant e ceea ce conduce la
determinarea unui arbore part ial minim. Se prezinta n continuare cateva exemple.
1. Conectarea terminalelor din tablourile electrice astfel ncat lungimea totala a relor
folosite sa e minima.
2. Construirea unei ret ele de conducte care sa lege un numar de orase astfel ncat
lungimea totala a conductelor sa e minima.
3. Conectarea telefonica a unor comune dintr-o zona izolata astfel ncat lungimea totala
a liniilor telefonice care leaga oricare doua comune sa e minima.
4. Determinarea congurat iei unei ret ele de calculatoare astfel ncat costul conec-tarii
n ret ea sa e minim.
Fiecare dintre aceste aplicat ii este o aplicat ie directa a problemei arborelui part ial
minim.

In continuare se prezinta doua aplicat ii indirecte.
3.4.2 Transmiterea optima a mesajelor
Un serviciu de informat ii are n agent i ntr-o anumita t ara. Fiecare agent cunoaste
o parte din ceilalt i agent i si poate stabili ntalniri cu oricare din cei pe care i cunoaste.
Orice mesaj transmis lantalnirea dintre agentul i si agentul j poate sa ajunga la inamic
cu probabilitatea p(i, j). Conducatorul grupului vrea sa transmita un mesaj condent ial
tuturor agent ilor astfel ncat probabilitatea totala ca mesajul sa e interceptat sa e
minima.
58 CAPITOLUL 3. ARBORI SI ARBORESCENT E
Daca reprezentam agent ii prin noduri si ecare ntalnire posibila dintre doi agent i
printr-o muchie, atunci n graful rezultat G = (N, A) dorim sa identicam un ar-
bore part ial G

= (N, A

) care minimeaza probabilitatea interceptarii data de expresia


(1

A
(1 p(i, j))) . Deci vrem sa determinam un arbore part ial G

= (N, A

) care
maximizeaza (

A
(1 p(i, j))) . Putem determina un astfel de arbore daca denim
lungimea arcului (i, j) ca ind log (1 p(i, j)) si rezolvand problema arborelui part ial
maxim.
3.4.3 Problema lant ului minimax ntre oricare doua noduri

Intr-o ret ea G = (N, A, b), denim valoarea unui lant L


zz
de la nodul z la nodul z
ca ind valoarea maxima a muchiilor din L
zz
. Problema lant ului minimax ntre oricare
doua noduri consta n a determina ntre oricare doua noduri z, z un lant de valoare
minima.
Problema lant ului minimax apare n multe situat ii. De exemplu, consideram o nava
spat iala care trebuie sa intre n atmosfera Pamantului. Nava trebuie sa treaca prin zone
cu temperaturi diferite pe care le putem reprezenta prin muchii ntr-o ret ea. Pentru
a ajunge pe suprafat a Pamantului trebuie aleasa o traiectorie astfel ncat temperatura
maxima la care urmeaza sa e expusa nava sa e minima.
Problema lant ului minimaxntre oricare doua noduri din ret eaua G = (N, A, b) este
o problema a arborelui part ial minim. Fie G

= (N, A

) un arbore part ial minim al


grafului G = (N, A) si L

zz
lant ul unic de la z la z n G

. Daca [x, x] este muchia din L

zz
cu valoarea maxima atunci lant ul L

zz
are valoarea b [x, x] . Muchia a = [x, x] genereaza
taietura
_
X, X
_
a
si conform condit iilor de optimalitate ale taieturii avem
b [x, x] b [y, y] pentru toate muchiile [y, y]
_
X, X
_
a
Oricare alt lant L
zz
de la z la z cont ine o muchie [y, y]
_
X, X
_
a
si valoarea acestui
lant este, conform condit iilor de mai sus, cel put in b [x, x] . Rezulta ca L

zz
este un lant
de valoare minima de la z la z. Deci lat ul unic dintre oricare doua noduri din G

este
un lant de valoare minima dintre oricare doua noduri din G.

In continuare se prezinta doua aplicat ii ale arborilor binari.


Capitolul 4
Distant e si drumuri minime
4.1 Principalele probleme de drum minim
Se considera un digraf G = (N, A) cu N = 1, . . . , n, A = a
1
, . . . , a
m
si o funct ie
valoare b : A ' care asociaza ecarui arc a A un numar real b(a) numit valoarea
arcului a. Aceasta valoare poate interpretata ca lungime sau cost etc.
Vom nota cu D
xyk
un drum n digraful G de la nodul x la nodul y si cu T
xy
=
D
xy1
, . . . , D
xyr
mult imea acestor drumuri.
Valoarea unui drum D
xyk
= (a
1
, . . . , a
q
) , notata b (D
xyk
), este numarul b (D
xyk
) =
b(a
1
) +. . . b(a
q
).
Denit ia 4.1. Un drum D
xyp
cu valoarea b (D
xyp
) = minb (D
xyk
) [ D
xyk
T
xy

se numeste drum de valoare minima sau drum minim. Valoarea b (D


xyp
) a drumului
minim D
xyp
se numeste distant a de la nodul x la nodul y si o notam d(x, y).
Exista doua probleme cu dicultat i privind aceasta denit ie. Prima, poate sa nu
existe drum de la nodul x la nodul y si a doua, poate exista drum D
xyk
cu valoare
arbitrar de mica. Prima problema poate rezolvata daca se deneste d(x, y) = .
A doua problema provine din posibilitatea existent ei circuitelor de valoare negativa n
ret eaua G = (N, A, b).
Exemplul 4.1.

In ret eaua reprezentata n gura 4.1, putem determina un drum de
valoare arbitrar de mica de la nodul 1 la nodul 5 utilizand circuitul de valoare negativa
(2, 3, 4, 2), ori de cate ori este necesar.
Fig.4.1
59
60 CAPITOLUL 4. DISTANT E SI DRUMURI MINIME
Vom presupune ca ret eaua G = (N, A, b) nu cont ine circuite cu valoare negativa.
Principalele probleme de drum minim care apar n aplicat ii practice sau sunt sub-
probleme n rezolvarea altor probleme de optimizare n ret ele sunt urmatoarele:
(PDM1) Determinarea unui drum minim D
stp
de la un nod precizat s la un alt nod
precizat t si a valorii b (D
stp
) .
(PDM2) Determinarea unui drum minim D
syp
de la un nod precizat s la nodul y si a
valorii b (D
syp
), pentru toate nodurile y N, y ,= s.
(PDM3) Determinarea unui drum minim D
xyp
de la un nod x la nodul y si a valorii
b (D
xyp
), pentru toate nodurile x, y N, x ,= y.
Daca G

= (N

, A

) este un graf neorientat si b

: A

'
+
, atunci problemele de
lant minim din ret eaua neorientata G

= (N

, A

) pot reduse la problemele de drum


minim din ret eaua orientata G = (N, A, b) cu N = N

, A = (x, y), (y, x) [ [x, y] A

si b(x, y) = b(y, x) = b

[x, y].
PDM1 se poate rezolva utilizand un algoritm de rezolvare a PDM2 la care se adauga
un test suplimentar de oprire; PDM3 se poate rezolva iterand dupa s un algoritm de
rezolvare a PDM2. Exista nsa algoritmi ecient i care rezolva direct PDM3. De aceea
n acest capitol se vor prezenta algoritmi de rezolvare pentru PDM2 si PDM3.
Observat ia 4.1. Daca d(x, y) = atunci consideram ca exista un drum D
xyk
cu
b (D
xyk
) = .
4.2 Ecuat iile lui Bellman
Fie ret eaua orientata G = (N, A, b) si presupunem ca G nu cont ine circuite cu
valoare negativa. Pentru reprezentarea ret elei G se va folosi matricea valoare adiacent a
B = (b
ij
) cu i, j N, unde
b
ij
=
_

_
b(i, j) daca i ,= j si (i, j) A;
0 daca i = j;
daca i ,= j si (i, j) / A.
Fara a restrange generalitatea presupunem ca nodul s este nodul 1. Daca D
1jp
=
((1, h), . . . , (k, i), (i, j)) este un drum minim de la nodul 1 la nodul j, atunci D
1ip
=
((1, h), . . . , (k, i)) este un drum minim de la nodul 1 la nodul i, altfel contrazicem faptul
ca D
1jp
este drum minim. Astfel distant ele u
j
= d(1, j) trebuie sa satisfaca ecuat iile
lui Bellman:
u
1
= 0, u
j
= minu
i
+b
ij
[ i ,= j, j = 2, . . . , n. (4.1)
Fara a restrange generalitatea, putem presupune ca nodul 1 este un nod radacina
al ret elei orientate G.
Teorema 4.1. Daca n ret eaua orientata G = (N, A, b) nodul 1 este nod radacina si
G cont ine numai circuite

D cu b
_

D
_
> 0 atunci G cont ine o arborescent a part iala
G

= (N, A

) cu nodul radacina 1 si drumul unic de la 1 la oricare alt nod j din G

este
un drum minim D
1jp
din G.
Demonstrat ie. Daca n ret eaua orientata G = (N, A, b) nodul 1 este nod radacina
atunci conform Teoremei 3.14 si Teoremei 3.16, G admite o arborescent a part iala
4.3. ALGORITMI PENTRU DISTANT E SI DRUMURI MINIME 61
G

= (N, A

) cu nodul radacina 1. Consideram un nod j si determinam un drum


D
1jp
, u
j
= b (D
1jp
) , cu urmatorul procedeu. Deoarece sunt vericate ecuat iile (4.1),
selectam un arc (i, j) astfel ncat u
j
= u
i
+ b
ij
.

In continuare selectam un arc (k, i)
astfel ncat u
i
= u
k
+ b
ki
etc. pana cand se ajunge la nodul 1. Presupunem prin
reducere la absurd ca nu se ajunge n nodul 1. Aceasta este posibil daca procedeul
conduce la un circuit

D= (v, w, . . . , q, v). Avem urmatoarele ecuat ii:u
v
= u
q
+ b
qv
=
. . . = u
v
+b
vw
+. . .+b
qv
. Rezulta ca b(

D) = b
vw
+. . .+b
qv
= u
v
u
v
= 0, care contrazice
ipoteza ca ret eaua G cont ine circuite

D cu b
_

D
_
> 0. Deci procedeul determina un
drum D
1jp
cu u
j
= b (D
1jp
) . Astfel, aplicand procedeul pentru toate nodurile j, pentru
care nu s-a determinat deja un drum D
1jp
, se obt ine arborescent a part iala G

= (N, A

)
cu proprietatea din enunt ul teoremei.
Urmatoarea teorema ntareste rezultatul din Teorema 4.1.
Teorema 4.2. Daca n ret eaua orientata G = (N, A, b) nodul 1 este nod radacina
si G nu cont ine circuite

D cu b
_

D
_
< 0, atunci G cont ine o arborescent a part iala
G

= (N, A

) cu nodul radacina 1 si drumul unic de la 1 la oricare alt nod j din G

este
un drum minim D
1jp
din G.
Demonstrat ie. Daca n ret eaua orientata G = (N, A, b) nodul 1 este nod radacina,
atunci conform Teoremei 3.14 si Teoremei 3.16, G admite o arborescent a part iala
G

= (N, A

) cu nodul radacina 1. Consideram un nod j si un drum minim D


1jp
=
((1, h), . . . , (k, i), (i, j)) . Atunci avem:
d(1, j) = d(1, i) +b(i, j).
Deoarece nodul j a fost selectat arbitrar, putem sa selectam un arc (i, j) care verica
condit ia anterioara pentru orice nod j ,= 1.

In acest mod putem alege n1 arce si e A

mult imea acestor arce. Este evident ca n digraful G

= (N, A

) sunt vericate relat iile

1
= 0,

(j) = 1, j = 2, . . . , n. Rezulta ca G

= (N, A

) este o arborescent a part iala


cu nodul radacina 1. Drumul unic de la 1 la j din G

este un drum minim D


1jp
din G,
deoarece ecare arc din A

verica condit ia de mai sus.


4.3 Algoritmi pentru distant e si drumuri minime
4.3.1 Algoritmul Dijkstra
Fie ret eaua orientata G = (N, A, b) cu b : A '
+
.

In acest caz ecuat iile lui Bellman


(4.1) pot rezolvate cu algoritmul Dijkstra. Lista nodurilor adiacente catre exterior
nodului x este V
+
(x) = y [ (x, y) A. Algoritmul Dijkstra este urmatorul:
(1) PROGRAM DIJKSTRA;
(2) BEGIN
(3) W := N; d(s) := 0; p(s) := 0;
(4) FOR y N s DO
(5) BEGIN
(6) d(y) := ; p(y) := 0;
(7) END;
62 CAPITOLUL 4. DISTANT E SI DRUMURI MINIME
(8) WHILE W ,= DO
(9) BEGIN
(10) se selecteaza un nod x W astfel ncat d(x) este minima;
(11) W := W x;
(12) FOR y W V
+
(x) DO
(13) IF d(x) +b(x, y) < d(y)
(14) THEN BEGIN d(y) := d(x) +b(x, y); p(y) := x; END;
(15) END;
(16) END.
Teorema 4.3. Algoritmul Dijkstra determina distant ele d(s, y) si drumurile minime
D
syp
, y N, y ,= s, n raport cu nodul sursa s din ret eaua orientata G = (N, A, b) cu
b : A '
+
.
Demonstrat ie. Din modul cum este calculata n algoritm valoarea d(y) rezulta ca
d(y) reprezinta valoarea unui drum de la nodul s la nodul y din ret eaua G. Deci are
loc relat ia d(s, y) d(y) pentru ecare nod y N. Trebuie sa aratam ca d(s, y) = d(y)
pentru ecare y N. Pentru aceasta vom demonstra prin induct ie dupa ordinea n care
nodurile sunt eliminate din W ca d(y) d(s, y) pentru ecare nod y N.
Primul nod eliminat este s si evident ca d(s) = 0 = d(s, s). Presupunem ca d(y)
d(s, y) pentru toate nodurile y care au fost eliminate din W naintea nodului z. Fie
D
szp
= (x
0
, x
1
, . . . , x
k1
, x
k
) un drum minim de la x
0
= s la x
k
= z. Atunci pentru
h = 1, . . . , k avem
d (s, x
h
) =
h

i=1
b (x
i1
, x
i
)
Fie j indicele maxim astfel ncat x
j
a fost eliminat din W naintea lui z. Deoarece
x
j+1
W, x
j+1
V
+
(x
j
) rezulta ca dupa eliminarea lui x
j
din W avem d(x
j+1
)
d(x
j
) +b (x
j
, x
j+1
) . Aceasta inegalitate se pastreaza si cand este eliminat nodul z din
W, deoarece d(x
j
) ramane nemodicata (x
j
/ W) si d (x
j+1
) poate numai sa descreasca.
De asemenea, din ipoteza induct iei avem d (x
j
) = d (s, x
j
) . Astfel
d (x
j+1
) d (x
j
) +b (x
j
, x
j+1
) = d (s, x
j
) +b (x
j
, x
j+1
) = d (s, x
j+1
) d(s, z) (4.2)
Pot exista urmatoarele doua cazuri:
(c
1
) j = k 1.

In acest caz x
j+1
= x
k
= z. Din relat ia (4.2) rezulta d(z) d(s, z);
(c
2
) j < k 1.

In acest caz x
j+1
,= x
k
= z. Daca d(s, z) < d(z), atunci din relat ia
(4.2) rezulta ca d(x
j+1
) < d(z). Conform liniei (10) din algoritm deducem ca x
j+1
este
eliminat din W naintea lui z. Aceasta contrazice modul de alegere a indicelui j. Astfel
si n acest caz avem d(z) d(s, z).
Am demonstrat ca d(y) = d(s, y) pentru ecare y N, y ,= s. Orice drum minim
D
syp
de la nodul s la nodul y se determina cu elementele tabloului predecesor p.
Teorema 4.4. Algoritmul Dijkstra are complexitatea O
_
n
2
_
.
Demonstrat ie. Pentru selectarea nodului x W astfel ncat d(x) este minima sunt
necesare cel mult n1 comparat ii. Ciclul FOR se executa de cel mult n1 ori. Ciclul
WHILE se executa de n ori. Deci algoritmul are complexitatea O
_
n
2
_
.
4.3. ALGORITMI PENTRU DISTANT E SI DRUMURI MINIME 63
Observat ia 4.2. Algoritmul Dijkstra poate sa conduca la rezultate eronate daca
ret eaua G = (N, A, b) cont ine si arce cu valoare negativa, chiar daca nu cont ine cir-
cuite cu valoare negativa.

In acest caz estimarea din relat ia (4.2) nu mai este valabila
ntotdeauna. De exemplu, daca se aplica algoritmul Dijkstra ret elei reprezentate n
gura 4.2 se determina drumul minim D
13p
= (1, 3) cu b(D
13p
) = 1.
Fig.4.2

In realitate D
13p
= (1, 2, 3) cu b(D
13p
) = 0.
Algoritmul lui Dijkstra poate implementat n mai multe moduri n funct ie de
structurile de date utilizate. Astfel, ecare implementare poate avea o alta complexi-
tate. Aceste aspecte vor prezentate n ultimul paragraf al acestui capitol.
Exemplul 4.2. Se considera ret eaua reprezentata n gura 4.3. Sa se aplice algoritmul
Dijkstra acestei ret ele.
Fig.4.3
Init ializari: W = 1, 2, 3, 4, 5, 6, 7, 8, d = (0, , , , , , , ), p = (0, 0, 0, 0, 0, 0, 0, 0);
Iterat ia 1: x = 1, W = 2, 3, 4, 5, 6, 7, 8, d = (0, 28, 1, 2, , , , ), p = (0, 1, 1, 1, 0, 0, 0, 0);
Iterat ia 2: x = 3, W = 2, 4, 5, 6, 7, 8, d = (0, 9, 1, 2, , , 27, ), p = (0, 3, 1, 1, 0, 0, 3, 0);
Iterat ia 3: x = 4, W = 2, 5, 6, 7, 8, d = (0, 9, 1, 2, , , 26, 29), p = (0, 3, 1, 1, 0, 0, 4, 4);
Iterat ia 4: x = 2, W = 5, 6, 7, 8, d = (0, 9, 1, 2, 18, , 19, 29), p = (0, 3, 1, 1, 2, 0, 2, 4);
Iterat ia 5: x = 5, W = 6, 7, 8, d = (0, 9, 1, 2, 18, 26, 19, 25), p = (0, 3, 1, 1, 2, 5, 2, 5);
Iterat ia 6: x = 7, W = 6, 8, d = (0, 9, 1, 2, 18, 26, 19, 20), p = (0, 3, 1, 1, 2, 5, 2, 7);
Iterat ia 7: x = 8, W = 6, d = (0, 9, 1, 2, 18, 26, 19, 20), p = (0, 3, 1, 1, 2, 5, 2, 7);
Iterat ia 8: x = 6, W = , d = (0, 9, 1, 2, 18, 26, 19, 20), p = (0, 3, 1, 1, 2, 5, 2, 7).
64 CAPITOLUL 4. DISTANT E SI DRUMURI MINIME
Sa determinam D
18p
. Avem p(8) = 7, p(7) = 2, p(2) = 3, p(3) = 1 si D
18p
=
(1, 3, 2, 7, 8) cu b(D
18p
) = d(1, 8) = d(8) = 20.
Arborescent a part iala G

= (N, A

) este reprezentata n gura 4.4.


Fig.4.4
4.3.2 Algoritmul Bellman-Ford
Fie ret eaua orientata G = (N, A, b) cu b : A ' si G nu cont ine circuite

D cu
valoarea b(

D) < 0.

In acest caz ecuat iile lui Bellman (4.1.) pot rezolvate cu algo-
ritmul Bellman-Ford. Lista nodurilor adiacente catre interior nodului y este V

(y) =
x [ (x, y) A. Algoritmul Bellman-Ford este urmatorul:
(1) PROGRAM BELLMAN-FORD;
(2) BEGIN
(3) d(s) := 0; p(s) := 0;
(4) FOR y N s DO
(5) BEGIN
(6) d(y) := ; p(y) := 0;
(7) END;
(8) REPEAT
(9) FOR y N DO
(10) d

(y) := d(y);
(11) FOR y N DO
(12) IF V

(y) ,=
(13) THEN BEGIN
(14) se selecteaza x V

(y) astfel ncat d

(x) +b(x, y)
este minima;
(15) IF d

(x) +b(x, y) < d

(y)
(16) THEN BEGIN d(y) := d

(x) +b(x, y);


p(y) := x; END;
(17) END;
(18) UNTIL d(y) = d

(y) pentru toate nodurile y N;


(19) END.
4.3. ALGORITMI PENTRU DISTANT E SI DRUMURI MINIME 65
Teorema 4.5. Algoritmul Bellman-Ford determina distant ele d(s, y) si drumurile min-
ime D
syp
, y N, y ,= s, n raport cu nodul sursa s din ret eaua orientata G = (N, A, b)
cu b : A ' si G nu cont ine circuite

D cu valoarea b(

D) < 0.
Demonstrat ie. Mai ntai precizam ca liniile de la (12) la (17) sunt echivalente, refer-
itor la valorile d(y) cu
d(y) = mind

(y), mind

(x) +b(x, y) [ x V

(y).
Daca notam cu d
0
(y) valorile denite n liniile (3), (6) si prin d
k+1
(y) valorile calculate
n timpul iterat iei k + 1 a ciclului REPEAT, atunci conform celor precizate mai sus
avem
d
k+1
(y) = mind
k
(y), mind
k
(x) +b(x, y) [ x V

(y).
Prin (D
syi
) notam numarul de arce ale drumului D
syi
de la nodul s la nodul y si prin
T
sy
mult imea acestor drumuri. Vom arata prin induct ie dupa k faptul ca
d
k
(y) = minb (D
syi
) [ D
syi
T
sy
, D
syi
k.
Pentru k = 0 armat ia este evident adevarata. Presupunem ca armat ia este adevarata
pentru k. Sa aratam ca
d
k+1
(y) = minb
_
D

syi
_
[ D

syi
T
sy
, D
syi
k + 1.
Avem minb
_
D

syi
_
[ D

syi
T
sy
, D
syi
k + 1 =
= minminb
_
D

syi
_
[ D

syi
T
sy
, D
syi
k,
minb
_
D

syi
_
[ D

syi
T
sy
, D
syi
= k + 1 =
= mind
k
(y), mind
k
(x) +b(x, y) [ x V

(y) = d
k+1
(y).
Daca G nu cont ine circuite

D cu valoarea b(

D) < 0, atunci un drum minim de la s la y
poate sa cont ina cel mult n 1 arce. Deci condit ia din linia (18) este satisfacuta dupa
cel mult n iterat ii ale ciclului REPEAT si d(y) = d(s, y) pentru tot i y N, y ,= s.
Un drum minim D
syp
de la nodul s la nodul y se determina cu elementele tabloului
predecesor p.
Teorema 4.6. Algoritmul Bellman-Ford are complexitatea O(mn).
Demonstrat ie.

In Teorema 4.5 am aratat ca ciclul REPEAT se executa de cel mult
n ori. O iterat ie a ciclului REPEAT are complexitatea O(m). Deci algoritmul are
complexitatea O(mn).
Observat ia 4.3. Daca eliminam liniile (9),(10),(18), nlocuim n linia (8) REPEAT
prin FOR k = 1 TO n DO si valorile d

(x), d

(y) prin d(x) respectiv d(y), atunci


se obt ine posibilitatea testarii existent ei unui circuit de valoare negativa n ret eaua
G = (N, A, b).

Intr-adevar, daca dupa execut ia algoritmului exista un arc (x, y) astfel
ncat d(x) + b(x, y) < d(y), atunci nseamna ca d(x) descreste nelimitat, lucru posibil
numai daca un drum D
sxi
cont ine un circuit

D cu b(

D) < 0.
Exemplul 4.3. Se considera ret eaua reprezentata n gura 4.5.
66 CAPITOLUL 4. DISTANT E SI DRUMURI MINIME
Fig.4.5
AvemV

(1) = , V

(2) = 1, 3, V

(3) = 1, 5, V

(4) = 1, V

(5) = 2, V

(6) =
5, 7, V

(7) = 2, 3, 4, V

(8) = 4, 5, 6, 7.
Init ializari: d = (0, , , , , , , ), p = (0, 0, 0, 0, 0, 0, 0, 0).
Iterat ia 1: d

= (0, , , , , , , );
y = 1 : d(1) = 0, p(1) = 0;
y = 2 : x = 1, d(2) = 28, p(2) = 1;
y = 3 : x = 1, d(3) = 1, p(3) = 1;
y = 4 : x = 1, d(4) = 2, p(4) = 1;
y = 5 : x = 2, d(5) = , p(5) = 0;
y = 6 : x = 5, d(6) = , p(6) = 0;
y = 7 : x = 2, d(7) = , p(7) = 0;
y = 8 : x = 4, d(8) = , p(8) = 0;
S-a obt inut d = (0, 28, 1, 2, , , , ), p = (0, 1, 1, 1, 0, 0, 0, 0).
Iterat ia 2: d

= (0, 28, 1, 2, , , , ),
d = (0, 9, 1, 2, 37, , 26, 29), p = (0, 3, 1, 1, 2, 0, 4, 4).
Iterat ia 3: d

= (0, 9, 1, 2, 37, , 26, 29),


d = (0, 9, 1, 2, 28, 34, 19, 27), p = (0, 3, 1, 1, 2, 7, 2, 7).
Iterat ia 4: d

= (0, 9, 1, 2, 18, 34, 19, 27),


d = (0, 9, 1, 2, 18, 26, 19, 20), p = (0, 3, 1, 1, 2, 5, 2, 7).
Iterat ia 5: d

= (0, 9, 1, 2, 18, 26, 19, 20),


d = (0, 9, 1, 2, 18, 26, 19, 20), p = (0, 3, 1, 1, 2, 5, 2, 7).
4.3.3 Algoritmul Floyd-Warshall
Fie ret eaua orientata G = (N, A, b). Se pune problema rezolvarii PDM3, adica
determinarea distant ei d(i, j) si a unui drum minim D
ijp
ntre oricare doua noduri
i, j N, i ,= j. Daca b : A '
+
, atunci PDM3 se poate rezolva iterand dupa s N
algoritmul Dijkstra si se obt ine un algoritm cu complexitatea O
_
n
3
_
. Daca b : A
' si G nu cont ine circuite

D cu valoarea b(

D) < 0, atunci PDM3 se poate rezolva
iterand dupa s N algoritmul Bellman-Ford si se obt ine un algoritm cu complexitatea
O
_
mn
2
_
. Algoritmul Floyd-Warshall rezolva PDM3 n cazul b : A ' si G nu cont ine
circuite

D cu valoarea b(

D) < 0. Acest algoritm are complexitatea O
_
n
3
_
. Evident ca
4.3. ALGORITMI PENTRU DISTANT E SI DRUMURI MINIME 67
algoritmul Floyd-Warshall este mai avantajos n rezolvarea PDM3 decat iterarea dupa
nodul s a algoritmului Dijkstra sau a algoritmului Bellman-Ford.
Consideram ret eaua orientata G = (N, A, b) reprezentata prin matricea valoare
adiacenta B = (b
ij
) , i, j N cu
b
ij
=
_

_
b(i, j) daca i ,= j si (i, j) A;
0 daca i = j;
daca i ,= j si (i, j) / A.
Algoritmul Floyd-Warshall determina matricea distant elor D = (d
ij
) , i, j N si
matricea predecesor P = (p
ij
) , i, j N.
(1) PROGRAM FLOYD-WARSHALL;
(2) BEGIN
(3) FOR i := 1 TO n DO
(4) FOR j := 1 TO n DO
(5) BEGIN
(6) d
ij
:= b
ij
;
(7) IF i ,= j AND d
ij
<
(8) THEN p
ij
:= i
(9) ELSE p
ij
:= 0
(10) END;
(11) FOR k := 1 TO n DO
(12) FOR i := 1 TO n DO
(13) FOR j := 1 TO n DO
(14) IF d
ik
+d
kj
< d
ij
(15) THEN BEGIN d
ij
:= d
ik
+d
kj
; p
ij
:= p
kj
; END;
(16) END.
Un drum minim D
ijp
de la nodul i la nodul j se determina cu algoritmul urmator:
(1) PROGRAM DRUM;
(2) BEGIN
(3) k := n; x
k
:= j;
(4) WHILE x
k
,= i DO
(5) BEGIN
(6) x
k1
:= p
ix
k
;
(7) k := k 1;
(8) END;
(9) END.
Drumul minim este D
ijp
= (x
k
, x
k+1
, . . . , x
n1
, x
n
) = (i, x
k+1
, . . . , x
n1
, j) .
Teorema 4.7. Algoritmul Floyd-Warshall determina matricea distant elor D si ma-
tricea predecesor P ale ret elei orientate G = (N, A, b) cu b : A ' si cu proprietatea
ca G nu cont ine circuite

D cu valoarea b(

D) < 0.
68 CAPITOLUL 4. DISTANT E SI DRUMURI MINIME
Demonstrat ie. Fie D
0
, P
0
matricele denite n liniile (3) la (10) si D
k
, P
k
matricele
calculate n liniile (11) la (15) la iterat ia k. Prin induct ie dupa k aratam ca D
k
=
_
d
k
ij
_
este matricea valorilor drumurilor minime de la i la j avand nodurile interioare din
1, . . . , k. Pentru k = 0 avem D
0
= B si armat ia este evident adevarata. Pre-
supunem armat ia adevarata pentru k 1. Liniile (14),(15) la iterat ia k sunt echiva-
lente cu d
k
ij
= mind
k1
ij
, d
k1
ik
+d
k1
kj
. Din ipoteza inductiva si principiul optimalitat ii
lui Bellman rezulta ca D
k
=
_
d
k
ij
_
este matricea valorilor drumurilor minime de la i
la j avand nodurile interioare din 1, . . . , k. Deoarece G nu cont ine circuite

D cu val-
oarea b(

D) < 0 si n conformitate cu cele precizate mai sus rezulta ca D
n
este matricea
distant elor. De asemenea, din modul cum se determina p
ij
rezulta ca P
n
este matricea
predecesor cu ajutorul careia se determina drumurile minime D
ijp
.
Teorema 4.8. Algoritmul Floyd-Warshall are complexitatea O
_
n
3
_
.
Demonstrat ie. Evident.
Observat ia 4.4. Daca se deneste b
ii
= , i N, atunci elementul d
ii
<
reprezinta valoarea unui circuit minim ce trece prin i. Daca b
ii
= 0, i N si se
renunt a la ipoteza restrictiva ca oricare circuit

D are valoarea b(

D) 0, atunci se
obt ine posibilitatea testarii existent ei circuitelor de valoare negativa n ret eaua orien-
tata G = (N, A, b).

Intr-adevar, daca d
ii
< 0 atunci ret eaua cont ine un circuit de
valoare negativa care trece prin nodul i.
Exemplul 4.4. Se considera ret eaua reprezentata n gura 4.6.
Fig.4.6
D
0
=
_

_
0 2 4 3
2 0 8 1
6 2 0 4 3
1 0 5
1 0
_

_
, P
0
=
_

_
0 1 1 0 1
2 0 2 0 2
3 3 0 3 3
4 0 0 0 4
0 0 0 5 0
_

_
D
1
=
_

_
0 2 4 3
2 0 6 1
6 2 0 4 3
1 3 5 0 4
1 0
_

_
, P
1
=
_

_
0 1 1 0 1
2 0 1 0 2
3 3 0 3 3
4 1 1 0 1
0 0 0 5 0
_

_
4.4. APLICAT II 69
D
2
=
_

_
0 2 4 3
2 0 6 1
4 2 0 4 3
1 3 5 0 4
1 0
_

_
, P
2
=
_

_
0 1 1 0 1
2 0 1 0 2
2 3 0 3 3
4 1 1 0 1
0 0 0 5 0
_

_
D
3
=
_

_
0 2 4 8 3
2 0 6 10 1
4 2 0 4 3
1 3 5 0 4
1 0
_

_
, P
3
=
_

_
0 1 1 3 1
2 0 1 3 2
2 3 0 3 3
4 1 1 0 1
0 0 0 5 0
_

_
D
4
=
_

_
0 2 4 8 3
2 0 6 10 1
4 2 0 4 3
1 3 5 0 4
2 4 6 1 0
_

_
, P
4
=
_

_
0 1 1 3 1
2 0 1 3 2
2 3 0 3 3
4 1 1 0 1
4 1 1 5 0
_

_
D
5
=
_

_
0 2 4 4 3
2 0 6 2 1
4 2 0 4 3
1 3 5 0 4
2 4 6 1 0
_

_
, P
5
=
_

_
0 1 1 5 1
2 0 1 5 2
2 3 0 3 3
4 1 1 0 1
4 1 1 5 0
_

_
Sa determinam drumul minim D
52p
: x
5
= 2, x
4
= p
52
= 1, x
3
= p
51
= 4, x
2
=
p
54
= 5, deci D
52p
= (5, 4, 1, 2) cu b(D
52p
) = b(5, 4) +b(4, 1) +b(1, 2) = 1 +1 +2 = 4 =
d(5, 2).
4.4 Aplicat ii
4.4.1 Ret ele de comunicat ii
O ret ea G = (N, A, b) poate reprezenta o ret ea de comunicat ie cu nodurile N si
rutele directe ntre noduri formand mult imea arcelor A. Daca b(a) reprezinta lungimea
arcului a, atunci PDM1, PDM2, PDM3 denite n paragraful 4.1 reprezinta probleme
naturale care se pun n astfel de ret ele: determinarea drumului/drumurilor cel/celor
mai scurt/scurte. Un exemplu concret a fost prezentat n paragraful 1.6.
O problema speciala consta n determinarea drumului cel mai sigur de la nodul s la
nodul t. Daca p(i, j) este o probabilitate de funct ionare a arcului (i, j) A atunci,
presupunand ca arcele funct ioneaza independent unele de altele, probabilitatea de
funct ionare a drumului D este: p(D) =

D
p(i, j). Considerand b(i, j) = logp(i, j),
problema drumului minim de la s la t semnica determinarea drumului cel mai sigur
de la s la t.
4.4.2 Problema rucsacului
Problema rucsacului este un model clasic n literatura cercetarilor operat ionale.
70 CAPITOLUL 4. DISTANT E SI DRUMURI MINIME
Un excursionist trebuie sa decida ce obiecte sa includa n rucsacul sau n vederea
unei calatorii. El are de ales ntre p obiecte, obiectul i are greutatea g
i
(n kilograme) si
o utilitate u
i
adusa de introducerea obiectului i n rucsac. Obiectivul excursionistului
este sa maximizeze utilitatea calatoriei astfel ncat greutatea obiectelor introduse n
rucsac sa nu depaseasca g kilograme. Aceasta problema a rucsacului are urmatoarea
formulare ca problema de programare n numere ntregi:
max
p

i=1
u
i
x
i
p

i=1
g
i
x
i
g
x
i
0, 1 pentru i = 1, . . . , p
Aceasta problema se poate rezolva utilizand metode ale programarii dinamice.

In con-
tinuare vom formula problema rucsacului ca o problema de drum optim ntr-o ret ea.
Aceasta aplicat ie pune n evident a legatura dintre modelele de programare dinamica
discreta si problemele de drum optim ntr-o ret ea.
Asociem problemei rucsacului o problema de drum optimntr-o ret ea G = (N, A, b)
care se deneste n modul urmator. Mult imea nodurilor este N = N
0
N
1
. . . N
p

N
p+1
, unde N
0
= s, N
i
= i(0), . . . , i(g), i = 1, . . . , p, N
p+1
= t. Submult imile
de noduri N
0
, N
1
, . . . , N
p
, N
p+1
reprezinta straturi ale mult imii nodurilor: N
0
stratul
corespunzator nodului sursa s, N
1
, . . . , N
p
straturile corespunzatoare obiectelor 1, . . . , p
si N
p+1
stratul corespunzator nodului stoc t. Nodul i(k) are semnicat ia ca obiectele
1, . . . , i au consumat k unitat i din capacitatea rucsacului. Nodul i(k) are cel mult doua
arce incidente catre exterior, corespunzatoare urmatoarelor doua decizii:
(1) nu se include obiectul i + 1 n rucsac;
(2) se include obiectul i + 1 n rucsac, daca k +g
i+1
g.
Arcul corespunzator primei decizii este (i(k), (i + 1)(k)) cu b (i(k), (i + 1)(k)) = 0 si ar-
cul corespunzator celei de a doua decizii (cu condit ia k+g
i+1
g) este (i(k), (i + 1)(k+
g
i+1
) cu b (i(k), (i + 1)(k +g
i+1
)) = u
i+1
. Nodul sursa s are doua arce incidente catre
exterior: (s, 1(0)) cu b(s, 1(0)) = 0 si (s, 1(g
1
)) cu b(s, 1(g
1
)) = u
1
corespunzatoare celor
doua decizii de a nu include sau de a include obiectul 1 n rucsac. Se introduc si arcele
(p(k), t) cu b(p(k), t) = 0, k = 0, . . . , g.
Fiecare solut ie admisibila a problemei rucsacului deneste un drum de la nodul
sursa s la nodul stoc t; solut ia admisibila si drumul au aceeasi utilitate. Invers, ecare
drum de la nodul sursa s la nodul stoc t deneste o solut ie admisibila a problemei
rucsacului cu aceeasi utilitate.
Exemplul 4.5. Ilustram formularea prezentata mai sus pentru o problema a rucsacului
cu patru obiecte care au greutat ile si utilitat ile indicate n tabelul de mai jos.
i 1 2 3 4
u
i
40 15 20 10
g
i
4 2 3 1
4.4. APLICAT II 71
Figura 4.7 arata ret eaua G = (N, A, b) asociata problemei rucsacului presupunand
ca rucsacul are capacitatea de g = 6.
Fig.4.7
Drumul D = (s, 1(0), 2(2), 3(5), 4(5), t) implica solut ia care include obiectele 2 si 3
n rucsac si exclude obiectele 1 si 4.
Corespondent a dintre problema rucsacului si ret eaua asociata G = (N, A, b) arata ca
dacan ret eaua G se determina un drum de utilitate maxima (drum maxim) de la nodul
sursa s la nodul stoc t se rezolva problema rucsacului. Putem transforma problema
drumului maximntr-o problema de drum minim prin denirea costurilor arcelor egale
cu valorile negative ale utilitat ilor arcelor. Deoarece ret eaua G = (N, A, b) este o ret ea
secvent iala (arcele sunt de la stratul N
i
la stratul N
i+1
, i = 0, 1, . . . , p,) ea nu cont ine
circuite si deci n G nu exista circuite

D cu b(

D) < 0. Astfel problema drumului minim
n ret eaua G poate rezolvata cu algoritmul Bellman-Ford, eventual usor modicat.
4.4.3 Programarea proiectelor
Pentru executarea unui proiect complex (de exemplu, construct ia unui baraj, a unui
centru comercial sau a unui avion), diferitele activitat i trebuie sa e bine coordonate
pentru a evita pierderea de timp si bani. Problemele practice sunt complexe datorita
restrict iilor de utilizare concurenta a resurselor (oameni, utilaje etc.) de catre diversele
activitat i. Ne limitam la cazul simplu unde avem restrict ii pe secvent a cronologica a ac-
tivitat ilor: exista unele activitat i care nu pot ncepe naintea terminarii altor activitat i.
72 CAPITOLUL 4. DISTANT E SI DRUMURI MINIME
Se cere sa se determine un plan de organizare a proiectului astfel ncat timpul total
de execut ie sa e minim. Doua metode foarte similare pentru rezolvarea acestei pro-
bleme, numite Critical Path Method (CPM) si Project Evaluation and Review Technique
(PERT) au fost dezvoltate ntre anii 1956 si 1958 de doua grupuri diferite. CPM a fost
introdus de E.I. du Pont de la Nemours & Company pentru programarea proiectelor de
construct ii si PERT a fost introdus de Remington Rand de la U.S. Navy pentru pro-
gramarea cercetarii si dezvoltarii activitat ilor din cadrul programului rachetei Polaris.
CPM - PERT este bazata pe determinarea drumurilor maxime ntr-o ret ea orientata
fara circuite. Vom utiliza o formulare n care activitat ile proiectului sunt reprezentate
prin noduri; alternativ, se pot reprezenta prin arce.
Asociem proiectului o ret ea orientata G = (N, A, b) n modul urmator. Mult imea
nodurilor N = 1, . . . , n este mult imea activitat ilor proiectului. Mult imea arcelor
este A = (i, j) [ i, j N, activitatea j urmeaza imediat dupa (nu exista activitat i
intermediare) activitatea i. Daca
i
este timpul de execut ie al activitat ii i, atunci
valoarea arcului (i, j) este b(i, j) =
i
. Observam ca G este fara circuite, deoarece altfel
activitat ile dintr-un circuit niciodata nu pot sa nceapa.

In acest caz G cont ine cel
put in un nod y cu

(y) = 0 si cel put in un nod x cu


+
(x) = 0. Construim ret eaua
extinsa

G = (

N,

A,

b) unde

N =

N
1


N
2


N
3
,

N
1
= s,

N
2
= N,

N
3
= t,

A =

A
1


A
2


A
3
,

A
1
= (s, y) [ y

N
2
,

(y) = 0,

A
2
= A,

A
3
= (x, t) [ x

N
2
,
+
(x) =
0,

b(s, y) = 0, (s, y)

A
1
,

b(x, y) = b(x, y), (x, y)



A
2
,

b(x, t) =
x
, (x, t)

A
3
. Nodul
sursa s este nod radacina al ret elei

G si consideram

G sortata topologic.
Notam cu

d(i) timpul cel mai devreme posibil la care poate sa nceapa activi-
tatea i. Deoarece toate activitat ile predecesoare activitat ii i au fost terminate, obt inem
urmatorul sistem de ecuat ii:

d(s) = 0,

d(j) = max

d(i) +

b(i, j) [ (i, j)

A.
Acest sistem de ecuat ii este similar sistemului ecuat iilor lui Bellman si descrie dru-
murile maxime din

G. La fel ca n cazul sistemului ecuat iilor lui Bellman sistemul de
mai sus are solut ie unica si poate rezolvat recursiv deoarece

G este sortata topologic.
Timpul minim de execut ie al proiectului este T =

d(t) valoarea maxima a drumului de
la s la t. Daca proiectul este terminat la timpul T, timpul cel mai tarziu T(i) la care
putem ncepe activitatea i este dat recursiv de
T(t) = T, T(i) = minT(j)

b(i, j) [ (i, j)

A.
Astfel, T(t) T(i) este valoarea drumului maxim de la i la t. Evident, consideram
T(s) = 0. Rezerva de timp a activitat ii i este r(i) = T(i)

d(i). Toate activitat ile i avand


rezerva r(i) = 0 se numesc activitat i critice, deoarece ele trebuie sa nceapa la timpul
T(i) =

d(i), astfel orice ntarziere a lor conduce la ntarzierea execut iei proiectului.
Observam ca ecare drum maxim de la s la t cont ine numai activitat i critice; pentru
acest motiv ecare astfel de drum este numit drum critic.

In general exista mai multe
drumuri critice.
Exemplul 4.6. Consideram simplicat construct ia unei case. Lista activitat ilor, a
timpilor necesari acestor activitat i si activitat ile predecesoare ecarei activitat i sunt
prezentate n tabelul de mai jos.
4.4. APLICAT II 73
Nod Activitate Timp Activitate predecesoare
1 Pregatirea santierului de lucru 3 -
2 Furnizarea materialelor de construct ii 2 -
3 Saparea sant urilor pentru fundat ie 2 1,2
4 Construirea fundat iei 2 3
5 Construirea zidurilor 7 4
6 Construirea suporturilor acoperisului 3 5
7 Acoperirea acoperisului 1 6
8 Instalat ii exterioare casei 3 4
9 Tencuire exterioara 2 7,8
10 Punerea ferestrelor 1 7,8
11 Punerea tavanelor (plafoanelor) 3 5
12 Pregatirea gradinii 4 9,10
13 Instalat ii exterioare casei 5 11
14 Izolarea peret ilor 3 10,13
15 Zugravirea peret ilor 3 14
16 Mutarea 5 15
Ret eaua orientata

G = (

N,

A,

b) este reprezentata n gura 4.8.


Fig.4.8
Utilizand sistemul de ecuat ii de mai sus calculam consecutiv

d(s) = 0,

d(1) =
0,

d(2) = 0,

d(3) = 3,

d(4) = 5,

d(5) = 7,

d(8) = 7,

d(6) = 14,

d(11) = 14,

d(13) =
17,

d(7) = 17,

d(9) = 18,

d(10) = 18,

d(12) = 20,

d(14) = 22,

d(15) = 25,

d(16) =
28,

d(t) = 33. Analog calculam T(t) = 33, r(t) = 0; T(16) = 28, r(16) = 0; T(15) =
25, r(15) = 0; T(12) = 29, r(12) = 9; T(14) = 22, r(14) = 0; T(9) = 27, r(9) =
9; T(10) = 21, r(10) = 3; T(7) = 20, r(7) = 3; T(13) = 17, r(13) = 0; T(6) = 17, r(6) =
3; T(11) = 14, r(11) = 0; T(5) = 7, r(5) = 0; T(8) = 18, r(8) = 11; T(4) = 5, r(4) =
0; T(3) = 3, r(3) = 0; T(1) = 0, r(1) = 0; T(2) = 1, r(2) = 1; T(s) = 0, r(s) = 0. Astfel,
74 CAPITOLUL 4. DISTANT E SI DRUMURI MINIME
activitat ile critice sunt s, 1,3,4,5,11,13,14,15,16,t si ele formeaza (n aceasta ordine)
drumul critic (care este, n acest caz, unic).
Capitolul 5
Probleme euleriene si
hamiltoniene
5.1 Probleme euleriene
Denit ia 5.1.

Intr-un graf neorientat G = (N, A) se numeste lant (respectiv ciclu)
eulerian, un lant (respectiv ciclu) simplu care trece prin toate muchiile grafului G.
Observat ia 5.1. Not iunea de lant (respectiv ciclu) eulerian are sens si pentru multi-
grafuri neorientate. Aceste not iuni au fost introduse de matematicianul elvet ian Euler
care a publicat n 1736 rezolvarea problemei podurilor din Konigsberg (azi Kaliningrad).
Acest articol este considerat originea teoriei grafurilor. Orasul Konigsberg, care pe tim-
pul lui Euler era n Prusia de Est, este traversat de raul Pregel, care curge de o parte
si de alta a insulei Kneiphof si are sapte poduri, ca n gura 5.1(a).
(a) (b)
Fig.5.1
75
76 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
Un pieton primbandu-se, va putea sa traverseze numai o singura data ecare pod
nainte de a se ntoarce la locul de pornire? Aceasta problema a pasionat locuitorii
orasului Konigsberg, pana n anul 1736 cand Euler a aratat ca nu este posibil. Modelul
lui Euler pentru problema a fost un graf neorientat cu patru varfuri, cate un varf pentru
ecare regiune de uscat si cu sapte muchii, cate o muchie pentru ecare pod. Acest graf
este reprezentat n gura 5.1(b).

In terminologia teoriei grafurilor, problema consta n
a determina un ciclu eulerian.
Exemplul 5.1. Graful neorientat din gura 5.2(a) cont ine lant ul eulerian L = (a
1
, a
4
,
a
2
, a
3
, a
7
, a
8
, a
5
, a
6
, a
12
, a
11
, a
9
, a
10
, a
13
, a
14
, a
15
, de la nodul 1 la nodul 7, dar nu cont ine
nici un ciclu eulerian.
a) (b)
Fig.5.2
Graful neorientat din gura 5.2(b) cont ine ciclul eulerian

L= (a
1
, a
5
, a
2
, a
3
, a
8
, a
9
, a
6
,
a
7
, a
13
, a
12
, a
10
, a
11
, a
14
, a
15
, a
16
, a
4
de la nodul 1 la nodul 1.

In continuare expresia turneu eulerian neorientat desemneaza e un lant eulerian,


e un ciclu eulerian.
Teorema 5.1. Un graf neorientat G = (N, A), cont ine un lant (respectiv un ciclu)
eulerian daca si numai daca G este conex si numarul nodurilor cu grad impar este 2
(respectiv 0).
Demonstrat ie. Daca G = (N, A), cont ine un turneu eulerian neorientat atunci evident
ca G este conex si numarul nodurilor cu grad impar este e 2, e 0, dupa cum turneul
este e lant , e ciclu, deoarece daca se ajunge ntr-un nod y pe muchia [x, y] se poate
ntotdeauna pleca din acest nod pe o alta muchie [y, z] cu except ia primului nod si
a ultimului nod n cazul unui lant eulerian. Reciproca se demonstreaza prin induct ie
dupa numarul m al muchiilor. Pentru grafurile neorientate cu m = 2 armat ia este
evident adevarata. Presupunem armat ia adevarata pentru grafurile neorientate cu
[A[ < m si vom arata ca armat ia este adevarata si pentru grafurile neorientate cu
A = m > 2. Daca G cont ine doua noduri cu grade impare, le notam cu x
1
si x
n
.
Construim un turneu eulerian neorientat T plecand de la un nod x
i
(x
i
= x
1
daca exista
doua noduri cu grade impare) si se parcurg muchii neutilizate. Cand se ajunge ntr-un
nod x
j
,= x
i
(x
j
,= x
n
) se poate pleca din x
j
, deoarece este evident ca s-au utilizat un
numar impar de muchii incidente n x
j
. Dupa un numar k de muchii parcurse o singura
data, nu se mai poate pleca din nodul curent x
j
deoarece toate muchiile incidente la x
j
5.1. PROBLEME EULERIENE 77
au fost utilizate.

In acest caz exista doua posibilitat i:
p
1
) x
j
= x
n
, cand G cont ine 2 noduri cu grade impare;
p
2
) x
j
= x
i
, cand G cont ine 0 noduri cu grade impare.
Turneul neorientat construit pana la acest pas l notam cu T

si are k muchii. Daca


avem k = m atunci evident T

G si T T

. Daca avem k < m atunci prin eliminarea


din G a tuturor muchiilor din T

se obt in un subgraf G

=
_
N, A

_
care are evident
toate nodurile cu grade pare.
Fie C

1
, . . . C

p
componentele conexe ale subgrafului G

. Prin ipoteza induct iei com-


ponentele conexe admit ciclurile euleriene

1
, . . . ,

p
. Deoarece G este conex turneul
eulerian neorientat T

trebuie sa treaca prin cel put in un nod din ecare componenta


conexa a lui G

, sa spunem, prin nodurile y


i
C

i
, i = 1, . . . , p, n aceasta ordine.
Atunci turneul eulerian neorientat T este urmatorul:
T = L
x
i
y
1

1
L
y
1
y
2
. . .

p
L
ypx
j
, unde L
x
i
y
1
. . . L
ypx
j
= T

.
Daca x
j
= x
n
atunci T este un lant eulerian, iar daca x
j
= x
i
atunci T este un ciclu
eulerian.
Observat ia 5.2. Teorema 5.1 este valabila si pentru multigrafuri neorientate.

In continuare se prezinta un algoritm pentru determinarea unui ciclu eulerian.



In
acest algoritm se utilizeaza urmatoarele notat ii:
W reprezinta lista nodurilor vizitate n ordinea n care au fost vizitate;
s reprezinta nodul sursa din care se pleaca init ial;
x reprezinta nodul curent vizitat;
A

reprezinta mult imea muchiilor deja parcurse si A

= AA

;
V

(x) reprezinta lista nodurilor din G

=
_
N, A

_
adiacente cu x.
(1) PROGRAM CICLUE;
(2) BEGIN
(3) W := s; x := s; A

:= ; A

:= A;
(4) WHILE

V

(s)

> 0 DO
(5) BEGIN
(6) IF

V

(s)

> 1
(7) THEN se selecteaza y din V

(x) astfel ncat [x, y], prin eliminare,
nu mareste numarul componentelor conexe ale lui G

=
_
N, A

_
(8) ELSE se selecteaza unicul nod y din V

(x);
(9) V

(x) := V

(x) y; V

(y) := V

(y) x;
(10) A

:= A

[x, y] A

:= A

[x, y]; ;
(11) x := y;
(12) se adauga x la urma listei W;
(13) END;
(14) END.
78 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
Teorema 5.2 Algoritmul CICLUE determina un ciclu eulerian

L al unui graf neori-
entat G = (N, A) conex si gradul ecarui nod este un numar par.
Demonstrat ie. Mai ntai aratam ca este posibil ntotdeauna determinarea, cu aju-
torul instruct iunii IF din liniile (6), (7) si (8), a unui nod y care urmeaza a vizitat.
Deoarece G = (N, A) este conex si gradul ecarui nod este numar par rezulta ca init ial

V

(x)

> 1 pentru ecare nod x din N. La ecare iterat ie a instruct iunii WHILE, n
linia (9), se elimina y din V

(x) si x din V

(y). Deci dupa un numar de iteat ii avem

V

(x)

= 1.

In acest caz, conform liniei (8), este selectat unicul nod y din V

(x).

In cazul

V

(x)

> 1 consideram subcazurile x = s si x ,= s. Daca x = s atunci


nici o muchie [s, y], prin eliminare, nu mareste numarul componentelor conexe ale lui
G

=
_
N, A

_
, deoarece pentru oricare revenire n nodul s, nodurile din G

au grad par.
Daca x ,= s atunci, evident, cel mult o muchie [x, y], prin eliminare, mareste numarul
componentelor conexe ale lui G

si exista nod y care verica condit ia din linia (7).


Algoritmul se opreste cand

V

(s)

= 0. Evident ca n conformitate cu cele precizate


mai sus, n acest caz, s-a determinat un ciclu eulerian

L= W.
Teorema 5.3 Algoritmul CICLUE are complexitatea O
_
m
2
_
.
Demonstrat ie. Instruct iunea WHILE se executa de m ori, odata pentru ecare muchie
a ciclului eulerian, adica a grafului G = (N, A). Pentru cautarea unui nod y n linia
(7) astfel ncat prin eliminarea muchiei [x, y] nu se mareste numarul componentelor
conexe ale lui G

=
_
N, A

_
sunt necesare cel mult m operat ii. Deci algoritmul are
complexitatea O
_
m
2
_
.
Observat ia 5.3. Daca graful neorientat G = (N, A) ndeplineste condit iile de existent a
a unui lant eulerian de la nodul x
1
la nodul x
n
, atunci acest lant se poate determina
n modul urmator. Se construieste graful neorientat

G =
_

N,

A
_
cu

N = N,

A =
A [x
1
, x
n
]. Evident ca graful neorientat

G ndeplineste condit iile de existent a a
unui ciclu eulerian. Daca

L este ciclu eulerian al grafului neorientat



G atunci L =

L
[x
1
, x
n
] este lant ul eulerian, de la nodul x
1
la nodul x
n
, al grafului neorientat G.
De asemenea, remarcam faptul ca exista un algoritm pentru determinarea unui ciclu
eulerian cu complexitatea O(m), dar cu un text mult mai lung si mai put in clar decat
algoritmul CICLUE.
Exemplul 5.2. Sa se determine cu algoritmul prezentat mai sus un ciclul eulerian al
grafului neorientat din gura 5.2(b).
Sunt indeplinite condit iile din Teorema 5.1 si anume G este conex si pentru ecare
nod x din N avem(x) = 4 este numar par.

In adevar avem: V

(1) = (2, 3, 4, 7), V

(2) =
(1, 3, 5, 8), V

(3) = (1, 2, 4, 5), V

(4) = (1, 3, 6, 7),
V

(5) = (2, 3, 6, 8), V



(6) = (4, 5, 7, 8), V

(7) = (1, 4, 6, 8), V

(8) = (2, 5, 6, 7).
Init ializari: W := 1, x = 1, A

:= , A

= A;
Iterat ia 1:

V

(1)

> 0,

V

(1)

> 1
y = 2, V

(1) = (3, 4, 7), V

(2) = (3, 5, 8), A

:= A

[1, 2], A

:= A

[1, 2],
x = 2, W = (1, 2)
5.1. PROBLEME EULERIENE 79
Iterat ia 2:

V

(1)

> 0,

V

(2)

> 1
y = 3, V

(2) = (5, 8), V

(3) = (1, 4, 5), A

:= A

[2, 3], A

:= A

[2, 3],
x = 3, W = (1, 2, 3)
Iterat ia 3:

V

(1)

> 0,

V

(3)

> 1
y = 4, V

(3) = (1, 5), V

(4) = (1, 6, 7), A

:= A

[3, 4], A

:= A

[3, 4],
x = 4, W = (1, 2, 3, 4)
Iterat ia 4:

V

(1)

> 0,

V

(4)

> 1
y = 6, V

(4) = (1, 7), V

(6) = (5, 7, 8), A

:= A

[4, 6], A

:= A

[4, 6],
x = 6, W = (1, 2, 3, 4, 6)
Iterat ia 5:

V

(1)

> 0,

V

(6)

> 1
y = 5, V

(6) = (7, 8), V

(5) = (2, 3, 8), A

:= A

[6, 5], A

:= A

[6, 5],
x = 5, W = (1, 2, 3, 4, 6, 5)
Iterat ia 6:

V

(1)

> 0,

V

(5)

> 1
y = 2, V

(5) = (3, 8), V

(2) = (8), A

:= A

[5, 2], A

:= A

[5, 2],
x = 2, W = (1, 2, 3, 4, 6, 5, 2)
Iterat ia 7:

V

(1)

> 0,

V

(2)

= 1
y = 8, V

(2) = , V

(8) = (5, 6, 7), A

:= A

[2, 8], A

:= A

[2, 8],
x = 8, W = (1, 2, 3, 4, 6, 5, 2, 8)
Iterat ia 8:

V

(1)

> 0,

V

(8)

> 1
y = 5, V

(8) = (6, 7), V

(5) = (3), A

:= A

[8, 5], A

:= A

[8, 5],
x = 5, W = (1, 2, 3, 4, 6, 5, 2, 8, 5)
Iterat ia 9:

V

(1)

> 0,

V

(5)

= 1
y = 3, V

(5) = , V

(3) = (1), A

:= A

[5, 3], A

:= A

[5, 3],
x = 3, W = (1, 2, 3, 4, 6, 5, 2, 8, 5, 3)
Iterat ia 10:

V

(1)

> 0,

V

(3)

= 1
y = 1, V

(3) = , V

(1) = (4, 7), A

:= A

[3, 1], A

:= A

[3, 1],
x = 1, W = (1, 2, 3, 4, 6, 5, 2, 8, 5, 3, 1)
Iterat ia 11:

V

(1)

> 0,

V

(1)

> 1
y = 4, V

(1) = (7), V

(4) = (7), A

:= A

[1, 4], A

:= A

[1, 4],
x = 4, W = (1, 2, 3, 4, 6, 5, 2, 8, 5, 3, 1, 4)
Iterat ia 12:

V

(1)

> 0,

V

(4)

= 1
y = 7, V

(4) = , V

(7) = (1, 6, 8), A

:= A

[4, 7], A

:= A

[4, 7],
x = 7, W = (1, 2, 3, 4, 6, 5, 2, 8, 5, 3, 1, 4, 7)
Iterat ia 13:

V

(1)

> 0,

V

(7)

> 1
Muchia [7, 1] mareste numarul componentelorconexe ale lui G

=
_
N, A

_
.
y = 6, V

(7) = (1, 8), V

(6) = (8), A

:= A

[7, 6], A

:= A

[7, 6],
x = 6, W = (1, 2, 3, 4, 6, 5, 2, 8, 5, 3, 1, 4, 7, 6)
Iterat ia 14:

V

(1)

> 0,

V

(6)

= 1
y = 8, V

(6) = , V

(8) = (7), A

:= A

[6, 8], A

:= A

[6, 8],
x = 8, W = (1, 2, 3, 4, 6, 5, 2, 8, 5, 3, 1, 4, 7, 6, 8)
80 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
Iterat ia 15:

V

(1)

> 0,

V

(8)

= 1
y = 7, V

(8) = , V

(7) = (1), A

:= A

[8, 7], A

:= A

[8, 7],
x = 7, W = (1, 2, 3, 4, 6, 5, 2, 8, 5, 3, 1, 4, 7, 6, 8, 7)
Iterat ia 16:

V

(1)

> 0,

V

(7)

= 1
y = 1, V

(7) = , V

(1) = , A

:= A

[7, 1], A

:= A

[7, 1],
x = 1, W = (1, 2, 3, 4, 6, 5, 2, 8, 5, 3, 1, 4, 7, 6, 8, 7, 1)
Deoarece V

(1) = 0 STOP.
Ciclul eulerian este dat de lista ordonata de noduri W sau A

= (a
1
, a
5
, a
8
, a
10
, a
12
, a
6
,
a
7
, a
13
, a
9
, a
2
, a
3
, a
11
, a
14
, a
15
, a
16
, a
4
).
Denit ia 5.2.

Intr-un graf orientat (diagraf) G = (N, A) se numeste drum (respectiv
circuit) eulerian un drum (respectiv circuit) simplu care trece prin toate arcele digra-
fului G.
Denit ia 5.3. Un graf neorientat (respectiv orientat) se numeste eulerian daca cont ine
un ciclu (respectiv circuit) eulerian.
Exemplul 5.3. Digraful din gura 5.3(a) cont ine drumul eulerian D = (a
6
, a
4
, a
3
, a
2
, a
7
,
a
5
, a
1
), de la nodul 4 la nodul 3, dar nu cont ine circuit Eulerian.
(a) (b)
Fig.5.3
Digraful din gura 5.3(b) cont ine circuitul eulerian

D= (a
5
, a
2
, a
8
, a
6
, a
9
, a
4
, a
10
, a
7
,
a
1
, a
3
) de la nodul 3 la nodul 3.
Teorema 5.4. Un digraf G = (N, A) cont ine un drum eulerian de la nodul x
1
la
nodul x
n
daca si numai daca este conex si semigradele nodurilor sale veric a condit iile:

+
(x
1
) =

(x
1
) + 1,
+
(x
n
) =

(x
n
) 1,
+
(x) =

(x) pentru x ,= x
1
si x ,= x
n
.
Un digraf G = (N, A) cont ine un circuit eulerian daca si numaid aca este conex si

+
(x) =

(x) pentru ecare nod x din N.


Demonstrat ie. Se face analog ca demonstrat ia Teoremei 5.1.
5.1. PROBLEME EULERIENE 81
Exemplul 5.4. Digraful din gura 5.3(a) verica condit iile din Teorema 5.4 pentru
existent a drumului eulerian si diagraful din gura 5.3(b) verica condit iile din aceasta
teorema pentru existent a circuitului eulerian.
Pentru determinarea unui circuit eulerian al unui digraf G = (N, A) se poate adapta
algoritmul CICLUE. Se va prezenta un algoritm specic cirucitelor euleriene.

In acest
algoritm se utilizeaza algoritmul parcugerii totale DF(APTDF) pentru determinarea
unei arborescent e part iale G

= (N, A

) cu nodul radacina r a digrafului G = (N, A).

In algoritm se utilizeaza urmatoarele notat ii:


A

desemneaza mult imea arcelor arborescent ei part iale G

= (N, A

);
b desemneaza un tablou unidimensional cu m elemente care au valori 0,1;
V

x
desemneaza lista nodurilor adiacente catre interiorul nodului x si este ordonata n
raport cu valorile tabloului b;
i desemneaza un tablou unidimensional cu n elemente care sunt utilizate ca index;
W desemneaza lista nodurilor care la termianrea execut iei algoritmului, formeaza cir-
cuitul eulerian.
(1) PROGRAM CIRCUITE;
(2) BEGIN
(3) APTDF(G, r, A

)
(4) FOR (x, y) A DO
(5) IF (x, y) A

(6) THEN b(x, y) := 1


(7) ELSE b(x, y) := 0;
(8) FOR x N DO
(9) BEGIN
(10) V

x
:= ;

(x) := 0; i(x) := 0;
(11) END;
(12) FOR (x, y) A DO
(13) IF b(x, y) = 0
(14) THEN se adauga x la nceputul listei V

y
;

(y) :=

(y) + 1;
(15) ELSE se adauga x la urma liste V

y
;

(y) :=

(y) + 1;
(16) W := ; x := r;
(17) WHILE i(x)

(x) DO
(18) BEGIN
(19) se adauga x la nceputul listei W;
(20) i(x) := i(x) + 1;
(21) IF i(x)

(x)
(22) THEN x := V

x
(i(x));
(23) END;
(24) END.
Teorema 5.5. Daca G = (N, A) este un digraf conex,
+
(x) =

(x) pentru ecare


nod x N si G

= (N, A

) este o arborescent a part iala cu nodul radacina r, atunci un


circuit eulerian poate construit n sens invers cu regulile urmatoare:
(1) arcul init ial este orice arc incident catre interior nodului r;
82 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
(2) arcele ulterioare sunt selectate dintre cele incidente catre interior nodului curent
x si astfel ncat:
(2.1) ecare arc este utilizat o singura data,
(2.2) nu este selectat arcul (v, x) din A

daca exista arc (u, x) din A

neuti-
lizat;
(3) procesul se opreste cand nodul curent x nu are arce incidente catre interior neu-
tilizate.
Demonstrat ie. Regulile din teorema sunt exprimate n algoritm n nodul urmator:
regula (1) este exprimata prin atribuirea x := r din linia (16);
regula (2) este exprimata prin incrementarile din linia (20) si construct iile listelor V

y
cu instruct iunea FOR din liniile (12) la (15);
regula (3) este exprimata prin condit ia din linia (17) si instruct iunea IF din liniile
(21), (22).
Pentru a mai clara continuarea demonstrat iei folosim gura de mai jos:
Deoarece
+
(x) =

(x) pentru ecare nod x din N, drumul determinat cu regulile


de mai sus se termina numai n nodul r, deci este un circuit

D. Presupunem prin
reducere la absurd ca

D nu este un circuit eulerian. Deci exista un arc (x, y) A si
(x, y) /

D. Cum
+
(x) =

(x) rezulta ca exista un arc (v, x) astfel ncat (v, x) /

D.
Putem presupune ca (v, x) A

deoarece un arc incident catre interior la nodul x


poate neutilizat din cauza regulii (2.2). Daca se continua acest procedeu vom ajunge
la faptul ca exista arc (z, r) /

D. Dar aceasta contrazice regula (3).


Teorema 5.6. Algoritmul CIRCUITE are compelxitatea O(m).
Demonstrat ie. Algoritmul parcurgerii totale DF(APTDF) are complexitatea O(m).
Instruct iunile FOR de la linia (4) la linia (7) si respectiv de la linia (12) la linia (15) se
executa ecare de m ori. Instruct iunea FOR de la linia (8) la linia (11) se executa de
n ori. Instruct iunea WHILE se executa de m ori. Deci algoritmul are complexitatea
O(m).

In algoritm, circuitul eulerian se cosntruieste dupa ce s-a determinat o arborescent a


G

= (N, A

) cu radacina r. Este posibila construct ia inversa, anume dat un cirucit


eulerian al digrafului G = (N, A) sa construim o arborescent a G

= (N, A

) cu radacina
r. Aceasta construct ie se face cu urmatoarea regula:
(a) se pleaca de la un nod oarecare r si n parcurgerea directa a circuitului eulerian,
pentru ecare nod x ,= r, selectam primul arc parcurs incident catre interior la nodul
x.
5.1. PROBLEME EULERIENE 83
Teorema 5.7. Subgraful G

= (N, A

), al unui digraf eulerian G = (N, A), construit


conform regulii (a) de mai sus este o arborescent a part iala cu nodul radacina r.
Demonstrat ie. Conform regulii (a) avem

(r) = 0,

(r) = 1 pentru oricare nod


x ,= r. Evident ca G

este si conex, deci G

este o arborescent a cu radacina r.


Observat ia 5.4. Dat un circuit eulerian al diagrafului G = (N, A) se poate construi o
arborescena part iala inversa (exista un drum unic de la oricare nod terminal la nodul
radacina) cu nodul radacina r. Aceasta construct ie se face cu urmatoarea regula:
(b) se pleaca de la un nod oarecare r si n parcurgerea inversa a circuitului eulerian,
pentru eare nod x ,= r, selectam primul arc parcurs incident catre exterior la nodul x.
Observat ia 5.5. Daca un diagraf G = (N, A) ndeplineste condit iile de existent a a
unui drum eulerian de la nodul x
1
, la nodul x
n
, atunci acest drum se poate determina
n modul urmator. Se construieste digraful

G =
_

N,

A
_
cu

N = N,

A = A (x
n
, x
1
).
Evident ca digraful

Gndeplineste condit iile de existent a a unui circuit eulerian. Daca

D este circuitul eulerian al digrafului



G atunci D =

D (x
n
, x
1
) este drumul eulerian,
de la nodul x
1
la nodul x
n
, al digrafului G.
Exemplul 5.5. Fie digraful din gura 5.3(b). Acest digraf este eulerian. Aplica al-
goritmul de mai sus pentru determinarea unui circuit eulerian. Se considera r = 3 si
cu APTDF se determina arborescent a cu arcele corespunzatoare elementelor b(1, 4) =
1, b(3, 1) = 1, b(3, 5) = 1, b(5, 2) = 1. Cu instruct iunea FOR de la linia (12) la linia
(15) se obt in listele ordonate V

1
= (4, 3), V

2
= (1, 5), V

3
= (4, 2), V

4
= (5, 1), V

5
=
(2, 3). Evident ca

(1) =

(2) =

(3) =

(4) =

(5) = 2. Iterat iile instruct iunii


WHILE sunt prezentate n tabelul de mai jos.
Iterat ia x i(1) i(2) i(3) i(4) i(5) W
0 3 0 0 0 0 0
1 4 0 0 1 0 0 (3)
2 5 0 0 1 1 0 (4,3)
3 2 0 0 1 1 1 (5,4,3)
4 1 0 1 1 1 1 (2,5,4,3)
5 4 1 1 1 1 1 (1,2,5,4,3)
6 1 1 1 1 2 1 (4,1,2,5,4,3)
7 3 2 1 1 2 1 (1,4,1,2,5,4,3)
8 2 2 1 2 2 1 (3,1,4,1,2,5,4,3)
9 5 2 2 2 2 1 (2,3,1,4,1,2,5,4,3)
10 3 2 2 2 2 2 (5,2,3,1,4,1,2,5,4,3)
11 - 2 2 3 2 2 (3,5,2,3,1,4,1,2,5,4,3)

In continuare prezentam arborescent ele construite cu cele doua reguli. Se considera


r = 3. Arborescent a construita cu regula (a) este prezentata n gura 5.4(a) si
arborescent a inversa cosntruita cu regula (b) este prezentata n gura 5.4(b).
84 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
(a) (b)
Fig.5.4
5.2 Probleme hamiltoniene
Denit ia 5.4.

Intr-un graf neorientat G = (N, A) se numeste lant (respectiv ciclu)
hamiltonian un lant (respectiv ciclu) elementar care trece prin toate nodurile grafului
G.
Observat ia 5.6. Not iunea de ciclu hamiltonian provine de la matematicianul irlan-
dez W. Hamilton, care n 1859 a propus un joc, numit jocul icosian, constand din
gasirea unui ciclu elementar, care sa uneasca toate varfurile unui dodecaedru, marcate
cu numele unor capitale din toata lumea, trecand pe muchiile dodecaedrului. Dodecae-
drul este unul din cele cinci tipuri de poliedre regulate (tetraedrul, hexaedrul (cubul),
octaedrul, dodecaedrul si icosaedrul) si are 30 de muchii, 20 de varfuri si 12 fet e.
Reprezentarea plana a grafului dodecaedrului este aratata n gura 5.5.
Fig.5.5
5.2. PROBLEME HAMILTONIENE 85
Exemplul 5.6. Graful neorientat din gura 5.6(a) cont ine lant ul hamiltonian L =
(1, 2, 4, 3) de la nodul 1 la nodul 3. Graful neorientat din gura 5.6(b) cont ine ciclul
hamiltonian

L= (1, 3, 4, 5, 2, 1).
(a) (b)
Fig.5.6
Teorema 5.8. Fie K
n
graful neorientat complet cu n 3. Acest graf cont ine:
1. (n 1)!/2 cicluri hamiltoniene distincte;
2. 2
k1
(n k 1)! cicluri hamiltoniene distincte care trec prin k muchii neadiacente
xate.
Demonstrat ie. 1. Deoarece K
n
este complet orice succesiune de noduri este un lant .
Deci un ciclu hamiltonian este orice succesiune de noduri n care apar toate nodurile lui
K
n
o singura data, la care se adauga primul nod din aceasta succesiune. Prin urmare,
ciclurile hamiltoniene distincte sunt permutarile circulare a celor n noduri (permutarile
a n puncte pe cerc). Numarul permutarilor liniare ale unei mult imi cu n elemente
este n!. Dintr-o permutare circulara se pot obt ine 2n permutari liniare (prin ruperea
cercului pe arcul dintre punctul 1 si punctul 2 sau ... punctul n si punctul 1 si apoi
ntinderea sa astfel ca unul din aceste doua puncte poate plasat e n stanga, e
n dreapta). Deci numarul ciclurilor hamiltoniene distincte este n!/2n = (n 1)!/2.
2. Sa notam cele k muchii xate prin [x
2i1
, x
2i
], i = 1, . . . , k.

In ci-
clurile hamiltonmiene care trec prin cele k muchii neadiacente xate nodul x
2i1
e
precede, e succede nodul x
2i
, i = 1, . . . , k. Fie graful complet K
nk
cu n 2k noduri
efective ale lui K
n
care nu sunt extremitat ile celor k muchii si k noduri ctive cores-
punzatoare celor k muchii. Fiecare ciclu hamiltonian

Lnk
al lui K
nk
genereaza, prin
nlocuirea celor k noduri ctive cu muchii, 2
k
cicluri hamiltoniene ale lui K
n
care trec
prin cele k muchii xate. Invers, din 2
k
cicluri hamiltoniene ale lui K
n
care trec prin
cele k muchii xate se obt ine un acelasi ciclu hamiltonian al lui K
nk
prin nlocuirea
celor k muchii cu cate un nod ctiv. Aceasta rezulta din faptul ca nlocuirea celor k
noduri ctive cu muchii nseamna alegerea celor k muchii ale lui K
n
ca ind un ele-
ment dintre cele 2
k
ale mult imii [x
1
, x
2
], [x
2
, x
1
] . . . [x
2k1
, x
2k
], [x
2k
, x
2k1
],
apoi se nlocuieste ecare nod ctiv al lui

Lnk
cu muchia corespunzatoare. Conform
punctului (1) graful K
nk
are (n k 1)!/2 cicluri hamiltoniene distincte. Deci K
n
are 2
k1
(r k 1)! cicluri hamiltoniene distincte care trec prin k muchii xate.
86 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
Teorema 5.9. Fie G = (N, A) un graf neorientat cu n 3. Daca pentru oricare doua
noduri x si y neadiacente are loc (x) +(y) n atunci G cont ine ciclu hamiltonian.
Demonstrat ie. Sa presupunem, prin reducere la absurd, ca G nu cont ine un ciclu hamil-
tonian. Sa adaugam muchii ntre nodurile neadiacente ale grafului G, atat timp cat
graful obt inut nu cont ine cicluri hamiltoniene. Prin aceasta gradele nodurilor cresc si
condit ia din enunt ul teoremei ramane n continuare vericata. Prin urmare putem pre-
supune ca G este un graf saturat cu proprietatea din enunt ul teoremei, adica o muchie
adaugatantre oricare doua noduri neadiacente creaza un ciclu hamiltonian. Daca [x, y]
nu este muchie a lui G, prin adaugarea acestei muchii la graful lui G se creaza un ciclu
hamiltonian. Deci G cont ine un lant hamiltonian L = (z
1
, . . . , z
n
) cu z
1
= x si z
n
= y.
Sa notam cu z
i
1
, . . . , z
ir
nodurile adiacente cu x, unde 2 = i
1
< i
2
< . . . < i
r
< n.
Nodul y nu poate adiacent cu z
i
k
1
, k = 1, . . . , r, deoarece n caz contrar G cont ine ci-
clul hamiltonian

L= (z
1
, z
2
, . . . , z
i
k
1
, z
n
, z
n1
, . . . , z
i
k
, z
n
) care este prezentat n gura
5.7. Rezulta ca (x) = r, (y) n 1 r si se obt ine ca (x) +(y) n 1 < n.
Fig.5.7
Inegalitatea (x) + (y) < n contrazice condit ia din enunt ul teoremei. Deci pre-
supunerea facuta este falsa si rezulta ca graful neorientat G cont ine ciclu hamiltonian.
Teorema 5.10. Fie G = (N, A) un graf neorientat cu n 3 si x, y doua noduri
neadiacente pentru care
(x) +(y) n.
Graful G = (N, A) cont ine ciclu hamiltonian daca si numai daca graful neorientat

G =
_
N,

A
_
,

A = A [x, y] cont ine ciclu hamiltonian.
Demonstrat ie. Daca G cont ine ciclu hamiltonian

L atunci evident ca

L este ciclu
hamiltonian si n

G.
Daca

G cont ine ciclu hamiltonian

L atunci pot exista urmatoarele doua cazuri:


(c
1
) muchia [x, y] nu apart ine ciclului hamiltonian

G, n acest caz

L este ciclu hamil-


tonian n G;
(c
2
) muchia [x, y] apart ine ciclului hamiltonian

L; n acest caz se arata analog ca


n teorema 5.9 ca (x) +(y) < n si deci acest caz nu este posibil.
Teorema 5.11. Fie G = (N, A) un graf neorientat cu n 3 si gradele nodurilor
x
1
, . . . , x
n
verica inegalitat ile
1
. . .
n
. Graful G cont ine ciclu hamiltonian,
daca este satisfacuta oricare din urmatoarele trei condit ii:
5.2. PROBLEME HAMILTONIENE 87
(1)
1
n/2;
(2)
k
k < n/2 implica
nk
n k ;
(3)
p
p si
q
q implica
p
+
q
n, pentru orice p si q.
Demonstrat ie. (1) Din
1
. . .
n
si
1
n/2 rezulta ca pentru oricare x
i
si x
j
obt inem
i
+
j
n si conform Teoremei 5.9 G cont ine ciclu hamiltonian.
(2) Sa presupunem, prin reducere la absurd, ca G nu cont ine un ci-
clu hamiltonian. Analog ca n demonstrat ia Teoremei 5.9, putem presupune ca G este
saturat, adica o muchie adaugata ntre oricare doua noduri neadiacente creaza un ciclu
hamiltonian. Consideram doua noduri neadiacente x
i
, x
j
, astfel ncat i < j si suma
i +j este maxima. Din maximalitatea lui i +j deducem ca:
- nodul x
i
este adiacent cu nodurile x
j+1
, . . . , x
n
;
- nodul x
j
este adiacent cu nodurile x
i+1
, . . . , x
j1
, x
j+1
, . . . , x
n
;
Acestea implica:

i
n j (5.1)

j
n i 1 (5.2)
Deoarece graful G este saturat rezulta ca graful

G =
_
N,

A
_
,

A = A [x
i
, x
j
]
cont ine un ciclu hamiltonian si folosind rat ionamentul din demonstrat ia Teoremei 5.9,
se obt ine:

i
+
j
n 1 (5.3)
Din (5.2) si (5.3) rezulta
i
n 1
j
n 1 (n i 1) = i.
Consideram k =
i
si din
i
i rezulta k i. Din
1
. . .
n
si k i < j se
obt ine:

k

i

j
. (5.4)
Din (5.3) si (5.4) rezulta 2k = 2
i
n 1 < n sau k < n/2. Deci
k
k < n/2.
Conform ipotezei si (5.3) se obt ine
nk
n k = n
i

j
+ 1 si

nk

j
+ 1. (5.5)
Daca n k j atunci
nk

j
care contrazice (5.5).
Daca n k > j atunci
i
< n j care contrazice (5.1).
Deci presupunerea facuta este falsa.
(3) Demonstram ca n acest caz este vericata condit ia (2). Fie un nod
x
k
cu
k
k < n/2. Pot exista cazurile:
(c
1
)
nk
n k; n acest caz este vericata condit ia (2);
(c
2
)
nk
< n k; n acest caz, din ipoteza se obt ine
k
+
nk
n, deci

nk
n
k
n k si acest caz nu este posibil.
Denit ia 5.5.

Intr-un digraf G = (N, A) se numeste drum (respectiv circuit) hamilto-
nian un drum (respectiv un circuit) elementar care trece prin toate nodurile diagrafului
G.
Denit ia 5.6. Un graf neorientat (respectiv orientat) G = (N, A) se numeste hamil-
tonian daca cont ine un ciclu (respectiv circuit) hamiltonian.
88 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
Exemplul 5.7. Digraful din gura 5.8(a) cont ine drumul hamiltonian D = (1, 2, 3, 5, 4, 6)
dar nu cont ine nici un circuit hamiltonian. Digraful din gura 5.8(b) cont ine circuitul
hamiltonian

D= (1, 2, 4, 3, 1).
(a) (b)
Fig.5.8
Teorema 5.12. Fie G = (N, A) un digraf tare conex cu n noduri. Daca pentru oricare
doua noduri neadiacente x si y exista inegalitatea (x)+(y) 2n1, atunci G cont ine
circuit hamiltonian.
Demonstrat ie. O demonstrat ie a acestei teoreme poate gasita n bibliograa indicata.
Teorema 5.13. Fie G = (N, A) un digraf tare conex cu n noduri. Daca G este complet
atunci G cont ine circuit hamiltonian.
Demonstrat ie. Deoarece digraful G = (N, A) este complet rezulta ca nu exista noduri
neadiacente si conform Teoremei 5.12 cont ine circuit hamiltonian.
Teorema 5.14. Fie G = (N, A) un diagraf tare conex cu n noduri. Daca pentru orice
nod x exista inegalitatea (x) n, atunci G cont ine circuit hamiltonian.
Demonstrat ie. Daca pentru oricare nod x avem (x) n, atunci pentru oricare doua
noduri x, y avem (x) +(y) 2n > 2n1 si conform Teoremei 5.12 G cont ine cirucit
hamiltonian.
Teorema 5.15. Fie G = (N, A) un digraf cu n noduri. Daca pentru oricare doua
noduri neadiacente x
i
si x
j
exista inegalitatea (x
i
) +(x
j
) 2n3 , atunci G cont ine
drum hamiltonian.
Demonstrat ie. Fie N = x
1
, . . . , x
n
si

G =
_

N,

A
_
,

N = N x
n+1
,

A =
A (x
i
, x
n+1
), (x
n+1
, x
i
)
[ i = 1, . . . , n. Evident ca

G este un diagraf tare conex si oricare doua noduri neadia-
cente x
i
si x
j
din

G sunt neadiacente si n G. Deci (x
i
)+ (x
j
) = (x
i
)+2+(x
j
)+2
2n 3 + 4 = 2(n + 1) 1. Din Teorema 5.12 rezulta ca

G cont ine circuit hamiltonian,
care evident induce n G un drum hamiltonian.
Teorema 5.16. Fie G = (N, A) un digraf cu n noduri. Daca G este complet, atunci
G cont ine drum hamiltonian.
Demonstrat ie. Deoarece G este complet rezulta ca nu exista noduri neadiacente si con-
form Teoremei 5.15 G cont ine drum hamiltonian.
Teorema 5.17. Fie G = (N, A) un digraf cu n noduri. Daca pentru orice nod x
i
exista inegalitatea (x
i
) n 1, atunci G cont ine un drum hamiltonian.
5.2. PROBLEME HAMILTONIENE 89
Demonstrat ie. Daca pentru orice nod x
i
exista inegalitatea (x
i
) n 1, atunci
pentru oricare doua noduri x
i
, X
J
avem (x
i
) + (x
j
) 2n 2 > 2n 3 si conform
Teoremei 5.15 G cont ine drum hamiltonian.
Problemele hamiltoniene la fel ca multe alte probleme combinatorii apart in clasei pro-
blemelor NP- complete (nedeterminist polinomial complete). Problemele din aceasta
clasa au aceeasi complexitate algoritmica si nu se cunoaste nici un algoritm polinomial
de rezolvare a oricareia din problemele acestei clase.

In plus, n momentul cand se va
descoperi un algoritm polinomial de rezolvare a oricareia din problemele clasei NP- com-
plete, va exista algoritm polinomial de rezolvare pentru toate celelalte probleme. Pentru
rezolvarea unei probleme hamiltoniene se poate utiliza metoda backtracking sau metoda
branch and bound.

In continuare, pentru rezolvarea unei probleme hamiltoniene, se
prezinta un algoritm care nu utilizeaza nici metoda backtracking, nici metoda branch
and bound.
Sa consideram problema determinarii tuturor drumurilor hamiltoniene ntr-un digraf
G = (N, A) cu N = (1, . . . , n). Algoritmul rezolvarii acestei probleme este urmatorul:
(1) PROGRAM DRUMH;
(2) BEGIN
(3) FOR i := 1 TO n DO
(4) FOR j := 1 TO n DO
(5) IF (i, j) A
(6) THEN BEGIN s
(1)
ij
:= j; s
(2)
ij
:= ij; q
(2)
ij
:= 1; END
(7) ELSE BEGIN s
(1)
ij
:= ; s
(2)
ij
:= ; q
(2)
ij
:= 0; END;
(8) FOR r := 2 TO n 1 DO
(9) FOR i := 1 TO n DO
(10) FOR j := 1 TO n DO
(11) BEGIN
(12) s
(r+1)
ij
:= ;
(13) FOR k := 1 TO n DO
(14) BEGIN
(15) s
(r+1)
ik
:= ;
(16) IF s
(r)
ik
,= AND s
(1)
kj
,=
(17) THEN BEGIN
(18) FOR := 1 TO q
(r)
ik
DO
(19) IF s
(r)
ik
s
(1)
kj1
=
(20) THEN BEGIN s
(r+1)
ik
:= s
(r)
ik
s
(1)
kj1
;
s
(r+1)
ik
:= s
(r+1)
ik
s
(r+1)
ik
;END;
(21) s
(r+1)
ij
:= s
(r+1)
ij
s
(r+1)
ik
;
(22) END;
(23) END;
(24) q
(r+1)
ij
:=

s
(r+1)
ij

;
(25) END;
(26) END;
90 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE

In liniile (3) la (7) se denesc matricele cu elemente mult imi de secvent e de noduri:
S
(1)
=
_
s
(1)
ij
_
nn
, s
(1)
ij
:=
_
j, daca (i, j) A,
, daca (i, j) / A,
S
(2)
=
_
s
(2)
ij
_
nn
, s
(2)
ij
:=
_
ij, daca (i, j) A,
, daca (i, j) / A,
si matricea Q
(2)
=
_
q
(2)
ij
_
nn
cu q
(2)
ij
egal cu numarul de elemente ale lui s
(2)
ij
.

In liniile (8) la (23) se calculeaza n 2 produse de concatenare a doua matrice.


Aceste produse sunt:
S
(r+1)
= S
(r)
S
(1)
, pentru r = 2, . . . , n 1.
Matricea S
(r+1)
este de forma:
S
(r+1)
=
_
s
(r+1)
ij
_
nn
, s
(r+1)
ij
:=
_
s
(r+1)
ij1
, . . . , s
(r+1)
ijt
, t = q
r+1
ij

unde: s
(r+1)
ij
=
n
k=1
s
(r+1)
ik
, s
(r+1)
ik
=
p
=1
s
(r+1)
ik
, p = q
(r)
ik
,
s
(r+1)
ik
:=
_
s
(r)
ik
s
(1)
kj1
, daca s
(r)
ik
s
(1)
kj1
=
, n caz contrar.
Deci s
(r+1)
ij
=
n
k=1

p
=1
s
(r)
ik
s
(1)
kj1
, p = q
(r)
ik
, r = 2, . . . , n 1, i = 1, . . . , n,
j=1,. . . ,n.
Expresia s
(r)
ik
s
(1)
kj1
reprezinta concatenarea secvent ei s
(r)
ik
cu secvent a s
(1)
kj1
.

In linia
(24) se calcuelaza elementele q
(r+1)
ij
ale matricei Q
(r+1)
.
La terminarea algoritmului se obt ine matricea
S
n
=
_
s
(n)
ij
_
nn
.
Daca s
(n)
ij
= ,, atunci nu exista drum hamiltonian ntre nodurile i si j. Daca s
(n)
ij
=
s
(n)
ij1
, . . . , s
(n)
ijt

, atunci exista t

drumuri hamiltoniene ntre nodurile i si j. Aceste dru-


muri sunt date de secvent ele de noduri s
(n)
ij1
, . . . , s
(n)
ijt

.
Obsevat ia 5.7. Daca s-au obt inut toate drumurile hamiltoniene din digraful G =
(N, A), atunci se pot determina toate circuitele hamiltoniene din Gn modul urmator:
calculam matricea S
(n+1)
, n care acceptam ca n ecare secvent a de noduri primul nod
sa coincida cu ultimul nod; elementele de pe diagonala principala reprezinta circuitele
hamiltoniene din G. Algoritmul prezentat mai sus se poate aplica si grafurilor neorien-
tate pentru determinarea lant urilor si ciclurilor hamiltoniene.
Exemplul 5.8. Fie diagraful reprezentat n gura 5.9. Sa se determine cu ajutorul
algoritmului prezentat mai sus toate drumurile si circuitele hamiltoniene din acest di-
graf.
5.2. PROBLEME HAMILTONIENE 91
Fig.5.9
S
(1)
=
_

_
2
3
4 5
5
1 2 4
_

_
, S
(2)
=
_

_
12
23
34 35
45
51 52 54
_

_
,
S
(3)
=
_

_
123
234 235
351 352 354 345
451 452
512 523
_

_
,
S
(4)
=
_

_
1234 1235
2351 2354 2345
3451
_
3512
3452
_

4512 4523
5123 5124
_

_
,
S
(5)
=
_

_
12354 12345
23451
34512
45123
51234
_

_
,
S
(6)
=
_

_
123451
234512
345123
451234
512345
_

_
Digraful din gura 5.9 cont ine sase drumuri hamiltoniene si un circuit hamiltonian.
92 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
5.3 Aplicat ii
5.3.1 Problema postasului
Un postas trebuie sa distribuie posta ntr-o ret ea de strazi si sa se ntoarca la ociul
postal cat mai rapid posibil.
Aceasta problema se poate modela ca o ret ea neorientata G = (N, A, b) unde
mult imea nodurilor N reprezinta intersect ia strazilor, mult imea muchiilor A reprezinta
strazile si funct ia valoare b : A reprezinta e funct ia lungime, e funct ia timp.
T inand cont de precizarile de mai sus, problema postasului are urmatoarea formu-
lare: sa se determine n ret eaua neorientata G = (N, a, b) un ciclu care trece prin ecare
muchie cel put in o data si are valoarea minima.
Daca ecare nod al grafului G are gradul par, atunci orice ciclu eulerian rezolva
problema postasului, altfel anumite muchii trebuie sa e reparcurse. Evident ca un ciclu
al postasului n graful G corespunde la un ciclu eulerian ntr-un multigraf neorientat
G

= (N, A

), cu A

= A A

, unde A

A si reprezinta operat ia de adaugare.


Deci A

nu este o mult ime ci o familie de muchii.


Un cuplaj n graful neorientat G

= (N

, M

) este o submult ime de muchii M

cu proprietatea ca oricare doua muchii din M

nu sunt adiacente. Un cuplaj M

al
grafului G

se numeste perfect daca pentru ecare nod x din N

exista [x, y] M

.
Fie submult imea de noduri N

= x[ x N, (x) impar, distant ele d

(x, y) si
lant urile minime L

(x, y) n ret eaua G = (N, A, b) pentru x, y N

. Se construiesc
graful neorientat complet G

= (N

, M

) si ret eaua G

= (N

, M

, b

) cu b

[x, y] =
d

[x, y, ], [x, y] M

.

In ret eaua G

= (N

, M

, b

) se determina un cuplaj perfect M

cu
valoarea minima. La ecare muchie [x, y] M

corespunde un lant minim L

(x, y) n G.
Un astfel de lant l vom nota n continuare prin L

(x, y) si e L

= L

(x, y) [ [x, y]
M

. Se determina mult imea A

= [x, y] [ [x, y] L

(x, y), L

(x, y) L

si se
construieste multigraful neorientat G

= (N, A

) cu A

= AA

.
Algoritmul PP, care rezolva problema postasului, este prezentat n PROGRAM
PP ce cont ine sase proceduri.
(1) PROGRAM PP;
(2) BEGIN
(3) DLM(G, N

, T

1
, L

);
(4) REC(N

, T

1
, M

);
(5) CPM(G

, T

1
, M

);
(6) LMC(L

, M

, L

);
(7) MUN(G, L

, G

);
(8) CIE(G

, C

);
(9) END.
Cele sase proceduri determina urmatoarele:
DLM determina submult imea de noduri N

, distant ele d

(x, y) T

1
si lant urile mini-
me L

(x, y) L

n ret eaua G = (N, A, b) pentru x, y N

;
REC determina ret eaua completa G

= (N

, M

, b

);
5.3. APLICAT II 93
CPM determina cuplajul perfect minim M

din ret eaua G

;
LMC determina lant urile minime L

(x, y) L

corespunzatoare muchiilor din cuplajul


perfect minim M

;
MUN determina multigraful neorientat G

= (N, A

) , A

= AA

;
CIE determina un ciclu eulerian C

n multigraful G

.
Corectitudinea algoritmului PP este evidenta.
Teorema 5.18. Algoritmul PP are complexitatea O
_
n
3
_
.
Demonstrat ie. Fiecare procedura utilizata n algoritm are complexitatea cel mult
O
_
n
3
_
. Deci algoritmul PP are complexitatea O
_
n
3
_
.
Exemplul 5.8. Fie ret eaua neorientata din gura 5.10.
Fig.5.10
Procedura DLM determina: N

= 2, 4, 6, 8, T

1
= d

(2, 4) = 8, d

(2, 6) = 12,
d

(2, 8) = 11, d

(4, 6) = 8, d

(4, 8) = 7, d

(6, 8) = 9, L

= L

(2, 4) = (2, 5, 4), L

(2, 6)
= (2, 5, 6), L

(2, 8) = (2, 5, 8), L

(4, 6) = (4, 5, 6), L

(4, 8) = (4, 5, 8), L

(6, 8) = (6, 9, 8).


Procedura REC determina ret eaua ret eaua completa G

= (N

, M

, b

) reprezentata n
gura 5.11.
Fig.5.11
94 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
Procedura CPM determina cuplajul perfect minim M

= [2, 4], [6, 8] n G

.
Procedura LMC determina L

= L

(2, 4) = (2, 5, 4), L

(6, 8) = (6, 9, 8).


Procedura MUN construieste multigraful neorientat G

= (N, A

) reprezentat n
gura 5.12.
Fig.5.12
Procedura CIE determina circuitul eulerian C

= (1, 4, 7, 8, 5, 4, 5, 2, 5, 6, 9, 8, 9, 6, 3,
2, 1) n multigraful neorientat G

= (N, A

).
Remarcam faptul ca pentru rezolvarea procedurii CPM sunt necesare si alte not iuni
si rezultate care nu au fost prezentate n aceasta lucrare. De aceea, n acest subparagraf
consideram ca un cuplaj perfect minim M

din ret eaua G

este data de intrare. Cititorii


interesat i pot consulta bibliograa indicata.
5.3.2 Problema comis-voiajorului
Un comis voiajor (voiajor commercial) trebuie sa treaca prin n orase, dupa care
trebuie sa se ntoarca n orasul din care a plecat init ial. Se cere sa se gaseasca ruta cea
mai scurta, sau cea mai ieftina etc. Aceasta problema se poate reprezenta pe o ret ea
neorientata G = (N, A, b) cu mult imea nodurilor N reprezentand cele n orase, mult imea
muchiilor A reprezentand legaturile dintre orase si funct ia valoare b reprezentand e
lungimea, e costul etc. Astfel, problema comis voiajorului revine n determinarea unui
ciclu care sa treaca prin ecare nod al ret elei si sa e cu valoare minima.
Exista mai multe formulari pentru problema comis voiajorului. O prima formulare
cere sa se treaca prin ecare nod o singura data si o a doua formulare cere sa se treaca
prin ecare nod cel put in o data.
Daca pentru ecare pereche de noduri x si y a ret elei G = (N, A, b) este vericata
condit ia b[x, y] b[x, z] + b[z, y] pentru oricare nod z ,= x, z ,= y, atunci se spune ca
este vericata inegalitatea triunghiului n G.
Pentru ret elele n care inegalitatea triunghiului este vericata problema comis voia-
jorului are prima formulare.

In caz contrar problema comis voiajorului are a doua
formulare.
5.3. APLICAT II 95
Problema comis voiajorului ntr-o ret ea oarecare G = (N, A, b) se poate converti
ntr-o problema a ciclului hamiltonian minim ntr-o ret ea G

= (N

, A

, b

), unde N

=
N, A

= [x, y] [ x, y N

, b

[x, y] = d(x, y), x, y N. Rezulta ca ret eaua G

are ca
support un graf complet cu valorile muchiilor egale cu distant ele calculate n ret eaua
G. Evident ca n ret eaua G

este vericata inegalitatea triunghiului si ca ecare muchie


corespunde la un lant minim format din una sau mai multe muchii din G.

In construct ia
lui G

este uzual sa se eticheteze ecare muchie cu lant ul corespunzator din G, daca


lant ul este format din cel put in doua muchii.
Exemplul 5.9. Ret elei G = (N, a, b) din gura 5.13(a) i corespunde ret eaua G

=
(N

, A

, b

) din gura 5.13(b).


(a) (b)
Fig.5.13
Teorema 5.19. O solut ie a problemei comis voiajorului n ret eaua G = (N, a, b)
corespunde unui ciclu hamiltonian minim n ret eaua G

= (N

, A

, b

).
Demonstrat ie. Presupunem ca C este o solut ie pentru problema comis voiajorului n
ret eaua G care nu este echivalenta cu un ciclu hamiltonian n ret eaua G

. Fie C

ciclul
echivalent n G

. Notam ca ciclul C

trebuie sa urmeze aceeasi secvent a de muchii n


G

ca ciclul C n G t inand seama ca ecare muchie [x, y] din G

corespunde la un lant
minim L

xy
= (x, . . . , y) n G. Deoarece b

[x, y] = b
_
L

xy
_
rezulta ca b(C

) = b(C).
Ciclul C

este un ciclu care trece prin ecare nod x cel put in o data.
Presupunem ca ciclul C

viziteaza un anumit nod y a doua oara. Fie nodurile x si z


vizitate imediat naintea si respective imediat dupa vizitarea nodului y. Putem nlocui
sublant ul (x, y, z) din C

prin muchia [x, z] fara a afecta faptul ca C

este echivalentul
solut iei problemei comis voiajorului n G, deoarece b

[x, z] = d(x, z) = b(x, y) +b(y, z).

In acest mod se poate elimina oricare vizitare multipla pentru orice nod y din G

. Astfel
C

devine un ciclu hamiltonian C

. Deoarece b(C

) = b(C

) = b(C) rezulta ca C

este
un ciclu hamiltonian minim. Deci contrazicem ipoteza.
Conform acestei teoreme, n continuare consideram problema ciclului hamiltonian
minim ntr-o ret ea neorientata si completa G = (N, A, b) n care este vericata inegali-
tatea triunghiului.
Pana n prezent nu se cunoaste un algoritm polinomial care sa determine un ciclu
hamiltonian. O asemenea problema, pentru a carei rezolvare nu se cunosc algoritmi
polinomiali iar algoritmii cunoscut i sunt exponent iali se numeste problema NP - com-
pleta. Problema determinarii unui ciclu hamiltonian este NP - completa.
96 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
Pentru determinarea unui ciclu hamiltonian minim se vor prezenta algoritmi de
aproximare. Fie C

un ciclu hamiltonian minim si C un ciclu Hamiltonian cu b(C

)
b(C). Se cere unui algoritm de aproximare sa satisfaca condit ia:
1 b(C)/b(C

) r.
Cu cat r este mai mic cu atat algoritmul este mai performant.
Algoritmul pe care l pezentam mai jos se va numi algoritmul dublu arbore (DA).
(1) PROGRAM DA;
(2) BEGIN
(3) APM(G, G

);
(4) PDF(G

, o

);
(5) CHA ( o

, C);
(6) END.
Procedurile din algoritm determina urmatoarele:
APM determina un arbore part ial minim G

al grafului G;
PDF determina tabloul ordine o

n parcurgerea DF a arborelui G

;
CHA determina ciclul hamiltonian C cu b(C

) b(C) si C = (x
1
, . . . , x
n
, x
1
) daca
o

(x
i
) = i, i = 1, . . . , n.
Teorema 5.20. Pentru algoritmul DA avem r < 2.
Demonstrat ie. Mai ntai observam ca b(G

) < b(C

), deoarece un arbore part ial G

se
poate obt ine prin eliminarea oricarei muchii din ciclul hamiltonian minim C

. Parcurg-
erea DF a lui G

genereaza un ciclu C

care traverseaza ecare muchie a lui G

de doua
ori. Deci b(C

) = 2b(G

) < 2b(C

). Ciclul C determinat de algoritm urmeaza ciclul C

exceptand faptul ca C continua direct la urmatorul nod nevizitat fara revizitarea unor
noduri. Deci numarul de muchii ale ciclului C este mai mic decat numarul de muchii
ale ciclului C

. Din aceasta remarca si din faptul ca n G este vericata inegalitatea


triunghiului avem ca b(C) < b(C

). Rezulta ca b(C) < 2b(C

) sau b(C)/b(C

) < 2.
Teorema 5.21. Algoritmul DA are complexitatea O(n
2
).
Demonstrat ie. Complexitatea procedurii APM este O(n
2
) daca se utilizeaza algoritmul
Prim. Procedura PDF are complexitatea O(m

) = O(n). Complexitatea procedurii


CHA este O(n). Deci algoritmul are complexitatea O(n
2
).
Exemplul 5.10. Fie ret eaua neorientata si completa G = (N, A, b) reprezentata n
gura 5.14(a). Se poate constata ca este vericata inegalitatea triunghiului.
Procedura APM determina arboreal part ial minim G

din gura 5.14(b).


Procedura PDF determina tabloul o

= (1, 2, 3, 4, 5, 6).
Procedura CHA determina ciclul hamiltonian C = (1, 2, 3, 4, 5, 6, 1). Remarcam ca
ciclul C

din demonstrat ia Teoremei 5.19 este C

= (1, 2, 3, 2, 4, 2, 1, 5, 1, 6, 1) si b(C) =
2 + 1 + 4 + 4 + 2 + 1 = 14. Ciclul hamiltonian minim este C

= (1, 5, 2, 3, 4, 6, 1) cu
b(C

) = 12. Daca se elimina muchia [3, 4] se obt ine un arbore part ial G

cu b(G

) =
b(G

).
5.3. APLICAT II 97
(a) (b)
Fig.5.14

Inainte de a prezenta al doilea algoritm de aproximare vom face cateva precizari. Ca


n algoritmul anterior notam cu G

= (N, A

) arborele part ial minim al grafului G. Fie


mult imea de noduri N

= x[ x N,

(x) impar n G

si G

= (N

, A

) subgraful
indus de N

n G. Notam cu M

cuplajul perfect minim n G

. Evident ca graful

=
_
N,

A

_
cu

A

= A

este un graf eulerian. Daca



C

este un ciclu eulerian n

si o

este tabloul ordine n parcurgerea acestui ciclu, atunci se poate construi ciclul
hamiltonian C = (x
1
, . . . , x
n
, x
1
), unde o

(x
i
) = i, i = 1, . . . , n.
Algoritmul arborelui si cuplajului (AC) este prezentat mai jos .
(1) PROGRAM AC;
(2) BEGIN
(3) APM(G, G

);
(4) SGR(G, G

, G

);
(5) CPM(G

, M

);
(6) GRE
_
G

, M

,

G

_
;
(7) CIE
_

,

C

, o

_
;
(8) CHA
_

, o

, C
_
;
(9) END.
Procedurile din program au semnicat iile urmatoare:
APM determina arborele part ial minim G

= (N, A

) al lui G = (N, A, b);


SGR determina subgraful G

= (N

, A

) al lui G;
CPM deetrmina cuplajul perfect minim M

n G

;
GRE determina graful eulerian

G

;
CIE determina ciclul eulerian

C

n

G

si tabloul ordine o

;
CHA determina ciclul hamiltonian C din

C

.
98 CAPITOLUL 5. PROBLEME EULERIENE SI HAMILTONIENE
Teorema 5.22. Pentru algoritmul AC avem r < 3/2.
Demonstrat ie. Analog ca n Teorema 5.20 avem ca b(G

) < b(C

) si b(C) < b(

C

).
Dar b(

C

) = b(G

) +b(M

) si se obt ine b(C) < b(C

) + b(M

). Din ciclul C

se poate
construi un ciclu C

care trece numai prin nodurile din N

. Datorita faptului ca C

are mai put ine muchii decat C

si din inegalitatea triunghiului avem b(C

) < b(C

).
Deoarece [N

[ = 2k se pot construi doua cuplaje perfecte M

1
si M

2
din C

prin al-
ternarea muchiilor. Este evident ca b(M

) minb(M

1
), b(M

2
)
1
2
b(C

). Rezulta
b(C) < b(C

) +b(M

) < b(C

) +
1
2
b(C

) =
3
2
b(C

). Prin urmare b(C)/b(C

) <
3
2
.
Teorema 5.23. Algoritmul AC are complexitatea O(n
3
).
Demonstrat ie. Fiecare procedura utilizata de algoritm are complexitatea cel mult
O(n
3
). Deci algoritmul AC are complexitatea O(n
3
).
Exemplul 5.11. Fie ret eaua neorientata si completa G = (N, A, b) reprezentata n
gura 5.14(a).
Procedura APM determina arborele part ial minim G

din gura 5.14(b);


Procedura SGR determina subgraful G

= G, deoarece N

= N;
Procedura CPM determina cuplajul perfect minim M

= [1, 5], [2, 3], [4, 6];


Procedura GRE determina graful eulerian

G

din gura 5.15;


Fig.5.15
Procedura CIE determina ciclul eulerian

C

= (1, 5, 1, 2, 3, 2, 4, 6, 1) si tabloul or-


dine o

= (1, 5, 2, 3, 4, 6);
Procedura CHA determina ciclul hamiltonian C = (1, 5, 2, 3, 4, 6, 1) cu b(C) =
b(1, 5) + b(5, 2) + b(2, 3) + b(3, 4) + b(4, 6) + b(6, 1) = 1 + 2 + 1 + 4 + 3 + 1 = 12.

In acest caz C = C

.
Remarcam faptul ca pentru rezolvarea procedurii CPM sunt necesare si alte not iuni
si rezultate care nu au fost prezentate n acesta lucrare. De aceea, n acest subparagraf
consideram ca un cuplaj perfect minim M

din ret eaua G

este data de intrare. Cititorii


interesat i pot consulta bibliograa indicata.
Bibliograe
Ahuja, R. K., Magnanti, T. L. and Orlin, J. B. (1993): Network Flows: Theory,
Algorithms and Applications. Prentice Hall, Englewood, Clis, N. J.
Bang-Jensen, J. and Gutin, G. (2001):Digraph: Theory, Algorithms and Applica-
tions. Springer-Verlag, London.
Bazaraa, M. S., Jarvis J. J. and Sherali, H. D. (2005): Linear Programming and
Network Flows (third edition). Wiley, New York.
Berge, C. (1973): Graphs and Hypergraphs. North Holland, Amsterdam.
Bertsekas, D. P. (1991): Liniar Network Optimization: Algorithms and Codes. TheMIT
Press Cambridge, Massachusetts.
Chen, W. K. (1990): Theory of Nets: Flows in Networks. Wiley, New York.
Christodes, N. (1975): Graph Theory: An Algorithmic Approach. Academic Press,
New York.
Ciupala L. 2007 Algoritmi fundamentali din teoria grafurilor. Aplicat ii. Editura
Universitat ii Transilvania Brasov.
Ciurea, E (2001): Introducere n algoritmica grafurilor. Editura Tehnica Bucuresti.
Ciurea, E., Ciupala, L. (2006): Algoritmi. Introducere n algoritmica uxurilor n
ret ele. Editura Matrix Rom, Bucuresti.
Croitoru, C. (1992): Tehnici de baza n optimizarea combinatorie. Editura Univer-
sitat ii Al. I. Cuza, Iasi.
Evans, J. R. and Minieka, E. (1992): Optimization Algorithms for Networks and
Graphs. Marcel Dekker, Inc., New York.
Ford, L. R. and Fulkerson, D. R. (1962): Flows in Networks. Princeton University
Press, Princeton, N. J.
Gibbons, A. (it Algorithmic Graphs, Networks and Algorithms). Springer, Berlin,
1999.
Glover, F., Klingman, D. and Philips, N. V. (1992): Network Models in Opti-
mization and their Applications in Practice. Wiley, New York.
Godran, M. and Minoux, N. Graphs and Algorithms. Wiley, New York, 1984.
Gross, J. and Yellen, J. (1999): Graph Theory and its Applications, CRC Press,
New York.
99
100 BIBLIOGRAFIE
Jungnickel, D. (1999): Graphs, Networks and Algorithms. Springer, Berlin.
R uhe, G. (1991): Algorithmic Aspects of Flows in Networks. Kluwer Academic Pub-
lishers, Dordrecht.
Tarjan, R. E. (1983): Data Structures and Network Algorithms. SIAM, Philadelphia.
Toadere, T. (2002): Grafe. Teorie, algoritmi si aplicat ii. Editura Albatros, Cluj-
Napoca.
Tomescu, I. (1981): Probleme de combinatorica si teoria grafurilor. Editura Didactica
si Pedagogica, Bucuresti.
Tutte, W. T. (1984): Graph Theory. Cambridge University Press, Cambridge.