Documente Academic
Documente Profesional
Documente Cultură
ALGORITMICA GRAFURILOR
© Editura FundaŃiei România de Mâine, 2008
Editură acreditată de Ministerul EducaŃiei şi Cercetării prin
Consiliul NaŃional al Cercetării ŞtiinŃifice din ÎnvăŃământul Superior.
004.421.2.519.17(075.35)
SILVIU BẬRZĂ
LUCIANA MARIA MOROGAN
ALGORITMICA GRAFURILOR
Introducere ……………………………………………………….. 7
Capitolul I. INTRODUCERE ÎN TEORIA GRAFURILOR ….. 9
1.1. Grafuri neorientate ………………….…………………………......... 9
1.2. Grafuri orientate ………………………. …………………………… 17
Capitolul II. TIPURI PARTICULARE DE GRAFURI ..……… 25
2.1. Grafuri conexe ………… …………………………………………… 27
2.2. Grafuri complementare şi izomorfe ………………………………… 34
2.3. Grafuri ciclice ……………………………… ……………………… 37
Capitolul III. REPREZENTAREA GRAFURILOR …………… 46
3.1. Reprezentare grafuri neorientate ……………………………………. 46
3.2. Matrici asociate grafurilor orientate ……………………………….... 54
Capitolul IV. ARBORI ..…………………………………………. 62
4.1. Definire şi proprietăŃi ………………………………………….......... 62
4.2. Arbori parŃiali …………………………………………….................. 66
4.3. Algoritmul lui Kruskal ………………………………………............ 71
4.4. ArborescenŃe ………………………………………………............... 74
Capitolul V. GRAFURI HAMILTONIENE ŞI EULERIENE … 81
5.1. Grafuri Hamiltoniene ……………………………………………….. 81
5.2. Grafuri Euleriene ……………………………………………………. 83
Capitolul VI. ALGORITMI PENTRU DRUMURI ÎN
GRAFURI ORIENTATE ………………………… 88
6.1. Algoritmi de calcul direct …………………………………………... 88
6.2. Algoritmul Wharshal pentru drumuri minime în grafuri orientate …. 94
6.3. Algoritmul lui Dantzig pentru drumuri minime de extremitate
iniŃială dată …………………………………………………………. 98
6.4. Algoritmul Bellman-Kalaba pentru drumuri minime de extremitate
finală dată ………………………………………............................... 100
6.5. Algoritmii lui Ford şi Dijkstra pentru drumuri minime de extremităŃi
date ………………………………………….................................... 105
Capitolul VII. ALGORITMI PENTRU GRAFURI
HAMILTONIENE ŞI EULERIENE …………...... 112
7.1. Algoritmul lui Foulkes pentru drumuri hamiltoniene ………............ 112
7.2. Teorema lui Chen …………………………………………………… 115
7.3. Algoritmul înmulŃirii latine …………………………………............. 119
7.4. Algoritmul lui Fleury pentru drumuri euleriene ……………………. 121
7.5. Algoritmul lui Hierholzer pentru drumuri euleriene ………………... 124
5
Capitolul VIII. FLUX MAXIM ÎN REłELE DE TRANSPORT 126
8.1. ConsideraŃii generale ……………………………………………….. 126
8.2. Algoritmul Ford-Fulkerson …………………………………............ 129
8.3. Exemple …………………………………………………………….. 130
Capitolul IX. REłELE DE PROGRAMARE A
ACTIVITĂłILOR ………………………………... 136
9.1. Graful arc/activitate, metoda drumului critic ………………………. 137
9.2. Graful vârf/activitate, metoda potenŃialului ………………………… 144
Bibliografie………………………………………………………………. 148
6
INTRODUCERE
Autorii
7
8
I. INTRODUCERE ÎN TEORIA GRAFURILOR
1.1. Grafuri neorientate
3
5
4
7 6
9
DefiniŃie. Fie G = ( X , U ) un graf şi x ∈ X un nod fixat. Prin gradul
nodului x înŃelegem numărul muchiilor incidente lui x şi notăm acest număr cu
d ( x ) . Dacă d ( x ) = 1 spunem că x este nod terminal. Dacă d ( x ) = 0 spunem
că x este nod izolat.
□
Exemplul 2. Pentru graful specificat în exemplul 1 gradele vârfurilor sunt
cele indicate în următorul tabel.
x 1 2 3 4 5 6 7
d ( x) 2 3 2 4 3 3 1
După cum se poate vedea în acest tabel, graful nu are vârfuri izolate şi
nodul 7 este nod terminal
╬
PropoziŃia 1. Fie G = ( X , U ) un graf în care U = m . Atunci
∑ d ( x ) = 2m .
x∈ X
(
G ′ = X , U \ {{ x, y}} , ) atunci în G′ vom avea d ′( x) = d ( x) −1 ,
d ′ ( y ) = d ( y ) − 1 şi pentru orice z ∈ X \ { x, y} , d ′ ( z ) = d ( z ) .
Pentru graful G ′ vom avea
∑ d ′( z ) = d′( x) + d ′( y ) + ∑ d ′( z ) =
z∈ X z∈ X \{x , y}
= d ( x) −1 + d ( y ) −1 + ∑
z∈ X \{ x , y}
d (z) = ∑ d ( z) − 2 = .
z∈ X
= 2m − 2 = 2 ( m − 1) = 2 U \ {{ x, y}}
Deoarece într-un graf G 0 = ( X , ∅ ) , în care toate vârfurile sunt izolate
avem d ( z ) = 0 pentru orice z ∈ X , putem scrie 0 = ∑ d (z) = 2⋅0 = 2 ∅ ,
z∈ X
iterând relaŃia de mai sus, demonstrăm egalitatea dată în anunŃ.
□
Exemplul 3. Pentru graful dat în exemplul 1, folosind gradele vârfurilor
date în tabelul din exemplul 2 avem
7
∑ d ( x ) = ∑ d ( x ) = 2 + 3 + 2 + 4 + 3 + 3 + 1 = 18 .
x∈ X x =1
{ }
X 2 = x ∈ X d ( x ) par . În mod evident X 1 ∩ X 2 = ∅
d1 = ∑ d ( x)
x∈ X1
este număr impar ca sumă impară de numere impare.
Deoarece X 1 ∩ X 2 = ∅ , rezultă că ∑ d ( x) = d
x∈ X
1 + d 2 şi astfel ∑ d ( x)
x∈ X
este număr impar ca sumă între un număr par şi unul impar. Dar din propoziŃia 1
avem ∑d ( x ) = 2 U , deci este număr par. ContradicŃie.
x∈ X
□
Exemplul 4. Pentru graful neorientat din exemplul 1, nodurile cu gradul
impar sunt 2, 5, 6 şi 7 şi astfel numărul lor este 4, deci număr par. Astfel se verifică
practic afirmaŃia făcută în propoziŃia 2.
╬
DefiniŃie. Fie G = ( X , U ) un graf. Numim graf parŃial al lui G, graful
G′ = ( X , V ) , unde V ⊂ U .
□
Exemplul 5. Fie graful G = ( X , U ) , unde X = {1, 2, 3, 4,5, 6, 7} este
mulŃimea de vârfuri, iar mulŃimea muchiilor este
U = {{1, 2} , {1,3} , {2,3} , {2, 4} , {3, 6} , {3, 7} , {4, 5} , {5, 6} , {5, 7}} .
Considerăm graful G ′ = ( X , V ) , unde
U = {{1, 2} , {1, 3} , {2, 4} , {3, 7} , {4, 5} , {5, 6} , {5, 7}}
Astfel, G ′ = ( X , V ) este graf parŃial pentru graful G = ( X , U ) . Din punct
de vedere al reprezentării, graful G = ( X , U ) şi graful parŃial G ′ = ( X , V ) au
următoarele imagini:
11
1 7 1 7
2 2
3 3
4 5 4 5
6 6
1 7 7
2 2
3 3
4 5 4 5
graful G = ( X , U ) subgraful G ′′ = (Y , V )
╬
DefiniŃie. Fie G = ( X , U ) un graf cu n vârfuri ( X = n ). Spunem că G
este un graf complet , dacă oricare ar fi x, y ∈ X , avem { x, y} ∈ U (orice două
vârfuri din G sunt conectate sau adiacente).
□
12
Exemplul 7. Pentru graful G = ( X , U ) din exemplul 5 nu este complet
deoarece, de exemplu, {1, 7} ∉ U şi {4, 6} ∉ U .
╬
Graful complet cu n vârfuri se notează prin K n
PropoziŃia 3. Numărul muchiilor lui K n este Cn2 .
DemonstraŃie. Deoarece K n este un graf complet şi astfel oricare ar fi
x, y ∈ X , avem { x, y} ∈U , rezultă că U conŃine toate submulŃimile cu două
elemente care se pot forma cu elemente în mulŃimea X .
Folosind noŃiuni de combinatorică, avem astfel că dintr-o mulŃime cu n
elemente se pot forma Cn2 submulŃimi cu două elemente. Astfel, dacă
K n = ( X , U ) , cu n = X , atunci U = Cn2 .
□
Exemplul 8. Să construim K 5 , deci graful K 5 = ( X , U ) , unde
5i4
X = {1, 2, 3, 4,5} . Numărul de muchii este, conform propoziŃiei 3, C52 = = 10 .
1i2
MulŃimea de muchii este astfel:
U = {{1, 2} , {1,3} , {1, 4} , {1,5} , {2,3} , {2, 4} , {2, 5} , {3, 4} , {3, 5} , {4, 6}}
Graful K 5 astfel definit are reprezentarea:
1
4
3
5
╬
DefiniŃie. Fie G = ( X , U ) un graf. Dacă există X 1 şi X 2 astfel încât
X 1 ∩ X 2 = ∅ şi X = X 1 ∪ X 2 ( X admite o partiŃie din două blocuri X 1 şi X 2 )
şi orice muchie din G uneşte un nod din X 1 cu unul din X 2 (oricare ar fi
e = { x, y} ∈ U , dacă x ∈ X 1 , atunci y ∈ X 2 ) spunem că G este graf bipartit.
□
13
Exemplul 9. Considerăm graful neorientat G = ( X , U ) , în care mulŃimea
de vârfuri este X = {1, 2, 3, 4,5, 6, 7} şi mulŃimea de muchii este
U = {{1, 2} , {1, 6} , {2, 3} , {2, 7} , {4, 5} , {4, 6} , {5, 7}} .
Se observă că putem realiza partiŃia X = X 1 ∪ X 2 , X 1 ∩ X 2 = ∅ , cu
X 1 = {1,3, 4, 7} şi X 2 = {2, 5, 6} , deoarece pentru orice muchie { x, y} ∈ U avem
x ∈ X 1 şi y ∈ X 2 .
Graful considerat are următoarea reprezentare:
1
2
5
4
6
7
╬
DefiniŃie. Fie G = ( X , U ) un graf bipartit cu partiŃiile X 1 şi X 2 . Dacă
X 1 = p şi X 2 = q şi dacă fiecare vârf din X 1 este adiacent cu toate vârfurile
din X 2 (pentru orice x ∈ X 1 şi orice y ∈ X 2 avem { x, y} ∈U ) spunem că G
este un graf bipartit complet, notat K p ,q .
□
Exemplul 10. Pentru graful bipartit din exemplul 9 se observă că el nu este
un graf bipartit complet, deoarece, de exemplu, nu conŃine muchia {3,5} şi nici
muchia {2, 4}
╬
PropoziŃia 4. Graful bipartit complet K p ,q are pq muchii.
DemonstraŃie. Considerăm K p ,q = ( X ,U ) , X = X1 ∪ X 2 ,
X 1 ∩ X 2 = ∅ , X 1 = p şi X 2 = q .
14
Conform definiŃiei pentru orice x ∈ X 1 şi orice y ∈ X 2 avem
{ x, y} ∈U . Dacă fixăm x ∈ X 1 , atunci pentru fiecare y ∈ X 2 avem { x, y} ∈ U ,
deci numărul de muchii pentru x ∈ X 1 fixat este egal cu X 2 = q .
Fiecare vârf x ∈ X 1 poate fi ales, fixat în X 1 = p . Astfel, numărul
total de muchii este pq .
□
Exemplul 11. Considerăm că mulŃimea de vârfuri X = {1, 2, 3, 4,5, 6, 7}
este partiŃionată prin mulŃimile X 1 = {1,3, 4, 7} şi X 2 = {2, 5, 6} (are loc
X = X 1 ∪ X 2 şi X 1 ∩ X 2 = ∅ ). Având p = X 1 = 4 şi q = X 2 = 3 , putem
construi un graf bipartit K 4,3 = ( X , U ) , unde mulŃimea de muchii este:
U = {{1, 2} , {1, 5} , {1, 6} , {2, 3} , {2, 4} , {2, 7} ,
{3,5} , {3, 6} , {4, 5} , {4, 6} , {5, 7} , {6, 7}}
şi avem U = 12 ceea ce corespunde enunŃului propoziŃiei 4.
Acest graf are următoarea reprezentare
1
2
5
4
6
7
╬
DefiniŃie. Fie G = ( X , U ) un graf. Numim lanŃ în G o succesiune de
vârfuri L = ( x0 , x1 ,..., xr ) = x0 x1...xr , astfel încât pentru orice i = 0,1,..., r − 1 ,
xi xi +1 ∈ U (adică o succesiune în care oricare două vârfuri vecine din lanŃ sunt
adiacente).
□
15
Fie G = ( X , U ) este un graf şi L = x0 x1...xr un lanŃ în G . Vârfurile x0 şi
xr se numesc extremităŃile lanŃului L , iar r se numeşte lungimea lanŃului L ,
notată l ( L ) = r (lungimea unui lanŃ este dată de numărul muchiilor sale sau de
numărul vârfurilor mai puŃin unul).
Exemplul 12. Considerăm graful G = ( X , U ) care corespunde următoarei
reprezentări:
1 6
2 3
5
4
16
DefiniŃie. Fie G = ( X , U ) un graf. LanŃul L din G se numeşte lanŃ
simplu dacă pentru orice 0 ≤ i, j ≤ r − 1 , i ≠ j , avem { xi , xi +1} ≠ x j , x j +1 (toate{ }
muchiile sale sunt distincte).
□
Exemplul 14. LanŃurile L1 = [1, 2, 4,1,3, 6] şi L2 = [1, 2, 4,3, 5] din
exemplul 12 şi L3 = [1, 2, 4,3, 6 ] din exemplul 13 sunt toate lanŃuri simple. Cel mai
bine se observă acest lucru la exprimarea lanŃurilor prin muchiile lor, aşa cum este
cazul pentru lanŃul L1 = [1, 2, 4,1,3, 6] , care în exemplul 12 este exprimat şi prin
muchii prin L1 = {1, 2} , {2, 4} , {1, 4} , {1,3} , {3, 6} .
În graful din exemplul 12 putem considera şi lanŃul
L4 = {2,1, 4, 3,1, 4, 5}
care nu este un lanŃ simplu deoarece conŃine de două ori muchia {1, 4} .
╬
PropoziŃia 5. Fie G = ( X , U ) un graf şi L un lanŃ în G . Dacă L este
lanŃ elementar, atunci L este lanŃ simplu.
DemonstraŃie. Prin absurd, L nu este lanŃ simplu. Atunci există
0 ≤ i, j ≤ r − 1 , i ≠ j astfel încât { xi , xi +1} = { x j , x j +1} . Astfel avem fie xi = x j ,
fie xi = x j +1 , de unde rezultă că L nu este lanŃ elementar. ContradicŃie.
□
1.2. Grafuri orientate
1
6
2 3
7
5
4
8
9
╬
Un graf orientat se reprezintă grafic printr-o mulŃime de puncte
corespunzătoare vârfurilor şi printr-o mulŃime de segmente orientate (săgeŃi)
corespunzătoare arcelor. O săgeată este orientată de la extremitatea iniŃială spre
extremitatea finală a arcului pe care îl reprezintă.
Dacă u = ( x, y ) ∈ U spunem că x şi y sunt adiacente în G şi că
nodurile x şi y sunt incidente arcului u sau că arcul u este incident nodurilor x
şi y . Mai exact, spunem că u este incident exterior nodului x ( u pleacă sau iese
din x ) şi că u este incident interior nodului y ( u ajunge sau intră în y ). Arcul
( x, y ) ∈ U se mai notează şi prin xy .
DefiniŃie. Fie G = ( X , U ) un graf orientat şi x ∈ X un nod fixat.
a) Numim grad interior al lui x , numărul arcelor incidente interior lui x ,
adică mărimea d − ( x ) = {( y, x ) ∈U y∈ X . }
b) Numim grad exterior al lui x , numărul arcelor incidente exterior lui x ,
adică mărimea d + ( x ) = {( x, y ) ∈U y∈ X . }
c) Prin gradul nodului x înŃelegem numărul total al arcelor incidente lui x ,
adică mărimea d ( x ) = d − ( x ) + d + ( x ) .
d) Dacă d ( x ) = 0 spunem că x ∈ X este vârf izolat.
e) Dacă d − ( x ) = 1 şi d + ( x ) = 0 spunem că x ∈ X este vârf terminal; dacă
d − ( x ) = 0 şi d + ( x ) = 1 spunem că x ∈ X este vârf iniŃial.
□
18
Exemplul 16. Pentru graful din exemplul 15 putem rezuma valorile pentru
gradul interior, gradul exterior şi gradul fiecărui vârf în următorul tabel:
x 1 2 3 4 5 6 7 8 9
d− ( x ) 0 1 2 1 1 3 1 2 2
d+ ( x ) 3 2 1 2 1 1 1 1 1
d ( x) 3 3 3 3 2 4 2 3 3
╬
DefiniŃie. Fie G = ( X , U ) un graf orientat şi A ⊂ X o mulŃime de
vârfuri.
a) Gradul interior lui A este numărul arcelor ce intră în A şi care au nodul
iniŃial în afara lui A, adică mărimea
d − ( A) = {( y, x ) ∈U y ∉ A, x ∈ A .}
b) Gradul exterior lui A este numărul arcelor ce ies din A şi au nodul
terminal în afara lui A, adică mărimea
d + ( A) = {( x, y ) ∈U x ∈ A, y ∉ A} .
c) Gradul total al lui A este d ( A ) = d − ( A ) + d + ( A ) .
□
Exemplu 17. Considerăm graful din exemplul 15 şi mulŃimea
A = {3, 4, 6, 7} . Avem d − ( A) = 5 , d + ( A) = 3 . Astfel d ( A ) = 8 .
╬
ObservaŃii
1) Evident, pentru orive A ⊂ X avem d − ( A ) ≤ ∑ d ( x) ,
x∈ A
− deoarece s-ar
putea ca anumite arce care ies din A să aibă extremitatea finală tot în A ,
arce care nu se numără la determinarea valorii d + ( A ) .
2) Evident, pentru orice A ⊂ X avem d + ( A ) ≤ ∑ d ( x) ,
x∈ A
+ deoarece s-ar
19
Exemplul 18. Fie graful orientat G = ( X , U ) , unde mulŃimea de vârfuri
este X = {1, 2,3, 4,5, 6} şi mulŃimea de arce este
U = {(1, 2 ) , (1,5 ) , (1, 6 ) , ( 2,3) , ( 2, 4 ) , ( 4,3) , ( 6, 4 ) , ( 6,5 )}
{ }
Dacă G ′ = ( X , V ) , unde V = (1, 2 ) , (1,5 ) , ( 2, 4 ) , ( 6, 4 ) , ( 6,5 ) , este un
graf orientat parŃial al grafului G .
Grafurile G şi G ′ au reprezentarea următoare:
1 1
6 6
2 2
5 5
3 3
4 4
20
1
6 6
2 2
5
3 3
4 4
2 4
3 5
Fie mulŃimea
V = {(1, 2 ) , (1,5 ) , ( 2,3 ) , ( 2, 4 ) , ( 3,1) , ( 3, 4 ) , ( 4,1) , ( 4,5 ) , ( 5, 2 ) , ( 5,3)}
Se formează astfel K 5′ = ( X , V ) care este tot un graf orientat complet. El diferă de
K 5 descris mai sus prin orientarea arcelor şi are reprezentarea
21
1
2 4
3 5
De asemenea, putem considera drept mulŃime de arce, mulŃimea
W = {(1, 2 ) , (1, 4 ) , (1,5 ) , ( 2,1) , ( 2, 4 ) , ( 3,1) ,
( 3, 2 ) , ( 4, 2 ) , ( 4, 3) , ( 4, 5) , ( 5, 2 ) , ( 5, 3)}
şi se formează acum un graf K 5′′ = ( X , W ) care este graf orientat complet. Acesta
diferă de K 5 prin faptul că unele vârfuri sunt unite de perechi de arce în ambele
sensuri. Graful K 5′′ are ca reprezentare imaginea:
2 4
3 5
╬
ObservaŃie. În cazul grafurilor neorientate, pentru un n ∈ ℕ , n ≥ 2 ,
există un singur graf complet cu n vârfuri, notat K n . În cazul grafurilor orientate
pentru un n ∈ ℕ , n ≥ 2 dat, există mai multe grafuri orientate complete cu n
vârfuri, ele diferind fie prin orientarea arcelor, fie prin numărul de arce ce unesc
două vârfuri, număr ce poate fi 1 sau 2.
22
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim drum în G o
succesiune de vârfuri d = ( x0 , x1 ,..., xr ) astfel încât pentru orice i = 0,1,..., r − 1 ,
xi xi +1 ∈ U (sau o succesiune de arce care au acelaşi sens, d = ( u1 , u1 ,..., u p ) , cu
proprietatea că pentru orice i = 1, 2,..., p − 1 , ui şi ui +1 au o extremitate comună,
mai exact extremitatea finală a lui ui coincide cu extremitatea iniŃială a lui ui +1 .
□
Fie d = ( x0 , x1 ,..., xr ) un drum în graful G = ( X , U ) . x0 se numeşte
extremitatea iniŃială, iar xr extremitatea finală a drumului d .
Exemplul 21. Fie X = {1, 2,3, 4,5, 6} şi graful G = ( X , U ) , unde
U = {(1, 2 ) , (1,5 ) , (1, 6 ) , ( 2,3) , ( 2, 4 ) , ( 3, 6 ) , ( 4,3) , ( 5,3) , ( 6, 4 ) , ( 6,5 )}
care are reprezentarea
6
2
5
23
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim lanŃ în G , o secvenŃă
de noduri L = [ x0 , x1 ,..., xr ] cu proprietatea că pentru orice i = 0,1,..., r − 1 avem
( xi , xi +1 ) ∈U sau ( xi +1 , xi ) ∈U (sau o succesiune de arce
L = u1 , u2 ,..., u p astfel încât pentru orice i = 1, 2,..., p − 1 , arcele ui şi ui +1 au
o extremitate comună – nu se mai pune condiŃia ca arcele să aibă acelaşi sens, ca
la drumuri).
□
ObservaŃie. Din definiŃie rezultă imediat că orice drum care este într-un
graf orientat este, în acelaşi timp, şi lanŃ în graful orientat respectiv.
Exemplul 23. Conform observaŃiei de mai sus, cum d = (1, 2,3, 6,5 ) din
exemplul 21 este un drum, l = [1, 2,3, 6,5] este şi lanŃ.
Tot în graful din exemplul 21 avem drept lanŃ succesiunea de vârfuri
l ′ = [3, 6,1, 2, 4] deoarece în U avem arcele ( 3, 6 ) , (1, 6 ) , (1, 2 ) şi ( 2, 4 ) .
╬
DefiniŃie. Fie G = ( X , U ) un graf orientat. Pentru orice x, y ∈ X
spunem că y este accesibil din x sau y este atins din x dacă şi numai dacă
există d = ( x0 , x1 ,..., xr ) un drum de capete x şi y .
□
Exemplul 24. Drumul d = (1, 2,3, 6,5 ) dat în exemplul 21 este un drum
care are extremitatea iniŃială 1 şi cea finală 5. Astfel vârful 5 este accesibil din
vârful 1.
Tot în graful din exemplul 21 avem că vârful 1 nu este accesibil din niciun
alt vârf deoarece nu poate exista niciun drum cu extremitatea finală 1. Acest lucru
este adevărat deoarece d − (1) = 0 (în 1 nu intra niciun arc).
╬
24
II. TIPURI PARTICULARE DE GRAFURI
1 5
3
4
2
O problemă pentru multigrafuri este de specificare a muchiilor care, aşa
cum s-a văzut până acum, sunt mulŃimi de două elemente. Dacă va fi cazul, pentru
muchiile multiple din multigrafuri vom folosi o indiciere în exteriorul mulŃimii
care specifică muchia. Astfel, pentru multigraful de mai sus avem G = ( X , U ) ,
unde X = {1, 2,3, 4,5} şi
U = {{1, 2} , {2, 3}1 , {2, 3}2 , {3, 4}1 , {3, 4}2 , {3, 5}}
╬
DefiniŃie. Graful orientat G = ( X , U ) se numeşte reflexiv (nereflexiv,
simetric, antisimetric, total, tranzitiv) dacă şi numai dacă relaŃia binară U este
relaŃie binară reflexivă (nereflexivă, simetrică, antisimetrică, totală, tranzitivă).
□
Exemplul 2. Să considerăm o mulŃime de 5 elemente X = {1, 2,3, 4,5} şi
cazul unei relaŃii simetrice definite pe X , şi anume următoarea submulŃime a
produsului cartezian X × X :
U = {(1, 2 ) , (1, 4 ) , ( 2,1) , ( 2,3) , ( 3, 2 ) , ( 4,1) , ( 4,5 ) , ( 5, 4 )}
Se poate observa că pentru orice x, y ∈ X avem că ( x, y ) ∈ U dacă şi
numai dacă ( y, x ) ∈ U de unde rezultă că U defineşte o relaŃie simetrică.
25
Pe de altă parte dacă considerăm graful G = ( X , U ) , cu X şi U definite
ca mai sus, atunci spunem că graful G este simetric. Graful are imaginea:
2
5
3
4
╬
DefiniŃie. Fie G = ( X , U ) un graf orientat. Dacă pentru fiecare x ∈ X
se asociază o etichetă pentru identificare spunem că G este un graf orientat
etichetat.
□
Observăc că la toate grafurile de mai sus am folosit o numerotare a
vârfurilor. Numerele folosite pot fi considerate etichete pentru vârfuri şi astfel
grafurile pot fi considerate drept grafuri etichetate.
DefiniŃie. Fie G = ( X , U ) un graf orientat. G se numeşte graf orientat
marcat sau reŃea dacă fiecărui u ∈ U i se asociază o marcă mu . În acest caz,
U ⊂ X × M × X , M fiind mulŃimea mărcilor asociate arcelor. Dacă
( x, m, y ) ∈ X × M × X , atunci arcul x → y se marchează cu m şi se reprezintă
prin x
m
→y.
□
Exemplul 3. Considerăm dată mulŃimea X = {1, 2,3, 4,5, 6} şi mulŃimea
U = {(1,3) , (1, 6 ) , ( 2, 4 ) , ( 2,5 ) , ( 3, 2 ) , ( 3, 6 ) , ( 4,1) , ( 4,5 ) , ( 5, 6 ) , ( 6, 2 )}
Am definit astfel graful orientat G = ( X , U ) a cărui imagine este
1 4
2 5
3 6
26
Considerăm acum că fiecărei muchii îi asociem o literă. Putem considera
că M = {a, b, c, d , e, f , g , h, i, j} şi că U ⊂ X × M × X este mulŃimea
U = {(1, a, 3) , (1, j , 6 ) , ( 2, b, 4 ) , ( 2, i,5 ) , ( 3, c, 2 ) , ( 3, h, 6 ) , ( 4, d ,1) ,
( 4, g , 5) , ( 5, e, 6 ) , ( 6, f , 2 )}
şi astfel se obŃine un graf orientat marcat pentru care avem reprezentarea
d
1 4
b g
e
i
2 5
a
j f
c h
3 6
╬
DefiniŃie. Numim reŃea etichetată un graf orientat marcat şi etichetat.
□
De fapt, graful din exemplul anterior, având vârfurile numerotate şi
muchiile marcate, poate fi considerat şi un exemplu de reŃea etichetată.
2.1. Grafuri conexe
27
X 2 = {6, 7} . În urma acestei partiŃii se produce şi o partiŃie a mulŃimii de muchii
în
U1 = {{1, 2} .{1,3} , {2,3} , {4,5} , {5,1}}
şi U 2 = {{6, 7}} .
Deoarece nu există muchii între elementele lui X 1 şi X 2 , înseamnă că nu
pot exista lanŃuri între x ∈ X 1 şi y ∈ X 2 şi de aici rezultă că G nu este un graf
conex. Subgrafurile G1 = ( X 1 , U1 ) şi G2 = ( X 2 , U 2 ) sunt grafuri conexe şi astfel
reprezintă componentele conexe ale grafului G .
Imaginea grafului G este:
5
1
G1
4
2
G2
6
3 7
╬
Fie G = ( X , U ) un graf neorientat. Pentru x, y ∈ X spunem că x este
conectat cu y dacă există un lanŃ ce le uneşte, adică există un lanŃ
L = ( x0 , x1 ,..., xr ) de extremităŃi x şi y
Pe mulŃimea X definim relaŃia binară ~ ⊂ X × X , dată prin x ~ y dacă
şi numai dacă ( x = y sau x este conectat cu y ).
PropoziŃia 1. RelaŃia " ~ " definită mai sus este o relaŃie de echivaleŃă
DemonstraŃie.
• reflexivitate – pentru orice x ∈ X deoarece x = x , rezultă că x ~ x .
• antisimetrie – considerăm că x ~ y şi y ~ x . Din x ~ y avem x = y sau
x este conectat cu y , adică există un lanŃ L = ( x0 , x1 ,..., xr ) de
extremităŃi x şi y .
Putem presupune că lanŃul este elementar şi că x = x0 şi y = xr . Din
y ~ x avem x = y sau y este conectat cu x , adică există un lanŃ
L′ = ( y0 , y1 ,..., yq ) de extremităŃi y şi x .
28
Putem presupune că lanŃul este elementar şi că y = y0 şi x = yq .
Presupunem că avem x ≠ y . Atunci rezultă că relaŃiile au loc doar prin
conectare. Fie astfel lanŃul format din concatenarea lanŃurilor L şi L′ şi
astfel x este conectat cu x de unde x ≠ x . ContradicŃie.
• tranzitivitate – deoarece x ~ y avem x = y sau x este conectat cu y ,
adică există un lanŃ L = ( x0 , x1 ,..., xr ) de extremităŃi x şi y . Dacă
x = y , rezultă că în y ~ z putem înlocui y cu x şi rezultă x ~ z .
Deoarece y ~ z avem y = z sau y este conectat cu z , adică există un
( )
lanŃ L′ = y0 , y1 ,..., yq de extremităŃi y şi z .
Dacă y = z , atunci în afirmaŃia „există un lanŃ L = ( x0 , x1 ,..., xr ) de
extremităŃi x şi y ” putem înlocui y cu z şi rezultă „există un lanŃ
L = ( x0 , x1 ,..., xr ) de extremităŃi x şi z ” astfel că rezultă x ~ z .
Dacă nu are loc relaŃia y = z, fie lanŃul
L′′ = ( x0 , x1 ,..., xr = y0 , y1 ,..., yq ) obŃinut prin concatenarea lanŃurilor L
şi L′ . Atunci lanŃul L′′ este de extremităŃi x şi z şi astfel avem că x este
conectat cu z , deci x ~ z .
□
PropoziŃia 2. Fie G = ( X , U ) un graf în care X = n , U = m şi n ≥ 2 .
Dacă G este conex, atunci m ≥ n − 1 .
DemonstraŃie. Pentru n = 2 , deoarece G este conex rezultă că între cele
două vârfuri există o muchie între ele şi astfel m ≥ 1 .
Presupunem că relaŃia este adevărată pentru un graf cu X = n vârfuri. Fie
H = (Y ,V ) un graf pentru care Y = n + 1 şi fie V = m . Considerăm z ∈ Y şi
subgraful G = ( X ,U ) unde X = Y \ { z} , deci putem scrie că
X = Y − 1 = n + 1 − 1 = n . Putem alege z astfel încât G să fie conex.
Deoarece H este conex, rezultă că există x ∈ X astfel încât { z , x} ∈V ,
deci m = V ≥ U + 1 .
Pentru G conex, din ipoteza de inducŃie rezultă U ≥ X − 1 = n − 1 .
Înlocuind în relaŃia de mai sus obŃinem m = V ≥ U + 1 ≥ n − 1 + 1 = n .
Datorită principiului inducŃiei complete, din cele de mai sus rezultă că
relaŃia din enunŃ este adevărată pentru orice graf conex G .
□
29
Considerând graful din exemplul 4 în care X = 7 şi U = 6 , deci nu are
loc relaŃia m ≥ n − 1 , ceea ce, reprezentând o negare a propoziŃiei 2, implică faptul
că graful G nu este unul conex, ceea ce este adevărat conform exemplului
considerat.
NoŃiunea de graf conex este valabilă şi pentru grafurile orientate. DefiniŃia
este următoarea:
DefiniŃie. Graful orientat G = ( X , U ) se numeşte conex dacă şi numai
dacă oricare ar fi două noduri x, y ∈ X , x ≠ y , există cel puŃin un lanŃ în G ,
L = ( x0 , x1 ,..., xr ) de extremităŃi x şi y .
□
Dacă în definiŃia grafului conex pentru grafuri orientate înlocuim condiŃia
de existenŃă a unui lanŃ cu cea de existenŃă a unui drum se obnŃine următoarea
noŃiune.
DefiniŃie. Graful orientat G = ( X , U ) se numeşte tare conex dacă şi
numai dacă oricare ar fi două noduri x, y ∈ X , x ≠ y , există cel puŃin un drum în
G , d = ( x = x0 , x1 ,..., xr = y ) de extremităŃi x şi y .
□
Exemplul 5. Considerăm un graf orientat G = ( X ,U ) , unde
X = {1, 2,3, 4,5} şi
U = {(1, 2 ) , (1,3) , ( 2,3 ) , ( 2, 4 ) , ( 2,5 ) , ( 3, 4 ) , ( 4,1) , ( 5,1) , ( 5,3) , ( 5, 4 )}
Putem vedea că există un lanŃ:
L = (1, 2 ) , ( 2, 3) , ( 3, 4 ) , ( 5, 4 ) = [1, 2,3, 4,5]
care conŃine toate vârfurile şi astfel se poate ajunge între oricare două vârfuri prin
lanŃuri. Astfel, rezultă că graful orientat G este conex.
Să considerăm vârful 1. Putem forma următoarele drumuri cu extremitatea
iniŃială 1: D1,1 = (1, 2, 4,1) , D1,2 = (1, 2 ) , D1,3 = (1, 2,3) , D1,4 = (1, 2, 4 ) şi
D1,5 = (1, 2,5 ) .
Pentru vârful 2, considerat ca extremitate iniŃială se formează:
D2,1 = ( 2, 4,1) , D2,2 = ( 2, 4,1, 2 ) , D2,3 = ( 2,3) , D2,4 = ( 2, 4 ) , D2,5 = ( 2,5 ) .
Similar, pentru vârful 3 avem: D3,1 = ( 3, 4,1) , D3,2 = ( 3, 4,1, 2 ) ,
D3,3 = ( 3, 4,1, 2,3) , D3,4 = ( 3, 4 ) , D3,5 = ( 3, 4,1, 2,5 ) .
Pentru vârful 4 putem construi: D4,1 = ( 4,1) , D4,2 = ( 4,1, 2 ) ,
D4,3 = ( 4,1,3) , D4,4 = ( 4,1, 2, 4 ) , D4,5 = ( 4,1, 2,5 ) .
30
În fine, folosind ca extremitate iniŃială vârful 5 construim drumurile:
D5,1 = ( 5,1) , D5,2 = ( 5,1, 2 ) , D5,3 = ( 5,3) , D5,4 = ( 5, 4 ) , D5,5 = ( 5,1, 2,5 ) .
Am arătat astfel că din orice x ∈ X se poate ajunge printr-un drum la orice
y ∈ X şi astfel, graful G este tare conex.
Imaginea grafului este
2 3
5
4
╬
O posibilitate de a determina dacă un graf neorientat este conex, sau
determinarea efectivă a componentelor conexe (sau problemele similare pentru
grafurile orientate) constă în aplicarea unui algoritm de tip greede.
Să considerăm întâi problema determinării conexităŃii unui graf neorientat
G = ( X ,U ) .
Algoritm 1.
1. Se consideră Y = X , V = U şi se alege orice x ∈ X pentru care
considerăm B = { x} .
2. Dacă B = ∅ , atunci algoritmul se termină generând un răspuns astfel:
a. Dacă V = ∅ , atunci graful este conex
b. Dacă V ≠ ∅ , atunci graful nu este conex (în plus se poate spune
că mulŃimea X \ Y reprezintă componenta conexă din care face
parte şi nodul x considerat la 1).
Altfel se continuă.
3. Se alege orice y ∈ B .
4. Pentru fiecare z ∈ Y \ B astfel încât { y, z} ∈V considerăm B = B ∪ { z}
şi V = V \ {{ y, z}}
5. Considerăm B = B \ { y} şi reluăm de la 2.
■
31
Exemplul 6. Se consideră graful din următoarea figură.
5
1
4
2
6
3 7
Folosind algoritmul 1 să determinăm dacă graful considerat este sau nu
conex
Din pasul 1 al algoritmului se fac iniŃializările Y = X = {1, 2,3, 4,5, 6, 7}
şi
V = U = {{1, 2} , {1,3} , {1,5} , {1,6} , {2,3} , {4,5} , {6, 7}} .
Alegem vârful 6 şi considerăm B = {6} .
Deoarece B ≠ ∅ se realizează o primă aplicare a paşilor 3, 4 şi 5 cu
{ }
alegerea 6 ∈ B , rezultând B = {1, 7} şi V = {1, 2} , {1,3} , {1,5} , {2,3} , {4,5} .
În continuare B ≠ ∅ , la a doua aplicare, cu alegerea 7 ∈ B nu există
muchii cu extremitatea 7 şi astfel nu se modifică decât B care devine B = {1}
Pentru a treia aplicare nu putem face decât alegerea 1 ∈ B pentru care va
{
rezulta B = {2,3,5} şi V = {2,3} , {4,5} . }
Putem continua cu alegerea 3 ∈ B pentru care nu avem în V muchii între
3 şi vârfurile din mulŃimea {1, 4, 6, 7} şi astfel se ajunge la B = {2,5} cu V
nemodificat.
A cincea aplicare se poate face cu alegerea 5 ∈ B pentru care efectul este
{
B = {2, 4} şi V = {2,3} . }
În continuare, selectând 2 ∈ B vom obŃine B = {3, 4} şi V = ∅ .
Următoarele aplicaŃii, două la număr sunt în aceeaşi situaŃie ca la a doua
aplicare a algoritmului şi se produc eliminările celor două elemente din B care
ajunge mulŃime vidă.
Cum avem şi V = ∅ , suntem în cazul (a) al răspunsului, deci graful
considerat este unul conex.
╬
Aşa cum se vede din pasul 2, algoritmul prezentat dă răspunsul la
întrebarea „Este G un graf conex?”.
32
De asemenea, se poate determina componenta conexă a grafului G din
care face parte un anumit nod specificat. Acest lucru crează premizele realizării
algoritmului de determinare a componentelor conexe, plecând de la algoritmul 1.
Algoritm 2.
1. Se consideră Y = X , V = U k = 0 .
2. Dacă V = ∅ , atunci algoritmul se termină şi componentele conexe ale
k
grafului G sunt A1 , A2 , ..., Ak . Vârfurile care nu sunt în ∪A k sunt
i =1
vârfuri izolate şi formează fiecare în parte câte o componentă conexă a
grafului G (în plus valoarea pentru k arată dacă graful G este sau nu
conex. Astfel pentru k = 1 şi A1 = X graful este conex, altfel G nu este
conex).
3. Alegem orice x ∈ Y . Fie k = k + 1 , Ak = ∅ , B = { x} .
4. Dacă B = ∅ se trece le 8, altfel se continuă.
5. Se alege orice y ∈ B .
6. Pentru fiecare z ∈ Y \ B astfel încât { y, z} ∈V considerăm B = B ∪ { z}
şi V = V \ {{ y, z}} .
7. Considerăm B = B \ { y} , Ak = Ak ∪ { y} . Se trece la 4.
8. Se elimină din V orice muchie {a, b} pentru care a, b ∈ Ak . Se trece la
2.
■
Exemplul 7. Considerăm graful de la exemplul 4, deci cu imaginea
5
1
4
2
6
3 7
Să aplicăm algoritmul 2 pentru a determina componentele conexe ale
acestui graf G = ( X , U ) .
Pasul 1 realizează iniŃializările Y = X = {1, 2,3, 4,5, 6, 7} , k = 0 şi
V = U = {{1, 2} , {1,3} , {1,5} , {2,3} , {4,5} , {6,7}}
şi cum V ≠ ∅ rezultă că se continuă cu pasul 3.
33
Să alegem 5 ∈ Y . Avem k = 1 , B = {5} şi A1 = ∅ şi deoarece B ≠ ∅ se
continuă cu paşii 5, 6 şi 7, în urma cărora se ajunge la B = {1, 4} , A1 = {5} şi
V = {{1, 2} , {1,3} , {2,3} , {6, 7}}
Se continuă cu aceeaşi paşi deoarece din nou B ≠ ∅ , şi alegând în prima
iteraŃie vârful 4 şi apoi vârful 1 obŃinem B = {2,3} , A1 = {1, 4,5} şi
V = {{2,3} , {6, 7}} .
Din nou B ≠ ∅ şi după realizarea a încă trei iteraŃii cu ordinea de alegere
2, 3 şi 2 pentru vârfuri se ajunge la situaŃia B = ∅ , A1 = {1, 2,3, 4,5} şi
V = {{6, 7}} . Deoarece nu sunt muchii între nodurile lui A1 din pasul 8 se trece la
pasul 2 care impune reluarea paşilor 3, 4, 5, 6, 7 deoarece V ≠ ∅ . Se consideră
astfel k = 2 şi A2 = ∅
Prin următoarele două iteraŃii se ajunge în starea B = ∅ , V = ∅ ,
A2 = {6, 7} şi la revenirea la pasul 2 cu V = ∅ algoritmul se opreşte.
Deoarece X = A1 ∪ A2 , rezultă că s-a format o partiŃie reprezentând
componentele conexe ale grafului G şi acestea sunt subgrafurile G1 = ( A1 , U1 ) şi
G2 = ( A2 ,U 2 ) , unde U 2 = {{6, 7}} şi
U 2 = {{1, 2} , {1,3} , {1,5} , {2,3} , {4,5}} .
╬
34
Exemplul 8. Fie un graf neorientat G = ( X , U ) cu
X = {1, 2,3, 4,5}
şi
U = {{1, 2} , {1,3} , {1, 4} , {2,5} , {4,5}} .
Cum U = 5 şi numărul maxim de muchii este 10 rezultă că graful
complementar are 5 muchii şi astfel avem
V = CU = {{1,5} , {2,3} , {2, 4} , {3, 4} , {3,5}} ,
obŃinându-se graful
CG = ( X , CU ) .
Grafurile din acest exemplu au următoarele imagini:
1 1
3 3
2 2
5 5
4 4
G = ( X ,U ) CG = ( X , CU )
╬
Exemplul 9. Fie un graf orientat G = ( X , U ) cu
X = {1, 2,3, 4,5}
şi
U = {(1, 2 ) , (1,3) , (1, 4 ) , ( 2, 4 ) , ( 2,5 ) , ( 3, 2 ) , ( 3,5 ) , ( 4, 2 ) , ( 4,5 ) , ( 5,1) , ( 5,3)} .
Deoarece numărul total de muchii posibile într-un graf orientat este egal cu
aranjamente de numărul de vârfuri luate câte două, deci 20, şi U = 11 , rezultă că
în graful complementar avem 9 arce şi astfel
CU = {(1,5 ) , ( 2,1) , ( 2,3) , ( 3,1) , ( 3, 4 ) , ( 4,1) , ( 4,3) , ( 5, 2 ) , ( 5, 4 )} .
În acest mod se obŃine graful
CG = ( X , CU ) .
Grafurile orientate din acest exemplu au următoarele reprezentări:
35
1 1
3 3
2 2
5 5
4 4
G = ( X ,U ) CG = ( X , CU )
╬
PropoziŃia 3. Fie G = ( X , U ) şi G′ = ( X ′,U ′ ) două grafuri orientate.
Atunci G ≅ G ′ dacă şi numai dacă CG ≅ CG ′ .
DemonstraŃie. Verificarea concluziei propoziŃiei este imediată folosind
definiŃiile date pentru izomorfismul de grafuri şi pentru graful complementar. De
exemplu, să considerăm implicaŃia ⇒ .
Avem că G ≅ G ′ şi fie f : X → X ′ izomorfismul de la G la G ′ . Astfel
f este o funcŃie bijectivă pentru care are loc enunŃul { x, y} ∈ U dacă şi numai
dacă { f ( x ) , f ( y )} ∈U ′ .
Fie { x, y} ∈ CU . Rezultă, conform definiŃiei grafurilor complementare, că
{ x, y} ∉U . Din G ≅ G′ , se ajunge la { f ( x ) , f ( y )} ∉ G′ de unde obŃinem
{ f ( x ) , f ( y )} ∈ CG′ . De aici obŃinem că f este şi izomorfism de la CG la
CG′ , deci CG ≅ CG′ .
□
Exemplul 10. Se consideră grafurile G din exemplul 8 şi graful
H = (Y ,V ) , unde
V = {{1, 2} , {1,3} , {2, 4} , {2,5} , {3, 4}}
Considerăm funcŃie f : X → Y , dată prin tabelul
x 1 2 3 4 5
f ( x) 2 4 5 1 3
Ca funcŃie definită pe mulŃimi finite cu acelaşi număr de elemente şi pentru
care observăm că este injectivă, rezultă că f este o funcŃie bijectivă Se poate
observa, de asemenea, că ( x, y ) ∈ U dacă şi numai dacă ( f ( x ) , f ( y ) ) ∈V şi
astfel f este un izomorfism de la G la H . Astfel avem G ≅ H .
Grafurile au următoarea reprezentare:
36
1 2
3 5
2 4
5 3
4 1
G = ( X ,U ) H = (Y , V )
╬
37
Din scrierea ciclului prin muchiile prin care trece se vede că fiecare muchie
apare o singură dată şi astfel ciclul este un ciclu simplu.
Un exemplu de ciclu elementar este L2 = [1, 2,3, 4, 6,1] , în care, cu
excepŃia extremităŃilor, se trece o singură dată prin fiecare vârf
Acest graf are reprezentarea
1
6
2
5
4
În reprezentarea de mai sus am îngroşat muchiile care formează ciclul
elementar L2 .
╬
DefiniŃiile de mai sus continuă să fie valabile şi pentru grafurile orientate.
Suplimentar intervin definiŃiile care urmează.
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim circuit în G un drum
C = ( x0 , x1 ,..., xr ) în care x0 = xr (în care extremităŃile coincid).
□
DefiniŃie. Fie G = ( X , U ) un graf orientat şi C = ( x0 , x1 ,..., xr ) un
circuit. Spunem că C este circuit elementar dacă pentru orice 0 ≤ i, j ≤ r − 1 ,
i ≠ j , avem xi ≠ x j (toate vârfurile sale, exceptând extremităŃile, sunt distincte
două câte două) .
□
DefiniŃie. Fie G = ( X , U ) un graf orientat şi C = ( x0 , x1 ,..., xr ) un ciclu.
Spunem că C este circuit simplu daca pentru orice 0 ≤ i, j ≤ r − 1 , i ≠ j , avem
( xi , xi +1 ) ≠ ( x j , x j +1 ) (toate arcele sale sunt distincte două câte două).
□
38
Exemplul 12. Considerăm graful orientat G = ( X ,U ) , unde
X = {1, 2,3, 4,5, 6} şi
U = {(1, 2 ) , (1,5 ) , ( 2,3) , ( 3,1) , ( 4,3) , ( 4, 6 ) , ( 5, 4 ) , ( 6,1)} .
Graful considerat, anulând orientarea arcelor, conduce la graful neorientat
din exemplul 11 şi astfel, în graful considerat, L1 = [1, 2,3,1,5, 4, 6,1] este un ciclu
simplu, în timp ce L2 = [1, 2,3, 4, 6,1] este un ciclu elementar. Scrierea ciclului L1
prin arce este
L1 = (1, 2 ) , ( 2,3) , ( 3,1) , (1,5 ) , ( 5, 4 ) , ( 4, 6 ) , ( 6,1) .
Din această scriere se observă că în ciclul L1 toate arcele sunt în sensul de
la extremitatea stângă la cea dreaptă şi astfel L1 este şi un circuit în G . Deoarece
în L1 fiecare arc intervine o singură dată, rezultă că L1 este un circuit simplu.
Putem astfel scrie
L1 = (1, 2,3,1,5, 4, 6,1)
sau
L1 = ( (1, 2 ) , ( 2,3) , ( 3,1) , (1,5 ) , ( 5, 4 ) , ( 4,6 ) , ( 6,1) ) .
Considerăm în G lanŃul L3 = (1,5, 4,3,1) care este un ciclu elementar
deoarece trece o singură dată prin fiecare vârf şi, în plus, având arcele în sensul
scrierii lanŃului, este şi drum. Astfel, L3 este un circuit elementar în G .
Graful considerat are reprezentarea:
1
6
2
5
39
DefiniŃie. Graful neorientat G = ( X , U ) se numeşte ciclic dacă G
conŃine cel puŃin un ciclu şi se numeşte aciclic în caz contrar.
□
`Exemplul 13. Graful neorientat din exemplul 11 este un graf neorientat
ciclic deoarece conŃine cel puŃin un ciclu (de fapt, am dat exemplu de două cicluri
în graful considerat).
╬
DefiniŃie. Fie G = ( X , U ) un graf orientat. Spunem că G este aciclic
dacă G nu conŃine niciun circuit şi ciclic în caz contrar.
□
Exemplul 14. Considerăm graful dat în exemplul 12. Deoarece în acest
graf orientat am detectat circuitul L3 , astfel graful este un graf orientat ciclic.
╬
PropoziŃia 4. Fie G = ( X , U ) un graf neorientat. Dacă U ≥ X , atunci
G este ciclic.
DemonstraŃie. Fie X = n , U = m , deci m ≥ n .
Dacă G nu este conex, fie G1 , G2 , ..., Gk . Dacă există un ciclu L în G ,
atunci există 1 ≤ k ≤ r astfel încât L este ciclu în Gx , deoarece în caz contrar ar
exista o muchie între două componente conexe şi astfel cele două componente
conexe coincid. Putem presupune că L este ciclu în G1 şi că pentru orice
2 ≤ i ≤ r , Gi nu conŃine cicluri şi astfel numărul de muchii din componenta
conexă Gi este mai mic decât numărul de vârfuri din Gi .
Prin sumare şi deoarece m ≥ n rezultă că numărul de muchii din
componenta conexă G1 trebuie să fie mai mare decât numărul de vârfuri din
componentă. Astfel, putem presupune că G este conex.
Conform propoziŃiei 2, G conex implică m ≥ n − 1 . Dacă m ≥ n
presupunem că G nu este ciclic. G fiind conex rezultă că pentru orice x, y ∈ X
există doar un drum elementar de la capete x şi y . Atunci, prin eliminarea unei
muchii, graful obŃinut nu mai este conex şi astfel obŃinem un graf neconex pentru
m = n − 1 . ContradicŃie.
Considerăm acum că m = n − 1 şi graful este ciclic. Fie C = [ x0 , x1 ,..., xr ]
un ciclu în G . Atunci putem elimina una din muchiile adiacente cu x0 pentru a
obŃine drumul C = [ x1 ,..., xr ] sau C = [ x0 , x1 ,..., xr −1 ] şi astfel să se păstreze
conexitatea. Rezultă astfel un graf conex pentru care m ≥ n − 2 . ContradicŃie.
□
40
DefiniŃie. Fie G = ( X , U ) un graf neorientat având k ≥ 1 componente
conexe. Se numeşte punte în G o muchie m ∈ U pentru care graful parŃial
( )
G′ = X ,U \ {m} are numărul de componente conexe mai mare decât k .
□
Exemplul 15. Considerăm graful neorientat G = ( X ,U ) , unde
X = {1, 2,3, 4,5, 6,7} şi
U = {{1, 2} , {1,3} .{2,3} , {2, 4} , {3, 4} , {3,5} , {5, 6} , {5,7} , {6, 7}}
G are reprezentarea:
1
7
2
3
4
6
5
41
DemonstraŃie
⇒
Considerăm că m este punte şi că numărul de componente conexe este
egal cu 1. Acest lucru nu reduce generalitatea, deoarece raŃionamentul care
urmează este valabil doar în componenta conexă care conŃine muchia m .
Presupunem că există un ciclu C = [ m1 , m2 ,..., mr ] în G dat prin muchiile
sale astfel încât există i , 1 ≤ i ≤ r , pentru care m = mi .
Fie x, y ∈ G . G fiind conex rezultă că există un lanŃ L = e1 , e2 ,..., e p
în G , dat prin muchiile sale, de extremităŃi x şi y.
Dacă pentru orice j = 1, 2,..., p , m ≠ e j , atunci L este lanŃ şi în graful
G′ = ( X ,U \ {m} ) ., deci eliminarea muchiei nu întrerupe conectarea dintre x şi y.
Dacă există j, 1≤ j ≤ p , considerăm
lanŃul L′ = e1 ,..., e j −1 , mi +1 ,..., mr , m1 ,..., mi −1 , e j +1 , e p care are extremităŃile x şi y
şi nu conŃine muchia m şi astfel este lanŃ în graful G ′ = X , U \ {m} . ( )
Din cele de mai sus rezultă că graful G ′ = X , U \ {m} ( ) este conex şi
astfel m nu este punte. ContradicŃie.
⇐
Putem presupune, fără a reduce generalitatea, că G este un graf conex.
Altfel, eliminarea unei muchii afectează eventual doar componenta conexă în care
muchia se găseşte, celelalte componente conexe rămânând neschimbate, deci şi
numărul lor. Astfel, dacă G nu este conex, putem reduce raŃionamentul la
subgraful lui G corespunzător componentei conexe în care există muchia m .
Presupunem că oricare ar fi un ciclu C = m1 , m2 ,..., m p , avem m ≠ mi
pentru orice 1 ≤ i ≤ p . Atunci, prin eliminarea muchiei m , toate aceste cicluri
rămân valabile.
Dacă presupunem că m uneşte două cicluri, atunci prin eliminare cele
două cicluri devin separate, deci pot intra în două componente conexe diferte.
Dacă m uneşte un vârf de un ciclu, prin eliminare vârful şi ciclul devin
separate, deci pot intra în două componente conexe diferite.
Dacă m se găseşte pe un lanŃ care nu face parte dintr-un ciclu, prin
eliminare se obŃin două componente separate şi deci posibil din două componente
conexe.
Astfel, eliminarea lui m produce apariŃia a două componente conexe în
G , de unde, conform definiŃiei, m este punte.
□
42
PropoziŃia 6. Fie G = ( X , U ) un graf orientat. G este tare conex dacă şi
numai dacă există un circuit C care conŃine toate vârfurile grafului.
DemonstraŃie
⇒
Conform definiŃiei, dacă G este conex, atunci pentru orice x1 , x2 ∈ X
există un drum d1,2 care să aibă extremitatea iniŃială x1 şi extremitatea finală x2 .
Din acelaşi motiv există un drum d 2,1 care să aibă extremitatea iniŃială x2 şi
extremitatea finală x1 . Putem forma astfel un circuit C1 = d1,2 , d 2,1 . ( )
Dacă C1 conŃine toate vârfurile din G , atunci C = C1 este circuitul căutat.
Presupunând că C1 nu conŃine toate vârfurile grafului G , fără a reduce
generalitatea, considerăm că celelalte vârfuri sunt cuprinse în circuitul C2 .
Fie x3 un vârf care se găseşte pe circiutul C2 . Deoarece G este tare
conex, rezultă că există un drum d3 de la x1 la x3 şi există un drum d 4 de la x3
la x1 .
Considerând C2 scris ca drum de la x3 la x3 , formăm astfel un circuit nou
C = ( d1,2 , d 2,1 , d 3 , C2 , d 4 ) care este un circuit ce conŃine toate vârfurile lui G .
⇐
Presupunând că în G există un circuit C care conŃine toate vârfurile,
atunci pentru orice x, y ∈ X există un drum d ⊂ C care să fie de extremităŃi x şi
y , deci G este tare conex.
□
DefiniŃie. Fie G = ( X ,U ) un graf orientat. Definim
V = {( x, y ) ∈ U ∃C circuit in G cu ( x, y ) ∈ C} . Graful parŃial H = ( X ,V ) se
numeşte graful orientat ciclu al lui G .
□
Exemplul 16. Se consideră un graf orientat G = ( X , U ) cu
X = {1, 2,3, 4,5, 6,7}
şi
U = {(1, 2 ) , ( 2, 4 ) , ( 3,1) , ( 3, 2 ) , ( 3,5 ) , ( 5, 6 ) , ( 6, 7 ) , ( 7,5 )}
43
Graful considerat are reprezentarea
1
7
2
3
4
6
5
1
7
2
3
4
6
5
╬
PropoziŃia 7. Fie G = ( X , U ) un graf orientat şi H = ( X , V ) graful
ciclu al lui G . Fie Y ⊂ X şi G ′ = ( Y , W ) subgraf. Atunci G ′ componentă tare
conexă în G dacă şi numai dacă G ′ componentă tare conexă în H .
44
DemonstraŃie
⇒
Folosind propoziŃia 6, dacă G ′ este componentă tare conexă a lui G
atunci există un circuit C care conŃine toate vârfurile din Y şi orice x ∈ X \ Y nu
se formează circuite cu x şi vârfuri din Y . Astfel, W ⊂ V şi deci G ′ este subgraf
în H .
C conŃine toate vârfurile din Y şi este circuit maximal în H , de unde
rezultă că G ′ este componentă tare conexă a lui H .
⇒
Se repetă în sens invers raŃionamentul de mai sus.
□
DefiniŃie. Fie G = ( X , U ) un graf orientat şi C1 , C2 , ..., Ct
componentele tari conexe ale lui G . Fie
Y = {C1 , C2 ,..., Ct }
şi
{ }
V = ( Ci , C j ) ∃x ∈ Ci , ∃y ∈ C j cu ( x, y ) ∈ U ⊂ Y × Y .
Graful H = (Y , V ) se numeşte graful condensat al lui G .
□
ObservaŃie. Graful condensat al oricărui graf orientat este aciclic.
Exemplul 17. Să considerăm din nou graful orientat din exemplul 16. Am
văzut în exemplul 16 că există două circuite, C2 = (1, 2, 4,3,1) şi C3 = ( 5,6, 7,5 ) ,
care sunt circuite care cuprind toate vârfurile din graful orientat ciclic. Astfel am
obŃinut: graful G are două componente tare conexe, corespunzătoare celor două
circuite.
Deoarece în graful G există arcul ( 3,5 ) între vârful 3 care este în
componenta tare conexă C1 şi vârful 5 din componenta tare conexă C2 . Putem
constitui astfel mulŃimea Y = {C1 , C2 } şi V = {( C , C )}
1 2 pentru a forma graful
orientat Gc = (Y , V ) care este astfel graful orientat condensat a grafului G .
Reprezentarea grafului condensat este
C1 C2
45
III. REPREZENTAREA GRAFURILOR
3.1. Reprezentare grafuri neorientate
( )
prin aij = m xi , x j . Matricea AG se numeşte matricea de adiacenŃă asociată
grafului G .
□
ObservaŃie. Dacă G = ( X , U ) este un graf neorientat şi AG este matricea
sa de adiacenŃă, atunci AG este simetrică, deoarece muchia xi , x j { } este tot una cu
{
muchia x j , xi . }
ObservaŃie. Deoarece am presupus că pentru grafurile studiate nu avem
bucle (muchii de forma { x, x} ), matricea de adiacenŃa AG pentru orice graf
neorientat G = ( X , U ) are diagonala principală formată doar cu valoarea zero.
Atunci când nu există posibilitatea de confuzie, vom nota AG prin A .
Exemplul 1. Fie G = ( X , U ) un graf neorientat cu X = {1, 2,3, 4,5} şi
U = {{1, 2} , {1, 4} , {2,3} , {2, 4} , {3,5} , {4,5}}
Să determinăm matricea de adiacenŃă a grafului.
Graful are imaginea:
46
1
2 3 4
( )
că X = { x 1 , x2 ,..., xn } . Definim matricea LG = lij
1≤i , j ≤ n
∈ M n ({0,1} ) , definită
( )
prin lij = l xi , x j . Matricea LG se numeşte matricea lanŃurilor grafului G .
□
47
ObservaŃie. Matricea lanŃurilor LG este o matrice simetrică deoarece dacă
există un lanŃ L = [ x = x0 , x1 ,..., xr = y ] de la x la y , atunci există şi un lanŃ de la
y la x şi anume lanŃul L′ = [ y = xr ,..., x1 , x0 = x ] care este chiar lanŃul
L = [ x = x0 , x1 ,..., xr = y ] dar sub o altă scriere (cu nodurile scrise în ordine
inversă).
Exemplul 2. Se consideră graful din exemplul 1 şi dorim să-i scriem
matricea lanŃurilor. Pentru aceasta se observă că avem lanŃurile {1, 2} , {1, 2,3} ,
{1, 4} , {1, 4,5} , {2,3} , {2, 4} , {2,3,5} , {3,5, 4} , {3,5} şi {4,5} care
demonstrează că există lanŃuri între oricare două vârfuri ale grafului (graful este
conex). Astfel, matricea lanŃurilor va fi
1 1 1 1 1
1 1 1 1 1
LG = 1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
╬
Definim următoarele operaŃii:
• Adunarea logică, + : {0,1} × {0,1} → {0,1} , definită prin a + b = a ∨ b ,
pentru orice a, b ∈ {0,1} , unde ∨ este operaŃia uzuală de disjuncŃie logică
(sau logic);
• ÎnmulŃirea logică i : {0,1} × {0,1} → {0,1} , definită prin
ab = a ib = a ∧ b , pentru orice a, b ∈ {0,1} , unde ∧ este operaŃia uzuală
de conjuncŃie logică (şi logic).
Folosind aceste operaŃii drept operaŃii uzuale, A fiind o matrice cu valori
booleene, are loc următorul rezultat.
PropoziŃia 1. Fie G = ( X , U ) un graf neorientat, A matricea sa de
adiacenŃă şi L matricea lanŃurilor lui G . Atunci are loc relaŃia:
n −1
L = ∑ Ak
k =1
48
DemonstraŃie. Să considerăm întâi că în G avem muchiile {x , x }
i j şi
{x , x } . Atunci în matricea
j k A avem aij = a ji = 1 şi a jk = akj = 1 . În matricea
A = B = (b )
2
avem
ij 1≤i , j ≤ n
n n n
bik = ∑ ais i ask = aij i a jk + ∑ ais i ask = 1 + ∑ ais i ask = 1
s =1 s =1 s =1
s≠ j s≠ j
( )
Similar se poate arăta că dacă în A p = B′ = bij′
avem un lanŃ de la
1≤i , j ≤ n
1 5 4
3 2
Matricea de adiacenŃă a grafului este
0 1 0 1 0
0 0 1 0 0
0 0 0 1 A = 1
1 0 0 0 0
0 1 0 0 1
Trebuie să calculăm L = A4 . Pentru A2 = A i A avem:
49
0 0 1 0 1 0 0 1 0 1 1 0 1 0 1
0 0 0 1 0 0 0 0 1 0 0 1 0 0 0
A = 1 0 0 0
2
1 i 1 0 0 0 1 = 1 0 1 0 1 ,
0 1 0 0 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 0 1 0 1 0 0 1 0 1 0 1
Pentru A = A2 i A avem
3
1 0 1 0 1 0 0 1 0 1 1 0 1 0 1
0 1 0 0 0 0 0 0 1 0 0 0 0 1 0
A = 1 0 1 0
3
1 i 1 0 0 0 1 = 1 0 1 0 1
0 0 0 1 0 0 1 0 0 0 0 1 0 0 0
1 0 1 0 1 1 0 1 0 0 1 0 1 0 1
4 3
şi A = A i A conduce la
1 0 1 0 1 0 0 1 0 1 1 0 1 0 1
0 0 0 1 0 0 0 0 1 0 0 1 0 0 0
A = 1 0 1 0
4
1 i 1 0 0 0 1 = 1 0 1 0 1
0 1 0 0 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 1 1 0 1 0 0 1 0 1 0 1
Adunând cele 4 matrici avem
1 0 1 0 1
0 1 0 1 0
L = 1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
╬
PropoziŃia 2. Fie G = ( X , U ) un graf neorientat şi L matricea lanŃurilor
sale. Graful G este conex dacă şi numai dacă lij = 1 , pentru orice 1 ≤ i, j ≤ n .
DemonstraŃie. G este conex dacă şi numai dacă pentru orice xi , x j ∈ X
există un lanŃ de la xi la x j , dacă şi numai dacă lij = 1 , pentru orice 1 ≤ i, j ≤ n .
□
ObservaŃie. Dacă G = ( X , U ) este un graf neorientat neconex, având k
componente conexe, atunci putem face o partiŃie a lui X bazată pe componentele
conexe, X = X 1 ∪ X 2 ∪ ... ∪ X k , X i ∩ X j = ∅ pentru orice 1 ≤ i, j ≤ k , i ≠ j ,
50
cu proprietatea că fiecare X i reprezintă nodurile unei componente conexe a lui G .
În plus, există o permutare a nodurilor din X astfel încât indicii nodurilor dintr-o
componentă conexă să fie consecutivi.
DefiniŃie. Fie A o matrice pătrată de ordin n . Dacă
Bi1 0 ⋯ 0
0 Bi2 ⋯ 0
A=
⋮ ⋮ ⋱ ⋮
0 0 ⋯ Bik
unde 0 reprezintă matrici cu toate elementele egale cu zero, B j este o matrice
pătrată de ordin j cu o proprietate dată şi i1 + i2 + ... + ik = n , spunem că A este
matrice bloc diagonală.
□
PropoziŃia 3. Există o permutare a numerotării nodurilor unui graf
neorientat G = ( X , U ) astfel încât matricea lanŃurilor să fie de formă bloc
diagonală cu blocurile formate doar cu valoarea 1. Blocurile diagonale corespund
componentelor conexe ale grafului.
DemonstraŃie. Este suficient să arătăm că propoziŃia are loc pentru un graf
neconex cu două componente conexe, deoarece pentru un graf conex se foloseşte
propoziŃia 2 pentru a scrie L = Bn , cu X = n şi Bn are toate elementele egale
cu 1.
Datorită observaŃiei făcute mai sus, există o permutare a numerotării
{ } {
indicilor astfel încât X 1 = x1 ,..., xi , X 2 = xi +1 ,..., xi
1 1 2
} cu i1 + i2 = n şi
{ }
X 2 = xi1 +1 ,..., xi2 corespund componentelor conexe ale lui G .
Deoarece subgraful G1 = ( X 1 , V1 ) corespunzător lui X 1 este conex, avem
LG1 = Bi1 . Similar, pentru subgraful G2 = ( X 2 ,V2 ) avem LG2 = Bi2 . Cum nu
există muchii între nodurile din X 1 şi nodurile din X 2 , rezultă că lij = 0 pentru
orice 1 ≤ i ≤ i1 şi orice i1 + 1 ≤ j ≤ i2 .
Astfel obŃinem
Bi1 0
LG = .
0 Bi2
□
51
Exemplul 4. Considerăm graful G = ( X , U ) din exemplul 3 pentru care
am calculat matricea lanŃurilor:
1 0 1 0 1
0 1 0 1 0
LG = 1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
Cel mai simplu mod de a determina permutarea σ care aplicată lui X să
conducă la un graf pentru care matricea lanŃurilor să fie în format matrice bloc
diagonală este de a realiza o renumerotare a vârfurilor astfel încât vârfurile dintr-o
componentă conexă să fie numerotate cu valori consecutice.
Plecând de la graful G , prin renumerotarea vârfurilor putem obŃine graful
H = ( X ,V ) :
4 5 1
3 2
1 2 3 4 5
pentru care permutarea aplicată este σ = . (Deoarece
4 2 3 1 5
σ : X → X este o permutare, deci o funcŃie bijectivă şi se păstrează muchiile,
rezultă că G ≅ H , adică cele două grafuri sunt izomorfe)..
Prin aplicarea permutării la liniile şi coloanele matricii LG se obŃine
matricea
1 1 0 0 0
1 1 0 0 0
LH = 0 0 1 1 1
0 0 1 1 1
0 0 1 1 1
care este o matrice bloc diagonală, în care
1 1
B1 =
1 1
şi
52
1 1 1
B2 = 1 1 1 .
1 1 1
╬
ObservaŃie. Permutarea care transformă un graf într-un graf izomorf cu
matricea lanŃurilor bloc diagonală nu este unică. Acest lucru reiese din exemplul
următor.
Exemplul 5. Considerăm tot graful din exemplul 3. De această dată
transformăm graful în graful J = ( X , W ) din imaginea:
1 2 4
3 5
1 2 3 4 5
pentru care permutarea aplicată vârfurilor este π = .
1 5 3 4 2
Matrica lanŃurilor pentru acest graf este
1 1 1 0 0
1 1 1 0 0
LJ = 1 1 1 0 0 .
0 0 0 1 1
0 0 0 1 1
Care are ca blocuri diagonate pe
1 1 1
B1 = 1 1 1
1 1 1
şi
1 1
B2 = .
1 1
Se poate observa că matricile LH şi LJ sunt formate din aceleaşi blocuri
diagonale, dar scrise în altă ordine.
╬
53
Prin generalizare putem considera că matricea de adiacenŃă este şi matricea
lanŃurilor de lungime 1. PropoziŃia 2 ne dă modul de determinare a matricii tuturor
lanŃurilor. Din demonstraŃia propoziŃiei 2 putem trage concluzia că Ak dă matricea
lanŃurilor elementare de lungime exact k , pe care o putem nota prin L(G ) şi relaŃia
k
54
1
2
3 4
Matricea de adiacenŃă a grafului este
0 0 1 0 0
0 0 1 0 1
AG = 1 0 0 0 0 ,
0 1 1 0 0
0 0 0 0 1
în timp ce matricea de comutare este
0 0 1 0 0
0 0 1 −1 1
CG = 1 −1 0 −1 0 .
0 1 1 0 0
0 −1 0 0 1
╬
DefiniŃie. Fie G = ( X , U ) un graf orientat cu X = n şi presupunem că
X = { x 1 , x2 ,..., xn } . Matricea LG = ( lij )1≤i , j ≤ n ∈ M n ({0,1} ) , definită prin
1 ∃ x i = y0 , y1 ,..., yr = x j lant in G
lij = , orice 1 ≤ i, j ≤ n
0 altfel
se numeşte matrica lanŃurilor grafului G .
□
Matricea lanŃurilor se defineşte, în mod similar, cu cea dată pentru grafurile
neorientate şi este o matrice simetrică..
Pentru orice matrice reală A = aij ( ) 1≤i ≤ n putem defini matricea valorilor
1≤ j ≤ m
55
PropoziŃia 4. Fie G = ( X , U ) un graf orientat, C matricea sa de
conectare şi L matricea lanŃurilor lui G . Atunci are loc relaŃia:
n −1
L = ∑ C •k
k =1
∑( A )
k
Din propoziŃia 1 avem L = G′ •
şi folosind relaŃia anterioară avem
k =1
n −1
L = ∑ C •k
k =1
□
PropoziŃia 4 ne indică faptul că propoziŃiile 2 şi 3 enunŃate pentru grafuri
neorientate îşi păstrează enunŃul şi în condiŃiile grafurilor orientate, folosind
noŃiunile de graf conex şi componentă conexă date pentru grafurile orientate.
Exemplul 7. Să considerăm graful din exemplul 6. Pentru determinarea
matricii lanŃurilor avem de scris matricea C • care se obŃine din matricea CG ,
considerând toate elementele în modul. Se obŃine astfe matricea
00 1 0 0
00 1 1 1
C• = 1
1 0 1 0 .
01 1 0 0
01 0 0 1
Ultima matrice corespunde grafului neorientat G ′ = ( X , V ) , unde ( x, y ) ∈ V dacă
şi numai dacă {( x, y ) , ( y, x )} ∩ U ≠ ∅ . Imaginea lui G′ este
56
1
2
3 4
Graful G ′ , ca şi graful G , este conex şi astfel matricea lanŃurilor în cele
două grafuri va avea toate elementele egale cu 1, deci
1 1 1 1 1
1 1 1 1 1
LG = LG ′ = 1 1 1 1 1 .
1 1 1 1 1
1 1 1 1 1
╬
DefiniŃie. Fie G = ( X , U ) un graf orientat cu X = n şi presupunem că
X = { x 1 , x2 ,..., xn } . Matricea DG = ( dij )1≤i , j ≤ n ∈ M n ({0,1}) , definită prin
57
n
bik = aij i a jk + ∑ ail i alk = 1 ,
l =1
l≠ j
obŃinem bik′′ = 1 .
□
Corolar. În condiŃiile propoziŃiei 5 avem
DG( k ) = Ak .
Calculele în această relaŃie se fac prin operaŃiile + şi i . Am notat
( 5)
cu DG = d ij ( ) (k )
1≤ i , j ≤ n
matricea drumurilor din G de lungime k , definită prin
0 altfel
DemonstraŃie. RelaŃia rezultă direct din demonstraŃia propoziŃiei 5.
□
Exemplul 8. Considerăm din nou graful din exemplul 7 pentru care am
scris matricea de adiacenŃă:
0 0 1 0 0
0 0 1 0 1
AG = 1 0 0 0 0
0 1 1 0 0
0 0 0 0 1
Pentru A2 = A i A obŃinem
58
0 0 1 0 0 0 0 1 0 0 1 0 0 0 0
0 0 1 0 1 0 0 1 0 1 1 0 0 0 1
A = 1
2
0 0 0 0 1 0 0 0 0 = 0 0 1 0 0
0 1 1 0 0 0 1 1 0 0 1 0 1 0 1
0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Din calculul pentru A3 = A2 i A avem
1 0 0 0 00 0 1 0 0 0 0 1 0 0
1 0 0 0 10 0 1 0 1 0 0 1 0 1
A3 = 0 0 1 0 0 1 0 0 0 0 = 1 0 0 0 0
1 0 1 0 10 1 1 0 0 1 0 1 0 1
0 0 0 0 10 0 0 0 1 0 0 0 0 1
4 3
Pentru A = A i A rezultă matricea
0 0 1 0 0 0 0 1 0 0 1 0 0 0 0
0 0 1 0 1 0 0 1 0 1 1 0 0 0 1
A4 = 1 0 0 0 0 1 0 0 0 0 = 0 0 1 0 0
1 0 1 0 1 0 1 1 0 0 1 0 1 0 1
0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Prin sumare rezultă matricea
1 0 1 0 0
1 0 1 0 1
DG = 1 0 1 0 0
1 1 1 0 1
0 0 0 0 1
╬
PropoziŃia 6. Fie G = ( X , U ) un graf orientat, A matricea sa de
adiacenŃă. Atunci are loc relaŃia
NDG = A + A2 + ... + An
(unde operaŃiile sunt cele uzuale, definite pe ℕ ).
DemonstraŃie. Se procedează în acelaşi mod ca în demonstraŃia
propoziŃiei 5, plecându-se de la presupunerea iniŃială că A conŃine de fapt numărul
de drumuri de lungime 1 din G .
□
59
Corolar. În condiŃiile din propoziŃia 6 avem
NDG( k ) = Ak .
Calculele se fac prin operaŃiile uzuale definite pe mulŃimea numerelor naturale
5
(
ℕ . Am notat NDG( ) = nd ij(
k)
)
1≤ i , j ≤ n
matricea numărului de drumuri de lungime k
(k )
din G , unde nd ij este numărul de drumuri de lungime exact k având
extremitatea iniŃială xi şi extremitatea finală x j .
DemonstraŃie. Proprietatea rezultă imediat din detalierea demonstraŃiei
propoziŃiei 6.
□
Exemplul 8. Considerăm din nou graful din exemplul 7 pentru care am
scris matricea de adiacenŃă:
0 0 1 0 0
0 0 1 0 1
AG = 1 0 0 0 0
0 1 1 0 0
0 0 0 0 1
Pentru A2 = AA obŃinem
0 0 1 0 0 0 0 1 0 0 1 0 0 0 0
0 0 1 0 1 0 0 1 0 1 1 0 0 0 1
A = 1
2
0 0 0 0 1 0 0 0 0 = 0 0 1 0 0
0 1 1 0 0 0 1 1 0 0 1 0 1 0 1
0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Din calculul pentru A3 = A2 A avem
1 0 0 0 00 0 1 0 0 0 0 1 0 0
1 0 0 0 10 0 1 0 1 0 0 1 0 1
A3 = 0 0 1 0 0 1 0 0 0 0 = 1 0 0 0 0
1 0 1 0 10 1 1 0 0 1 0 1 0 1
0 0 0 0 10 0 0 0 1 0 0 0 0 1
4 3
Pentru A = A A rezultă matricea
60
0 0 1 0 0 0 0 1 0 0 1 0 0 0 0
0 0 1 0 1 0 0 1 0 1 1 0 0 0 1
A = 1
4
0 0 0 0 1 0 0 0 0 = 0 0 1 0 0
1 0 1 0 1 0 1 1 0 0 1 0 1 0 1
0 0
0 0 0 1 0 0 0 1 0 0 0 0 1
Prin sumare rezultă matricea
2 0 2 0 0
2 0 2 0 4
NDG = 2 0 2 0 0
3 1 4 0 3
0 0 0 0 4
╬
PropoziŃia 7. Fie G = ( X , U ) un graf orientat cu DG = dij ( ) 1≤i , j ≤ n
61
IV. ARBORI
4.1. Definire şi proprietăŃi
( )
H = X , U \ {{ x, y}} pe care îl presupunem conex. Atunci există un lanŃ de
extremităŃi x şi y , L = x = x0 ,..., x y = y în H .
Deoarece { x, y} ∈U , considerând L′ = L, { y, x} în G , avem de fapt
L′ = [ x = x0 ,..., xr = y, x ] , care, având acelaşi vârf la extremităŃi, este un ciclu
în G . ContradicŃie ( G este aciclic).
62
2 ⇒1
Avem ipoteza că G este un graf aciclic maximal. Considerăm că G nu
este conex şi astfel U < X − 1 .
Atunci există x, y ∈ X fără a putea fi conectate printr-un lanŃ. Astfel
pentru a conecta x şi y trebuie să adăugăm muchia { x, y} ∉ U şi astfel să putem
obŃine eventual un graf conex.
G fiind aciclic maximal, rezultă că adăugând o muchie graful devine ciclic
şi astfel obŃinem U + 1 ≥ X , sau altfel scris U ≥ X − 1 . ContradicŃie.
G fiind conex şi aciclic, rezultă că G este arbore.
3⇒1
Avem ipoteza că G este un graf conex minimal. Considerăm că G nu este
aciclic. Atunci există L = [ x = x0 ,..., xr = y, x ] un ciclu în G . Considerăm graful
(
G ′ = X , U \ {{ x, y}} . )
Fie a, b ∈ X . Deoarece G este conex rezultă că a şi b sunt conectate
printr-un lanŃ L′ = y0 ,..., y p în G .
Dacă muchia { x, y} nu apare în L′ , atunci L′ este lanŃ şi în G ′ , deci a
şi b sunt conectate în G ′ . Dacă { x, y} apare în L′ atunci pentru L′ avem
explicit
L′ = y0 ,..., yi = x, y = yi +1 , y p .
Considerăm lanŃul
L′ = y0 ,..., yi = x = x0 ,..., xr = y = yi +1 , y p
care este de extremităŃi a şi b şi este un lanŃ în G ′ , deci a şi b sunt conectate
în G ′ .
De mai sus rezultă că G ′ care se obŃine prin eliminarea unei muchii din G
este conex, şi astfel G nu este minimal la proprietatea de conexitate. ContradicŃie.
Am obŃinut astfel că G este aciclic şi fiind conex, rezultă că G este
arbore.
□
Corolar. Dacă G = ( X , U ) este arbore, atunci U = X − 1 .
DemonstraŃie. G fiind arbore este aciclic maximal. Cum un graf ciclic are
U ≥ X , rezultă că pentru un graf aciclic avem U < X . Din maximalitatea lui
G la proprietatea de a nu conŃine cicluri, rezultă că numărul de muchii este cel mai
mare care îndeplineşte relaŃia U < X şi astfel U = X − 1 .
□
63
Exemplul 1. Considerăm graful G = ( X , U ) , unde X = {1, 2,...,15}
(deci X = 15 ) şi care are reprezentarea
2 3 4
5 6 7 8 9
10 11 12 13 14 15
Din reprezentarea grafică se poate vedea că acest graf este conex şi că nu
conŃine cicluri şi astfel graful este un arbore. Avem de asemenea U = 14 şi astfel
este verificată relaŃia U = X − 1 .
Dacă la acest graf adăugăm o muchie, de exemplu {3,8} se obŃine
reprezentarea
2 3 4
5 6 7 8 9
10 11 12 13 14 15
64
se observă că se formează ciclul C = {1,3,8, 4,1} , astfel că noul graf este ciclic,
deci nu mai este un arbore.
Dacă se elimină o muchie, de exemplu {1, 4} , atunci se obŃine
reprezentarea
2 3 4
5 6 7 8 9
10 11 12 13 14 15
Se vede că am obŃinut astfel un graf neconex (de componente conexe
C1 = {1, 2,3,5, 6,10} şi C2 = {4, 7,8,9,11,12,13,14,15} şi deci graful nou nu este
arbore.
╬
PropoziŃie 1. Dacă G = ( X , U ) este un arbore, atunci G are cel puŃin
două vârfuri terminale.
DemonstraŃie. Din propoziŃia 2, capitolul 1 avem că numărul nodurilor cu
gradul impar este par şi astfel trebuie să arătăm că dacă G este arbore atunci
conŃine cel puŃin un nod terminal.
Presupunem că G nu conŃine niciun nod terminal. Astfel, oricare ar fi
x ∈ X , d ( x) ≥ 2 .
Dacă x0 ∈ X , cum d ( x0 ) ≥ 2 , există x1 , x1′ ∈ X , astfel încât
{ x1 , x0 } , { x0 , x1′} ∈U , în plus, x0 , x1 şi x1′ sunt distincte două câte două, pentru
că altfel ar apare un ciclu. Putem forma astfel lanŃul elementar L1 = [ x1′, x0 , x1 ] .
65
Deoarece d ( x1 ) ≥ 2 şi { x0 , x1} ∈U , rezultă că există { x1 , x2 } ∈U . În
plus, trebuie să avem x2 ∉ { x1′, x0 , x1} , deoarece, în caz contrar, se formează un
ciclu. Astfel, putem forma lanŃul L2 = [ x1′, x0 , x1 , x2 ] şi procesul poate continua la
infinit, deci X este infinită. ContradicŃie.
□
4.2. Arbori parŃiali
1
6
2 3
7
4 5
10 8 9
şi astfel avem
U = {{1, 2} , {1, 4} , {2,3} , {2, 4} , {2,10} , {3,5} , {4, 6} ,
{4,8} , {4,9} , {5, 6} , {5, 7} , {5,10} ,{6, 7} ,{7, 9} , {9,10}}
Putem alege graful parŃial H1 = ( X , V1 ) , unde
V1 = {{1, 2} , {1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4,9} , {6, 7} , {9,10}}
Se poate arăta că graful H1 este un graf conex şi fără cicluri deci este un
arbore. Atunci este un alt arbore parŃial al grafului G .
66
Graful H1 are reprezentarea
1
6
2 3
7
4 5
10 8 9
1
6
2 3
7
4 5
10 8 9
67
DefiniŃie. Fie G = ( X , U ) un graf neorientat şi A = ( X , V ) un arbore
parŃial al lui G . Numim coarde ale lui H elementele mulŃimii U \ V , iar numărul
U \ V se numeşte numărul ciclomatic al lui G .
□
Exemplu 3. Pentru exemplul 2 se poate constata că U = 15 şi
V1 = V2 = 9 . Cum V1 ⊂ U , rezultă că U \ V1 = U − V1 = 15 − 9 = 6 şi deci,
numărul ciclomatic al grafului G este egal cu 6
╬
Teorema 2. Fie G = ( X , U ) un graf neorientat. G este conex dacă şi
numai dacă G are arbore parŃial.
DemonstraŃie
⇒
Considerăm că G este conex. Dacă G este conex minimal, atunci G este
arbore şi astfel H = G este arbore parŃial al lui G .
Dacă G nu este minimal la proprietatea de conexitate, atunci putem
elimina succesiv muchii astfel încât să rămână valabilă proprietatea de conexitate.
Presupunem că obŃinem graful parŃial H = ( X , V ) conex şi astfel încât
dacă eliminăm o muchie din V , atunci graful obŃinut nu mai este conex. Rezultă
astfel că H este maximal la proprietatea de conexitate şi astfel H este un arbore.
Cum H se obŃine din G prin eliminarea de muchii, rezultă că H este graf parŃial
al lui G şi astfel H este arbore parŃial al lui G .
⇐
Fie H un arbore parŃial al lui G . H fiind arbore este graf conex.
Fie x, y ∈ X arbitrare. H fiind conex, rezultă că există
L = m1 , m2 ,..., m p un lanŃ în H de extremităŃi x şi y , unde pentru orice
i = 1, 2,..., p , mi ∈ V .
Cum V ⊂ U , rezultă că pentru orice i = 1, 2,..., p , mi ∈ U şi astfel
L = m1 , m2 ,..., m p este un lanŃ în G de extremităŃi x şi y . Astfel rezultă că G
este un graf conex.
□
DemonstraŃia de mai sus permite considerarea unui algoritm care să
conducă la determinarea unui arbore parŃial pentru un graf conex.
68
Algoritm 1
1. Fie V = U .
2. Dacă graful H = ( X , V ) nu conŃine cicluri, atunci algoritmul se termină şi
H este un arborele parŃial al lui G , altfel se continuă.
3. Se consideră un ciclu C = e1 , e2 ,..., e p în H
{ }
4. Se alege e ∈ e1 , e2 ,..., e p . Considerăm V = V \ {e} şi mergem la 2.
■
Exemplul 4. Considerăm din nou graful G = ( X , U ) din exemplul 2 şi
facem iniŃializarea
V = U = {{1, 2} , {1, 4} , {2,3} , {2, 4} , {2,10} , {3,5} , {4, 6} ,
{4,8} , {4,9} , {5, 6} , {5, 7} , {5,10} , {6, 7} ,{7, 9} , {9,10}}
Un ciclu din graful ( X , V ) este {1, 2, 4,1} . Pentru a elimina acest ciclu
putem presupune că eliminăm din V muchia {1, 2} şi se obŃine
V = {{1, 4} , {2,3} , {2, 4} , {2,10} , {3, 5} , {4, 6} , {4,8} ,
{4, 9} , {5, 6} , {5, 7} , {5,10} , {6, 7} , {7,9} , {9,10}}
În graful obŃinut se formează ciclul {2,3,5,10, 2} şi pentru a-l elimina
putem considera muchia {2,10} . Rezultatul eliminării ei este
V = {{1, 4} , {2,3} , {2, 4} , {3, 5} , {4, 6} , {4,8} , {4, 9} , {5, 6} , {5, 7} ,
{5,10} , {6, 7} , {7, 9} , {9,10}}
Tot pornind din vârful 2 se formează ciclul {2, 4, 6,5,3, 2} şi pentru
eliminarea lui folosim muchia {2, 4} , obŃinând
V = {{1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4, 9} , {5, 6} , {5, 7} ,
{5,10} , {6, 7} , {7, 9} , {9,10}}
În ultimul graf ( X , V ) se formează ciclul {4, 6, 7,9, 4} şi eliminăm
muchia {7,9} pentru a ajunge la
V = {{1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4,9} , {5, 6} , {5, 7} , {5,10} , {6, 7} , {9,10}}
Detectăm în continuare ciclul {4,9,10,5, 6, 4} şi îl eliminăm prin
excluderea muchiei {9,10} având ca rezultat
V = {{1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4,9} , {5, 6} , {5, 7} , {5,10} , {6, 7}}
69
Ultimul graf ( X ,V ) obŃinut conŃine ciclul {5, 6, 7,5} . Pentru a elimina
acest ciclu putem şterge muchia {6, 7} şi ajungem la
V = {{1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4,9} , {5, 6} , {5, 7} , {5,10}}
Graful obŃinut nu mai conŃine cicluri şi astfel algoritmul 1 pe care l-am
aplicat mai sus se opreşte, graful ( X , V ) fiind un arbore parŃial al grafului G .
Acest lucru este adevărat deoarece pe de o parte ( X , V ) este graf parŃial al lui G
şi, pe de altă parte, deoarece V = 9 = X − 1 , rezultă că ( X , V ) este un arbore.
Arborele parŃial ( X , V ) are reprezentarea
1
6
2 3
7
4 5
10 8 9
╬
PropoziŃia 2. Fie G = ( X , U ) un graf neorientat conex. Atunci numărul
ciclomatic al lui G este U − X + 1 .
DemonstraŃie. Fie H = ( X , V ) arborele parŃial al lui G . Deoarece H
este arbore, rezultă că avem relaŃia V = X − 1 . Numărul ciclomatic al lui G este
prin definiŃie valoarea U \ V .
Din teoria mulŃimilor ştim că dacă V ⊂ U , atunci U \ V = U − V .
Înlocuind valoarea pentru V , pentru numărul ciclomatic al lui G obŃinem
U \ V = U − V = U − ( X − 1) = U − V + 1 .
□
70
PropoziŃia 3. Fie G = ( X , U ) un graf neorientat conex, A = ( X , V ) un
arbore parŃial al lui G şi e = { x, y} o coardă a lui A . Atunci graful
H = ( X , V ∪ {e}) conŃine exact un ciclu.
DemonstraŃie. Deoarece A este un arbore, deci este aciclic maximal şi H
se obŃine din A prin adăugarea de muchii, rezultă că H este un graf ciclic (deci
conŃine cel puŃin un ciclu)
Presupunem că H conŃine două cicluri diferite care trec prin muchia e
(dacă doar unul ar trece prin muchia e prin eliminarea acestei muchii se elimină un
singur ciclu şi astfel ar rezulta că A este ciclic, deci nu poate fi arbore).
Fie astfel C1 = x = x0 , x1 ,..., x p = y , x şi C2 = [ x = y0 , y1 ,..., yr = y, x ]
cele două cicluri. Putem forma ciclul
C = x = x0 , x1 ,..., x p = y = yr ,..., y1 , y0 = x
Care nu conŃine muchia e şi astfel este ciclu şi în A , care astfel nu este arbore.
ContradicŃie.
□
4.3. Algoritmul lui Kruskal
71
( )
Considerăm graful H ′ = X , V \ {e} . Acest graf este conex, pentru că se
obŃine din H prin eliminarea unei muchii ce aparŃine unui ciclu. Din calculul
costurilor avem:
c ( H ) = ∑ c (u ) = c ( e) + ∑ c ( u ) > ∑ c ( u ) = c ( H ′)
u∈V u∈V \{e} u∈V \{e}
72
Dorim să determinăm un graf parŃial de cost minim al lui G . Pentru
aceasta vom folosi algoritmul lui Kruskal prezentat mai sus.
Conform primului pas generăm vectorul L = (1, 2,3, 4,5, 6 ) . Ordonăm
muchiile în ordine crescătoare şi ne rezultă vectorul
M = ({1,5} , {3, 6} , {2, 4} , {3,5} , {1, 6} , {2,3} , {4,5} , {3, 4} , {2, 6} , {1, 2} ) .
Punem k = 0 , j = 1 şi V = ∅
Cum k = 0 şi n − 1 = 5 nu se îndeplineşte condiŃia din pasul 2 şi intervine
prima iteraŃie a algoritmului.
Prima iteraŃie
Considerăm muchia {1,5} . Deoarece L (1) = 1 ≠ 5 = L ( 5 ) se continuă cu
pasul 4 şi trecem la k = 1 şi adăugăm muchia considerată la V care devine astfel
{
V = {1,5} ..}
Deoarece L (1) = 1 < 5 = L ( 5 ) , conform pasului 5 înlocuim toate valorile
5 prin valoarea 1 şi astfel L ajunge la forma L = (1, 2,3, 4,1, 6 ) .
Se consideră j = 2 şi terminăm prima iteraŃie şi cum k = 1 şi n − 1 = 5
reluăm cu o nouă iteraŃie.
A doua iteraŃie
Muchia a doua din M este {3, 6} şi avem L ( 3) = 3 ≠ 6 = L ( 6 ) . Astfel
ajungem la k = 2 şi adăugând muchia la V , se obŃine V = {{1,5} , {3, 6}} .
Cum L ( 3) = 3 < 6 = L ( 6 ) , prin schimbarea valorilor 6 cu 3 ajungem la
L = (1, 2,3, 4,1,3) şi iteraŃia se termină considerând j = 3 . În plus avem k = 2 şi
n − 1 = 5 astfel că vom continua.
A treia iteraŃie
Următoarea muchie considerată este {2, 4} pentru care avem
L ( 2) = 2 ≠ 4 = L ( 4) şi ajungem la configuraŃia k =3 şi
V = {{1,5} , {3, 6} , {2, 4}} .
Deoarece L ( 2 ) = 2 < 4 = L ( 4 ) prin schimbarea valorilor se obŃine
L = (1, 2,3, 2,1,3) şi după ce facem j = 4 vom continua cu o nouă iteraŃie
deoarece k = 3 şi n − 1 = 5 .
A patra iteraŃie
Luăm muchia {3,5} şi avem L ( 3) = 3 ≠ 1 = L ( 5 ) ceea ce generează nouă
structură k = 4 şi V = {{1,5} ,{3, 6} , {2, 4} , {3,5}} .
73
Acum avem L ( 3) = 3 > 1 = L ( 5 ) astfel că se înlocuiesc toate apariŃiile lui
3 prin valoarea 1 şi obŃinem L = (1, 2,1, 2,1,1) şi după ce ajungem la j = 5 vom
trece la următoarea iteraŃie deoarece k = 4 şi n − 1 = 5 .
A cincea iteraŃie
Noua muchie considerată este {1, 6} pentru care L (1) = 1 = L ( 6 ) astfel că
face j = 6 şi luăm o nouă muchie, {2,3} . Pentru aceasta L ( 2 ) = 2 ≠ 1 = L ( 3) şi
ca urmare vom ajunge la situaŃia k =5 şi
V = {{1,5} , {3, 6} , {2, 4} , {3,5} , {2,3}} .
RelaŃia exactă relativă la valorile din L este L ( 2 ) = 2 > 1 = L ( 3) şi astfel
se ajunge la L = (1,1,1,1,1,1) . Facem j = 7 . La revenirea la pasul 2 cu k = 5 şi
n − 1 = 5 condiŃia este îndeplinită pe egalitate şi astfel algoritmul se opreşte. Am
obŃinut graful parŃial H = ( X , V ) care este arbore parŃial de cost minim, costul
arborelui fiind CH = 1 + 1 + 2 + 2 + 3 = 9 . Arborele parŃial de cost minim are
reprezentarea
1 2
1
2
5 4 6
3
2
1
3
╬
4.4. ArborescenŃe
74
DefiniŃie. Fie A = ( X , U ) o arborescenŃă cu rădăcina x0 . Pentru un vârf
x ∈ X definim nivelul nodului prin l ( x0 ,..., x ) , unde ( x0 ,..., x ) este drumul
(unic) de extremitate iniŃială x0 şi extremitate finală x .
□
Exemplul 6. Considerăm graful orientat conex şi aciclic G = ( X , U ) cu
10 vârfuri şi care are reprezentarea
2 3
4 5 6 7 8
9 10
Graful G este conex deoarece există lanŃuri între oricare două vârfuri. El
este aciclic. De asemenea există un unic vârf (notat 1) pentru care gradul de intrare
este zero, iar celelalte vârfuri au gradul de intrare mai mare sau egal cu 1. Astfel,
graful orientat G este o arborescenŃă.
Deoarece d − (1) = 0 , rezultă că vârful 1 este rădăcina arborescenŃei.
Observând că d + ( 6 ) = 0 rezultă că 6 este o frunză a arborescenŃei.
MulŃimea frunzelor arborescenŃei G este mulŃimea {4, 6, 7,8,9,10} .
Se poate vedea că l (1, 2 ) = l (1,3) = 1 şi astfel vârfurile 2 şi 3 se găsesc pe
acelaşi nivel, şi anume pe nivelul 1. Avem şi l (1, 2,5,9 ) = l (1, 2,5,10 ) = 3 , deci
putem spune că vârfurile 9 şi 10 se găsesc pe acelaşi nivel 3.
╬
DefiniŃia de mai sus clasifică vârfurile arborescenŃelor în funcŃie de
distanŃa lor faŃă de rădăcină. Această clasificare are ca efect o reprezentare în care
nodurile sunt poziŃionate pe fiecare nivel, cu rădăcina arborescenŃei în partea
superioară a imaginii.
75
Pentru o arborescenŃă A = ( X , U ) , dacă ( x, y ) ∈U , spunem că
x este
părintele (tatăl) lui y şi y este fiul (descendentul direct) lui x . Dacă x, y ∈ X
şi există drumul (unic) ( x, z1 ,..., zk , y ) , spunem că y este descendentul lui x .
DefiniŃie. Fie A = ( X , U ) o arborescenŃă. Dacă pentru orice x ∈ X
avem d + ( x ) ∈ {0,1, 2} . Spunem că A este o arborescenŃă binară (arbore binar).
Dacă d + ( x ) ∈ {0, 2} , spunem că A este o arborescenŃă binară completă (arbore
binar complet).
□
Exemplul 7. Considerăm arborescenŃa din imaginea de mai jos
2 3
4 5 6
7 8
care are ca răvădină vârful 1. Avem
d + ( 4 ) = d + ( 5 ) = d + ( 7 ) = d + ( 8) = 0 ,
d + ( 3) = 1
şi
d + (1) = d + ( 2 ) = d + ( 6 ) = 2 ,
deci orice vârf are gradul de ieşire în mulŃimea {0,1, 2} . Rezultă că arborescenŃa
considerată este un arbore binar.
Deoarece d + ( 3) = 1 rezultă că arborele binar nu este complet.. Dacă am
adăuga vârful 9 şi arcul ( 3,9 ) se obŃine d + ( 3) = 2 şi d + ( 9 ) = 0 şi vom obŃine un
arbore binar complet. Acesta are reprezentarea
76
1
2 3
4 5 6 9
7 8
╬
Teorema 4. Pentru orice n ∈ ℕ *
există A = ( X , U ) o arborescenŃă
binară astfel încât
{x ∈ X d + ( x ) = 0} = n
(numărul vârfurilor terminale să fie egal cu n ).
DemonstraŃie. Dacă n = 1 , atunci X = { x0 } şi U = ∅ . Astfel
{
A1 = ( X , U ) este arborescenŃă binară şi x ∈ X d + ( x ) = 0 = { x0 } = 1 . }
Dacă n = 2 , atunci fie X 1 = { x1 , x2 } . Considerăm X 2 = { x1,2 } şi
mulŃimea de arce U1 = {( x
1,2 }
, x2 ) , ( x1,2 , x2 ) . Deoarece X 2 are un element, există
o arborescenŃă binară A1 = ( X 2 , U 2 ) cu un nod terminal. Fie arborescenŃa
A2 = ( X 1 ∪ X 2 , U1 ∪ U 2 ) care este o arborescenŃă binară şi are numărul de noduri
terminale X 1 = { x1 , x2 } = 2 = n .
Presupunem că pentru orice i = 1, 2,..., k există Ai = (Yi , Vi ) arborescenŃă
binară cu numărul de vârfuri terminale egal cu i .
Considerăm n = k + 1 .
Dacă k + 1 este număr par, deci k +1 = 2 p , considerăm
X 1 = { x1 , x2 ,..., x2 p −1 , x2 p } . Fie X 2 = { x1,2 , x3,4 ,..., x2 p −1,2 p } pentru care avem
X 2 = p ≤ k . Considerăm mulŃimea de muchii
77
U1 = {( x 1,2 }
, x1 ) , ( x1,2 , x2 ) ,..., ( x2 p −1,2 p , x2 p −1 ) , ( x2 p −1,2 p , x2 p ) .
Deoarece X 2 = p ≤ k , rezultă că există Ap = (Yp , V p ) o arborescenŃă
binară care are p noduri terminale. Fie atunci Ak +1 = X 1 ∪ Yp , U1 ∪ V p care este ( )
o arborescenŃă binară care are numărul de noduri terminale egal cu
X 1 = { x1 , x2 ,..., x2 p −1 , x2 p } = 2 p = k + 1 .
Dacă k +1 este număr impar, deci k + 1 = 2q + 1 , considerăm
X 1 = { x1 , x2 ,..., x2 q −1 , x2 q , x2 q +1} . Fie X 2 = { x1,2 , x3,4 ,..., x2 q −1,2 q } pentru care
avem X 2 = q < k . Considerăm mulŃimea de muchii
U1 = {( x 1,2 }
, x1 ) , ( x1,2 , x2 ) ,..., ( x2 q −1,2 q , x2 q −1 ) , ( x2 q −1,2 q , x2 q ) .
Deoarece X 2 = q < k , pentru X 2 ∪ { xq +1} cu număr de elemente
q + 1 ≤ k există Aq +1 = (Yq +1 , Vq +1 ) o arborescenŃă binară care are q + 1 noduri
( )
terminale. Fie atunci Ak +1 = X 1 ∪ Yq +1 , U1 ∪ Vq +1 care este o arborescenŃă binară
care are numărul de noduri terminale egal cu
X 1 = { x1 , x2 ,..., x2 q −1 , x2 q , x2 q +1} = 2q + 1 = k + 1 .
Folosind teorema inducŃiei complete, obŃinem că afirmaŃia din enunŃ este
adevărată pentru orice n ∈ ℕ* .
□
PropoziŃia 4. Fie A = ( X , U ) o arborescenŃă binară completă în care
{x ∈ X d + ( x ) = 0} = n . Atunci U = 2 ( n − 1) .
DemonstraŃie. Pentru n = 1 , conform construcŃiei din demonstraŃia
teoremei 4, V1 = ∅ şi astfel V1 = 0 = 2 (1 − 1) . De semenea, pentru n = 2 avem
V2 = {( x1,2 }
, x2 ) , ( x1,2 , x2 ) şi astfel V2 = 2 = 2 ( 2 − 1) .
Presupunem că pentru orice i = 1, 2,..., k enunŃul propoziŃiei este adevărat
şi fie n = k + 1 .
Dacă k + 1 este număr par, deci k + 1 = 2 p , conform construcŃiei din
(
demonstraŃia teoremei 4, avem Ak +1 = X 1 ∪ Yp , U1 ∪ V p şi Ap = Yp , V p ) ( ) este o
arborescenŃă binară completă cu p vârfuri terminale şi astfel V p = 2 ( p − 1) . Din
construcŃie avem U1 = 2 p . Cum U1 ∩ V p = ∅ , rezultă că
Vk +1 = U1 ∪ V p = U1 + V p = 2 p + 2 ( p − 1) = 2 ( 2 p − 1) = 2 ( k + 1 − 1) = 2k .
78
Dacă k + 1 este număr impar, deci k + 1 = 2q + 1 , conform construcŃiei
din demonstraŃia teoremei 4, avem Ak +1 = ( X 1 ∪ Yq +1 , U1 ∪ Vq +1 ) şi
Aq +1 = (Yq +1 , Vq +1 ) este o arborescenŃă binară care are q + 1 noduri terminale şi
astfel Vq +1 = 2 ( q + 1 − 1) = 2q . Din construcŃie avem U1 = 2q . Cum
U1 ∩ Vq +1 = ∅ , rezultă că
Vk +1 = U1 ∪ Vq +1 = U1 + Vq +1 = 2q + 2q = 2 ( 2q + 1 − 1) = 2 ( k + 1 − 1) = 2k .
Din teorema inducŃiei complete rezultă că enunŃul din propoziŃie este
adevărat pentru orice n ∈ ℕ* .
□
DefiniŃie. Fie A = ( X , U ) o arborescenŃă binară şi
{
DT = s ∈ ℕ ∃x ∈ X cu d + ( x ) = 0 si l ( x0 ,..., x ) = s }
(mulŃimea distanŃelor de la rădăcină la fiecare vârf terminal). Dacă
max DT − min DT ≤ 1 , spunem că A este o arborescenŃă binară echilibrată.
□
Exemplul 8. Pentru ambele grafuri orientate din exemplul 7 avem
DT = {2,3} de unde
max DT − min DT = 3 − 2 = 1 ≤ 1
şi astfel ambele grafuri sunt arborescenŃe binare echilibrate.
╬
Teorema 5. Fie A = ( X ,U ) o arborescenŃă binară. Următoarele
afirmaŃii sunt echivalente:
1. A este o arborescenŃă binară echilibrată;
2. pentru orice x ∈ X cu d + ( x ) = 0 , dacă X = 2m , atunci
m = l ( x0 ,..., x ) şi dacă 2 < X < 2 m m +1
, atunci l ( x0 ,..., x ) ∈ {m, m + 1} .
DemonstraŃie
⇒
Presupunem că 2m ≤ X < 2m +1 şi există x ∈ X , d + ( x ) = 0 şi
l ( x0 ,..., x ) < m . Presupunând că nivelul l ( x0 ,..., x ) este complet, atunci şi
nivelurile anterioare sunt complete şi astfel numărul total de vârfuri din nivelurile
1, 2, ..., l ( x0 ,..., x ) este
(
l x0 ,..., x )
0 1 ( )
l x0 ,..., x −1 2 −1 (
l x0 ,..., x )
2 + 2 + ... + 2 = =2 − 1 < 2m − 1 .
2 −1
ContradicŃie.
79
În mod asemănător se arată că se obŃine o contradicŃie dacă presupunem că
2 ≤ X < 2m +1 şi există x ∈ X , d + ( x ) = 0 şi l ( x0 ,..., x ) > m + 1 .
m
80
V. GRAFURI HAMILTONIENE ŞI EULERIENE
5.1. Grafuri Hamiltoniene
6
2 3
4
5
7 8
Acest graf conŃine ciclul C = {1, 2, 4, 7,8,5, 6,3,1} care trece prin toate
vârfurile grafului şi prin urmare este un ciclu hamiltonian.
Deoarece graful G conŃine ciclul hamiltonian C , rezultă că graful este un
graf hamiltonian.
╬
Aceste noŃiuni se regăsesc şi pentru grafurile orientate sub următoarele
forme.
81
DefiniŃie. Fie G = ( X , U ) un graf orentat. Un lanŃ (drum, ciclu, circuit)
elementar din G care conŃine toate vârfurile grafului se numeşte lanŃ (drum,
ciclu, circuit) hamiltonian .
□
DefiniŃie. Un graf G = ( X , U ) care conŃine cel puŃin un circuit
hamiltonian se numeşte graf hamiltonian orientat
□
Facem observaŃia că problematica grafurilor hamiltoniene este una de
complexitate nepolinomială din punctul de vedere al algoritmicii.
Teorema 1. Fie G = ( X , U ) un graf neorientat în care X = n ≥ 3 şi
n
pentru orice vârf x ∈ X avem d ( x ) ≥ . Atunci G este graf hamiltonian.
2
DemonstraŃie. Fie n = 3 , atunci pentru orice vârf x ∈ X avem
3
d ( x ) ≥ = 1, 5 , deci d ( x ) ≥ 2 . Deoarece X \ { x} = 3 − 1 = 2 , rezultă că pentru
2
orice x , d ( x ) = 2 = X − 1 . Cum fiecare x ∈ X este conectat cu toate celelalte
vârfuri din X , rezultă că graful este complet, deci K 3 , deci putem forma ciclul
C = [ x1 , x2 , x3 , x1 ] care este un ciclu elementar care conŃine toate vârfurile, deci
este hamiltonian. Drept consecinŃă, graful este hamiltonian.
Presupunem că avem un graf cu X = k + 1 vârfuri şi orice graf cu k
vârfuri care îndeplineşte condiŃiile teoremei este hamiltonian.
Fie C = [ x1 , x2 ,..., xk , x1 ] un ciclu elementar care trece prin toate vârfurile
lui G = ( X , U ) , mai puŃin vârful xk +1 (eventual scrierea lui C se obŃine printr-o
renumerotare a
vârfurilor). Acest ciclu există deoarece subgraful
( )
G′ = X \ { xk +1} ,V îndeplineşte condiŃiile propoziŃiei şi astfel conŃine un ciclu
hamiltonian.
Presupunem că nu exstă i , 1 ≤ i ≤ k − 1 , astfel încât în U să avem
muchiile { xi , xk +1} şi { xi +1 , xk +1} şi în U nu există nici muchiile { x1 , xk +1} şi
{ xk +1 , xk +1} (altfel putem introduce vârful în C în poziŃia dintre xi şi xi +1 sau între
xk şi x1 , formându-se un ciclu hamiltonian).
Rezultă atunci că eventualele conectări între xi +1 şi celelalte vârfuri se face
cel puŃin din 3 în 3 vârfuri ale ciclului C şi astfel d ( x ) ≤ 3 . ContradicŃie.
□
82
Exemplul 2. Considerăm graful orientat G = ( X , U ) din figura de mai
jos. Acest graf conŃine ciclul C = [1, 2, 4,5, 6,3,1] care trece prin toate cele 6
vârfuri şi astfel este un ciclu hamiltonian. Ca urmare şi graful considerat este unul
hamiltonian.
Facem observaŃia că graful G nu conŃine şi circuite hamiltoniene.
6
2 3
4
5
╬
5.2. Grafuri euleriene
9
2
3
5
4
6 7 8
În acest graf putem considera ciclul
83
C = {1,3, 2, 4, 6,3, 4, 7,8, 2,9,8,5,9,1}
în care nu se repetă nicio muchie şi astfel ciclul este unul simplu. Ciclul C conŃine
toate muchiile din graful G şi astfel ciclul C este un ciclu eulerian şi astfel graful
este un graf eulerian.
╬
Dacă trecem în cadrul grafurilor orientate avem definiŃia ce urmează
DefiniŃie. Fie G = ( X , U ) cu U = s un graf orientat Fie
L = [ m1 , m2 ,..., ms ] un lanŃ ( D = ( m1 , m2 ,..., ms ) un drum) simplu, atunci
spunem că lanŃul L (drumul D ) este lanŃ (drum) eulerian.
□
Lema 1. Fie G = ( X , U ) un graf neorientat, nu neapărat conex. Dacă
pentru orice x ∈ X avem d ( x ) număr par şi pentru x0 ∈ X avem d ( x0 ) ≠ 0 ,
atunci există un ciclu simplu în G care trece prin x0 .
DemonstraŃie. Putem considera, fără a reduce generalitatea că G este
conex. În caz contrar demonstraŃia se reduce la existenŃa ciclului într-o componentă
conexă a lui G
Cum G este conex şi orice x ∈ X avem d ( x ) este par, rezultă că pentru
orice x ∈ X , d ( x ) ≥ 2 . Prin sumare rezultă că 2 U = ∑ d ( x) ≥ 2 X
x∈ X
. Astfel,
folosind propoziŃia 4 din capitolul 2 avem că G este ciclic. Atunci există un ciclu
în G care trece printr-un punct x0 . Din acest ciclu se poate extrage un ciclu care
să fie simplu şi care să treacă prin x0
□
Teorema 2. Fie G = ( X , U ) un graf neorientat fără vârfuri izolate.
Atunci G este eulerian dacă şi numai dacă G este conex şi pentru orice x ∈ X ,
d ( x ) este număr par.
DemonstraŃie.
⇒
Dacă G este eulerian există în G un ciclu eulerian deci un ciclu simplu
C = m1 , m2 ,..., m p . Astfel, toate vârfurile sunt conectate, deci G este conex.
Atunci există cel puŃin o muchie mx cu o extremitate x pentru orice x ∈ X .
Cum mx este în ciclul C , rezultă că există i , 1 ≤ i ≤ p astfel încât
mx = mi . x este extremitate pentru mi , atunci este extremitate şi pentru unul din
arcele mi −1 sau mi +1 şi astfel d ( x ) este număr par.
84
⇐
Deoarece pentru orice x ∈ X , d ( x ) este par, conform lemei 1 rezultă că
există că pentru x0 ∈ X există un ciclu simplu care trece prin x0 şi x0 este
arbitrar. Astfel, G conŃine un ciclu eulerian, deci G este graf eulerian.
□
Teorema 3. Fie G = ( X , U ) un graf conex. Următoarele afirmaŃii sunt
echivalente:
1. G conŃine un ciclu eulerian.
2. Orice x ∈ X , d ( x ) este număr par.
85
Din alegerea lui x rezultă că C1 este un ciclu elementar. Cum C este
{
simplu, rezultă că dacă U1 = mi +1 ,..., mi
1 2
} {
şi U ′ = m1 ,..., mi , mi
1 2 +1
}
,..., m p ,
atunci U = U1 ∪ U ′ şi U1 ∩ U ′ = ∅ , deci are loc o partiŃionare a lui U .
Putem repeta raŃionamentul anterior cu C ′ în loc de C până când toate
ciclurile sunt elementare şi astfel se obŃine partiŃia căutată.
□
Corolar 1. Fie G = ( X , U ) un graf conex. G conŃine un lanŃ eulerian
dacă şi numai dacă cel mult două vârfuri ale lui G au gradul impar.
DemonstraŃie
⇒
Presupunem că G conŃine un lanŃ euclidian deci un lanŃ simplu care
conŃine toate muchiile din G . Fie x1 şi x2 extremităŃile acestui lanŃ. Considerăm
(
graful G ′ = X , U ∪ {{ x , x }}) .
1 2 Prin adăugarea muchiei { x1 , x2 } la lanŃul
euclidian se obŃine un ciclu euclidian şi astfel G ′ este un graf euclidian.
Coform teoremei 3, orice vârf din G ′ are gradul par, deci în G ′ avem în
particular că d ( x1 ) şi d ( x2 ) sunt numere pare. Prin eliminarea muchiei { x1 , x2 } ,
rezultă că în G avem că d ( x1 ) şi d ( x2 ) sunt numere impare, gradele celorlalte
vârfuri rămânând pare, deci cel mult două vârfuri din G au gradele impare.
⇐
Din propoziŃia 2 capitolul 1, avem că G are cel mult două vârfuri cu grad
impar, implică faptul că numărul vârfurilor cu grad impar este 0 sau 2.
Dacă numărul vârfurilor cu grad impar este 0, rezultă că toate vârfurile au
gradul par şi atunci conform teoremei 3, rezultă că G conŃine un ciclu eulerian,
deci un lanŃ eulerian.
Dacă numărul vârfurilor cu gradul impar este 2, fie x1 şi x2 aceste vârfuri.
(
Construim graful G ′ = X , U ∪ {{ x , x }}) . Pentru G′ avem că este conex şi are
1 2
86
Corolar 2. Fie G = ( X , U ) un graf conex cu 2k vârfuri de grad impar,
k > 0 . Atunci există Li = m1i , m2i ,..., mipi lanŃ deschis, mij ∈ U , j = 1, 2,..., p i ,
{
i = 1, 2,..., k , astfel încât notând U i = m1i , m2i ,..., mipi } avem U i ∩ U j = ∅
k
pentru orice 1 ≤ i, j ≤ k , i ≠ j şi ∪U i = U (mulŃimea muchiilor poate fi
i =1
partiŃionată în exact k lanŃuri deschise).
DemonstraŃie. Acest rezultat este o generalizare a corolarului 1 în termenii
punctului 3 din teorema 3.
□
87
VI. ALGORITMI PENTRU DRUMURI ÎN GRAFURI ORIENTATE
6.1. Algoritmi de calcul direct
3
Matricea de adiacenŃă a grafului este
0 1 1
A = 1 0 0
0 0 1
La inceputul aplicării algoritmului se fac iniŃializările i = 1 şi
0 1 1
D = T = A = 1 0 0
0 0 1
Deoarece i < 3 se continuă cu aplicarea algoritmului şi făcând i = 2 se
calculează
0 1 1 0 1 1 1 0 1
T = T i A = 1 0 0 i 1 0 0 = 0 1 1
0 0 1 0 0 1 0 0 1
şi
0 1 1 1 0 1 1 1 1
D = D + T = 1 0 0 + 0 1 1 = 1 1 1
0 0 1 0 0 1 0 0 1
Reluând pasul 2 relaŃia 2 > 3 este falsă şi vom relua calculele cu noile
valori pentru matricile T şi D . ObŃinem i = 3 şi
1 0 1 0 1 1 0 1 1
T = T i A = 0 1 1 i 1 0 0 = 1 0 1 ,
0 0 1 0 0 1 0 0 1
1 1 1 0 1 1 1 1 1
D = D + T = 1 1 1 + 1 0 1 = 1 1 1 .
0 0 1 0 0 1 0 0 1
89
Putem face observaŃia că matricea D nu se modifică la aplicarea acestei
iteraŃii. Continuând aplicarea algoritmului până ce ajungem la i = 4 , această
matrice continuă să nu se modifice, astfel că
1 1 1
D = 1 1 1
0 0 1
este matricea drumurilor din graful G
╬
Acest algoritm poate fi considerat şi sub următoarea formă.
Algoritmul 1’.
1. Considerăm D = A .
2. Pentru i = 1, 2,..., n şi pentru j = 1, 2,..., n se execută pasul 4.
3. Algoritmul se opreşte; D conŃine matricea drumurilor lui G .
4. Dacă d ij = 0 , atunci pentru k = 1, 2,..., n se execută pasul 5 altfel se
continuă.
5. Se calculează d ik = dik + d jk .
■
Exemplul 2. Pentru graful următor
1 3
4
5
matricea de adiacenŃă asociată este
0 1 0 0 1
0 0 1 1 0
A = 0 0 0 1 0 .
1 0 0 0 1
0 0 1 0 0
Să determinăm matricea drumurilor D .
1. Construim linia 1 a matricii D pornind de la linia 1 a matricii A . Observăm că
a12 = 1 şi a15 = 1 , restul elementelor fiind egale cu zero.
Atunci adunăm boolean linia 1 din A cu liniile 2 şi 5 ale matricii A
90
l1 : 0 1 0 0 1
l2 : 0 0 1 1 0
l5 : 0 0 1 0 0
__________________________
l1(2 ) : 0 1 1 1 1
( 2)
Observăm că linia l1(2) diferă de l1 prin elementul generat pe poziŃiile d13 = 1
( 2)
şi d14 = 1 . Adunăm boolean linia l1( 2 ) cu liniile 3 şi 4 din A .
l1(2 ) : 0 1 0 0 1
l3 : 0 0 0 1 0
l4 : 1 0 0 0 1
__________________________
l1(3 ) : 1 1 1 1 1
Observăm că s-a obŃinut o linie cu toate elementele egale cu 1 , deci, linia 1 a
matricii D va fi l1( D ) : 1 1 1 1 1
2. Pentru linia 2 a matricii D observăm că a23 = 1 , a24 = 1 , restul elementelor
fiind egale cu zero. Adunăm boolean linia 2 din A cu liniile 3 şi 4 .
l2 : 0 0 1 1 0
l3 : 0 0 0 1 0
l4 : 1 0 0 0 1
__________________________
l 2(2 ) : 1 0 1 1 1
Observăm că linia l 2( 2 ) diferă de linia 2 prin elementele generate de poziŃiile
d 21(2) = 1 şi d 25(2) = 1 . Adunăm boolean l (2)
2 cu liniile 1 şi 5 .
l 2(2 ) : 1 0 1 1 1
l1 : 0 1 0 0 1
l5 : 0 0 1 0 0
__________________________
l 2(3 ) : 1 1 1 1 1
Am obŃinut toate elementele egale cu 1 , deci l 2( D ) : 1 1 1 1 1
Similar pentru liniile 3, 4, 5 şi obŃinem matricea D
91
1 1 1 1 1
1 1 1 1 1
D = 1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
╬
O altă modalitate de calcul direct foloseşte operaŃiile uzuale definite pe
mulŃimea numerelor naturale.
Algoritmul se bazează pe propoziŃia 6 din capitalul 3 şi pe legătura care
există între matricile DG şi NDG . Algoritmul are forma următoare.
Algoritmul 2.
1. Considerăm i = 1 , D = A şi T = A .
2. Dacă i > n se trece la pasul 6, altfel se continuă.
3. Considerăm i = i + 1 şi calculăm T = T i A folosind operaŃiile uzuale de
adunare şi înmulŃire a numerelor întregi.
4. Calculăm D = D + T folosind operaŃia de adunare a numerelor întregi.
5. Reluăm cu pasul 2.
6. Pentru fiecare i = 1, 2,..., n şi fiecare j = 1, 2,..., n se execută pasul 8.
7. Algoritmul se opreşte, D conŃine matricea drumurilor din G
8. Dacă d ij ≠ 0 , atunci face d ij = 1 , altfel se continuă.
■
Algoritmul 1 este cunoscut sub numele de Algoritmul lui Wharshal pentru
determinarea matricii drumurilor.
Exemplul 3. Considerăm graful G = ( X , U ) dat prin X = {1, 2, 3, 4} ,
U = {(1, 2 ) , (1,3) , ( 2,3) , ( 3, 4 ) , ( 4,1)} şi care are reprezentarea
1 2
3 4
Acest graf are matricea de incidenŃă
92
0 1 1 0
0 0 1 0
A=
0 0 0 1
1 0 0 0
La debutul aplicării algoritmului 2 se fac iniŃializările i = 1 şi
0 1 1 0
0 0 1 0
D =T = A=
0 0 0 1
1 0 0 0
Deoarece relaŃia 1 > 4 nu este indeplinită se aplică prima iteraŃie a algoritmului,
pentru i = 2 şi se obŃin matricile
0 1 1 0 0 1 1 0 0 0 1 1
0 0 1 0 0 0 1 0 0 0 0 1
T = TA = =
0 0 0 1 0 0 0 1 1 0 0 0
1 0 0 0 1 0 0 0 0 1 1 0
şi
0 1 1 0 0 0 1 1 0 1 2 1
0 0 1 0 0 0 0 1 0 0 2 1
D = D +T = + =
0 0 0 1 1 0 0 0 1 0 0 1
1 0 0 0 0 1 1 0 1 1 1 0
La reluarea algoritmului de la pasul 2, relaŃia 2 > 4 este falsă şi se
continuă cu iteraŃia a doua, pentru i = 3 şi în care se obŃin matricile
0 0 1 1 0 1 1 0 1 0 0 1
0 0 0 1 0 0 1 0 1 0 0 0
T = TA = = ,
1 0 0 0 0 0 0 1 0 1 1 0
0 1 1 0 1 0 0 0 0 0 1 1
0 1 2 1 1 0 0 1 1 1 2 2
0 0 2 1 1 0 0 0 1 0 2 1
D = D +T = + = .
1 0 0 1 0 1 1 0 1 1 1 1
1 1 1 0 0 0 1 1 1 1 2 1
RelaŃia de la pasul 2 este acum 3 > 4 şi continuă să fie falsă generând a
treia iteraŃie a algoritmului 2, pentru valoarea i = 4 . În acest caz se obŃin
următoarele matrici
93
1 0 0 1 0 1 1 0 1 1 1 0
1 0 0 0 0 0 1 0 0 1 1 0
T = TA = = ,
0 1 1 0 0 0 0 1 0 0 1 1
0 0 1 1 1 0 0 0 1 0 0 1
1 1 2 2 1 1 1 0 2 2 3 2
1 0 2 1 0 1 1 0 2 1 3 2
D = D +T = + = .
1 1 1 1 0 0 1 1 1 1 2 2
1 1 2 1 1 0 0 1 2 1 2 2
Algoritmul revine la pasul 2 pentru a realiza o nouă iteraŃie de calcul.
Putem observa însă că ultima matrice D obŃinută are toate elementele nenule,
astfel că dacă trecem acum direct la pasul 8 se obŃine deja o matrice cu toate
elementele egale cu unu, deci există drumuri între oricare două vârfuri. Avem deci
matricea drumurilor
1 1 1 1
1 1 1 1
D=
1 1 1 1
1 1 1 1
Din forma matricii drumurilor putem trage şi concluzia că graful dat este
tare conex.
╬
6.2. Algoritmul Wharshal pentru drumuri minime în grafuri orientate
94
k
L ( d ) = ∑ mi ji j+1 .
j =1
d ij = min L ( d )
(
d ∈D xi , x j )
. Folosind aceste notaŃii, pentru determinarea matricii DGmin a drumurilor
minime se poate face folosind Algoritmul Wharshal pentru drumuri minime,
adică:
Algoritmul 3.
1. Considerăm i = 1 (prelucrăm linia i ), D = P .
2. Dacă i > n , atunci algoritmul se termină şi DGmin = D , altfel se continuă.
3. Pentru fiecare j = 1, 2,..., n se aplică pasul 5.
4. Facem i = i + 1 (trecem la următoarea linie) şi trecem la pasul 2.
5. Dacă d ij = +∞ , atunci se continuă, altfel se înlocuieşte linia i cu minimul
dintre liniia i şi linia obŃinută din linia j prin adăugarea valorii dij la
fiecare element.
■
OperaŃiile realizate în acest algoritm sunt de adunare şi de comparare în
vedea obŃinerii minimului. OperaŃia cea mai costisitoare este cea de comparare
astfel că, pentru exprimarea complexităŃii, ne vom referi în special la numărul de
comparaŃii realizate.
La pasul 5 al algoritmului se determină un vector al minimelor pe
componente dintre doi vectori de dimensiune n şi astfel numărul de comparaŃii
este n .
Conform pasului 3, pasul 5 se realizează pentru fiecare din valorile
j = 1, 2,..., n , deci de n ori şi astfel pasul 3 conduce la realizarea unui număr total
de n 2 comparaŃii.
Paşii 2, 3 şi 4 sunt realizaŃi pentru fiecare valoare a lui i , începând cu
valoarea 1 până la îndeplinirea condiŃiei i > n , deci de n . Cum în pasul 4 nu se
realizează comparaŃii, în pasul 2 se face o singură comparaŃie, iar în pasul 3 se fac
n 2 , rezultă că numărul total de comparaŃii este n3 + n .
RaŃionamentul de mai sus conduce la următorul rezultat.
95
Teorema 2. Dacă G = ( X , U ) este un graf orientat ponderat cu P
matricea ponderilor dată pe mulŃimea de ponderi M şi X = n . Algoritmul 3
producea matricea drumurilor minime din graful G şi are complexitatea O n3 ( )
exprimată ca număr de comparaŃii.
□
Exemplul 4. Considerăm graful orientat ponderat G = ( X , U ) pentru care
X = {1, 2, 3, 4,5} şi
U = {(1, 4, 3) , ( 2, 3,1) , ( 2, 7, 5) , ( 3, 7, 4 ) , ( 4, 6, 2 ) , ( 5,9, 4 ) , ( 5, 6,1)} .
Graful are reprezentarea
6
3
1 2
4 7
6
5
7
3 4
9
Matricea ponderilor grafului este
+∞ +∞ 4 +∞ +∞
3 +∞ +∞ +∞ 7
P = +∞ +∞ +∞ 7 +∞
+∞ 6 +∞ +∞ +∞
6
+∞ +∞ 9 +∞
Conform algoritmului considerăm i = 1 (prelucrăm prima linie) şi
+∞ +∞ 4 +∞ +∞
3 +∞ +∞ +∞ 7
D = P = +∞ +∞ +∞ 7 +∞
+∞ 6 +∞ +∞ +∞
6 +∞ +∞ 9 +∞
Linia 1 este L1 = ( +∞ +∞ 4 +∞ +∞ ) . Pentru j = 1 şi j = 2 avem
d1 j = ∞ şi ajungem la j =3 când d13 = 7 ≠ ∞ iar linia 3 este
L3 = ( +∞ +∞ +∞ 7 +∞ ) . Astfel prin adăugarea valorii 4 la fiecare
96
element din linia 3 se obŃine L3′ = ( +∞ +∞ +∞ 11 +∞ ) . Considerând acum
min { L1 , L3′} obŃinem noua linie 1 dată prin L1 = ( +∞ +∞ 4 11 +∞ ) .
Pentru j=4 avem acum d14 = 11 ≠ ∞ iar linia 4 este
L4 = ( +∞ 6 +∞ +∞ +∞ ) . Adunând valoarea 11 se obŃine
L4′ = ( +∞ 17 +∞ +∞ +∞ ) şi prin min { L1 , L4′ } noua linie 1 este
L1 = ( +∞ 17 4 11 +∞ ) .
În linia 1 s-a format valoarea 17 corespunzătoare lui j = 2 pentru care
linia 2 este L2 = ( 3 +∞ +∞ +∞ 7 ) . Prin adăugarea valorii 17 la elementele
din linia 2 se obŃine L2′ = ( 20 +∞ +∞ +∞ 24 ) . Aplicând min { L1 , L2′ }
obŃinem L1 = ( 20 17 4 11 24 ) . Deoarece linia 1 a fost completată, putem
scrie acum că matricea D a ajuns la forma
20 17 4 11 24
3 +∞ +∞ +∞ 7
D = +∞ +∞ +∞ 7 +∞
+∞ 6 +∞ +∞ +∞
6 +∞ +∞ 9 +∞
Facem i = 2 şi deoarece 2 > 5 este falsă se trece la prelucrarea liniei 2
care are forma L2 = ( 3 +∞ +∞ +∞ 7 ) . Pentru j = 1 avem d 21 = 3 ≠ ∞ şi
considerd linia 1 la care se adaugă valoarea 3 se obŃine
L1′ = ( 23 20 7 14 27 ) . Aplicând relaŃia min { L2 , L1′} se obŃine
L2 = ( 3 20 7 14 7 ) .
Pentru j = 3, d 23 = 7 ≠ ∞ şi adăugând 7 la linia 3 obŃinem
L3′ = ( +∞ +∞ +∞ 14 +∞ ) . Din min { L2 , L3′} linia 2 existentă nu se
modifică.
Când luăm j = 4 , d 24 = 14 ≠ ∞ şi prin adunarea valorii 14 la linia 4 avem
L4′ = ( +∞ 20 +∞ +∞ +∞ ) . Acum folosind minimul, linia 2 existentă nu se
modifică.
Pentru j = 5 , cu d 25 = 7 ≠ ∞ obŃinem L5′ = (13 +∞ +∞ 16 +∞ )
iar aplicarea minimului nu modifica linia 2 obŃinută.
Am ajuns astfel la o matrice
97
20 17 4 11 24
3 20 7 14 7
D = +∞ +∞ +∞ 7 +∞
+∞ 6 +∞ +∞ +∞
6 +∞ +∞ 9 +∞
Algoritmul va continua în modul prezentat mai sus, terminarea exemplului
fiind lăsată ca exerciŃiu pentru cititor.
╬
6.3. Algoritmul lui Dantzig pentru drumuri minime
de extremitate iniŃială dată
98
Exemplul 5. Considerăm un graf orientat ponderat G = ( X , U ) pentru
{
care X = {1, 2, 3, 4} şi U = (1, 3, 2 ) , (1, 4,3) , ( 2,5,3) , ( 3,5, 4 ) , ( 4,3,1) . Graful }
are reprezentarea
3
1 2 3
4
5
5
3 4
Matricea ponderilor care se obŃine din specificaŃiile grafului este
+∞ 3 4 +∞
+∞ +∞ 5 +∞
P=
+∞ +∞ +∞ 5
3 +∞ +∞ +∞
Considerăm că dorim să determinăm drumurile care au extremitatea iniŃială
1 şi facem iniŃializările m = 1 , X 1 = {1} şi c (1) = 0 . Avem d + ( X 1 ) = 2 şi astfel
facem prima prima iteraŃie din algoritm.
Arcele care au extremitatea iniŃială în X 1 sunt (1, 2 ) şi (1, 3) . Atunci
calculăm d12 = 3 + 0 = 3 şi d13 = 4 + 0 = 4 . Minimul valorilor calculate este
d = min {3, 4} = 3 şi se atinge pentru d12 . Astfel, considerăm c ( 2 ) = 3 şi
X 2 = {1, 2} . După ce facem m = 2 determinăm d + ( X 2 ) = 2 şi deoarece această
valoare nu este egală cu zero, aplicăm a doua iteraŃie a algoritmului.
Arcele care au extremitatea iniŃială în X 2 sunt (1, 3) şi ( 2,3) . Atunci
calculăm d13 = 4 + 0 = 4 şi d 23 = 5 + 3 = 8 . Prin aplicarea minimului se obŃine
d = min {4,8} = 4 care este atins pentru d13 . Din această cauză considerăm
c ( 3) = 4 şi X 3 = {1, 2,3} . Facem m = 3 şi avem d + ( X 3 ) = 1 ceea ce face să
aplicăm a treia iteraŃie a algoritmului.
Arcul cu extremitatea iniŃială în X3 este ( 3, 4 ) astfel că
d = d 34 = 5 + 4 = 9 , de unde c ( 4) = 9 şi X 4 = {1, 2,3, 4} . Deoarece
d + ( X 4 ) = 0 algoritmul se termină.
╬
99
6.4. Algoritmul lui Bellman-Kalaba pentru drumuri minime
de extremitate finală dată
Construim un tabel în care liniile sunt liniile matricii , notat L = ( Li )1≤i ≤ n , unde Li
este linia i a tabelului. La tabelul format se adaugă linia Ln +1 care este transpusa
coloanei n din matricea W .
Etapa 2
Se adaugă tabelului L , liniile suplimentare Li , i = n + 2, n + 3,... , astfel:
a) presupunând completată linia Lk se completează linia Lk +1 conform relaŃiei:
(
Lk +1, j = min Lk , j , min {wk +1,t + Lk ,t } .
t =1,..., n
)
b) se continuă aplicarea punctului (a) până la obŃinerea a două linii Lk şi Lk +1
identice.
100
Etapa 3
Se determină regresiv drumul minim de la xi la x n astfel:
- se adună linia „ i ” din L cu linia Lk +1 urmărindu-se rezultatul minim ce se
poate obŃine. Să presupunem că Lk +1,i = wij + Lk +1,i , atunci primul arc din
drumul minim de la xi la x n este arcul xi , x j ; ( )
- se adaugă linia „ j ” din L cu Lk +1 reŃinând valoare minimă, aflată de
exemplu pe coloana „ k ”, atunci al doilea arc va fi x j , x k ( ) ş.a.m.d. Ultimul
succesor determinat va fi x n .
■
*
PropoziŃia 1. Pentru orice k ∈ ℕ avem
Lk +1,i = min {vij + Lk , j }
j =1, n
DemonstraŃie.
Este evident că un drum de cel mult k + 1 arce cu destinaŃia x n se poate
obŃine dintr-un drum de cel mult k arce cu destinaŃia x n , prin adăugarea unui arc
la începutul său. Deci:
j =1, n { dk }
Lk +1,i = min vij + min w ( d k ) = min {vij + Lk , j } .
j =1, n
□
*
PropoziŃia 2. Dacă există k ∈ ℕ pentru care Lk ,i = Lk +1,i , pentru orice
1 ≤ i ≤ n , atunci Lk ,i = Ls ,i , pentru orice 1 ≤ i ≤ n şi orice s ≥ k + 1 .
DemonstraŃie. Demonstrăm prin inducŃie după s . Pentru s = k + 1
proprietatea este adevărată conform enunŃului.
Presupunând proprietatea adevărată pentru o valoare s ≤ h avem:
Lh +1,i = min {vij + Lh,i } = min {vij + Lk ,i } = Lk +1,i .
j =1, n j =1, n
□
Numărul maxim de aplicări ale celei de-a doua etape este cel mult egal cu
numărul de vârfuri minus 1, deci n − 1 = X − 1 de unde rezultă şi că numărul de
paşi ale procesului descris mai sus este finit, deci el este într-adevăr un algoritm.
La fiecare aplicare a pasului (a) din etapa a doua se calculează
{ }
min wk +1,t + Lk ,t pentru acest lucru fiind necesare un număr de n comparaŃii.
t =1,..., n
(
Astfel pentru a calcula Lk +1, j = min Lk , j , min wk +1,t + Lk ,t
t =1,..., n
{ }) sunt necesare n + 1
comparaŃii.
101
Din cele de mai sus rezultă că numărul maxim de comparaŃii necesare
trecerii la etapa a treia este ( n − 1)( n + 1) = n 2 − 1 .
În etapa a treia, pentru a determina drumul de lungime minimă de la xi la
xn , se produc maxim n − 1 comparaŃii. Astfel, pentru a determina drumurile
minime între orice nod xi şi xn , cu 1 ≤ i ≤ n −1 sunt necesare
( n − 1)
2
= n 2 − 2n + 1 .
Deoarece etapele 2 şi 3 din algoritm sunt independente, rezultă că numărul
maxim de comparaŃii prin care algoritmul se termină este 2n 2 − 2n .
Pe baza analizei făcute şi Ńinând cont de propoziŃiile 1 şi 2 de mai sus
putem da următorul enunŃ.
Teorema 3. Fie G = ( X , U ) un graf orientat ponderat cu X = n . Atunci
algoritmul 5 are ca rezultat determinarea tuturor drumurilor minime de
extremitate finală xn şi complexitatea algoritmului este O 2n 2 ( ) exprimată ca
număr maxim de comparaŃii.
□
Exemplul 6. Fie un graf G = ( X , U ) cu X = {1, 2, 3, 4,5, 6, 7} , iar pe
arce este marcată ponderea fiecărui arc. Dorim să determinăm drumul minim dintre
vârfurile 1 şi 7.
Graful considerat este prezentat în imaginea de mai jos
9
2 5
4 19
2 6
11 9
1 4 7
4
14 13
6 1 4
11
3 6
Etapa 1
Construim matricea W a valorilor arcelor şi continuăm tabelul adăugând
liniile conform calculelor prezentate mai jos. Totul se poate rezuma sub forma
tabelului prezentat în continuare
102
1 2 3 4 5 6 7
1 0 2 6 11 ∞ ∞ ∞
2 ∞ 0 4 3 9 ∞ ∞
3 ∞ ∞ 0 1 ∞ 11 ∞
4 ∞ ∞ ∞ 0 ∞ ∞ 9
5 ∞ ∞ ∞ 6 0 14 19
6 ∞ ∞ ∞ 4 ∞ 0 13
7 ∞ ∞ ∞ ∞ ∞ ∞ 0
(m ( ) )
i
1
∞ ∞ ∞ 9 19 13 0
(m ( ) )
i
2
20 12 10 9 15 13 0
(m ( ) )
i
3
14 12 10 9 15 13 0
(m ( ) )
i
4
14 12 10 9 15 13 0
Etapa 2
(1)
a) adăugăm Li la matricea W , care este transpusă coloanei w j 7 ( ) j =1, n
;
( 2) ( 3) ( 4)
b) completăm matricea W cu liniile Li , Li , Li ştiind că
{
L(i k +1) = min wij + L(jk )
j =1,7
}
( 2) ( 2)
Aşadar pentru linia Li , primul element L1 se determină adunând
elementele liniei 1 a matricii W cu cele ale liniei L(i ) , cea mai mică fiind
1
elementul căutat.
L(1 )
2
j =1,7
{
= min w1 j + L(j ) =
k
}
min {0 + ∞, ∞ + 2, ∞ + 6,11 + 9,19 + ∞,13 + ∞, 0 + ∞} = 20
L(2 )
2
j =1,7
{
= min w2 j + L(j ) =
k
}
min {∞ + ∞, ∞ + 0, ∞ + 4, 9 + 3,9 + 19,13 + ∞, ∞ + 0} = 12
L(3 )
2
j =1,7
{
= min w3 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + 0, 9 + 1,19 + ∞,13 + 11, 0 + ∞} = 10
L(4 )
2
j =1,7
{
= min w4 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + ∞,9 + 0,19 + ∞,11 + 13, ∞ + 0} = 9
103
L(5 )
2
j =1,7
{
= min w5 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + ∞, 9 + 6,19 + 0,14 + 13,19 + 0} = 15
L(6 )
2
j =1,7
{
= min w6 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + ∞,9 + 4,19 + ∞,13 + 0,13 + 0} = 13
L(7 )
2
j =1,7
{
= min w7 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + ∞,9 + ∞, ∞ + 19, ∞ + 13, 0 + 0} = 0
( 3)
Pentru linia Li vom avea Li = min wij + L j
( 3)
j =1,7
{ ( 2)
}:
L(1 ) = min {20 + 0,12 + 2,10 + 6,9 + 11,15 + ∞,13 + ∞, 0 + ∞} = 14
3
L(5 ) = min {20 + ∞,12 + ∞,10 + ∞,9 + 6,15 + 0,13 + 14, 0 + 19} = 15
3
Pentru linia Li
( 4)
vom avea Li = min wij + L j
( 4)
j =1,7
{ ( 3)
}:
L(1 ) = min {14 + 0,12 + 2,10 + 6,9 + 11,15 + ∞,13 + ∞, 0 + ∞} = 14
4
L(5 ) = min {14 + ∞,12 + ∞,10 + ∞,9 + 6,15 + 0,13 + 14, 0 + 19} = 15
4
( 3) ( 4)
Observăm că liniile Li şi Li coincid, iteraŃiile se opresc.
( 4)
Elementele lui Li reprezintă valoarea minimă a fiecărei drum care ajunge
în vârful 7.
104
Etapa 3
( 4)
Se adună linia 1 din W cu Li urmărindu-se rezultatul minim, care este 14 ,
primul arc va fi (1, 2 ) .
Se adună linia 2 din W cu L(i ) , rezultatul fiind 12 , al doilea arc va fi
4
( 2, 4 ) .
( 4)
Se adună linia 4 din W cu Li , rezultatul minim fiind 9 , arcul
corespunzător va fi ( 4, 7 ) .
Deci drumul minim de la x1 la x7 va fi d = (1, 2, 4, 7 ) cu valoarea 17.
╬
6.4. Algoritmii lui Ford şi Dijkstra pentru drumuri minime
de extremităŃi date
loc relaŃia vk
i+1
+ wki+1ki = vki
■
Exemplul 7. Se consideră graful orientat ponderat G = ( X , U ) , cu
X = {1, 2,3, 4,5} şi
U = {(1, 4,3) , ( 2,3,1) , ( 2,7,5 ) , ( 3, 7, 4 ) , ( 4, 6, 2 ) , ( 5,9, 4 ) , ( 5, 6,1)} .
Graful are reprezentarea
6
3
1 2
4 7
6
5
7
3 4
9
Matricea extinsă a ponderilor este în acest caz
106
0 ∞ 4 ∞ ∞
3 0 ∞ ∞ 7
W = ∞ ∞ 0 7 ∞
∞ 6 ∞ 0 ∞
6 ∞ ∞ 9 0
Considerând că dorim să determinăm drumul minim de la vârful 1 la vârful
5, conform primei etape a algoritmului se construieşte vectorul
v = (0 ∞ ∞ ∞ ∞) .
Aplicăm primul punct al etapei a doua şi avem
{
i = 1 , v1* = min 0, min {∞ + 3, ∞ + 6} = 0 }
i = 2 , v = min {∞, min {∞ + 6}} = ∞
*
2
107
pentru niciun k ∈ {1, 2,3, 4,5} se trece la etapa a treia a algoritmului din care se
obŃine că există un drum de la vârful 1 la vârful 5 deoarece v5 = 24 ≠ ∞ şi acest
drum este d = (1,3, 4, 2,5 ) .
╬.
Algoritmul prezentat este un algoritm care conŃine o serie de complicaŃii
datorate faptului că s-a dorit să funcŃioneze pentru toate grafurile orientate. Pentru
cazul în care se cunoaşte faptul că graful G nu conŃine circuite, acest algoritm
poate fi simplificat pentru a se ajunge la următoarea formă.
Algoritmul 7.
1. Se construieşte matricea extinsă a valorilor arcelor W = wij ., ( ) i , j =1, n
4. Facem înlocuirile A = A ∪ C , B = B \ C .
5. Dacă xn ∉ A atunci se trece la pasul 2, altfel se continuă.
6. Se determină drumul de la x1 la xn plecându-se de la xn , procedând după
(
cum urmează: dacă presupunem că s-a determinat xk , xk ,..., xk = xn ,
i i −1 1 )
partea de la xki la x n a drumului minim. Luăm xk vârful pentru care
i+1
108
3
1 2
9
4
2 4
4 5
5
3 4
Scriem matricea extinsă a valorilor arcelor şi anume
0 3 4 ∞ ∞
∞ 0 2 4 9
W = ∞ ∞ 0 5 ∞
∞ ∞ ∞ 0 4
∞ ∞ ∞ ∞ 0
Şi considerând că dorim să determinăm drumul de extremitate iniŃială vârful 1, cu
extremitatea finală vârful 5, facem iniŃializările v1 = 0 , A = {1} şi B = {2,3, 4,5} .
Deoarece există 1 ∈ A şi 2 ∈ B astfel încât (1, 2 ) ∈ U se continuă cu
pasul 3 al algoritmului.
Construim mulŃimea C = {2} . Pentru 2∈C facem
v2 = min {0 + 3} = 3 ..
La pasul 4 obŃinem A = {1, 2} şi B = {3, 4,5} şi deoarece 5 ∉ A facem o
nouă iteraŃie începând cu pasul 2.
Deoarece există 1 ∈ A şi 3 ∈ B astfel încât (1,3) ∈ U se continuă cu pasul
3 al algoritmului.
ObŃinem C = {3} . Pentru 3 ∈ C facem
v3 = min {0 + 4,3 + 2} = min {4,5} = 4
La pasul 4 ajungem la A = {1, 2,3} şi B = {4,5} şi din nou, deoarece
5 ∉ A , reluăm de la pasul 2.
Cum 2 ∈ A şi 4 ∈ B astfel încât ( 2, 4 ) ∈ U continuăm cu pasul 3 şi
obŃinem C = {4} . Pentru 4 ∈ C se obŃine
v4 = min {3 + 4, 4 + 5} = min {7,9} = 7
La pasul 4 se determină mulŃimile A = {1, 2,3, 4} şi B = {5} şi este
necesară o nouă reluare de la pasul 2 deoarece 5 ∉ A .
109
Având 2 ∈ A şi 5 ∈ B pentru care ( 2,5 ) ∈U continuăm construind
C = {5} şi cu determinarea
v5 = min {3 + 9, 7 + 4} = min {12,11} = 11
urmată de obŃinerea mulŃimilor A = {1, 2,3, 4,5} şi B = ∅ . De această dată
5 ∈ A şi astfel, trecem la pasul 6 cu v = ( 0 3 4 7 11) determinând drumul
d = (1, 2, 4,5 ) .
╬
Se poate observa că în algoritmul simplificat al lui Ford, în pasurile 3 şi 4
se determină un minim şi apoi are loc o trecere a tuturor vârfurilor din C în A . Pe
de altă parte, o parte din arcele considerate la pasul 3 nu vor face parte din drumul
minim de la x1 la xn . Acest lucru se va întâmpla doar pentru vârfurile în care se
atinge minimul calculat la aplicarea relaŃiei vi = min v j + w ji . Această
j
{ }
x j ∈A
110
6. Se determină drumul de la x1 la xn plecându-se de la xn , procedând după
cum urmează: dacă presupunem că s-a determinat xk , xk ,..., xk = xn , ( i i −1 1 )
partea de la xki la x n a drumului minim. Luăm xk vârful pentru care
i+1
9
2 5
4 19
2 6
11 9
1 4 7
4
14 13
6 1 4
11
3 6
La pasul 1 se scrie matricea extinsă a valorilor arcelor
0 2 6 11 ∞ ∞ ∞
∞ 0 4 4 9 ∞ ∞
∞ ∞ 0 1 ∞ 11 ∞
W = ∞ ∞ ∞ 0 ∞ ∞ 7
∞ ∞ ∞ 6 0 14 19
∞ ∞ ∞ 4 ∞ 0 13
∞ ∞ ∞ ∞ ∞ ∞ 0
şi se fac iniŃializările v1 = 0 , A = {1} şi B = {2,3, 4,5, 6, 7}
Modul de lucru al algoritmului este similar celui prezentat în exemplul 8 şi
conduce în final la drumul d = (1, 2, 4, 7 ) .
111
VII. ALGORITMI PENTRU GRAFURI
HAMILTONIENE ŞI EULERIENE
7.1. Algoritmul lui Foulkes pentru drumuri hamiltoniene
(C , C ) ∈V
i j dacă şi numai dacă există x ∈ Ci şi există y ∈ C j astfel încât
( x, y ) ∈U . Se formează astfel un drum hamiltonian în G ′ , şi anume drumul
d ′ = ( C1 , C2 ,..., Cr ) .
112
Etapa 3
3.a) Se consideră x1 ∈ C1 şi x2 ∈ C2 pentru care există ( x1 , x2 ) ∈ U . Găsim în
C1 un drum hamiltonian d1 de extremitate iniŃială x1* şi extremitate finală x1
şi în C2 un drum hamiltonian d 2 de extremitate iniŃială x2 şi extremitate
finală x2* . Se formează astfel drumul hamiltonian d1* = d1 , ( x1 , x2 ) , d 2 ( ) în
graful parŃial al lui G de vârfuri C1 ∪ C2 . Facem i = 3 .
3.b) Dacă i > r ne oprim, s-a obŃinut drumul hamiltonian, altfel se continuă.
3.c) ( )
Dacă există xi ∈ Ci astfel încât xi*−1 , xi ∈ U atunci se trece la pasul (3.d),
altfel se trece la pasul (3.e).
3.d) Se consideră în Ci un drum hamiltonian d i de extremitate iniŃială xi şi
notăm extremitatea sa finală prin xi* . Am format astfel drumul hamiltonian
(
d i* = d i*−1 , ( xi*−1 , xi ) , di ) în graful parŃial al lui G de vârfuri
C1 ∪ C2 ∪ ... ∪ Ci . Facem i = i + 1 şi mergem la pasul (3.b).
3.e) Fie ei partea din drumul d i*−1 care formează acest drum împreună cu d i −1 .
Fie xi′−1 ∈ Ci −1 şi xi ∈ Ci pentru care ( xi′−1 , xi ) ∈ U . ÎmpărŃim drumul d i −1 în
d i′−1 de extremitate finală xi′−1 şi drumul d i′′−1 de extremitate iniŃială xi′−1 şi
extremitate finală xi*−1 . Considerăm un drum d i′′′−1 care pleacă din xi′−1 , trece
xi*−1 şi apoi prin toate celelalte vârfuri care apar în drumul d i′′−1 astfel încât
extremitatea finală a lui d i′′′−1 să fie xi′−1 . Se consideră în Ci un drum
hamiltonian d i de extremitate iniŃială xi şi notăm extremitatea sa finală prin
xi* . Considerăm drumul d i* = ( d i′−1 , d i′′′−1 , ( xi′−1 , xi ) , d i ) în graful parŃial al lui
G de vârfuri C1 ∪ C2 ∪ ... ∪ Ci . Facem i = i + 1 şi mergem la pasul (3.b).
■
Exemplul 1. Considerăm graful următor
2 9
6 7
1 3
4
8
5
Matricea de adiacenŃă a grafului este
113
0 1 0 0 1 0 0 0 0
0 0 1 1 0 0 0 0 1
0 0 0 1 0 0 0 0 0
1 0 0 0 1 0 0 0 0
A = 0 0 1 0 0 1 0 0 0 .
0 0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
0 0 0 0 0 1 0 0 0
Prin aplicarea unuia din algoritmii pentru determinarea matricii drumurilor
într-un graf orientat se obŃine matricea
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
M = 1 1 1 1 1 1 1 1 1
0 0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 1
Prin aplicarea primei etape a algoritmului de mai sus se obŃine
C1 = {1, 2,3, 4,5} şi C2 = {6, 7,8,9} şi în etapa a doua se obŃine graful condensat
C1 C2
114
De asemenea, deoarece C2 este ultima componentă tare conexă,
determinăm în ea un drum hamiltonian de extremitate iniŃială vârful 9, şi anume
d 2 = ( 9, 6, 7,8 ) .
Acum, drumul hamiltonian se obŃine ca d = ( d1 , d 2 ) , deci
d1 = ( 5,3, 4,1, 2,9, 6, 7,8 )
╬
7.2. Teorema lui Chen
( x , x ) ∈U . Atunci
i j pi ≥ p j , unde pi este gradul de atingere al vârfului xi .
DemonstraŃie. Fie
{
Aj = xk ∃d = ( x j ,..., xk ) }
şi
{
Ai = xk ∃d = ( xi ,..., xk ) . }
(
Dacă y ∈ A j , atunci există un drum d = x j ,..., y . Deoarece ) ( x , x ) ∈U ,
i j
atunci
d′ = (( x , x ) , d ) = ( x , x ,..., y )
i j i j
115
DemonstraŃie. Se procedează ca în propoziŃia 1 doar că în loc de a utiliza
( )
arcul xi , x j se consideră drumul e = xi ,..., x j . ( )
□
Următoarele rezultate, dintre care primul este cunoscut drept teorema lui
Chen stau la baza algoritmului lui Chen.
Teorema 1. Fie G = ( X , U ) un graf orientat şi fără circuite cu X = n .
G conŃine un drum hamiltonian dacă şi numai dacă are loc relaŃia
n
n ( n − 1)
∑i =1
pi =
2
unde pi este gradul de atingere al vârfului xi .
DemonstraŃie.
⇒
Fie d = {x1 , x 2 ,..., x n } drumul hamiltonian în G , atunci:
- dacă i > j din x j nu se poate atinge vârful xi , deoarece în caz contrar în G
ar exista circuite;
- din vârful xi ( i = 1, 2,..., n − 1 ) se pot atinge vârfurile xi +1 , xi + 2 ,..., x n deci
pi = n − i ;
- din vârful x n nu se poate atinge nici un vârf.
În total avem:
n n
n ( n − 1)
∑ pi = ∑ ( n − i ) =
i =1 i =1 2
.
⇐
n
n ( n − 1) n(n − 1)
Presupunem că ∑p
i =1
i =
2
, atunci în matricea D se găsesc
2
elemente de „ 1 ”.
Triangularizând superior această matrice, aceste elemente vor ocupa toate
locurile disponibile de deasupra diagonalei; în final drumul hamiltonian însuşi este
dat de succesiunea vârfurilor corespunzătoare matricii triangularizată superior.
□
Teorema 2. Într-un graf orientat fără circuite, drumul hamiltonian, dacă
există este unic.
DemonsraŃie. Dacă ar exista două drumuri hamiltoniene d H(1) şi d H( 2 ) ,
atunci în cele două drumuri ar exista cel puŃin două vârfuri xi , x j aşezate în
ordine inversă, ceea ce ar face să apară un circuit între xi şi x j .
□
116
Rezultatele prezentate mai sus dau un proces imediat pentru determinarea
drumului hamiltonian într-un graf orientat fără circuite. Pentru acesta vom proceda
după cum urmează:
Algoritmul 2.
1. Scriem matricea de adiacenŃă A .
2. Calculăm, prin una din metodele descrise în capitolele anterioare,
matricea drumurilor D . Dacă în această matrice apare cel puŃin o
valoare 1 pe diagonala principală ne oprim pentru că graful G conŃine un
circuit şi teorema lui Chen nu se poate aplica.
3. Se determină puterile de atingere ale vârfurilor ( pi )i =1,2,...,n şi se verifică
n
n ( n − 1)
valoarea de adevăr pentru relaŃia ∑pi =1
i =
2
. Dacă această relaŃie
x1
x3 x4
x2
Matricea de adiacenŃă este
0 1 0 1
0 0 0 1
A=
1 1 0 0
0 0 0 0
Matricea drumurilor este
117
0 1 0 1
0 0 0 1
D=
1 1 0 1
0 0 0 0
Să determinăm drumul hamiltonian pentru matricea drumurilor astfel
obŃinută. Matricea nu conŃine nicio valoare 1 pe diagonală, deci graful la care
matricea este asociată nu conŃine circuite.
4
Avem p1 = 2 ; p2 = 1 ; p3 = 3 ; p4 = 0 şi astfel ∑p
i =1
i = 6 , iar pentru
n(n − 1)
n = 4 rezultă = 6.
2
Matricea D a drumurilor graf la care am ataşat şi puterile de atingere a
vârfurilor este
x1 x2 x3 x4 pi
x1 0 1 0 1 2
x2 0 0 0 1 1
D=
x3 1 1 0 1 3
x4 0 0 0 00
Pentru a triangulariza matricea D ne folosim de relaŃiile
p3 > p1 > p2 > p4 ,
vom scrie vârfurile în ordinea {x 3 , x1 , x 2 , x 4 } în loc de ordinea {x1 , x 2 , x3 , x 4 }.
Avem:
x1 x2 x3 x4
x1 0 1 1 1
x2 0 0 1 1
D1 =
x3 0 0 0 1
x4 0 0 0 0
care este matricea triangularizată a drumurilor.
Deci, se poate aplica teorema lui Chen, în G există un drum hamiltonian,
iar acesta este d H : {x3 , x1 , x 2 , x 4 }.
╬
118
7.3. Algoritmul înmulŃirii latine
119
Exemplul 3. Să se determine drumurile hamiltoniene pentru graful
1 3
4
5
Cum ştim că graful are circuite, vom folosi metoda înmulŃirii latine.
Matricele M (1) şi Mɶ ( ) vor fi:
1
0 x1 x 2 0 0 x1 x5
0 0 x 2 x3 x2 x4 0
M (1) = 0 0 0 x3 x 4 0
x 4 x1 0 0 0 x 4 x5
0 0 x5 x 3 0 0
0 x2 0 0 x5
0 0 x3 x4 0
~
M (1) =0 0 0 x4 0
x1 0 0 0 x5
0 0 x3 0 0
x1 x 2 x3
0 0 x1 x 2 x 4 0
x1 x5 x3
x 2 x 4 x1 0 0 x 2 x3 x 4 x 2 x 4 x5
M (2 ) =
x3 x 4 x1 0 0 0 x3 x 4 x 5
0 x 4 x1 x 2 x 4 x5 x3 0 x 4 x1 x5
0 0 0 x5 x 3 x 4 0
120
x1 x 2 x3 x 4
0 0 0 x1 x 2 x 4 x5
x1 x5 x3 x 4
x 2 x 4 x1 x5
x 2 x3 x 4 x1 0 x 2 x 4 x5 x 3 0
M (3 )
= x 2 x3 x 4 x 5
0 x3 x 4 x1 x 2 0 0 x3 x 4 x1 x5
x 4 x1 x 2 x3
0 0 0 0
x 4 x1 x5 x3
x x x x 0 0 0 0
5 3 4 1
0 0 x1 x 2 x 4 x5 x3 0 x1 x 2 x3 x 4 x5
0 0 x 2 x 4 x1 x5 x3 0 x 2 x3 x 4 x1 x5
M (4 )
= 0 0 0 0 0
0 0 0 0 0
0 x x x x x 0 0 0
5 3 4 1 2
În graful dat există 5 drumuri hamiltoniene.
╬
1 5
4
3
2 6
122
1 5
4
3
2 6
şi deoarece nu conŃine muchii izolate, putem alege orice muchie care are o
extremitate nodul 4, să spunem u8 = {4, 5} . Definim lanŃul C2 = {3, u5 , 4, u8 ,5} şi
facem i = 2 , urmând a relua pasul 2.
A treia iteraŃie are la bază graful parŃial
1 5
4
3
2 6
care nu conŃine muchii izolate şi astfel pentru continuare putem alege orice muchie
care are o extremitate în nodul 5, să spunem u2 = {1,5} . Definim lanŃul
C3 = {3, u5 , 4, u8 ,5, u2 ,1} şi facem i = 3 . Deoarece i ≠ 9 se revine la pasul 2.
A patra iteraŃie porneşte de la graful parŃial
1 5
4
3
2 6
în care se poate observa că singurele contunuări posibile sunt legate de muchiile
din lanŃul {1, 4, 2,3} (corespunzând şi iteraŃiilor cinci şi şase). Facem în ordine
alegerile u1 = {1, 4} , u4 = {2, 4} şi u3 = {2,3} . În final se obŃine lanŃul
123
C6 = {3, u5 , 4, u8 ,5, u2 ,1, u1 , 4, u4 , 2, u3 ,3} .
Facem i = 6 . Urmează a relua pasul al doilea.
La a şaptea iteraŃie, graful parŃial ( X , U \ C6 ) este
1 5
4
3
2 6
În acest graf nu conŃine muchii izolate şi putem alege orice muchie care are o
extremitate în nodul 3, să spunem u7 = {3, 6} şi astfel să formăm lanŃul
C7 = {3, u5 , 4, u8 ,5, u2 ,1, u1 , 4, u4 , 2, u3 ,3, u7 , 6}
şi trecem la i = 7 . La reluarea pasului 2, graful parŃial obŃinut prin eliminarea
muchiilor din lanŃul C7 conŃine lanŃul {6,5, 3} şi prin iteraŃiile 8 şi 9 se ajunge la
un lanŃ
C9 = {3, u5 , 4, u8 ,5, u2 ,1, u1 , 4, u4 , 2, u3 ,3, u7 , 6, u9 , 5, u3 , 3}
Deoarece ajungem la i = 9 , algoritmul se opreşte. LanŃul C9 are ambele
extremităŃi nodul 3 şi astfel este un ciclu. Fiecare muchie din ciclul C9 apare o
singură dată şi deci ciclul este unul simplu. Ciclul simplu C9 conŃine toate
muchiile din graful G , deci este un ciclu eulerian.
╬
124
Algoritmul 5.
1. Se alege un vârf x0 ∈ X şi plecând de la x0 , prin traversarea fiecărei
{
muchii neconsiderate formăm un ciclu C0 = u10 , u20 ,..., ur0
0
} şi i = 0 .
2. Dacă graful parŃial format cu muchiile cuprinse în ciclul Ci coincide cu
G atunci ne oprim, Ci reprezintă ciclul eulerian căutat, altfel se
continuă.
3. Fie nodul xi , extremitate a muchiei uki din ciclul Ci şi al unei muchii ui*
care nu este în Ci . Pornind de la nodul xi , în graful parŃial al lui G cu
mulŃimea de muchii formată de muchiile nefolosite la formarea lui Ci ,
formăm un ciclu ca la pasul (1), notat Ci* .
{
4. Formăm ciclul Ci +1 = u1i +1 , u2i +1 ,..., uri +1
i +1
} pornind din xi , parcurgând
integral Ci până ajungem din nou la xi şi apoi parcurgând integral Ci*
până se ajunge la xi
5. Facem i = i + 1 şi trecem la pasul (2).
■
125
VIII. FLUX MAXIM ÎN REłELE DE TRANSPORT
8.1. ConsideraŃii generale
ω+ (Y ) = {( x , x ) ∈U x ∈ Y , x ∉ Y } ⊂ U .
i j i j
(
Cantitatea c ω − (Y ) =) ∑p ij este capacitatea tăieturii ω − (Y ) .
( )
xi , x j ∈ω− (Y )
□
DefiniŃie. Fie G = ( X , U , p ) o reŃea de transport. O funcŃie ϕ : U → ℝ +
se numeşte flux pe reŃeaua de transport G = ( X , U , p ) dacă îndeplineşte
următoarele condiŃii:
1. CondiŃia de mărginire a fluxului:
( )
pentru orice xi , x j ∈ U , avem 0 ≤ ϕ xi , x j ≤ p ij . ( )
2. CondiŃia de conservare
∑h =1
ϕˆ ( xh , xn ) ≥ ∑
h =1
ϕ ( xh , xn ) .
( xh , xn )∈U ( xh , xn )∈U
PropoziŃia 1. Fie G = ( X , U , p ) o reŃea de transport având sursa x1 ,
destinaŃia x n şi ϕ :U → ℝ + un flux oarecare în reŃeaua G , atunci:
n n
∑ ϕ ( x1 , xi ) = ∑ ϕ ( x j , xn )
i =1 j =1
( x1 , xi )∈U ( x j , xn )∈U
DemonstraŃie. RelaŃia din enunŃ exprimă faptul că fluxul care iese din x1
ajunge în x n . Avem ω − ( x1 ) = ω + ( x n ) = 0 şi se deduce că:
∑ ∑ ϕ (x i , x j ) − ∑ ϕ ( x j , x n ) =
x j ∈X (xi , x j )∈ω− (x j ) (x j , xn )∈ω− ( xn )
= ∑ ϕ(x j , xn ) − ∑− ϕ(x1 , xi )
(x j , xn )∈co− ( xn ) (x1 , xi )∈ω (xi )
□
DefiniŃie. Fie G = ( X , U , p ) o reŃea de transport având sursa x1 ,
destinaŃia x n şi ϕ :U → ℝ + un flux oarecare în reŃeaua G . Valoarea
Φ= ∑ ϕ ( x j , xn ) = ∑ ϕ ( x1 , xi )
( )
x j , xn ∈ω − ( xn ) ( x1 , xi )∈ω ( xi )
+
DemonstraŃie. Avem:
∑ ϕ ( xi , x j ) − ∑ ϕ ( xi , x j ) =
( )
xi , x j ∈ω − (Y ) ( )
xi , x j ∈ω + (Y )
=∑ ∑ ϕ ( xi , xk ) − ∑ + ϕ ( xk , x j )
xk ∈Y ( xi , x )∈ω − ( x )
=
k k ( xk , x j )∈ω ( xk )
=∑ ∑ ϕ ( xi , xk ) − ∑ + ϕ ( xk , x j )
xk ∈Y ( xi , x )∈ω − ( x )
−
k k ( xk , x j )∈ω ( xk )
− ∑ ∑ ϕ ( xi , xk ) − ∑ + ϕ ( xk , x j )
xk ∈X \Y ( xi , x )∈ω − ( x )
=
k k ( xk , x j )∈ω ( xk )
= ∑ ϕ ( x1 , x j ) = Φ
( )
x1 , x j ∈ω + x1 ( )
ceea ce demonstrează egalitatea, căci:
= ∑ ϕ ( xi , x j ) − ∑ ϕ ( xi , x j ) ≤
Φ
( xi , x j )∈ω − (Y ) ( xi , x j )∈ω + (Y )
≤ ∑ ϕ ( xi , x j ) ≤ .
( )
xi , x j ∈ω − ( Y )
≤ ∑ p ( xi , x j ) = c ω − (Y ) ( )
( xi , x j )∈ω − (Y )
□
128
8.2. Algoritmul Ford-Fulkerson
( x , x ) ∈U .
i j
Pasul II
Folosind operaŃiile de marcare ce vor fi prezentate mai jos, se cercetează
dacă fluxul iniŃial ϕ 0 este maxim; operaŃiunile de marcare constau în
următoarele:
a) se marchează sursa reŃelei x1 cu semnul „ + ”;
b) vârfurile x j ∈ ω + ( x1 ) vor fi marcate cu „ + x1 ” dacă arcul x1 , x j ( ) este
nesaturat;
c) dacă vârful x j este deja marcat şi dacă pentru un vârf x k ∈ ω + x j ( ) arcul
(x , x ) este nesaturat, atunci marcăm vârful x
j k k prin „ + x j ”;
d) dacă vârful x j este deja marcat şi dacă pentru un vârf x k ∈ ω − x j ( ) arcul
(x x ) are fluxul nenul, marcăm vârful x
k j k prin „ − x j ”.;
În urma terminării operaŃiei de marcare, putem întâlni următoarele
situaŃii:
1. Dacă destinaŃia x n a reŃelei nu s-a marcat, atunci fluxul este maxim şi
algoritmul se termină, altfel se aplică procesul (2) şi se reia pasul II.
2. Dacă destinaŃia x n s-a putut marca, atunci fluxul nu este maxim şi poate fi
măsurat astfel:
a) se alege un drum de la x1 la x n ;
b) pe arcele drumului marcat cu „ + ” fluxul se majorează cu o cantitate θ
de flux (de exemplu θ = 1 );
c) pe arcele drumului marcat cu „-“ fluxul se micşorează cu aceeaşi
cantitate θ ;
d) fluxul arcelor nemarcate nu se schimbă;
.■
129
Algoritmul are un număr finit de paşi, iar fluxul maxim se atinge când nu mai
poate fi marcată destinaŃia x n a reŃelei.
ObservaŃie. Mărimea fluxului se poate face cu mai mult decât o unitate,
evitându-se astfel prea multe operaŃii de marcare, astfel: se consideră un drum V
format din drumuri marcate cu „+” sau „-“ ce uneşte x1 cu x n , uşor de găsit
urmărind vârfurile marcate în sensul de la x n către x1 . Notăm V + mulŃimea
arcelor ( x, y ) unde y este marcat cu „+” şi V − mulŃimea arcelor ( x, y ) unde y
este marcat cu „-“. Calculăm
θ1 = min+ {c(u ) − ϕ(u )}
u∈V
θ 2 = min− ϕ(u )
u∈V
8.3. Exemple
+x1
x2
2,0 5,0 8,0
7,0
5,0
x1 x3 +x1 x5 +x2
4,0
3,0 5,0
x4
+x1
130
Vârful x1 este sursa reŃelei, vârful x5 este destinaŃia şi se verifică
următoarele:
ω − ( x1 ) = ∅ , ω + ( x 1 ) = {( x1 , x 2 ), ( x1 , x3 ), ( x1 , x 4 )}
ω − ( x5 ) = {( x 2 , x5 ), ( x 4 , x5 )}, ω + ( x5 ) = ∅
Pentru reŃeaua din figură vrem să determinăm fluxul maxim. Considerăm
( ) (
fluxul iniŃial ϕ0 xi , x j = 0 pentru orice xi , x j ∈ U . )
Pasul 2
1) Observăm prin procedeul de marcaj am putut marca destinaŃia x5 a reŃelei.
Atunci fluxul nu este maxim şi poate fi mărit.
Alegem un drum de la x1 la x5
d 1 : ( x1 , x 2 , x5 )
Fluxul se majorează cu cantitatea
θ = min+ {c(u ) − ϕ(u )} = min{2 − 0,8 − 0} = 2 ;
u∈V
(arcul ( x1 , x 2 ) se va satura).
Fluxul va avea valoarea ϕ1 = ϕ 0 + 2 = 2 .
x2
2,2 5,0 8,2
7,0
5,0
x1 x3 +x1 x5 +x4
4,0
3,0 5,0
x4
+x1
131
+x3
x2
2,2 5,0 8,2
7,0
5,0
x1 x3 +x1 x5 +x4
4,0
3,3 5,3
x4
+x3
+x3
x2
2,2 5,0 8,2
7,0
5,2
x1 x3 +x1 x5 +x2
4,2
3,3 5,3+2
x4
∑ ϕ ( xk , x j ) = ∑ ϕ ( x j , xh )
k =2 h =1
( xk , x j )∈U ( x j , xh )∈U
avem
Vârfuri Flux care intră în vârful xi Flux care iese în vârful xi
x2 3 3
x3 5 5
x4 5 5
x6 4 4
Se observă că şi PropoziŃia 1. este verificată, adică
4 5
∑ ϕ(x1 , xi ) = ∑ ϕ(x j , x6 ) = 9
i=2 j =2
133
Trecem la Pasul II din algoritmul Ford-Fulkerson
1) DestinaŃia x 6 a putut fi marcată. Alegem drumul d 1 : {x1 , x 3 , x5 , x 6 } pentru
care
θ = min{8 − 5,6 − 2,5 − 3} = 2
şi
ϕ1 = 9 + 2 = 11 .
Arcul ( x 5 , x 6 ) s-a saturat.
+x1
x2
3,(2) 4,(1)
5,(1) 4,(2)
8,(5+2) 6,(2+2) 5,(3+2)
x1 x3 x5 x6
+x1 3,(1) 10,(5)
5,(2) +x4
7,(2)
x4
+x1
+x1
x2
3,(2) 4,(1)
5,(1) 4,(2)
8,(7) 6,(4) 5,(5)
x1 x3 x5 x6
+x1 3,(1) 10,(5+5)
5,(2) +x2
7,(2+5)
+x3
x4
134
+x3
x2
3,(2+1) 4,(1+1)
5,(1) 4,(2)
8,(7) 6,(4) 5,(5)
x1 x3 x5 x6
+x1 3,(1) 10,(10)
5,(2) +x2
7,(7)
x4
x2
3,(3) 4,(2+1)
5,(1+1) 4,(2)
8,(7+1) 6,(4) 5,(5)
x1 x3 x5 x6
3,(1) 10,(10)
5,(2)
7,(7)
x4
Observăm că destinaŃia nu s-a mai putut marca. Deci fluxul este maxim ϕ = 18 .
╬
135
IX. REłELE DE PROGRAMARE A ACTIVITĂłILOR
136
9.1. Graful arc/activitate, metoda drumului critic
D(6)
R(0)
A(3)
B(2)
137
F(4)
t
G(1)
D(6)
B(2)
E(4)
• cu exceŃia cazului când între două vârfuri se formează două arce sau a celui
în care se conŃine un vârf în care atât gradul de intrare, cât şi cel de ieşire
sunt mai mari decât 1, dacă mai multe activităŃi condiŃionează aceeaşi
activitate, atunci extremităŃile finale ale activităŃilor care condiŃionează
reprezintă un vârf comun, şi anume extremitatea iniŃială a activităŃii
condiŃionate. În tabelul de mai sus, activităŃile C, D şi E condiŃionează
activitatea F şi astfel se obŃine
C(2)
D(6) F(4)
E(4)
138
• când între două vârfuri se formează două arce, ca în cazul
P(3)
Q(2)
P(3)
Q(2) Z(0)
sau
P(3) Z(0)
Q(2)
• când atât gradul de intrare, cât şi cel de ieşire dintr-un vârf sunt mai mari
decât 1 se introduc activităŃi fictive pentru a elimina situaŃia apărută. De
exemplu, dacă în graful de activităŃi s-a obŃinut situaŃia
139
F(4) H(7)
G(1)
J(3)
F(4) H(7)
G(1)
J(3)
în care fiecare vârf are fie gradul de ieşire, fie cel de intrare egal cu 1.
• în final se numerotează vârfurile crescător de la vârful s către vârful t .
Considerând proiectul prezentat în tabelul de mai sus, respectând modul de
construcŃie al grafului de activităŃi de tipul arc/activitate, rezultă reprezentarea
A(3) C(2)
1
D(6) F(4)
s 4 t
{ ( j)
3. Se determină mulŃimea A = xi ∈ X x j , xi ∈ U , t min completat . }
4. Pentru fiecare x ∈ A se determină t xmin = max t ymin + d yx .
( y , x )∈U
( )
5. Se trece la pasul 2.
6. Se iniŃializează ttMax = ttmin din caseta vârfului t .
7. Dacă s-a completat tsMax , atunci ne oprim, drumul care trece prin vârfurile
cu t xmin = t xMax este drumul optim în reŃeaua de pragramare a activităŃilor
(numit şi drum critic), altfel se continuă.
{ ( j)
8. Se determină mulŃimea B = xi ∈ X xi , x j ∈ U , t Max completat . }
9. Pentru fiecare x ∈ B se determină t xMax = min t xMax − d yx .
( y , x )∈U
( )
10. Se trece la pasul 7.
■
Exemplul 1. Considerăm un proiect în care activităŃile sunt cele din tabelul
ActivităŃile
ActivităŃile
direct precedente Durate
proiectului
(condiŃionări)
A - 3
B - 2
C A 2
D B 6
E B 4
F C,D,E 4
G E 1
141
Aşa cum s-a văzut mai sus se obŃine graful G = ( X ,U ) cu
X = {s,1, 2,3, 4, t} şi U = {( s,1) , ( s, 2 ) , (1, 4 ) , ( 2,3) , ( 2, 4 ) , ( 3, 4 ) , ( 3, t ) , ( 4, t )} .
Se obŃine următoarea matrice a ponderilor asociate duratelor de execuŃie:
0 3 2 0 0 0
0 0 0 0 2 0
0 0 0 4 6 0
D=
0 0 0 0 0 1
0 0 0 0 0 4
0 0 0 0 0 0
Graful, la care se adaugă casetele asociate fiecărui vârf, are reprezentarea
A(3) C(2)
1
D(6) F(4)
s 4 t
Aplicând pasul 1 facem t smin = 0 şi deoarece nu s-a completat ttmin are loc
prima iteraŃie a paşilor 3, 4 şi 5.
Paşi 3, 4, 5, iteraŃie 1. ObŃinem A = {1, 2} .
Pentru x =1 avem doar arcul ( s,1) şi astfel
t1min = max ( t ymin + d y1 ) = max {( 0 + 3)} = 3 .
( y ,1)∈U
Pentru . x=2 avem doar arcul ( s, 2 ) şi astfel
t2min = max ( t ymin + d y 2 ) = max {( 0 + 2 )} = 2 .
( y ,2 )∈U
Cum încă nu s-a completat ttmin se reiterează.
Paşi 3, 4, 5, iteraŃie 2. ObŃinem A = {3} .şi având doar arcul ( 2,3) rezultă
t3min = max ( t ymin + d y 3 ) = max {( 2 + 4 )} = 6 . Din nou nu s-a completat ttmin .
( y ,3)∈U
Paşi 3, 4, 5, iteraŃie 3. Ajungem la A = {4} pentru care avem arcele
(1, 4 ) , ( 2, 4 ) şi ( 3, 4 ) astfel că
142
t4min = max ( t ymin + d y 4 ) = max {( 3 + 2 ) , ( 2 + 6 ) , ( 6 + 0 )} = 8
( y ,4 )∈U
Neavând completat ttmin realizăm o nouă iteraŃie.
Paşi 3, 4, 5, iteraŃie 4. Avem A = {t} şi arcele ( 3,t ) şi ( 4,t ) de unde
rezultă
ttmin = max ( t ymin + d yt ) = max {( 6 + 1) , ( 8 + 4 )} = 12
( y ,t )∈U
Deoarece s-a completat ttmin trecem la pasul 6 şi facem ttMax = ttmin = 12 .
Imaginea care se obŃine în acest moment pentru reŃeaua de planificare a activităŃilor
este
A(3) C(2)
1
0 8 12 12
3 D(6) F(4)
s 4 t
2 6
B(2) E(4) G(1)
2 3
A(3) C(2)
1
0 0 8 8 12 12
3 6 D(6) F(4)
s 4 t
2 2 6 8
B(2) E(4) G(1)
2 3
╬
9.1. Graful vârf/activitate, metoda potenŃialului
145
U = {( 0,1) , ( 0, 2 ) , (1,3) , ( 2, 4 ) , ( 2,5 ) , ( 3, 6 ) , ( 4, 6 ) , ( 5, 6 ) , ( 5, 7 ) , ( 6,8 ) , ( 7,8 )}
Graful are reprezentarea grafică
1 A 3 C
3 2
6 F
0 4
4
s D 8 t
0 6 0
7 G
B
1
2 2
E
5 4
7. Dacă s-a completat t0i ,Max , atunci ne oprim, drumul critic este drumul care
trece prin vârfurile k în care tkt ,Max = tkt ,min , altfel se continuă.
8. Se determină mulŃimea B a vârfurilor pentru care toate arcele care ies au
completate valorile de timp maxim de început la extremităŃile finale.
9. Pentru fiecare j ∈ B se calculează t tj,Max = min tii ,Max şi apoi
( j ,i )∈U
i ,Max t ,Max
t j =t j −tj .
10. Se trece de la pasul 7.
■
146
Exemplul 3. Considerăm că lucrăm pe proiectul prezentat în exemplele
anterioare. Modul de lucru al algoritmului este similar procesului descris integral
în exemplul 2. În urma calculelor vom obŃine rezultatele trecute în următoarea
reprezentare, în care am desenat cu linie îngroşată arcele ce fac parte din
drumul critic care este C = ( 0, 2, 4, 6,8 ) şi astfel corespunde succesiunii de
activităŃi( s, B, D, F , t ) sau, eliminând activităŃile de start şi terminare, la
succesiunea ( B, D, F ) .
1 0 A 3 3 3 C 5
3 3 6 6 2 8
6 8 F 12
0 8 4 12
4
0 s 0 2 D 8 8 12 t 12
0 0 0 2 6 8 12 0 12
7 6 G 7
0 B 2
11 1 12
2 0 2 2
2 E 6
5 4 4 8
147
BIBLIOGRAFIE
148