Documente Academic
Documente Profesional
Documente Cultură
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 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 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).
(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
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
A
IN TEORIA GRAFURILOR 5
Exemplul 1.8. Se considera multigraful orientat din gura 1.1. Avem
+
(3) =
3,
(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.
= (N
, A
, g
N si A
A. Daca N
N si A
= (N
) A
atunci G
= (N
, A
, g
. Daca
N
= N si A
A atunci G
= (N
, A
, g
+
(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)
+
(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) =
= (N
, A
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.
_
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
_
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 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
(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) 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
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
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 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.
+
:
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
= (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
= (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.
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
_
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
= 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
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,
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.
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 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
= N N
, subgraful G
x
generat de
N
x
= N
x nu este conex).
O componenta conexa G
= (N
, A
.
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
= (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
= (N
, A
= N N
, subgraful G
x
generat de N
x
= N
= (N
, A
.
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
L vom nota cu
L
+
mult imea arcelor directe si prin
e
i
=
_
_
1 daca a
i
,
1 daca a
i
L
+
,
0 daca a
i
,
) ,
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.
con-
struite cu algoritmul de mai sus. Din modul cum au fost determinate ciclurile ele-
mentare
L
1
, . . . ,
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
= (N, A
= (N, A
este un arbore.
Din denit ie rezulta ca o padure este un digraf G
= (N, A
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
) = 0 si p
= 1. Deci m
n+1 = 0,
de unde m
= n 1. Deducem ca G
) = 0 si m
n + p
= n 1 n + p
= 0, de unde
p
= 1. Deducem ca G
= 1 si m
= n1. Deci (G
) = m
n+p
= n1n+1 = 0
si G
= (N,
A
) are p
= p
= 1, m
= m
+ 1 = n si
_
= m
n + p
= 1. Rezulta ca
G
) = 0 si p
= 1.
Intr-adevar, daca p
) = 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
= (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
= (N, A
= (N, A
) = (N, A
n1
). Deoarece G
= (N, A
) este un arbore
part ial al lui G si A
= A A
un ciclu unic
L
k
si ciclurile
L
1
, . . . ,
L
s
obt inute n acest mod cu toate arcele din A
, atunci digraful
G
= (N,
A
) cu
A
= A
a
i
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
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
_
=
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
= (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
= (N, A
) cu A
= A
[x, x]
[y, y] are valoarea b (G
) = b (G
) < b (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
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
= (N, A
) cu A
= A
) = b(G
) b(G
) si G
are n comun cu
G
0
cu o muchie mai mult decat 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
este
minim.
Fig.3.4
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
yy
cu b[x, x] > b[y, y]. Arborele part ial G
= (N, A
) cu A
= A
) = b(G
) < b(G
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
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.
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
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
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
). Deci 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.
:= ; 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
= (N, 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
= [2, 4]
Iterat ia 2: A
Iterat ia 6: A
.
Arborela part ial minim G
= (N, 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, 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
= (N, A
= (N, A
= (N, A
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
(r) = 0,
(r) = 0,
(x) = 1 pentru
oricare nod x ,= r.
Demonstrat ie.
(1) (2). Daca (1) este adevarata, atunci G
este
un arbore. Deci G
este un arbore.
In plus, conform Teoremei 3.14 G
. Construim
digraful
G
= (N,
A
), unde
A
= A
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
(r) 0 si
. Digraful
G
= (N,
A
) cu
= A
(r) = 0. Daca
= (N,
A
) cu
A
= A
= (N, A
)
este m
=
N
(x) = n 1, adica 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
= (N, A
:= A;
(4) FOR i := 1 TO m DO
(5) IF prin eliminarea arcului a
i
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
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
= (N, A
zz
lant ul unic de la z la z n G
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.
= (N
, A
: A
'
+
, atunci problemele de
lant minim din ret eaua neorientata G
= (N
, 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
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
= (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
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
= (N, A
1
= 0,
(j) = 1, j = 2, . . . , n. Rezulta ca G
= (N, A
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
(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
(x) +b(x, y)
este minima;
(15) IF d
(y)
(16) THEN BEGIN d(y) := d
(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
(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
_
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
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, 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)
G si T 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
1
, . . . ,
p
. Deoarece G este conex turneul
eulerian neorientat T
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.
= 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)
=
_
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
V
(s)
=
_
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
[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
:= , 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) =
= (N, A
= (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
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) =
= (N, 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) =
D. Cum
+
(x) =
D.
Putem presupune ca (v, x) A
= (N, A
= (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
(r) = 0,
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) =
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
G, n acest caz
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
.
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
.
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
= (N
, M
al
grafului G
exista [x, y] M
.
Fie submult imea de noduri N
(x, y) si
lant urile minime L
. 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
cu
valoarea minima. La ecare muchie [x, y] M
(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
= [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
;
REC determina ret eaua completa G
= (N
, M
, b
);
5.3. APLICAT II 93
CPM determina cuplajul perfect minim M
;
LMC determina lant urile minime L
(x, y) L
;
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, 6)
= (2, 5, 6), L
= (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
.
Procedura LMC determina L
= L
= (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
= (N
, A
, b
), unde N
=
N, A
= [x, y] [ x, y N
, b
are ca
support un graf complet cu valorile muchiilor egale cu distant ele calculate n ret eaua
G. Evident ca n ret eaua G
=
(N
, A
, b
= (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
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
este echivalentul
solut iei problemei comis voiajorului n G, deoarece b
In acest mod se poate elimina oricare vizitare multipla pentru orice nod y din G
. Astfel
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
)
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
se
poate obt ine prin eliminarea oricarei muchii din ciclul hamiltonian minim C
. Parcurg-
erea DF a lui G
genereaza un ciclu C
de doua
ori. Deci b(C
) = 2b(G
) < 2b(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
) 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
= (1, 2, 3, 4, 5, 6).
Procedura CHA determina ciclul hamiltonian C = (1, 2, 3, 4, 5, 6, 1). Remarcam ca
ciclul 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
= (N, A
= x[ x N,
(x) impar n G
si G
= (N
, A
) subgraful
indus de N
n G. Notam cu M
. Evident ca graful
=
_
N,
A
_
cu
A
= A
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
= (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
) + b(M
). Din ciclul C
se poate
construi un ciclu C
. Datorita faptului ca C
) < b(C
).
Deoarece [N
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
) <
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
= G, deoarece N
= N;
Procedura CPM determina cuplajul perfect minim M
= (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