Documente Academic
Documente Profesional
Documente Cultură
Facultatea de INFORMATICĂ
VALENTIN GÂRBAN
BUCUREŞTI – 2015
CUPRINS
ALGORITMICA GRAFURILOR........................................................................................4
2
Noţiuni introductive. Punerea problemei...............................................................................77
Algoritm pentru determinarea drumului de lungime minimă între două vârfuri dintr-un
graf..........................................................................................................................................79
3
UNIVERSITATEA TITU MAIORESCU, BUCUREŞTI
Facultatea de Informatică
Învăţământ la Distanţă
ALGORITMICA GRAFURILOR
Algoritmica grafurilor este una din disciplinele de pregătire fundamentală care, pentru
profilul INFORMATICĂ, este impusă de către Agenţia Naţională pentru Asigurarea Calităţii în
Învăţământul Superior (ARACIS) fiind esenţială pentru pregătirea studenţilor şi pentru depăşirea
procedurilor de evaluare şi acreditare. Modul de prezentare a acestui material are în vedere
particularităţile învăţământului la distanţă, la care studiul individual este determinant. Pentru orice
nelămuriri faţă de acest material vă rugăm să contactaţi tutorele de disciplină care are datoria să vă
ajute oferindu-vă toate explicaţiile necesare.
5
Structura cursului este următoarea:
SUCCES!
Coordonator disciplină: Conf. univ. dr. Valentin GÂRBAN
Tutori: Asist. univ. drd. Veronica ZANFIR, Asist. univ. Roxana DONCEA
6
UNITATEA DE ÎNVĂŢARE NR. 1
ELEMENTE DE COMBINATORICĂ
Obiective urmărite:
Rezumat:
Cuvinte cheie:
Timp de studiu:
7
LECŢIA 1 - ELEMENTE DE COMBINATORICĂ
1. Mulţimi ordonate
Adesea se consideră mulţimi finite ale căror elemente sunt aranjate într-o ordine
determinată. Exemple:
a) alfabetul unei limbi este o mulţime ale cărei elemente (literele) sunt date într-o anumită
ordine;
b) cifrele semnificative ale sistemului zecimal de numeraţie sunt cifre şi sunt date în ordinea
naturală: 0,1,2,3,4,5,6,7,8,9 .
Elementele unei mulţimi se pot da şi într-o altă ordine. Este posibil, de exemplu, ca literele
alfabetului românesc să fie aranjate fie în ordinea naturală, de la a la z, fie în ordinea inversă, de la z
la a, fie în ordinea în care sunt prezentate în abecedar, la clasa I.
Definiţia 1.1
Spunem că o mulţime finită împreună cu o ordine bine determinată de dispunere a
elementelor sale este o mulţime ordonată.
Astfel, dacă A este o mulţime finită având n elemente şi dacă fiecărui element al său i se
asociază un număr de la 1 la n numit rangul elementului astfel încât la elemente diferite ale lui A să
corespundă numere de ordine diferite, mulţimea A devine o mulţime ordonată. Prin urmare, orice
mulţime finită poate deveni o mulţime ordonată, ordinea elementelor stabilindu-se prin numerotarea
elementelor mulţimii respective. Mulţimea ordonată obţinută se va nota cu a1, a2 ,..., an , unde
ordinea elementelor este dată de indici.
O mulţime ordonată este caracterizată prin elementele din care este formată şi prin ordinea
în care sunt considerate acestea.
Astfel, două mulţimi ordonate sunt diferite dacă ele se deosebesc fie prin elementele din
care sunt formate, fie prin ordinea lor.
De exemplu, mulţimile A 1,2,3,..., n şi B b1, b2 ,..., bn sunt ordonate şi diferă
prin elementele din care sunt formate, iar mulţimile C 1,2,3 şi D 1,3,2 sunt, de
asemenea, ordonate şi au aceleaşi elemente, dar se deosebesc prin ordinea în care acestea sunt
dispuse în fiecare mulţime.
8
2. Permutări
Fie A o mulţime finită cu n elemente. Această mulţime se poate ordona în mai multe moduri,
obţinându-se mulţimi ordonate, diferite, care se deosebesc între ele numai prin ordinea elementelor.
Fiecare din mulţimile ordonate care se formează cu cele n elemente ale mulţimii A, se numeşte
permutare a acestei mulţimi sau o permutare de n elemente. Numărul permutărilor de n elemente se
notează cu Pn şi se citeşte „permutări de n”. Ne propunem să determinăm numărul Pn al
permutărilor de n elemente.
Vom face întâi un raţionament inductiv şi rezultatul pe care-l vom deduce îl vom demonstra
prin metoda inducţiei matematice.
Avem:
1. O mulţime cu un singur element A1 a1 poate fi ordonată într-un singur mod, deci
P1 1 .
2. O mulţime cu două elemente A2 a1, a2 poate fi ordonată în două moduri, obţinându-
se două permutări: a1, a2 şi a2 , a1 . Deci P2 2 1 2 .
3. O mulţime cu trei elemente A3 a1, a2 , a3 poate fi ordonată în
6 moduri, permutările acestei mulţimi fiind următoarele: a1, a2 , a3 , a1, a3 , a2 , a2 , a1, a3 ,
a2 , a3 , a1 , a3 , a1, a2 , a3 , a2 , a1 . Deci, P3 6 1 2 3 .
Pe baza acestui raţionament prin inducţie incompletă putem formula următoarea propoziţie:
not
„Numărul permutărilor de n elemente este Pn 1 2 3 ... n n! (n factorial)”.
Această propoziţie trebuie demonstrată prin metoda inducţiei matematice. Numai atunci
putem afirma că rezultatul exprimat în propoziţie este valabil pentru orice număr natural n.
Teorema 2.1
Pentru orice număr natural n 1 , numărul permutărilor de n elemente este Pn n!.
Demonstraţie
Să notăm cu P n egalitatea Pn n!
1. P 1 este adevărată, după cum am constat în cadrul raţionamentului inductiv anterior.
2. Presupunem P k adevărată şi să demonstrăm, pe baza acestei presupuneri, să şi
P k 1 este adevărată. Fie o mulţime ordonată cu k 1 elemente. Ne propunem că ordonăm în
toate modurile posibile această mulţime. Ultimul loc, al k 1 -lea, poate fi ocupat de oricare din
cele k 1 elemente ale mulţimii. Se obţin astfel k 1 moduri diferite de a ocupa ultimul loc. Să
considerăm unul dintre aceste moduri de ordonare. Unul dintre elementele mulţimii va avea rangul
k 1 . Elementele rămase, în număr de k, trebuie să ocupe primele k locuri. Conform ipotezei de
inducţie, aceasta se poate face în Pk k ! moduri diferite. Pentru fiecare din cele k 1 moduri
diferite de ocupare a poziţiei k 1 se procedează similar, rezultând astfel k 1 Pk moduri de a
ordona o mulţime finită care are k 1 elemente distincte. Deci,
Pk 1 k 1 Pk k 1 k ! k 1! . Prin urmare, am arătat că P k 1 este adevărată.
Rezultă atunci că P n este adevărată pentru orice n , n 1.
Prin convenţie, mulţimea vidă poate să fie ordonată într-un singur mod, deci P0 0! 1.
9
3. Aranjamente
Fie o mulţime finită A cu n elemente şi k , k n . Ne propunem să determinăm
numărul submulţimilor ordonate, cu câte k elemente fiecare, extrase din elementele mulţimii A.
Definiţia 3.1
Dacă A este o mulţime finită cu n elemente, atunci submulţimile ordonate ale lui A, având
fiecare câte k elemente, unde 0 k n , se numesc „aranjamente de n elemente luate câte k”.
k
Numărul aranjamentelor de n elemente luate câte k se notează An şi se citeşte „aranjamente
de n luate câte k”.
Să observăm că două aranjamente de n elemente luate câte k diferă între ele atât prin natura
elementelor, cât şi prin ordinea lor. De exemplu, dacă A a1, a2 , a3 , atunci din elementele sale
se pot constitui:
1) 3 submulţimi având fiecare câte un element: a1 , a2 , a3 ; acestea se deosebesc
între ele numai prin natura elementelor, iar numărul lor este A3 3 ;
1
2) 6 submulţimi ordonate având fiecare câte 2 elemente: a1, a2 , a1, a3 , a2 , a1 ,
a2 , a3 , a3 , a1 , a3 , a2 ; acestea se deosebesc între ele fie prin natura elementelor, fie prin
ordinea elementelor, iar numărul lor este A3 6 3 2 ;
2
3) 6 submulţimi ordonate având fiecare câte 3 elemente: a1, a2 , a3 , a1, a2 , a3 ,
a2 , a1, a3 , a2 , a3 , a1 , a3 , a1, a2 , a3 , a2 , a1 .
Acestea se deosebesc între ele numai prin ordinea lor, iar numărul lor este A3 6 3 2 1.
3
Mai observăm că în acest caz, în care numărul k al elementelor fiecărei submulţimi coincide cu
numărul n al elementelor mulţimii A, aranjamentele de n elemente luate câte n coincid cu
permutările de n elemente ale lui A.
k
Ne propunem că găsim o formulă pentru calculul numărului An . Raţionamentul inductiv
k
făcut pe exemplul anterior ne sugerează să considerăm că numărul An poate fi calculat cu formula
următoare:
Ank n n 1 n 2 ... n k 1 .
Vom demonstra formula pentru orice k, n , cu 0 k n .
Teorema 3.2
Dacă n şi k sunt numere naturale astfel încât 0 k n , atunci:
Ank n n 1 n 2 ... n k 1 .
Demonstraţie
Arătăm mai întâi că An n k Ank . Într-adevăr, să repartizăm oricare k 1
k 1
elemente extrase din n elemente date, pe k 1 locuri. Pentru aceasta, se pot lua mai întâi oricare k
elemente şi aranja pe primele k locuri din cele k 1 , aceasta făcându-se în An moduri. Mai
k
observăm că în fiecare din aceste cazuri rămân neutilizate n k elemente din cele n ale lui A.
Oricare dintre aceste n k elemente se poate pune pe al k 1 -lea loc. Astfel, în fiecare din cele
10
Ank moduri de aranjare a k elemente pe primele k locuri, obţinem n k posibilităţi prin care
unul din cele n k elemente rămase ocupă al k 1 -lea loc. Rezultă că An
k 1
Ank n k .
Având în vedere că An n şi formula demonstrată anterior, obţinem, succesiv:
1
k : 2 : An2 An1 n 1 n n 1 ;
k : 3: An3 An2 n 2 n n 1 n 2 ;
.........................................................................
k : k : Ank Ank 1 n k 1 n n 1 n 2 ... n k 1 ,
teorema fiind complet demonstrată. În continuare vom da o altă exprimare formulei găsite şi vom
arăta că este adevărată şi pentru cazurile k 0 şi k n .
Amplificăm expresia găsită pentru An cu n k !. Obţinem
k
Rezolvare
Fie A a1, a2 ,..., ak şi B b1, b2 ,..., bn cu k n .
Dacă f : A B este o funcţie injectivă, atunci ai a j din A vom avea
f ai f a j în B. Rezultă că oricărei funcţii injective f : A B îi corespunde o submulţime
ordonată formată din k elemente distincte extrase din B. Invers, fiecare submulţime ordonată având
k elemente distincte din B, de exemplu: Bi bi1 , bi2 ,..., bik defineşte o funcţie injectivă
11
f : A B , care realizează corespondenţa: f a j bi j , 1 j k . Am arătat astfel că numărul
funcţiilor injective definite pe o mulţime A cu k elemente, cu valori într-o mulţime B cu n elemente,
k n este egal cu numărul submulţimilor ordonate, având câte k elemente ale lui B, deci egal cu
Ank .
În cazul particular k n , deci când A şi B au acelaşi număr de elemente, atunci orice
funcţie injectivă f : A B este neapărat bijectivă.
Vom arăta că în acest caz funcţia f este şi surjectivă. Presupunem prin absurd că f nu ar fi
în B, rezultă în
surjectivă. Cum f este injectivă, deci ai a j din A implică f ai f a j
primul rând că Im f f A f x x A are exact n elemente distincte din B. Din
presupunerea făcută că f nu este surjectivă rezultă că b B , astfel încât x A ,
f x b , deci b f A , de unde ar rezulta că f A are mai puţin de n elemente, deci
contradicţie cu concluzia obţinută anterior, dedusă pe baza injectivităţii lui f. Contradicţia arată că
presupunerea făcută este falsă, deci f este neapărat surjectivă. Fiind şi injectivă, rezultă că f este
bijectivă. Prin urmare, în cazul particular k n al aplicaţiei rezolvate aici rezultă că numărul
funcţiilor bijective definite pe o mulţime A cu n elemente cu valori într-o mulţime B tot cu n
elemente este egal cu An Pn n! .
n
4. Combinări
Fie mulţimea A a1, a2 , a3 şi să considerăm toate submulţimile sale, care sunt
următoarele:
1) mulţimea vidă: ;
2) 3 submulţimi formate din câte un singur element: a1 , a2 , a3 ;
3) 3 submulţimi formate din câte două elemente fiecare: a1, a2 , a1, a3 , a3 , a2 ;
4) mulţimea totală: a1, a2 , a3 .
Faţă de cazul anterior, discutat în paragraful „Aranjamente”, când am considerat toate
submulţimile ordonate ale lui A formate din 0 sau 1, sau 2, sau 3 elemente, în cazul de faţă am
considerat, de asemenea, toate submulţimile lui A formate din 0 sau 1, sau 2, sau 3 elemente, dar
fără să luăm în considerare şi ordinea elementelor în fiecare submulţime. În cazul general, fiind dată
o mulţime finită cu n elemente, ne propunem să calculăm numărul submulţimilor sale având fiecare
câte k elemente, unde 0 k n .
Definiţia 4.1
Fie A o mulţime finită cu n elemente şi k , cu 0 k n . Submulţimile lui A având
fiecare câte k elemente se numesc „combinări de n elemente luate câte k”.
12
k
Numărul combinărilor de n elemente luate câte k se notează cu Cn şi se citeşte „combinări
de n luate câte k”.
k
Ne propunem să găsim o formulă pentru calculul numărului Cn .
Din exemplul analizat anterior rezultă: C30 1 ; C31 3 ; C32 3 ; C33 1 şi
C30 C31 C32 C33 8 23 , acesta fiind numărul tuturor submulţimilor mulţimii cu 3 elemente,
a1, a2 , a3 .
Pentru cazul general să mai observăm că Cn 1 , deoarece orice mulţime A cu n elemente
0
are numai o submulţime fără nici un element, şi anume: mulţimea vidă. Pentru k 1 , avem
Cnk Cn1 n , deoarece o mulţime cu n elemente A a1, a2 ,..., an are n submulţimi formate
dintr-un singur element şi anume submulţimile a1 ,a2 ,...,an . Formula generală care permite
k
exprimarea numărului Cn în funcţiile de n şi k este dată de teorema următoare.
Teorema 4.2
Fie k şi n , astfel încât 0 k n . Atunci
Demonstraţie
Fie A o mulţime cu n elemente şi k , cu 0 k n . Considerăm toate submulţimile
mulţimii A care au câte k elemente. Ordonând fiecare dintre aceste submulţimi în toate modurile
posibile, obţinem toate submulţimile ordonate ale lui A care au câte k elemente. Numărul acestora
este An . Atunci putem scrie relaţia: An Cn Pk , deoarece numărul tuturor submulţimilor de
k k k
k
câte k elemente ale lui A este egal cu Cn , iar fiecare submulţime de câte k elemente poate fi
ordonată în Pk moduri. Rezultă atunci:
Ank
Cnk
Pk
k
Utilizând cele două exprimări pentru An se obţin formulele:
n n 1 n 2 ... n k 1
Cnk
k!
n!
Cnk .
n k ! k !
Vom pune în evidenţă în continuare o legătură între numărul de combinări şi numărul
funcţiilor strict crescătoare definite între mulţimi finite, ordonate.
Dacă A a1, a2 ,..., an este o mulţime finită, ordonată, vom scrie ai a j , dacă
elementul ai precede pe a j , adică dacă i j . Altfel spus, relaţia de ordine este relativă la indicii
elementelor mulţimii A.
13
Dacă A este o mulţime ordonată, atunci ordinea pe A induce o ordine pe orice submulţime a
1 2 m
sa. Concret, dacă A a1, a2 ,..., an şi B A , B ai , ai ,..., ai , atunci ai precede pe
aik în B (şi scriem ai aik ), dacă ai precede pe aik în A, adică i ik şi vom spune că aceasta
este ordinea indusă pe B de ordinea de pe A.
Fie A a1, a2 ,..., am şi B b1, b2 ,..., bn două mulţimi ordonate. O funcţie
f : A B se numeşte strict crescătoare dacă ai , a j A , cu ai a j , rezultă
f ai f a j în B.
Dacă A şi B au acelaşi număr de elemente m n , atunci există o unică funcţie strict
crescătoare de la A la B, u : A B , care realizează corespondenţele: u ai bi , i ,
1 i n . În particular, dacă A a1, a2 ,..., an , atunci unica funcţie strict crescătoare definită pe
A şi cu valori tot în A este funcţia identică a mulţimii A:
1A : A A , 1A ai ai , i , 1 i n .
În continuare, ne propunem să determinăm numărul funcţiilor strict crescătoare definite pe o
mulţime ordonată A cu m elemente, cu valori într-o mulţime B cu n elemente. Constatăm că pentru a
exista o astfel de funcţie este necesar ca m n .
Presupunem deci că m n şi facem următoarele notaţii:
F c A, B mulţimea funcţiilor strict crescătoare definite pe A cu valori în B;
P m B mulţimea tuturor submulţimilor lui B, care au câte m elemente fiecare.
14
Consecinţă
Numărul funcţiilor strict crescătoare definite pe o mulţime ordonată A cu m elemente, cu
valori într-o mulţime B cu n elemente, m n , este egal cu numărul submulţimilor cu câte m
m
elemente ale lui B, deci este egal cu Cn .
În continuare vom stabili câteva proprietăţi ale numerelor Cn , 0 k n . Aceste
k
proprietăţi exprimă diferite relaţii între submulţimile unei mulţimi şi se pot demonstra fie direct,
k
utilizând formula de calcul pentru Cn , fie bazându-ne pe raţionamente cu mulţimi.
Demonstraţie
Într-adevăr, avem:
n! n!
Cnk Cnn k .
n k ! k ! n k ! n n k !
Egalitatea exprimă faptul că numărul submulţimilor cu k elemente ale lui A este egal cu
numărul submulţimilor cu n k elemente ale aceleiaşi mulţimi A. Să prezentăm şi demonstraţia
bazată pe raţionamente cu mulţimi. Fie A o mulţime cu n elemente şi X o submulţime a lui A cu k
elemente, aleasă arbitrar. Acestei mulţimi îi asociem în mod unic o submulţime bine determinată, cu
(n k ) elemente a lui A, şi anume: C X (complementara lui X). Cum X a fost aleasă arbitrar,
rezultă că fiecărei submulţimi cu k elemente a lui A îi corespunde o singură submulţime cu n k
elemente a lui A. Prin urmare, numărul submulţimilor cu k elemente ale lui A este egal cu numărul
nk
submulţimilor sale cu (n k ) elemente, adică are loc relaţia Cn Cn
k
.
Pentru cazul general al unei mulţimi finite cu n elemente, afirmaţia rezultă din teorema
următoare.
Teorema 4.2.1
n
Numărul tuturor submulţimilor unei mulţimi formate din n elemente este egal cu 2 .
Demonstraţie
Vom aplica metoda inducţiei matematice. Fie P n afirmaţia teoremei.
1) P 0 este adevărată, deoarece pentru n 0 obţinem mulţimea vidă, care are o singură
submulţime, şi anume ea însăşi;
15
2) presupunem P k adevărată şi să demonstrăm că şi P k 1 este adevărată. Fie
Bk b1, b2 ,..., bk şi admitem că Bk are 2k submulţimi. Să arătăm că mulţimea
Bk 1 b1, b2 ,..., bk , bk 1 are 2k 1 submulţimi. Fie cele 2k submulţimi ale lui Bk . Din fiecare
k
submulţime a lui Bk se obţine o nouă submulţime a lui Bk 1 , deci se obţin încă 2 submulţimi ale
submulţimi ale mulţimii Bk 1 . Deci, P k 1 este
k 1
lui Bk 1 . În total sunt deci 2 2 2
k k
Exemplu:
1) n 0 ; 2 1 P B0 ;
0
4) n 3 ; 2 8 ; B3 b1, b2 , b3 ; b1 ; b2 ; b1, b2 ; b3 ; b1, b3 ;
3
16
4.4 Triunghiul lui Pascal
Cu ajutorul formulei de recurenţă pentru calculul numărului de combinări putem calcula
Cnk , dacă se cunosc Cnk1 şi Cnk11 . Valorile numerelor Cnk se vor scrie sub forma unui tabel
triunghiular numit „triunghiul lui Pascal”. În linia n 1 a a tabelului sunt aşezate în ordine
numerele Cn , Cn , Cn ,..., Cn . Cum Cn Cn 1 , acestea două se completează de la sine pe orice
0 1 2 n 0 n
rând, iar numerele rămase se calculează cu ajutorul formulei de recurenţă, astfel: pentru calculul lui
Cnk se vor aduna numerele din linia precedentă care se află în stânga şi dreapta lui Cnk .
Fig. 1
Exemplu: C6 C5 C5 10 10 20 .
3 2 3
a b 1 a b
a b 2 a 2 2ab b2
a b 3 a3 3a 2b 3ab2 b3
a b 4 a4 4a3b 6a 2b2 4ab3 b4
a b 5 a5 5a 4b 10a3b2 10a 2b3 5ab4 b5 .
Constatăm că toţi coeficienţii monoamelor din membrul drept ai acestor formule sunt tocmai
numerele din linia triunghiului lui Pascal corespunzătoare exponentului n din membrul stâng.
Pentru cazul general, unde n este un număr natural oarecare, are loc:
17
Formula binomului lui Newton
a b 1 C10a C11b a b .
2. Presupunem P k adevărată pentru n k şi demonstrăm că şi P k 1 este
adevărată. Fie, deci, adevărată relaţia:
Ck0 1 Ck01 ; Ck0 Ck1 Ck1 1,..., Ckm Ckm1 Ckm11,..., Ckk 1 Ckk Ckk1 ,
k nk k
5. Termenul Cn a b , cu numărul de ordine k 1 din dezvoltarea binomului lui
Newton, se numeşte termenul de rang k 1 , se notează cu Tk 1 şi se mai numeşte termenul
general al dezvoltării:
Tk 1 Cnk a n k bk , k 0,1,2,..., n .
Relaţia de recurenţă între doi termeni consecutivi ai dezvoltării se poate stabili uşor, scriind
k k 1
relaţia dintre Cn şi Cn . Avem:
nk b
Deci, Tk 2 Tk 1 .
k 1 a
5.2 Identităţi în calculul cu combinări
k
În paragrafele anterioare am stabilit deja câteva identităţi verificate de binomiali Cn ,
0 k n:
Cnk Cnn k (1)
Ultima relaţie se poate obţine acum şi din formula binomului lui Newton, pentru a b 1.
Dacă vom lua şi a 1 şi b 1 , tot din formula binomului lui Newton se obţine:
Cn0 Cn1 Cn2 Cn3 ... 1 Cnk ... 1 Cnn 0 .
k n
(4)
Adunând şi respectiv scăzând relaţiile (3) şi (4), se obţine:
19
LECŢIA 2 – EXTENSII ŞI GENERALIZĂRI
În continuare vom prezenta alte concepte importante din combinatorică. Acestea vor
completa şi extinde în mod natural pe cele studiate anterior şi vor contribui la o mai bună înţelegere
şi aprofundare a lor.
6.1 Aranjamente cu repetiţie
Definiţia 6.1.1
Fie A . Se numeşte cuvânt cu elemente din A un sistem finit ordonat de elemente din A,
scris astfel: a1a2 ...ak . Numărul k se numeşte lungimea cuvântului a1a2 ...ak . Cuvântul care nu
conţine nici un element din A se numeşte cuvântul vid şi are lungimea zero.
Vom spune că două cuvinte din A, respectiv a1a2 ...as şi b1b2 ...bk sunt egale dacă au
aceeaşi lungime, deci s k şi ai bi , i , 1 i k .
Pentru cuvântul a1a2 ...ak se mai utilizează şi notaţia a1, a2 ,..., ak . Cuvintele de lungime
2 se mai numesc perechi ordonate, cele de lungime
3 – triplete şi în general cele de lungime k se numesc k-upluri ordonate.
Elementele a1, a2 ,..., ak care compun cuvântul a1a2 ...ak se numesc componente ale
cuvântului.
Deosebirile dintre noţiunea de cuvânt şi cea de mulţime sunt următoarele.
i) la o mulţime nu contează ordinea în care sunt scrise elementele sale, în timp ce la un
cuvânt ordinea elementelor este esenţială; două cuvinte formate din aceleaşi elemente (cel puţin
două dintre ele fiind diferite), dar aşezate în ordine diferită, sunt distincte; de exemplu,
abca aabc ;
ii) toate elementele unei mulţimi sunt distincte, în timp ce într-un cuvânt componentele se
pot repeta.
Fie Nk 1,2,3,..., k mulţimea primelor k numere naturale şi A o mulţime oarecare. Fie
f : Nk A funcţia care realizează corespondenţa: f i ai , 1 i k , adică numărului i din
N k îi corespunde, prin funcţia f, elementul ai din A.
Să notăm prin F N k , A mulţimea funcţiilor definite pe N k cu valori în A şi prin
Cuvk A mulţimea cuvintelor de lungime k cu elementele din A.
Are loc următoarea teoremă:
Teorema 6.1.2
Fie A o mulţime oarecare şi Nk 1,2,..., k . Există o bijecţie între mulţimea F N k , A
a funcţiilor definite pe N k cu valori în A şi mulţimea Cuvk A a cuvintelor de lungime k cu
elemente din A.
Demonstraţie
Definim funcţia :F Nk , A Cuvk A prin f a1a2 ...ak , unde f i ai ,
1 i k . Arătăm că este o funcţie bijectivă.
20
a) este injectivă. Într-adevăr, fie f şi g F N k , A , cu f a1a2 ...ak ,
g b1b2 ...bk şi f g . Din definiţia egalităţii a două cuvinte rezultă că ai bi ,
i , 1 i k , deci f i g i i Nk , adică f g . Prin urmare este injectivă.
b) este surjectivă. Într-adevăr, fie a1a2 ...ak Cuvk A un cuvânt de lungime k format
cu elemente din A, ales arbitrar. Există o funcţie f : Nk A , definită prin f i ai , i ,
1 i k care are, evident, proprietatea că f a1a2 ...ak , deci este surjectivă. Fiind
injectivă şi surjectivă, funcţia este bijectivă, teorema fiind astfel demonstrată. Să mai menţionăm
că în teorema 6.1.2 mulţimea N k se poate înlocui cu orice mulţime finită cu k elemente.
Definiţia 6.1.3
Fie dată o mulţime A cu n elemente şi k un număr natural. Cuvintele de lungime k formate
cu elemente din A se numesc aranjamente cu repetiţie de n elemente luate câte k.
k
Numărul lor se notează cu An . Să calculăm acest număr. El este egal cu numărul
elementelor mulţimii Cuvk A , unde A are n elemente. Având în vedere şi rezultatul demonstrat
în teorema 6.1.2, rezultă că numărul An este egal cu numărul elementelor mulţimii F N k , A ,
k
deci cu numărul funcţiilor definite pe o mulţime formată din k elemente, cu valori într-o mulţime cu
n elemente. Pentru aceasta însă avem următorul rezultat:
Teorema 6.1.4
Numărul funcţiilor definite pe o mulţime formată din „k” elemente cu valori într-o mulţime
k
formată din „n” elemente este n .
Demonstraţie
Fie Bk b1, b2 ,..., bk şi An a1, a2 ,..., an două mulţimi având k, respectiv n
elemente. Să arătăm că numărul funcţiilor f : Bk An este egal cu n . Vom face demonstraţia
k
valori în mulţimea An a1, a2 ,..., an , fiecare astfel de funcţie ducând unicul element al
mulţimii B1 , într-unul din cele n elemente ale mulţimii An :
f1 b1 a1;
f 2 b1 a2 ;
f n b1 an .
2) Să arătăm că P k P k 1 . Fie mulţimile Bk b1, b2 ,..., bk şi
Bk 1 b1, b2 ,..., bk , bk 1 . Cum P k este adevărată rezultă că numărul funcţiilor
21
f : Bk An este egal cu n k . Dacă f : Bk An este o funcţie oarecare dintre cele n k funcţii,
pentru 1 j k
atunci definim încă n funcţii: fi : Bk 1 An , 1 i n , prin fi b j f b j
şi fi bk 1 ai , unde 1 i n . Aşadar, pentru fiecare funcţie f : Bk An se obţin încă n
funcţii fi : Bk 1 An . Mai mult, toate funcţiile f : Bk 1 An sunt de acest tip. Rezultă că
numărul funcţiilor f : Bk 1 An este n n n , prin urmare P k 1 este adevărată.
k k 1
Rezultă atunci că P k este adevărată pentru orice k , teorema fiind demonstrată. Aşadar,
conform teoremelor 6.1.2 şi 6.1.4 rezultă că numărul „aranjamentelor cu repetiţie de n elemente
luate câte k” este dat de relaţia:
Ank nk
şi coincide cu numărul funcţiilor definite pe o mulţime cu k elemente, cu valori într-o mulţime cu n
elemente.
Formarea cuvintelor cu elemente dintr-o mulţime poate fi descrisă intuitiv astfel:
presupunem că toate elementele mulţimii A au fost introduse într-o urnă şi apoi din această urnă
extragem elemente, unul după altul, notând de fiecare dată elementul extras şi apoi îl introducem
din nou în urnă, înainte de efectuarea următoarei extrageri. După efectuarea numărului de k
extrageri, obţinem un cuvânt de lungime k (cu elementele aşezate în ordinea ieşirii lor din urnă),
compus din elemente ale mulţimii A şi care, evident, se pot repeta.
Dacă vom presupune că după fiecare extragere nu mai punem din nou în urnă elementul
extras, următoarea extragere făcându-se, deci, din elementele rămase până la extragerea imediat
anterioară, atunci în cuvântul obţinut nu se vor mai repeta elemente din A. Un astfel de cuvânt va fi
compus din k elemente diferite din A aşezate în componenţa cuvântului în ordinea extragerii. Astfel
de cuvinte în care componentele nu se repetă se numesc mulţimi ordonate.
Fiind dată o mulţime A cu n elemente şi 0 k n , se pot forma diverse submulţimi
ordonate cu câte k elemente fiecare, extrase din mulţimea A. Submulţimile ordonate ale lui A având
fiecare câte k elemente, unde 0 k n , am văzut că se numesc aranjamente (fără repetiţie) de n
k
elemente luate câte k, numărul lor este notat cu An şi este dat de relaţia
22
Fie :F Nk , A Cuvk A , din teorema 6.1.2. Rezultă că orice element din
Inj Nk , A Cuvk A este un cuvânt de lungime k, format cu elemente din A şi ale cărui
componente nu se repetă. Prin urmare, induce o funcţie
: Inj Nk , A A k A ,
f a1a2 ...ak , unde f i ai , 1 i k . Cum f f şi ţinând seama de rezultatul
formulat şi demonstrat în teorema 6.1.2, rezultă că are loc şi următoarea teoremă:
Teorema 6.1.5
Funcţia : Inj Nk , A A k A este bijectivă.
Fig. 2
6.2 Permutări cu repetiţie
În paragraful 2 s-au studiat permutările fără repetiţie, iar în aplicaţia 3.3 s-a dat o
interpretare a permutărilor în termeni de funcţii bijective şi s-a făcut şi legătura cu aranjamentele
(fără repetiţie) de n elemente luate câte n.
În continuare ne vom ocupa de permutările cu repetiţie.
Fie A o mulţime cu n elemente, A a1, a2 ,..., an . Vom defini mai întâi conceptul de tip
al unui cuvânt format cu elemente din A. Fie un astfel de cuvânt. Notăm cu mi numărul
care arată de câte ori intră elementul ai în compunerea cuvântului . Dacă ai nu apare în scrierea
lui , atunci vom lua mi 0 .
Definiţia 6.2.1
Sistemul de numere m1, m2 ,..., mn se numeşte tipul cuvântului şi vom spune că
este de tip m1, m2 ,..., mn .
Exemplu: dacă A a1, a2 , a3 , a4 , a5 şi a1a3a5a2a3a1a1 , atunci este un cuvânt
de tip 3,1,2,0,1 .
23
Două cuvinte de acelaşi tip pot să difere unul de altul numai prin ordinea componentelor,
deoarece fiind de aceleaşi tip, elementele din A care apar în aceleaşi cuvinte sunt aceleaşi şi apar de
acelaşi număr de ori.
Definiţia 6.2.2
Pentru un tip de cuvânt dat, orice cuvânt cu elementele mulţimii A care are acelaşi tip se
numeşte permutare cu repetiţie de acest tip.
Exemplu: fie A a1, a2 , a3 , a4 şi tipul 2,3,0,1 . Atunci cuvintele a1a2a4a2a2a1 şi
a2a1a1a4a2a2 sunt permutări cu repetiţie de tipul dat.
Notăm cu P m1, m2 ,..., mn numărul permutărilor cu repetiţie de tip m1, m2 ,..., mn şi
ne propunem să calculăm acest număr. Pentru aceasta vom demonstra rezultatul următor.
Teorema 6.2.3
Numărul permutărilor cu repetiţie de tip m1, m2 ,..., mn este:
P m1, m2 ,..., mn
m1 m2 ... mn ! .
m1 !m2 !...mn !
Demonstraţie
Fie A a1, a2 ,..., an şi tipul m1, m2 ,..., mn . Ne propunem să calculăm numărul
permutărilor cu repetiţie (deci al cuvintelor) de tip m1, m2 ,..., mn de lungime
m1 m2 ... mn .
Să presupunem că mi , mi ,..., mi sunt nenule, iar celelalte componente ale tipului
1 2 k
considerat sunt nule. Fie următoarea permutare cu repetiţie (cuvânt) de tipul considerat:
ai ai ...ai ai ai ...ai ... ai ai ...ai .
1 1 1 2 2 2 k k k
Pentru a obţine toate permutările cu repetiţie de acest tip vom proceda în modul descris în
cele ce urmează.
Mai întâi renumerotăm componentele cuvântului , obţinând scrierea notată cu pentru
acelaşi cuvânt :
m m mik
a1i1 ai21 ...ai i1 ai12 ai22 ...ai i2 ...ai1k ai2k ...ai .
1 2 k
După renumerotare toate elementele care formează cuvântul au devenit diferite între ele.
Numărul tuturor permutărilor care se pot face cu elementele „diferite între ele” din cuvântul este
egal cu !, unde mi mi ... mi şi reprezintă lungimea cuvântului . Dacă într-o
1 2 k
permutare oarecare dintre cele ! permutări se şterg indicii atribuiţi elementelor componente în
etapa de renumerotare, se obţine o permutare cu repetiţie de acelaşi tip cu . Este clar însă că în
acest mod se poate obţine o aceeaşi permutare cu repetiţie de mai multe ori. Astfel, permutarea
iniţială se poate obţine din toate permutările componentelor cuvântului care se obţin
1 2 mi1
efectuând o permutare oarecare a celor mi componente: ai1 , ai1 ,..., ai , apoi efectuând o
1 1
1 2 mi2
permutare a celor mi componente: ai2 , ai2 ,..., ai şi tot aşa până la ultimul indice, deci
2 2
24
1 2 mik
efectuând o permutare oarecare a celor mi componente: ai , ai ,..., ai şi numai în acest mod.
k k k k
1 2 mi
Dar numărul permutărilor componentelor ai , ai ,..., ai 1 este egal cu mi ! , al componentelor
1 1 1 1
mi2 mik
a1i2 , ai22 ,..., ai 1
este mi ! şi tot aşa până la ultimul indice ik , al componentelor ai , ai ,..., ai
2 k k
2
2 k
este mi ! . Mai observăm că aceste permutări se pot combina între ele independent una de alta. Prin
k
urmare, cuvântul se poate obţine din exact mi ! mi ! ... mi ! permutări ale componentelor
1 2 k
cuvântului . În această manieră se poate obţine orice permutare cu repetiţie de tip
m1, m2 ,..., mn şi de lungime .
Prin urmare, numărul permutărilor cu repetiţie de tip m1, m2 ,..., mn este mai mic de
mi1 ! mi2 ! ... mik ! m1! m2 ! ... mn ! (dacă m j 0 , atunci m j ! 1) ori decât numărul
permutărilor componentelor cuvântului , care este egal cu
! mi1 mi2 ... mik ! m1 m2 ... mn ! . Am demonstrat că are loc relaţia:
P m1, m2 ,..., mn
m1 m2 ... mn ! .
m1 ! m2 ! ... mn !
Exemplu:
Pentru desfăşurarea unui joc, un număr de 15 jucători trebuie să formeze
3 echipe astfel încât prima echipă să aibă 5 jucători, a doua 4 şi a treia 6 jucători. În câte moduri se
pot forma aceste echipe?
Rezolvarea problemei constă în determinarea numărului cuvintelor de lungime 15, fiecare de
tipul 5,4,6 . Acest număr este tocmai numărul permutărilor cu repetiţie de tip 5,4,6 , adică:
15!
P 5,4,6 630630 .
5! 4! 6!
În cazul particular al permutărilor cu repetiţie de tipul n k , k , avem:
P n k, k
n k k ! n! C k ,
n k !k ! n k !k ! n
deci numărul permutărilor cu repetiţie din n k litere egale cu a şi k litere egale cu b este egal cu
Cnk .
6.3 Combinări cu repetiţie
În paragraful 6.2 (permutări cu repetiţie) am determinat numărul cuvintelor de un tip dat
(teorema 6.2.3).
În continuare ne propunem să determinăm numărul tipurilor diferite pe care le pot avea
cuvintele de lungime k, cu elemente dintr-o mulţime A care are n elemente.
Fiecare astfel de tip este un sistem de n numere naturale k1, k2 ,..., kn , astfel încât
k1 k2 ... kn k , cu precizarea că unele dintre numerele ki , 1 i n , pot fi şi zero. Este
evident că numărul k poate fi mai mic, egal sau mai mare, decât numărul n şi că oricare ar fi
25
sistemul de numere naturale k1, k2 ,..., kn , cu proprietatea k1 k2 ... kn k , există cel
puţin un cuvânt de lungime k şi de tip k1, k2 ,..., kn , cu
elemente dintr-o mulţime care n
elemente.
Concretizând, dacă mulţimea A a1, a2 ,..., an , atunci într-un astfel de cuvânt elementul
ai apare de ki ori şi numărul ki , 1 i n se numeşte multiplicitatea lui ai .
Definiţia 6.3.1
Sistemele de numere naturale k1, k2 ,..., kn cu proprietatea k1 k2 ... kn k se
k
numesc combinări cu repetiţie de n elemente luate câte k, iar numărul lor se notează cu Cn .
Vom demonstra următorul rezultat:
Teorema 6.3.2
Numărul combinărilor cu repetiţie de n elemente luate câte k este dat de formula:
Cnk
n k 1! C k .
k ! n 1!
n k 1
Demonstraţie
Fie A a1, a2 ,..., an . Conform definiţiei, o combinare cu repetiţie de n elemente luate
câte k, este un sistem de numere naturale k1, k2 ,..., kn , astfel încât k1 k2 ... kn k . Acest
sistem poate fi scris ca un cuvânt format numai din 0 şi 1, înlocuind fiecare număr ki 0 prin
111...1 şi punând 0 după fiecare grupă de unităţi, cu excepţia ultimei grupe. Dacă avem ki 0 ,
ki ori
atunci pe acel loc se lasă 0. Astfel, numărul unităţilor care intră în componenţa cuvântului astfel
obţinut este k1 k2 ... kn k , iar numărul zerourilor este egal cu n 1 . Rezultă că numărul
cuvintelor diferite de această formă este egal cu numărul permutărilor cu repetiţie de k unităţi şi
n 1 zerouri, adică este egal cu P k , n 1 . Însă,
P k , n 1
k n 1! C k C k .
k ! n 1!
n k 1 n
Exemplu
La o cofetărie există 6 specialităţi de prăjituri. În câte moduri se pot forma cartoane diferite,
cu câte 10 prăjituri fiecare?
Rezolvare
Ordinea prăjiturilor pe un carton nu are importanţă, deci fiecare carton cu prăjituri este dat
de un cuvânt de lungime 10, format din 6 elemente (cele 6 specialităţi de prăjituri). Deci, ordinea
componentelor cuvântului nu contează. Prin urmare, rezolvarea problemei constă în determinarea
numărului tipurilor diferite ale unor astfel de cuvinte, de lungime k k1 k2 ... k6 10 ,
formate cu cele 6 specialităţi de prăjituri. Acest număr este egal cu numărul combinărilor cu
repetiţie de 6 elemente luate câte 10, deci
26
5
A15 360360
C610 C61010 1 C15
10
C15
5
3003 .
P5 120
Aplicaţii
Demonstraţie
Fie polinomul de gradul k în n nedeterminate:
a bi a b1 a b2 ... a bn .
i 1
27
nk
În dezvoltarea acestui produs coeficientul lui a este egal cu suma tuturor produselor
posibile de k factori luaţi dintre b1, b2 ,..., bn .
Demonstraţie
Vom demonstra rezultatul prin metoda inducţiei matematice după n, numărul de factori ai
produsului.
Pentru n 2 avem:
a b1 a b2 a2 b1 b2 a b1b2
2 1
– coeficientul lui a a (deci k 1 ), este: b1 b2 (suma produselor de k 1 factori).
1
22
– coeficientul lui a a (deci k 2 ) este: b1b2 (suma produselor de k 2 factori).
0
a n P1 bn a n 1 P2 Pb
1 na
n2
... Pk Pk 1 bn a n k ... Pn 1bn .
În expresia Pk Pk 1 bn (coeficientul lui a
nk
) avem:
– Pk este suma tuturor produselor posibile de câte k factori care nu conţin pe bn , luaţi
dintre b1, b2 ,..., bn 1 ;
– Pk 1 este suma tuturor produselor posibile de câte k 1 factori care nu conţin pe bn ,
luaţi dintre b1, b2 ,..., bn 1 ;
– rezultă că Pk 1 bn reprezintă suma tuturor produselor posibile de câte k factori, dintre bn
şi termenii lui Pk 1 ;
– Pk Pk 1 bn reprezintă suma tuturor produselor posibile de câte k factori luaţi dintre
b1, b2 ,..., bn 1, bn .
Am arătat, astfel că afirmaţia este adevărată şi pentru produsul a n factori. Rezultă, conform
principiului inducţiei matematice, că afirmaţia este adevărată pentru orice număr natural n.
II. 2 Binomul lui Newton este un caz particular al celui precedent. Astfel, luând
b1 b2 ... bn b , atunci coeficientul lui a n k este egal cu Cnk bk .
nk
Într-adevăr, numărul termenilor asemenea care conţin pe a b este dat de numărul
k
Exemplu
Conform formulei stabilite anterior, avem:
29
TESTE DE AUTOEVALUARE
Testul nr. 1
1. Să se demonstreze relaţiile:
k 1 k 1 k 1
a) Cn Cn 1 Cn 2 ... Ck 1 ;
k
k 1
b) Cn m Cn Cm CnCm ... Cnk Cm0 ;
k 0 k 1
1 n n
c) Cn Cn Cn ... ... 2 2cos
0 3 6
.
3 3
2. Să se calculeze sumele:
3. Probleme diverse
1) Să se calculeze probabilitatea ca, alegând o mulţime din mulţimea submulţimilor nevide
ale mulţimii 3,4,5,6,7,8 , aceasta sa aibă toate elementele impare;
2) Într-o grupă sunt 25 studenţi, dintre care 12 sunt băieţi. Să se determine în câte moduri se
poate alege o echipă reprezentativă a grupei, formată din 3 băieţi şi 2 fete, care să reprezinte
grupa la o întrecere studenţească, ştiind că toţi studenţii grupei sunt apţi să participe la
întrecere, cu şanse egale de calificare în etapa următoare.
3) Care este numărul funcţiilor bijective f : 1,2,3,4,5 1,2,3,4,5 cu proprietatea
f 1 3 ? Dar al funcţiilor injective ? Dar al tuturor funcţiilor care se pot defini în aceleaşi
condiţii ?
4) Care este numărul funcţiilor strict crescătoare f : 1,2,3,4 1,2,3,4,5,6 ? Dar al
funcţiilor strict crescătoare f : 1,2,3,4 1,2,3,4,5,6 cu proprietatea suplimentară
f 1 1 ?
30
Testul nr. 2
1. Să se demonstreze relaţiile:
1 n n 2
1) Cn Cn Cn ... ...
1 4 7
2 2cos
3 3 ;
1 n 1 n
n
2) Cn0 Cn4 Cn8 ... ... 2 2 cos ;
2
2 4
n
n
0
3) Cn Cn2 Cn4 Cn6 ... ... 2 2 cos .
4
2. Să se calculeze sumele:
31
TEME DE CONTROL
1. Să se demonstreze relaţiile:
1 n n 4
2) Cn Cn Cn ... ...
2 5 8
2 2cos
3 3 ;
1 n 1 n
n
3) Cn Cn Cn ... ... 2 2 2 sin ;
1 5 9
2 4
n
n
1
4) Cn Cn3 Cn5 Cn7 ... ... 2 2 sin .
4
2. Să se calculeze sumele:
n 1
2) Cn 2Cn 3Cn ... 1
1 2 3
nCnn ;
3) Cn Cn 1 Cn 2 ... Cn m ;
k k k k
3. Probleme de numărare:
1) Câte numere naturale de trei cifre distincte se pot forma cu elementele mulţimii
1,3,5,7,9 ?
2) Câte numere naturale pare de patru cifre distincte se pot forma cu elementele mulţimii
1,2,3,5,6,7,9 ?
3) Să se calculeze probabilitatea ca, alegând un număr din mulţimea numerelor naturale de 3
cifre, acesta sa aibă două cifre egale;
4) Într-o grupă sunt 25 studenţi, dintre care 12 sunt băieţi. Să se determine în căte moduri se
poate alege o echipă reprezentativă a grupei, formată din 3 băieţi şi 2 fete, care să reprezinte
grupa la o întrecere studenţească, ştiind că toţi studenţii grupei sunt apţi să participe la
întrecere, cu şanse egale de calificare în etapa următoare.
32
TEMĂ DE CONTROL Nr. 2
1. Utilizând relaţia:
x1 x2 ... xn m P m1, m2 ,..., mn x1m1 x2m2 ...xnmn , unde
m1 m2 ... mn m
P m1, m2 ,..., mn
m1 m2 ... mn ! , să se calculeze expresiile:
m1 !m2 !...mn
a) a b c d ;
3
b) x y z .
4
4. Câte numere naturale pare de patru cifre distincte se pot forma cu elementele mulţimii
1,2,3,5,6,7,9 ?
5. Să se calculeze numărul funcţiilor f : 1,2,3,4,5 1,2,3,4,5 care au proprietatea
f 1 f 4 2 ;
33
11. Fie mulţimea A 0,1,2,3,4,5,6,7,8,9 . Să se determine probabilitatea ca, alegând o
pereche de forma a, b din produsul cartezian A A , să aibă loc egalitatea a b 8 .
Comparaţi şi comentaţi rezultatul obţinut cu cel de la problema 9.
34
UNITATEA DE ÎNVĂŢARE NR. 2 - ELEMENTE DE TEORIA GRAFURILOR. STUDIUL
GRAFURILOR CU AJUTORUL MATRICELOR BOOLEENE ASOCIATE
Obiective urmărite:
Rezumat:
Cuvinte cheie:
Noţiunile de: graf, drum, subdrum, circuit, graf parţial, subgraf, graf tare conex, componentă
tare conexă, succesori şi predecesori, arbori, muchie, lanţ, ciclu, graf conex, componentă
conexă, matrice booleană, matrice de adiacenţă şi matricea drumurilor asociate unui graf,
drum hamiltonian, drum eulerian
Timp de studiu:
35
LECŢIA 3 - ELEMENTE DE TEORIA GRAFURILOR
Teoria grafurilor este o ramură relativ tânără a matematicii, prima lucrare în acest domeniu
fiind scrisă de Euler, în urmă cu două secole.
Interesul pentru teoria grafurilor a crescut mult în ultimele decenii, odată cu aplicarea
acesteia în rezolvarea a numeroase probleme din economie, sociologie, psihologie, inginerie etc.
Teoria grafurilor se consideră astăzi că face parte din domeniul matematicii combinatoriale, având
interferenţe cu algebra, topologia şi teoria probabilităţilor.
1.1 Definiţii, terminologie, notaţii, concepte fundamentale
Fie o mulţime nevidă, X şi o aplicaţie : X P X . Această aplicaţie defineşte
pe X o relaţie binară, R şi anume xRy , x, y X , dacă y x . Fie R X X ,
R x, y / xRy, x, y X . Avem, deci: x X atunci x, y R dacă y x .
Având dată o relaţie binară pe X, de exemplu printr-o submulţime R X X , putem defini pe X
o aplicaţie astfel: pentru x X , y x dacă x, y R .
Dacă A X şi : X P X , vom numi imaginea lui A prin mulţimea
A x .
def
xA
Definiţia 1.1.1
Se numeşte graf ansamblul format dintr-o mulţime X şi o aplicaţie : X P X şi se
notează G X , . Având în vedere consideraţiile de mai sus rezultă că o definiţie echivalentă
este următoarea: se numeşte graf un cuplu G X , unde X este o mulţime nevidă iar este o
relaţie binară pe X.
Deoarece în aplicaţiile uzuale se întâlnesc de obicei grafuri definite pe mulţimi finite, în
continuare ne vom ocupa numai de grafuri G X , în care X x1, x2 ,..., xn este finită.
Numărul elementelor lui X determină ordinul grafului finit G. Când card X n , graful
G X , se numeşte graf finit de ordinul n. Elementele mulţimii X se numesc vârfuri ale
grafului G.
Vom spune că G X , este dat în reprezentare analitică dacă se dă
X x1, x2 ,..., xn şi pentru xi X se precizează mulţimea xi P X .
36
Dacă un vârf nu este extremitatea nici unui arc, el se numeşte vârf izolat. Dacă un vârf este
extremitatea a mai mult de două arce, se numeşte nod. Un arc pentru care extremitatea iniţială
coincide cu cea finală se numeşte buclă; sensul săgeţii în reprezentarea unei bucle nu are
importanţă.
Graful G X , este complet determinat de mulţimea vârfurilor X şi de mulţimea
arcelor, pe care o vom nota cu U. Este evident că mulţimea U a tuturor arcelor grafului G determină
complet aplicaţia şi reciproc, aplicaţia determină complet mulţimea U a arcelor grafului.
Astfel, un graf G poate fi dat fie prin ansamblul X , , fie prin ansamblul X ,U .
Exemplul 1.2.1
Fie graful G X , , unde: X x1, x2 , x3 , x4 , x5 , x6 , ia funcţia este dată prin
mulţimea valorilor sale în toate vârfurilor grafului:
x1 x2 , x3 ; x2 x3 , x4 , x5 ; x3 x4 , x4 x1, x4 , x6 ;
x5 x3 , x6 ; x6 x2 , x3 , x4 , x6 .
Deoarece punctele din plan pentru reprezentarea elementelor lui X pot fi alese arbitrar în
plan, acelaşi graf poate avea reprezentări diferite din punct de vedere grafic. O reprezentarea
geometrică (sagitală) a acestui graf poate fi cea din figura 1.2.1
Fig. 1.2.1
Exemplul 1.2.2
Fie graful G având reprezentarea sagitală în figura 1.2.2.
37
Fig. 1.2.2
38
Un drum se numeşte subdrum al unui drum dacă vârfurile consecutive ale lui sunt
vârfuri consecutive şi în . În figura 1.2.1 drumurile 1 x2 , x5 , x3 , x4 şi 2 x1, x2 , x5
sunt subdrumuri ale drumului x1, x2 , x5 , x3 , x4 , x6 .
Fie G X ,U un graf, dat prin mulţimea vârfurilor X şi mulţimea arcelor, U.
Se numeşte graf parţial al grafului G X ,U , un graf G X ,U , unde U U .
Un graf parţial al unui graf G se obţine prin suprimarea unor arce din graful G; vârfurile
grafului G şi ale oricărui graf parţial al său rămân aceleaşi.
Se numeşte subgraf al grafului G X , (dat prin aplicaţia : X P X ) un graf
G X , , unde X X iar este definită prin x x X , x X .
Prin urmare, un subgraf al unui graf G se obţine prin suprimarea unor vârfuri ale grafului G
şi a tuturor arcelor care au una din extremităţi în vârfurile suprimate.
În figura 1.2.3 este reprezentat un graf parţial al grafului din figura 1.2.1, obţinut prin
suprimarea arcelor x1, x2 , x3 , x4 , x5 , x3 şi buclei x6 , x6 .
Fig. 1.2.3
În figura 1.2.4 este reprezentat un subgraf al grafului din figura 1.2.1, obţinut prin
suprimarea vârfurilor x1 şi x4 şi a tuturor arcelor care aveau o extremitate în fiecare dintre aceste
vârfuri.
Fig. 1.2.4
39
Un graf G X , se numeşte complet dacă x, y X , x y , există cel puţin
unul din arcele x, y , y, x sau, cu alte cuvinte, dacă x, y U , rezultă y, x U ,
x, y X , x y .
Un graf este simetric dacă x, y U y, x U şi antisimetric dacă
x, y U y, x U .
Un graf este simplu dacă X X1 X2 , X1 , X 2 , X1 X2 şi
x, y U x X1 şi y X 2 .
Un graf este tare conex dacă x, y X , x y , există în graf un drum de la x la y (sau
că orice pereche de vârfuri x, y X , x y , se află pe un circuit).
Fie x X . Mulţimea C x X , formată din vârful x şi toate vârfurile y X pentru
care există un circuit ce trece prin vârfurile y şi x se numeşte componentă tare conexă a lui G,
corespunzătoare vârfului x X . Astfel, dacă y C x , înseamnă că există un drum de la x la y
şi unul de y la x.
Pentru componentele tari conexe ale unui graf are loc rezultatul exprimat în teorema
următoare.
Teorema 1.2.1
Mulţimea componentelor tari conex ale unui graf G X , formează o partiţie a lui X,
adică:
1. C xi ,
2. C xi C x j C xi
C xj ,
3. C xi X .
xi X
Demonstraţie
1. Din definiţia mulţimii C xi avem că xi C xi , deci C xi , xi X .
deci, că xk C xi C x j .
Din xk C xi rezultă că există un circuit ce trece prin xi şi xk .
Din xk C x j rezultă că există un circuit ce trece prin x j şi xk .
40
Totodată, deoarece X xi şi xi C xi rezultă că are loc şi incluziunea
xi X
inversă: X xi C xi .
xi X xi X
Din dubla incluziune rezultă egalitatea 3 din enunţul teoremei.
Teorema 1.2.2
Un graf este tare conex dacă şi numai dacă are o singură componentă tare conexă.
Demonstraţia se obţine imediat prin reducere la absurd utilizând definiţia componentei tare
conexă a unui graf şi a rezultatului stabilit în teorema anterioară.
1.3 Definirea noţiunilor legate de neorientare
Fie G X , un graf.
Se numeşte muchie a grafului G orice pereche neordonată de vârfuri x, y X , x y ,
astfel că x, y U sau y, x U sau ambele, concomitent, adică dacă legătura dintre cele două
vârfuri distincte x şi y poate fi făcută indiferent în ce sens (fie de la x la y, fie de la y la x, fie în
ambele sensuri), printr-un arc de lungime egală cu 1. O muchie se reprezintă geometric printr-un
segment neorientat care leagă vârfurile x şi y care o definesc şi se va utiliza notaţia x, y . Vom
nota mulţimea tuturor muchiilor grafului G prin U . Un graf în care legăturile dintre vârfuri sunt
muchii se va numi graf neorientat, în timp ce graful pentru care toate legăturile dintre vârfuri sunt
arce orientate, se va numi graf orientat. Unui graf orientat simetric i se poate asocia un graf
neorientat, legătura dintre două vârfuri x şi y realizată de cele două arce x, y şi y, x , de
sensuri contrarii, înlocuindu-se cu muchia x, y .
De asemenea, unui graf neorientat i se pot asocia mai multe grafuri orientate, înlocuind
fiecare muchie cu două arce orientate în sens opus.
Fie G X ,U un graf neorientat şi x X . Se numeşte gradul vârfului x numărul
muchiilor care au o extremitate în vârful x şi se notează cu g x . Dacă g y 0 , atunci vârful y
este izolat.
Propoziţia 1.3.1
Într-un graf neorientat cu m muchii, suma gradelor tuturor vârfurilor este 2m .
Justificarea este imediată, ţinând cont că în suma gradelor vârfurilor fiecare muchie x, y
este numărată de două ori.
În graful neorientat G X ,U un şir de muchii u1, u2 ,..., uk se numeşte lanţ dacă
fiecare muchie ui este legată printr-o extremitate de muchia ui 1 şi prin cealaltă extremitate de
muchia ui 1 , i 2,3,..., k 1 . Evident, un lanţ poate fi definit şi printr-o succesiune de
vârfuri x1, x2 ,..., xk , dacă xi , xi 1 ui , i 1,2,..., k 1 .
Un lanţ finit în care vârful iniţial coincide cu cel final se numeşte ciclu.
Un lanţ este simplu dacă nu trece de două sau mai multe ori prin aceeaşi muchie.
În caz contrar el este lanţ compus. Un lanţ este elementar dacă trece o singură dată prin
fiecare dintre vârfurile sale, în caz contrar numindu-se neelementar. Un ciclu poate fi simplu sau
compus elementar sau neelementar.
41
Un graf este conex dacă pentru oricare două vârfuri x, y X , x y există cel puţin un
lanţ de la x la y.
Fie G X , un graf, x X şi C x mulţimea formată din x şi din toate celelalte
vârfuri ale grafului legate prin lanţuri de x. Mulţimea C x astfel constituită se numeşte
componenta conexă a lui G, generată de vârful x (sau corespunzătoare vârfului x). Este evident că
C x determină un subgraf al lui G care este, desigur, conex. Ca şi în cazul grafurilor orientate se
pot demonstra două rezultate similare celor din teoremele 1.2.1 şi 1.2.2. Astfel, în cazul grafurilor
neorientate avem:
Teorema 1.3.2
Mulţimea componentelor conexe ale grafului G X ,U constituie o partiţie a lui X,
adică:
1. C xi ;
2. C xi C x j C xi
C xj ;
3. C xi X .
xi X
Aşadar dacă există mai multe submulţimi distincte C xi ale lui X, atunci acestea formează
o partiţie a lui X.
Teorema 1.3.3
Un graf este conex dacă şi numai dacă are o singură componentă conexă.
Demonstraţiile acestor două teoreme sunt analoage cu cele ale teoremelor 1.2.1 şi 1.2.2 din
paragraful anterior.
Exemple
Fig. 1.3.1
42
Graful G X , din figura 1.3.1 este dat în reprezentare sagitală. Mulţimea X a vârfurilor
sale este: X x1, x2 , x3 , x4 , x5 , x6 , x7 , x8 , x9 , x10 , x11, x12 . Aplicaţia : X P X este
definită prin:
x1 x2 , x4 , x10 ; x2 x1, x3 ; x3 x3 , x4 ; x4 x10 ;
x5 x6 ; x6 x5 , x7 ; x7 x7 ; x8 ;
x9 x8 , x12 ; x10 ; x11 x9 , x12 ; x12 x8 .
Acest graf este neconex deoarece nu există, de exemplu, nici un lanţ care să lege vârfurile
x1 şi x6 .
Graful are trei componente conexe. Partiţia corespunzătoare a mulţimii vârfurilor
X x1, x2 ,..., x12 este formată din submulţimile:
C x1 x1, x2 , x3 , x4 , x10 ; C x5 x5 , x6 , x7 ; C x11 x11, x9 , x8 , x12 .
Subgrafurile determinate de aceste mulţimi sunt prezentate în aceeaşi figură, 1.3.1 şi pot fi
privite ca grafuri independente.
Grafurile de care ne vom ocupa în continuare vor fi conexe, acesta fiind cazul întâlnit în
aplicaţiile practice. Dacă totuşi un anumit proces sau fenomen este modelat printr-un graf neconex,
atunci proprietăţile care ne interesează sunt studiate pentru fiecare componentă conexă a grafului
considerată ca un graf independent.
1.4 Succesori şi predecesori
Fie G X , un graf şi x, y X . Spunem că y este un succesor al lui x sau că x este un
predecesor al lui y dacă există în graful G un drum de la x la y.
Dacă aceste drum este format din k arce de la x la y spunem că y este un succesor de
ordinul k al lui x sau că x este un predecesor de ordinul k al lui y. Dacă x X , atunci
k x
k
este mulţimea succesorilor de ordinul k ai vârfului x, iar x este mulţimea predecesorilor de
ordinul k ai lui x în graful G. Graful notat prin G X ,
k
k
se numeşte graful succesiunilor de
ordinul k ale grafului G.
Definiţia 1.4.1
Fie G X , un graf şi x X . Vom numi închiderea tranzitivă a vârfului x
ˆ x
mulţimea
k x ; 0 x x .
k 0
ˆ x este formată din vârful x şi toţi succesorii săi din graful G. Graful
Mulţimea
Gˆ X , ˆ se numeşte închiderea tranzitivă a grafului G X , .
ˆ 1 x
Analog, mulţimea k x se numeşte închiderea tranzitivă inversă a
k 0
vârfului x şi este formată din vârful x şi din mulţimea tuturor predecesorilor lui x în graful G.
ˆ x X atunci graful este tare conex şi
Dacă pentru orice x X are loc egalitatea
reciproc.
43
Teorema 1.4.2
Într-un graf finit fără circuite există cel puţin un vârf fără succesori şi cel puţin un vârf fără
predecesori.
Demonstraţie
Fie G X , un graf finit, fără circuite şi x X arbitrar. Dacă x nu are nici un succesor
afirmaţia din prima parte a teoremei este, evident, adevărată. Să presupunem că x are cel puţin un
succesor şi fie x1 , x1 x unul dintre aceştia. Mai departe, dacă x1 nu are succesori, teorema
este verificată. În caz contrar, fie x2 un succesor al lui x1 . Evident, x2 x, x1 şi raţionamentul
se continuă în acelaşi mod. Deoarece graful este finit, procesul de alegere a vârfurilor distincte
x, x1, x2 ,... cu xk 1 succesor al lui xk , k 0 x x0 , va duce după un număr finit de
paşi, la un vârf fără succesori. Analog se demonstrează şi a doua partea teoremei, respectiv
existenţa cel puţin a unui vârf fără predecesori.
1.5 Împărţirea unui graf fără circuite în nivele
Fie G X , un graf finit, fără circuite. Conform teoremei 1.4.2, mulţimea vârfurilor
fără predecesori este nevidă. Definim nivelul 1 al grafului ca fiind format tocmai din această
mulţime, a vârfurilor fără predecesori. În continuare se determină subgraful G1 , obţinut din G prin
suprimarea vârfurilor nivelului 1. Acest subgraf este, de asemenea, fără circuite. Definim nivelul 2
al grafului G ca fiind mulţimea vârfurilor fără predecesori ai grafului G1 ( nivelul 1 al lui G1 ).
Procedeul se continuă până când se ajunge la mulţimea vârfurilor fără succesori, aceasta
formând ultimul nivel al grafului. De menţionat că procesul de obţinere a nivelurilor se poate
desfăşura şi în sens invers, începând cu obţinerea în prima fază a ultimului nivel, adică a mulţimii
vârfurilor fără succesori şi apoi, succesiv a celorlalte nivele.
Exemplul 1.5.1
Fie graful finit şi fără circuite din figura 1.5.1. Ne propunem să-l împărţim în nivele.
Fig. 1.5.1
44
Căutăm mai întâi mulţimea vârfurilor care nu au predecesori. Găsim X1 x1, x6 . X 1 va
forma primul nivel. Construim subgraful obţinut prin suprimarea vârfurilor din mulţimea X 1 şi
tuturor arcelor care au o extremitate în aceste vârfuri. Se obţine graful din figura 1.5.2.
Fig. 1.5.2
Fig. 1.5.3
45
Fig. 1.5.4
46
LECŢIA 4 - MATRICI BOOLEENE ASOCIATE GRAFURILOR
Definiţia 2.1.1
O matrice AM n se numeşte matrice booleană dacă orice element al său este fie 0,
fie 1.
Fie G X ,U un graf dat prin mulţimea vârfurilor sale X x1, x2 ,..., xn şi mulţimea
U a arcelor sale. Putem pune în evidenţă legăturile dintre vârfurile grafului G cu ajutorul unei
matrice A aij , i, j 1,2,..., n , definită astfel:
1 dacă
xi , x j U
aij (2.1.1)
0 dacă xi , x j U
Este evident că matricea A este o matrice booleană numită matricea booleană ataşată
grafului G sau matricea conexă ataşată lui G. Oricărui graf G i se poate asocia o unică matrice
booleană în acest mod şi reciproc, oricărei matrice booleene A aij , i, j 1,2,..., n i se
poate asocia un graf G X ,U .
Exemple
a) Fie graful G din figura 2.1.1, dat în reprezentare sagitală.
Fig. 2.1.1
Matricea conexă sau matricea booleană asociată acestui graf se completează conform relaţiei
(2.1.1) şi este următoarea:
x1 x2 x3 x4 x5
x1 0 1 0 0 0
x2 0 0 1 0 0
A
x3 0 1 0 1 0
x4 0 1 0 0 1
x5 0 1 0 0 0
b) Fie matricea booleană următoare:
47
x1 x2 x3 x4 x5 x6
x1 0 1 0 0 0 1
x2 0 0 1 0 0 1
A x3 0 0 0 1 0 0
x4 0 0 0 1 1 0
x5 0 0 1 0 0 0
x6 0 1 1 0 1 0
Această matrice determină în mod unic un graf. Mulţimea U a arcelor acestuia este
x1, x2 , x1, x6 , x2 , x3 , x2 , x6 , x3 , x4 ,
U , iar reprezentarea sa sagitală este
x
4 4 , x , x ,
4 5x , x ,
5 3 x , x ,
6 2 x , x ,
6 3 x , x6 5
, x
prezentată în fig. 2.1.2.
Fig. 2.1.2
Unele proprietăţi ale grafului G X ,U pot fi caracterizate mai uşor cu ajutorul matricei
booleene asociate. Astfel, dacă aii 1 înseamnă că în vârful xi graful are o buclă; matricea
asociată unui graf fără nici o buclă are numai valoarea 0 pe diagonala principală.
Dacă matricea A aij este simetrică aij a ji , i, j 1,2,..., n atunci graful său
asociat este simetric şi reciproc.
O matrice A aij cu aij 1 , i, j 1,2,..., n caracterizează un graf plin. Un graf
este antisimetric dacă aij 1 a ji 0 şi complet dacă aij 0 a ji 1, i, j 1,2,..., n .
Un graf este neconex dacă matricea booleană asociată a sa are forma diagonală pe blocuri sau poate
fi adusă la forma diagonală prin renumerotarea vârfurilor (ceea ce este echivalent cu permutarea
corespunzătoare a liniilor şi coloanelor matricei booleene asociate). Fie, de exemplu, graful din fig.
1.3.1 (pag. 8, cap. 1), reluat în fig. 2.1.3.
48
Fig. 2.1.3
Acest graf este neconex (conţine vârfuri nelegate prin nici un arc) şi are trei componente
conexe.
Matricea booleană asociată acestui graf este următoarea:
x1 x2 x3 x4 x10 x5 x6 x7 x8 x9 x11 x12 g xi
x1 0 1 0 1 1 0 0 0 0 0 0 0 3
x2 1 0 1 0 0 0 0 0 0 0 0 0 2
x3 0 0 1 1 0 0 0 0 0 0 0 0 2
x4 0 0 0 0 1 0 0 0 0 0 0 0 1
x10 0 0 0 0 0 0 0 0 0 0 0 0 0
x5 0 0 0 0 0 0 1 0 0 0 0 0 1
A
x6 0 0 0 0 0 1 0 1 0 0 0 0 2
x7 0 0 0 0 0 0 0 1 0 0 0 0 1
x8 0 0 0 0 0 0 0 0 0 0 0 0 0
x9 0 0 0 0 0 0 0 0 1 0 0 1 2
x11 0 0 0 0 0 0 0 0 0 1 0 1 2
x12 0 0 0 0 0 0 0 0 1 0 0 0 1
g xi 1 1 2 2 2 1 1 2 2 1 0 1
Matricele scoase în evidenţă pe diagonala matricei A sunt matrice booleene ataşate
componentelor conexe ale grafului, considerate ca grafuri separate.
Tot cu ajutorul matricei booleene asociate unui graf se pot caracteriza şi pune în evidenţă
anumite concepte legate de clasificarea vârfurilor unui graf. Am definit, astfel, gradul unui vârf
x X ca fiind numărul muchiilor care au o extremitate în vârful x şi l-am notat cu g x . Într-un
graf orientat se mai pot defini câteva noţiuni legate de clasificarea vârfurilor sale, utile în stabilirea
altor rezultate în teoria grafurilor.
49
Definiţia 2.1.2
a) Se numeşte grad de emisie sau grad de ieşire sau grad local exterior al unui vârf
x X şi se notează cu g x , numărul arcelor care au extremitatea iniţială în vârful x .
Astfel, dacă U
x mulţimea arcelor din graful G care au extremitatea iniţială în vârful
x X ,
U x x, y U y x , (2.1.2)
atunci
g x card U x . (2.1.3)
b) Se numeşte grad de recepţie sau grad de intrare sau grad local interior în vârful
x X şi se notează cu g x , numărul arcelor care au extremitatea finală în vârful x.
Astfel, dacă U
x mulţimea arcelor din graful G care au extremitatea finală în vârful
x X ,
U x y, x U x y , (2.1.4)
atunci
g x card U x . (2.1.5)
g x g x g x . (2.1.6)
Definiţia 2.1.3
a) Un vârf x X se numeşte punct de emisie sau sursă sau punct de ieşire dacă:
g x 0 şi g x 0 , adică U x . ( toate arcele incidente în x au ca extremitate
iniţială vârful x vârful x nu are predecesori).
b) Un vârf x X se numeşte punct de recepţie sau destinaţie sau punct de intrare dacă:
g x 0 şi g x 0 , adică U x ( toate arcele incidente în x au ca extremitate
finală vârful x vârful x nu are succesori).
c) Un vârf x X se numeşte punct intermediar dacă g x 0 şi g x 0 .
În cazul reprezentării unui graf prin matricea booleană asociată gradul de emisie al unui vârf
x X este dat de suma elementelor din linia corespunzătoare lui x din matricea A, iar gradul de
recepţie al vârfului x X este dat de suma elementelor din coloana corespunzătoare lui x din
matricea A. În graful din fig. 2.1.3, analizând valorile g xi şi g xi i 1,2,...,12 ,
50
g x11 0 , deci vârful x11 este punct sursă (fără predecesori) şi g x8 g x10 0 , deci
vârfurile x8 şi x10 sunt puncte de recepţie (fără succesori).
Definiţia 2.1.4
Un graf planar este un graf G ale cărui vârfuri se pot reprezentat prin puncte în plan şi ale
cărui muchii sau arce (după cum graful este neorientat sau orientat) se pot reprezenta prin arce de
curbă astfel încât oricare două arce de curbă au în comun cel mult unul sau două puncte, acestea
fiind numai puncte de extremitate.
Definiţia 2.1.5
Se numeşte reţea de transport un graf orientat, conex, fără bucle, cu următoarele
proprietăţi:
a) există în graf un singur vârf x0 X de tip sursă (fără predecesori), numit intrarea în
reţea;
b) există în graf un singur vârf xn X de tip destinaţie (fără succesori), numit ieşirea din
reţea;
c) există o funcţie C : U
, care asociază fiecărui arc xi , x j U un număr pozitiv
1 dacă există în graf un drum de la xi la x j
tij (2.1.7)
0 dacă nu există în graf un drum de la xi la x j
Dacă matricea booleană A asociată unui graf G determină în mod unic graful, aceeaşi
matrice conexă terminală T poate fi ataşată la mai multe grafuri diferite.
Exemplu
Grafurile din fig. 2.1.4 a şi 2.1.4 b sunt diferite dar au aceeaşi matrice conexă terminală,
0 1 1 1
0 0 1 1
T
0 0 0 1
0 0 0 0
51
a) b)
Fig. 2.1.4
În continuare vom prezenta câteva proprietăţi şi aplicaţii ale matricei conexe terminale T
asociată unui graf G X , cu n vârfuri.
Propoziţia 2.1.7
Un element tij , i j din matricea conexă terminală a unui graf G X , cu n vârfuri
este egal cu 1 dacă şi numai dacă
n 1
xj k xi . (2.1.8)
k 1
Demonstraţie
Rezultă din definiţia drumului dintre cele două vârfuri xi şi x j ale grafului G, i j , şi din
faptul că relaţia (2.1.8) arată că x j face parte din închiderea tranzitivă până la ordinul n 1 a
vârfului xi ( mulţimea succesorilor până la ordinul n 1 ai lui xi ).
Pentru determinarea matricei conexe terminale T plecând de la matricea booleană asociată
A, este necesar să reamintim definiţia adunării booleene. Această operaţie este o lege de compoziţie
internă pe mulţimea 0,1 şi are următoarea tabelă:
0 1
0 0 1
1 1 1
Vom prezenta algoritmul lui Chen de determinare a matricei conexe terminale T, plecând de
la matricea booleană A asociată grafului cu n vârfuri G X , , X x1, x2 ,..., xn .
52
2. Dacă în urma efectuării operaţiilor de la pasul 1 au apărut alte elemente diferite de zero pe
linia 1, fie acestea a1 j , a1 j ,..., a1 j . Adunăm boolean liniile j1, j2 ,..., jk la linia 1.
1 2 k
3. Se repetă pasul 2 până când se ajunge la una din următoarele situaţii:
– toate elementele liniei 1 sunt egale cu 1;
– nu se mai pot genera alte elemente diferite de zero pe linia 1.
4. Paşii 1, 2 şi 3 se repetă pentru fiecare linie.
În final se obţine matricea conexă terminală T. Dacă în matricea conexă terminală T ataşată
unui graf toate elementele tii , i 1,2,..., n de pe diagonala principală sunt egale cu 0, atunci graful
respectiv este fără circuite, iar dacă există cel puţin două elemente t jj şi t egale cu 1 pe diagonala
principală, graful are cel puţin un circuit care conţine vârfurile x j şi x . Dacă există un singur
element tkk 1 pe diagonala principală a matricei T, atunci există o buclă în vârful xk .
Definiţia 2.1.8
Se numeşte putere de atingere a unui vârf xi şi se notează cu p xi numărul maxim de
vârfuri care pot fi atinse de la xi . Evident,
n
p xi tij , i 1,2,..., n (2.1.9)
j 1
1 2 3 n
kn
(2.1.10)
k1 k2 k3
Are loc rezultatul următor:
Teorema 2.1.9
Fie G X ,U un graf orientat şi fără circuite şi T matricea conexă terminală a sa.
Matricea T obţinută din matricea T prin ordonarea liniilor astfel încât puterile de atingere ale
vârfurilor sale să fie în ordine descrescătoare şi apoi prin aşezarea coloanelor în aceeaşi ordine este
o matrice superior triunghiulară.
Această teoremă este deosebit de importantă pentru că oferă un criteriu cu ajutorul căruia se
poate stabili dacă într-un graf orientat şi fără circuite există sau nu un drum hamiltonian şi totodată
şi un algoritm pentru determinarea drumului hamiltonian în cazul în care există. De asemenea,
permite determinarea rutelor optimale într-un graf, aflarea drumului critic etc.
53
Teorema 2.1.10 (Y. C. Chen)
Un graf cu n vârfuri G X ,U orientat şi fără circuite conţine un drum hamiltonian dacă
şi numai dacă numărul elementelor diferite de zero din matricea conexă terminală T este egal cu
n n 1
.
2
Demonstraţie
Fie G X , un graf orientat şi fără circuite, cu n vârfuri.
1 2 3
„ ” Presupunem că în G există un drum hamiltonian d H xk , xk , xk ,..., xk ,
n
1 2 3 n
corespunzând permutării . Deoarece graful nu are circuite rezultă că xk
k1 k2 k3 kn 1
atinge n 1 vârfuri, deci pe linia lui xk din matricea conexă terminală T sunt n 1 elemente
1
egale cu 1. La fel, vârful xk atinge n 2 vârfuri, deci linia corespunzătoare lui xk din T are
2 2
n 2 elemente egale cu 1 şi tot astfel, pentru fiecare vârf următor al drumului hamiltonian,
numărul de elemente egale cu 1 din linia corespunzătoare a matricei T scade cu câte o unitate, până
la vârful xk care este ultimul vârf al drumului hamiltonian şi deci are puterea de atingere zero (în
n
caz contrar s-ar contrazice ipoteza că graful este fără circuite). Prin urmare, numărul total de
elemente având valoarea 1 din matricea T este suma unei progresii aritmetice de raţie r 1 , adică:
n n 1
n 1 n 2 ... 2 1 (2.1.11)
2
n n 1
„ ” Presupunem că suma cifrelor 1 din matricea T este egală cu , ea
2
reprezentând totodată suma puterilor de atingere ale tuturor vârfurilor grafului. Considerăm forma
triunghiulară superioară T obţinută în urma efectuării operaţiilor precizate în teorema 2.1.9 şi
notăm x1 , x2 ,..., xn vârfurile obţinute prin permutarea (relaţia 2.1.10) a vârfurilor x1, x2 ,..., xn
în ordinea descrescătoare a puterilor lor de atingere. Deoarece graful nu are circuite, în matricea T
toate elementele egale cu 1 se află deasupra diagonalei principale şi cum deasupra diagonalei
n n 1
principale se află în total: n 1 n 2 ... 2 1 locuri, rezultă că nici o cifră
2
zero nu se va afla deasupra diagonalei principale. Putem scrie o succesiune de arce corespunzând
primului element diferit de zero din fiecare linie: x1 , x2 , x2 , x3 ,..., xn 1, xn . Această
succesiune de arce formează tocmai drumul hamiltonian d H x1 , x2 ,..., xn .
Teorema 2.1.11
Dacă într-un graf G X , orientat şi fără circuite există un drum hamiltonian, atunci
acesta este unic.
54
Demonstraţie
Fie G X , un graf orientat şi fără circuite, cu n vârfuri. Presupunem că în graful G
există un drum hamiltonian. Fie d H x1 , x2 ,..., xn acest drum, unde succesiunea vârfurilor este
dată de ordinea descrescătoare a puterilor de atingere a lor. Orice altă succesiune a vârfurilor
conţine cel puţin o inversare a indicilor. Presupunem prin absurd că în G ar exista şi un alt drum
diferit de d H . Rezultă că acesta conţine cel puţin un arc de forma
hamiltonian d H xi, xj , cu
j i , adică linia vârfului xj precede linia vârfului xi în T , astfel că t ji 1, deci este situat
deasupra diagonalei principale în T . Rezultă de aici existenţa unui drum de la xj la xi , cu j i .
conţine arcul
Însă, conform presupunerii făcute, succesiunea arcelor din d H xi, xj , de unde
rezultă că graful ar avea un circuit, contradicţie cu ipoteza. Prin urmare, presupunerea că drumul
hamiltonian nu este unic este falsă.
Rezultatul formulat şi demonstrat în teorema 2.1.10 este uşor de verificat pe matricea T
obţinută din matricea conexă terminală T în urma efectuării operaţiilor precizate în teorema 2.1.9.
Algoritmul de determinare a drumului hamiltonian (atunci când acesta există) într-un graf
orientat şi fără circuite presupune următorii paşi:
1. Fiind dat graful orientat şi fără circuite G X , se construieşte matricea conexă
asociată A conform relaţiei (2.1.1) şi matricea conexă terminală T, conform cu relaţia (2.1.7) sau
conform algoritmului lui Chen. Dacă numărul elementelor diferite de zero din matricea conexă
n n 1
terminală T este egal cu , atunci în graful G există un drum hamiltonian (teorema 2.1.10)
2
şi acesta este unic (teorema 2.1.11).
2. Se calculează puterile de atingere ale vârfurilor grafului însumând (sau numărând
elementele nenule) de pe liniile corespunzătoare ale matricei conexe terminale T; pentru fiecare vârf
xi puterea de atingere a sa se va completa într-o coloană suplimentară (a n 1- a) a matricei T.
3. Se construieşte matricea T conform procedeului descris în teorema 2.1.9. Conform
rezultatelor expuse anterior rezultă că matricea T , asociată grafului finit G X , orientat şi
fără circuite şi care are un drum hamiltonian, este superior triunghiulară, toate elementele de pe
diagonala sa principală şi de sub ea sunt nule, iar cele de deasupra diagonalei principale sunt egale
cu 1.
4. Drumul hamiltonian se citeşte în matricea T prin succesiunea arcelor corespunzătoare
elementelor egale cu 1 aflate deasupra diagonalei principale.
Exemplu
Pentru graful din fig. 2.1.4 matricea conexă terminală este:
x1 x2 x3 x4 p xi
x1 0 1 1 1 3
T x2 0 0 1 1 2 şi coincide cu T .
x3 0 0 0 1 1
x4 0 0 0 0 0
55
43
Numărul elementelor egale cu 1 din T este N 6 în G există un drum
2
hamiltonian.
Succesiunea arcelor corespunzătoare elementelor egale cu 1 aflate deasupra diagonalei
principale reprezintă drumul hamiltonian din G şi acesta este: d H x1, x2 , x3 , x4 , succesiunea
arcelor sale fiind: x1, x2 ; x2 , x3 ; x3 , x4 .
56
LECŢIA 5 - OPERAŢII CU GRAFURI ŞI CU MATRICI BOOLEENE ASOCIATE
GRAFURILOR
este tot o matrice booleană de acelaşi ordin, se numeşte suma booleană a matricelor A şi B şi se
notează:
C A B . (2.2.3)
Definiţia 2.2.2
Fie G1 X , 1 şi G2 X , 2 două grafuri având aceeaşi mulţime X a vârfurilor.
Graful G G1 G2 X , 1 2 , unde
1 2 x 1 x 2 x , x X se numeşte graful reuniune a celor două
grafuri, iar graful H G1 G2 X , 1 2 , unde
1 2 x 1 x 2 x , x X se numeşte graful intersecţie a celor
două grafuri.
Din definiţia celor două grafuri G şi H rezultă că x, y este arc în G dacă şi numai dacă
este arc în G1 sau G2 şi x, y este arc în H dacă şi numai dacă este arc în G1 şi G2 .
Astfel spus, dacă G1 X ,U1 şi G2 X ,U 2 , atunci mulţimea arcelor grafului
G G1 G2 este U1 U 2 , iar mulţimea arcelor grafului H G1 G2 este U1 U 2 . Dacă
U1 U 2 , atunci toate elementele lui X sunt puncte izolate ale garfului H G1 G2 . Este
evident că operaţiile şi sunt asociative şi comutative.
57
Propoziţia 2.2.3
Fie A1 şi A2 matricele booleene ataşate grafurilor G1 X , 1 şi G2 X , 2 . Atunci
matricea A A1 A2 este matricea booleană ataşată garfului G G1 G2 .
Demonstraţia este imediată şi o lăsăm ca exerciţiu.
C cij , i, j 1,2,..., n , unde
cij aik bkj aik bkj (2.2.6)
k k
este tot o matrice booleană, se numeşte produsul boolean al matricelor A şi B şi se notează:
C A B. (2.2.7)
Acest produs definit pe mulţimea matricelor booleene pătratice de acelaşi ordin este
asociativ şi distributiv faţă de adunarea booleană a matricelor.
Definiţia 2.2.5
Fie grafurile G1 X , 1 şi G2 X , 2 , având aceeaşi mulţime X a vârfurilor.
Spunem că graful G X , este produsul de compoziţie al grafurilor G1 şi G2 şi scriem
G G2 G1 G2G1 , respectiv 2 1 21 , dacă
58
x 2 y , x X , (2.2.8)
y1 x
21 x 2 1 x (2.2.9)
Definiţia 2.2.6
Fiind dat un graf G X , , se numeşte graful reciproc al lui G graful notat prin
G 1 X , 1 , unde
1 y x X | y x x X | x, y U (2.2.10)
Reprezentarea sagitală a grafului reciproc al lui G se obţine din reprezentarea sagitală a lui
G prin schimbarea sensului arcelor.
Legat de produsul de compoziţie a două grafuri şi de graful reciproc asociat unui graf dat,
prezentăm două rezultate cu aplicaţii ulterioare importante.
Teorema 2.2.7
Produsul de compoziţie a grafurilor este asociativ.
Demonstraţie
Fie G1 X , 1 , G2 X , 2 , G3 X , 3 şi să notăm 3 21 şi
32 1 . Pentru x X arbitrar, avem:
x 3 21 x 3 y
y 2 1 x
3 y 3 y 3 2 z
y 2 z
z1 x y 2 z
z1 x
z1 x
0 x x , x X şi k k 1 . (2.2.11)
59
Teorema 2.2.8
Fie grafurile G1 X , 1 , G2 X , 2 şi G X , produsul lor de compoziţie
unde G G2G1 şi 21 , (ca în definiţia 2.2.5). Atunci avem:
Demonstraţie
Vom arăta că 21
1
z 1121 z , punând în evidenţă dubla incluziune.
1
Fie z X arbitrar şi x0 21 z . Conform definiţiei grafului reciproc (definiţia
2.2.6), aceasta este echivalent cu:
z 21 x0 2 y .
y1 x0
k 1 , k
k 1
(2.1.13)
Putem trece acum la demonstrarea teoremei privind matricea booleană a produsului de
compoziţie a două grafuri.
Teorema 2.2.9
Fie
A aij
şi B bij , i, j 1,2,..., n , matricele booleene ataşate grafurilor
G1 X ,U1 şi G2 X ,U 2 , X x1, x2 ,..., xn . Atunci matricea booleană C A B
este matricea booleană ataşată grafului G G2G1 .
Demonstraţie
Fie U mulţimea arcelor grafului G2G1 şi C cij , i, j 1,2,..., n , matricea booleană
ataşată acestui graf. Atunci următoarele afirmaţii sunt echivalente:
1) cij 1 ;
2) xi , x j U ;
60
5) astfel încât ai b j 1 ;
6) ai b j 1.
k
Echivalenţa afirmaţiilor rezultă utilizând definiţiile matricei booleene asociate unui graf şi a
operaţiilor de înmulţire şi adunare booleană.
Rezultă, deci, că putem scrie:
cij aik bkj , i, j 1,2,..., n , (2.2.14)
k
adică
C A B. (2.2.15)
Definiţia 2.2.10
Dacă A este matricea booleană ataşată grafului G X , , atunci matricea obţinută prin
k
înmulţirea booleană a lui A cu ea însăşi de k ori se notează cu A şi se numeşte puterea k-
booleană a matricei A.
Ak A A ... A . (2.2.16)
k factori
k
Evident, A este tot o matrice booleană, care se va dovedi utilă în studiul grafului
succesiunilor de ordinul k ale grafului G, deci în studiul lui G X ,
k
k
.
Într-adevăr, conform teoremei 2.2.9, dacă A este matricea booleană ataşată garfului G,
atunci A
k
este matricea booleană ataşată grafului G X ,
k
k
. Cunoaştem, de asemenea, că
dacă x X , atunci
k
x este mulţimea succesorilor de ordinul k ai lui x. Rezultă, deci, că dacă
aijk 1 în matricea Ak , atunci x j X este succesor de ordinul k al lui xi X şi reciproc, ceea
ce, formalizat, se scrie astfel:
În acelaşi timp afirmaţia este echivalentă cu: aij 1 există în G drumuri de lungime k
k
61
Demonstraţie
Teorema este demonstrată dacă arătăm că matricele produs boolean A B şi produs
obişnuit AB au aceleaşi elemente nule, fapt care rezultă din echivalenţa afirmaţiilor:
k factori
(obţinută prin înmulţirea obişnuită), atunci
aij 0 aijk 1 ,
k
(2.2.18)
k k
unde aij este elementul matricei A aflat la intersecţia liniei i cu coloana j. Este firesc să ne
k
aşteptăm ca matricea A să ne ofere mai multe informaţii despre graful său asociat decât matricea
Ak . Într-adevăr numărul aijk ne arată numai dacă există sau nu drumuri de lungime k între
vârfurile xi şi x j , în timp ce numărul aij
k din k ne arată numărul drumurilor de lungime k
A
k
care există între xi şi x j . Afirmaţia referitoare la aij a fost justificată anterior. Afirmaţia
referitoare la aij
k o vom face în cele ce urmează, din aproape în aproape. Astfel, dacă
aij m 0 , deci
2
aik bkj m , rezultă că există exact m indici distincţi, k1, k2 ,..., km şi m
k 1
perechi de elemente din linia i, respectiv coloana j a lui A, egale cu 1:
aik1
ak1 j aik2 ak2 j ... aikm akm j 1 , deci există exact m drumuri formate din
două arce de la vârful xi la vârful x j şi acestea sunt următoarele: xi , xk , x j ;
1
xi , xk , x j ,..., xi , xk
2 m
, x j . Dacă aij 0 este evident că nu există astfel de drumuri.
2
Pentru a vedea câte drumuri formate din trei arce există de la xi la x j vom preciza mai
întâi câte asemenea drumuri există astfel încât penultimul vârf al drumului să fie un anumit vârf xk .
Un astfel de drum este de forma xi ,..., xk , x j şi este alcătuit din drumul format din două arce
xi ,..., xk , prelungit cu arcul xk , x j . Dacă arcul xk , x j nu există akj 0 , atunci nu
62
2
există nici un astfel de drum deoarece aik akj 0 , iar dacă arcul xk , x j există akj 1 ,
2 2
atunci aik ak aik şi deci există astfel de drumuri. Deoarece xk poate fi oricare vârf al
j
n
grafului, rezultă că există aik 2 akj aij3 drumuri formate din trei arce, deci de lungime 3, de
k 1
la xi la x j .
Teorema care urmează permite studiul existenţei circuitelor în graful G.
Teorema 2.2.12
Fie A matricea booleană ataşată grafului G X , . Atunci G este fără circuite dacă şi
graful conţine (cel puţin) un circuit. Rezultă că în graf există drumuri de orice lungime, circuitul
care există putând fi parcurs de un număr arbitrar de ori, deci A On, n ,
k
k
,
contradicţie cu ipoteza. Rezultă că presupunerea făcută este falsă deci graful G nu conţine nici un
circuit.
Din demonstraţia teoremei rezultă că dacă graful G nu conţine circuite atunci A On, n .
n
Însă cel mai mic număr k pentru care A On, n poate fi mai mic decât n. Dacă
k
An 1 On, n , atunci există în G un drum format din n 1 arce, deci un drum care trece prin toate
vârfurile grafului, adică un drum hamiltonian.
m 1
Dacă în graf există un drum de lungime maximă m n , atunci A On, n .
Într-un graf finit G X , cu circuite, elementele de pe diagonala principală a matricei
Ak oferă informaţii asupra circuitelor. Astfel, valoarea lui aii este egală cu numărul circuitelor
k
Exemplul 2.2.13
Fie graful G X , dat în reprezentare sagitală în figura următoare:
63
Fig. 2.2.1
64
2
a13 2 există 2 drumuri distincte de lungime 2 de la x1 la x3 ;
3
a34 1 există un singur drum de lungime 3 de la x3 la x4 ;
3
a24 0 nu există nici un drum de lungime 3 de la x2 la x4 ;
aij 0 , i 2 şi j 4 există drumuri de lungime 3 de la orice vârf xi până la
3
G. Reamintim că pentru x X , x x şi
0 def
ˆ x k x x x 2 x ...
def
(2.4.1)
k 0
ˆ X , ˆ se
este mulţimea formată din vârful x şi toţi succesorii săi din graful G şi că graful G
numeşte închiderea tranzitivă a grafului G. Ne propunem să găsim matricea booleană asociată
grafului Ĝ .
Fie I matricea unitate de ordinul n şi notăm
 I A . (2.4.2)
Â2 I A I A I A A A2 I A A2 . (2.4.3)
65
Matricele I, A şi A
2
corespund grafurilor X , ,
0
X , , X , ,
2
deci Â
2
2 x 0 2 x x x 2 x , x X . Deci, în graful
Aˆ r I A A2 ... Ar , (2.4.4)
x X îi corespunde o mulţime formată din el însuşi şi din toţi succesorii săi până la ordinul r
inclusiv.
ˆ r rămân egale cu 1 şi în Aˆ r 1 ,
Să mai observăm că toate elementele egale cu 1 din A
deoarece
Aˆ r 1 Aˆ r Ar 1 . (2.4.5)
Fig. 2.4.1
66
x1 x2 x3 x4 x5 x6 x7 x8
0 1 1 1 0 0 0 0 x1
0 0 0 1 1 1 0 0 x2
0 0 0 1 0 0 1 0 x3
A 0 0 0 0 1 0 1 0 x4
0 0 0 0 0 1 0 1 x5
0 0 0 0 0 0 1 1 x6
0 0 0 0 0 0 0 1 x7
0 0 0 0 0 0 0 0 x8
Matricea  se obţine din A punând 1 în loc de 0 peste tot, pe diagonala principală din A:
1 1 1 1 0 0 0 0
0 1 0 1 1 1 0 0
0 0 1 1 0 0 1 0
0
0 0 1 1 0 1 0
Aˆ .
0 0 0 0 1 1 0 1
0 0 0 0 0 1 1 1
0 0 0 0 0 0 1 1
00 0 0 0 0 0 1
Puterile booleene succesive ale lui  sunt următoarele:
1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1
0 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1
0 0 0 1 1 1 1 1 ; Aˆ 0 0 0 1 1 1 1 1
Aˆ
2 3
;
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1
0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
67
1 1 1 1 1 1 1 1
0 1 0 1 1 1 1 1
0 0 1 1 1 1 1 1
ˆA4 0 0 0 1 1 1 1 1
.
0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1
0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 1
ˆ 3 Aˆ 4 , deci matricea
Se constată că A Â3 este matrice booleană a închiderii tranzitive a
grafului G din figura 2.4.1.
2.5 Împărţirea în nivele a unui graf fără circuite cu ajutorul matricei booleene
Fie G X , un graf finit şi fără circuite, X x1, x2 ,..., xn şi A matricea sa
booleană asociată. Am văzut că într-un astfel de graf există cel puţin un vârf fără predecesori şi cel
puţin un vârf fără succesori (teorema 1.4.2). De asemenea, se cunoaşte că dacă un vârf xi nu are
predecesori atunci toate elementele din coloana i a matricei A sunt egale cu zero g
xi 0 , iar
dacă un vârf x j nu are succesori, atunci toate elementele din linia j a matricei A sunt nule
g x 0 (definiţia 2.1.3).
j
Împărţirea în nivele a grafului G se realizează mai uşor utilizând matricea booleană asociată
acestuia.
Primul nivel va fi format din mulţimea vârfurilor fără predecesori, deci din toate vârfurile
care corespund la coloanele ce au toate elementele nule din matricea A.
Se suprimă din matricea A toate liniile şi coloanele care corespund vârfurilor primului nivel;
matricea rămasă este matricea booleană asociată subgrafului obţinut prin suprimarea vârfurilor
primului nivel şi a tuturor arcelor care au una din extremităţi în aceste vârfuri.
Mai departe, se determină în submatricea lui A obţinută anterior, vârfurile care corespund
coloanelor cu toate elementele nule; mulţimea acestor vârfuri va forma nivelul al doilea al grafului
G.
După suprimarea tuturor liniilor şi coloanelor care corespund vârfurilor din nivelul al doilea
se obţine submatricea lui A care permite determinarea mulţimii vârfurilor de pe nivelul al treilea.
Algoritmul se continuă până când se ajunge la ultimul nivel, format din mulţimea tuturor vârfurilor
din G care nu au succesori.
Algoritmul poate fi organizat şi în sens invers, determinând mai întâi ultimul nivel şi apoi
succesiv, nivelele anterioare. Mulţimea vârfurilor aflate pe ultimul nivel este formată din acele
vârfuri ale grafului G corespunzătoare liniilor din matricea A care au toate elementele egale cu zero.
Se suprimă apoi din A toate liniile şi coloanele care corespund vârfurilor de pe ultimul nivel,
rezultând matricea booleană ataşată subgrafului obţinut din G prin suprimarea vârfurilor de pe
ultimul nivel şi a tuturor arcelor grafului G care au o extremitate în aceste vârfuri. Mulţimea
vârfurilor aflate pe penultimul nivel este formată din vârfurile corespunzătoare liniilor care au toate
elementele egale cu zero în submatricea lui A obţinută la sfârşitul etapei anterioare. După
suprimarea tuturor liniilor şi coloanelor care corespund vârfurilor din penultimul nivel se obţine
submatricea lui A care permite determinarea mulţimii vârfurilor de pe antepenultimul nivel.
68
Algoritmul se continuă până când se ajunge la primul nivel, format din mulţimea tuturor vârfurilor
din graful G care nu au predecesori.
Cele două procedee nu conduc întotdeauna la aceeaşi împărţire pe nivele a grafului G, deci
se pot obţine partiţii diferite ale mulţimii X. Împărţirea în nivele a unui graf fără circuite este utilă în
rezolvarea problemelor de determinare a drumurilor optime, acestea putându-se obţine mai uşor
dacă graful este partiţionat pe nivele.
Exemplul 2.5.1
Reluăm graful din figura 1.5.1, pe care ne propunem să-l împărţim în nivele, cu ajutorul
matricei booleene asociate.
Fig. 2.5.1
Matricea booleană asociată acestui graf este următoarea:
x1 x2 x3 x4 x5 x6 x7 x8 x9
0 1 1 0 1 0 0 1 0 x1
0 0 0 1 0 0 0 1 0 x2
0 0 0 0 0 0 0 0 0 x3
0 0 0 0 0 0 0 0 1 x4
A
0 0 0 0 0 0 0 0 1 x5
0 0 1 0 0 0 1 0 0 x6
0 0 0 0 1 0 0 1 0 x7
0 0 0 0 0 0 0 0 1 x8
0 0 0 0 0 0 0 0 0 x9
În A există două coloane care au toate elementele egale cu zero şi anume coloanele care
corespund vârfurilor x1 şi x6 ; mulţimea vârfurilor aflate pe nivelul 1 este, deci, x1, x6 .
Suprimăm liniile şi coloanele corespunzătoare vârfurilor x1 şi x6 . Se obţine submatricea
AI :
69
x2 x3 x4 x5 x7 x8 x9
0 0 1 0 0 1 0 x2
0 0 0 0 0 0 0 x3
0 0 0 0 0 0 1 x4
AI
0 0 0 0 0 0 1 x5
0 0 0 1 0 1 0 x7
0 0 0 0 0 0 1 x8
0 0 0 0 0 0 0 x9
În submatricea AI au apărut trei coloane cu toate elementele egale cu zero, respectiv
coloanele care corespund vârfurilor x2 , x3 şi x7 ; mulţimea vârfurilor care formează nivelul II al
grafului G este, deci: x2 , x3 , x7 . Suprimăm din submatricea AI , toate liniile şi coloanele care
corespund acestor vârfuri şi obţinem submatricea AII :
x4 x5 x8 x9
0 0 0 1 x4
AII 0 0 0 1 x5
0 0 0 1 x8
0 0 0 0 x9
În submatricea AII au apărut trei coloane cu toate elementele egale cu zero, respectiv
coloanele care corespund vârfurilor x4 , x5 şi x8 ; nivelul III este format din mulţimea acestor
vârfuri: x4 , x5 , x8 .
Suprimând din AIII toate liniile şi coloanele corespunzătoare acestor vârfuri obţinem:
x9
AIII 0 x9
Vârful x9 nu are nici un succesor şi va forma nivelul IV al grafului G.
În final s-a obţinut următoarea împărţire pe nivele:
– nivelul I: x1, x6 ;
– nivelul II: x2 , x3 , x7 ;
– nivelul III: x4 , x5 , x8 ;
– nivelul IV: x9 .
Reprezentarea sagitală este, evident, cea din figura 1.5.4, care respectă condiţia suplimentară
ca toţi succesorii unui vârf să fie aşezaţi pe nivelul imediat următor. De altfel, această condiţie este
realizată implicit în cazul organizării algoritmului în sensul de la nivelul I (care conţine toate
vârfurile fără predecesori) către ultimul nivel (care conţine vârfurile fără succesori).
Lăsăm cititorului ca exerciţiu organizarea algoritmului în sens invers, de la ultimul nivel
către nivelul I şi compararea rezultatului obţinut în final cu cel anterior. De asemenea, se propune
rezolvarea aceleiaşi probleme şi pentru graful din figura 2.4.1.
70
TEST DE AUTOEVALUARE
Problema nr. 1
Problema nr. 2
Prelucrarea unui produs poate trece prin 6 faze distincte notate într-un model de graf prin
xi , i 1, 2,...,6 , iar posibilităţile de trecere de la o fază de prelucrare la alta se reprezintă prin
arce orientate. Matricea booleană asociată acestui graf este următoarea:
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
A ;
1 1 0 0 1 0
0 1 1 0 0 1
1 0 1 0 0 0
1) Să se construiască o reprezentare sagitală a grafului care modelează procesul tehnologic de
prelucrare;
2) Să se determine, pornind de la definiţie sau cu algoritmul lui Chen, matricea drumurilor a
grafului;
3) Este posibil ca produsul să treacă prin toate fazele de prelucrare? Dacă răspunsul este
afirmativ să se indice tehnologia corespunzătoare.
Problema nr. 3
71
0 0 0 0 0 0
1 0 1 0 0 1
1 0 0 1 1 1
A ;
0 0 0 0 1 0
0 0 0 0 0 0
0 0 0 1 0 0
1) Să se construiască o reprezentare sagitală a grafului care modelează sistemul de transport cu
benzi rulante dintre cele 6 puncte de lucru;
2) Să se determine matricea drumurilor asociată grafului G;
3) Să se cerceteze dacă sistemul de benzi rulante existent în hală permite ca produsul să treacă
pe la toate punctele de lucru. Dacă acest lucru nu este posibil să se stabilească o modificare
tehnică cât mai simplă care să permită soluţionarea problemei de producţie.
Problema nr. 4
72
TEMĂ DE CONTROL
Problema nr. 1
O companie de transport mărfuri trebuie să efectueze transportul unor produse între şapte
puncte economice notate cu x1, x2 ,..., x7 , acestea fiind întreprinderi, depozite, magazine de
desfacere, etc. Reţeaua de transport este un graf cu 7 vârfuri, x1, x2 ,..., x7 şi având următoarea
matrice, notată cu A, a conexiunilor:
x1 x2 x3 x4 x5 x6 x7
0 1 0 0 1 1 1 x1
0 0 1 1 0 0 0 x2
1 0 0 1 0 0 0 x3
A ;
0 1 0 0 0 1 0 x4
0 0 1 1 0 1 0 x5
1 0 1 0 1 0 0 x6
1 0 0 1 0 1 0 x7
1) Să se construiască o reprezentare sagitală a grafului reţelei de transport corespunzătoare
matricei A;
2) Să se stabilească dacă în graful reţelei de transport corespunzătoare matricei A există
circuite;
3) Să se determine drumul de lungime maximă din graful obţinut;
4) Să se împartă graful de la punctul 1) în nivele, plecând de la reprezentarea sagitală şi de la
matricea de adiacenţă.
5) Să se rezolve aceeaşi problemă (punctele 1, 2, 3, 4 ) în ipoteza că nu mai poate fi utilizată
legătura de la punctul x1 la punctul x6 ;
6) Să se determine gradul de emisie, gradul de recepţie şi puterea de atingere a fiecărui vârf
al grafului.
Problema nr. 2
În departamentul de cercetare al unei fabrici din industria aeronautică s-au făcut studii şi
cercetări privind influenţa anumitor tratamente suplimentare în prelucrarea unor piese asupra
mărimii sau micşorării timpului mediu de funcţionare al pieselor respective.
Rezultatele cercetărilor au arătat că acest timp se măreşte sau se micşorează cu un anumit
număr de unităţi de timp, aceasta depinzând numai de ordinea în care se aplică aceste tratamente.
S-a stabilit că modificarea timpului mediu de funcţionare a unei piese esenţiale din
ansamblul trenului de aterizare depinde de tratamentul aplicat la un moment dat şi de tratamentul
aplicat anterior, existând numai posibilităţile indicate prin arcele unui graf cu 9 vârfuri,
reprezentând cele 9 tratamente posibile care pot fi aplicate. Matricea conexiunilor acestui graf este
următoarea:
73
x1 x2 x3 x4 x5 x6 x7 x8 x9
0 0 0 1 1 1 0 0 0 x1
1 0 1 0 1 0 0 0 0 x2
0 1 0 0 0 0 0 0 1 x3
1 1 1 0 0 0 0 0 0 x4
A .
0 0 0 0 0 1 0 0 0 x5
0 0 0 0 1 0 1 0 0 x6
0 0 0 0 0 1 0 1 0 x7
0 0 0 0 1 0 1 0 0 x8
0 1 0 0 1 1 0 1 0 x9
1) Să se construiască o reprezentare sagitală a grafului celor 9 tratamente termice, având
matricea conexiunilor A;
2) Să se determine matricea drumurilor T ataşată grafului şi să se precizeze dacă în graf
există circuite;
3) Să se determine drumul de lungime maximă din graful obţinut;
4) Să se împartă graful de la punctul 1) în nivele, plecând de la reprezentarea sagitală şi de la
matricea de adiacenţă.
5) Să se determine gradul de emisie, gradul de recepţie şi puterea de atingere a fiecărui vârf
al grafului.
Problema nr. 3
Între opt puncte de lucru ale unui sistem economic există o reţea de transport al cărui graf
este dat prin matricea A a conexiunilor dintre vârfurile x1, x2 ,..., x8 ale sale, unde:
x1 x2 x3 x4 x5 x6 x7 x8
0 1 0 0 0 1 0 1 x1
0 0 1 0 1 0 0 0 x2
0 0 0 1 0 0 0 0 x3
A 0 0 0 0 0 1 0 1 x4 .
1 0 0 1 0 0 0 0 x5
0 0 1 0 1 0 1 0 x6
1 1 0 1 0 0 0 0 x7
0 1 0 0 0 0 1 0 x8
1) Să se construiască o reprezentare sagitală a grafului a sistemului de transport dintre cele
opt puncte ale sistemului economic aferent matricelor A şi C;
2) Să se determine matricea drumurilor asociată acestui graf utilizând algoritmul lui Chen;
3) Să se stabilească dacă graful are circuite şi să se determine drumul de lungime maximă
din graf;
5) Să se rezolve aceeaşi problemă dacă apare o nouă posibilitate de transport, între vârfurile
x3 şi x7 .
74
6) Să se determine gradul de emisie, gradul de recepţie şi puterea de atingere a fiecărui vârf
al grafului.
Problema nr. 4
1. Claude Berge: Teoria grafurilor şi aplicaţiile ei, Editura tehnică, Bucureşti, 1969;
2. Tiberiu Ionescu: Grafuri. Aplicaţii, Vol I, II, Editura didactică şi pedagogică,
Bucureşti, Bucureşti, 1973;
3. Al. Roşu: Teoria grafurilor. Algoritmi şi aplicaţii, Editura militară, Bucureşti,
1974;
4. C. Dinescu, B. Săvulescu: Metode de matematică modernă pentru economişti.
Culegere de probleme, Editura didactică şi pedagogică, Bucureşti, 1975;
5. O. Popescu, D.P. Vasiliu, ş.a.: Matematici aplicate în economie, Editura didactică
şi pedagogică, Bucureşti, 1997;
6. Nicolae Micu: Teoria grafurilor, Editura Academiei Militare, Bucureşti, 1981;
7. C. Dinescu, I. Fătu: Matematici pentru economişti, vol. II, III, Editura didactică şi
pedagogică, Bucureşti, 1995.
8. Dragoş-Radu Popescu: Combinatorică şi teoria grafurilor, Biblioteca Societăţii
de Stiinţe Matematice din România, Bucureşti, 2005.
75
UNITATEA DE ÎNVĂłARE NR. 3
Obiective urmărite:
Rezumat:
Cuvinte cheie:
Graf cu arce valorizate, drum de lungime minimă, drum de valoare minimă, drum de valoare
maximă, algoritmul lui Ford, principiul optimalităŃii, algoritmul lui Bellman-Kalaba,
algoritmul matriceal.
Timp de studiu:
76
LECłIA 6 - GRAFURI CU ARCE VALORIZATE. DRUM DE LUNGIME MINIMĂ
( )
Fiecărui arc u = xi , x j ∈ U i se ataşează un număr nenegativ, notat cu l ( u ) sau
( )
l xi , x j , care se va numi valoarea arcului u. Definim valoarea drumului
( )
µ = xi1 , xi2 ,..., xik ca fiind suma valorilor arcelor care-l compun, deci
77
k −1
l (µ ) = ∑ l ( xi , xi )
r r +1
(3.1.1)
r =1
Vom studia algoritmi pentru determinarea drumurilor optime (drumuri de valoare
maximă sau de valoare minimă) între două vârfuri ale grafului.
Deoarece într-un graf cu circuite pot exista drumuri de valoare oricât de mare (obŃinute
prin parcurgerea repetată a unui circuit), drumuri de valoare maximă se caută, de regulă, în
grafuri fără circuite. Drumuri de valoare minimă se caută şi în grafuri care au circuite.
ObservaŃia 3.1.2
Drumul de valoare minimă între două vârfuri ale unui graf este un drum elementar (nu
conŃine un circuit ca subdrum).
Exemplu
(
Fie drumul µ = xi ,..., xk ,..., xl ,..., x j )
Fig. 3.1.2
( )
subdrumul µ′ = xi ,..., xk ,..., x j , care are valoare mai mică decât drumul µ , în ipoteza
reală de altfel, că circuitul ( xk ,..., xl ,..., xk ) are cel puŃin un arc de valoare nenulă.
PropoziŃia 3.1.3
Orice subdrum al unui drum optim este, de asemenea, un drum optim.
DemonstraŃie
(
Fie drumul dintre nodurile x şi y definit prin: µ = x,..., xi ,..., x j ,..., xl ,..., y ) de
valoare optimă (maximă sau minimă) într-un graf:
Fig. 3.1.3
78
Atunci subdrumul µ′ = xi , x j ,..., xl( ) este drum de valoare optimă (maximă sau
minimă) de la xi la xl .
Într-adevăr, presupunând că ( ∃) alt subdrum, de exemplu, µ = ( xi , xk ,..., xl ) între
∗
xi şi xl de valoare mai mare (pentru cazul de maxim) sau mai mică (pentru cazul de minim)
decât µ′ , atunci drumul µ1 = ( x,..., xi , xk ,..., xl ,..., y ) ar fi un drum de valoare mai mare
(pentru cazul de maxim), respectiv de valoare mai mică (pentru cazul de minim), de la x la y,
decât drumul µ , presupus a fi optim (de valoare maximă sau minimă) între nodurile x şi y,
contradicŃie cu ipoteza. Rezultă că presupunerea făcută este falsă şi demonstraŃia este
încheiată.
( x( m −2)
, x(
m −1)
) ∈U . Ştim că acest lucru este realizabil, căci această operaŃie, de întoarcere
de la y la x urmează operaŃiei de marcare, de la x la y;
( 0)
3º – Se procedează similar până când se ajunge la vârful x = x.
Drumul căutat va fi: µ = x, x ( (1)
,x ( 2)
)
,..., y .
Din descrierea algoritmului rezultă următoarele două concluzii:
1º – drumul de lungime minimă de la x la y nu este în mod necesar unic;
2º – dacă ( ∃) astfel de drumuri, atunci se pot determina toate.
79
Exemplu
Fie graful G = ( X , Γ ) , X = { x1 , x2 ,..., x9 } , având următoarea reprezentare sagitală:
Fig. 3.2.1
( )
1º arcul xi , x j ∈ U şi xi a fost marcat cu cifra 2;
2º vârful x j este nemarcat.
Aceste vârfuri sunt x7 şi x8 .
Vârful x9 va fi marcat cu 4; deci lungimea minimă a drumurilor de la x1 la x9 este
de 4 unităŃi. Să determinăm, acum, un drum de lungime minimă de la x1 la x9 .
− Reprezentăm întâi vârful x9 , marcat cu cifra 4;
80
Fig. 3.2.2
81
LECłIA 7
3.3 Algoritmul lui Ford pentru determinarea drumurilor de valoare minimă între
două vârfuri ale unui graf
Fie graful G = ( X ,U ) cu arce valorizate şi x, y ∈ X două vârfuri ale sale.
Presupunem că ne interesează un drum de valoare minimă între vârfurile x şi y ale garfului G.
Pentru simplificarea expunerii, dacă X are n + 1 elemente, putem numerota (renumerota)
vârfurile, astfel încât x0 = x şi xn = y . Deci, X = { x0 , x1,..., xn } şi ne interesează drumul
de valoare minimă între x0 şi xn . Facem convenŃia că dacă între două vârfuri nu există nici
un drum, se ia ca valoare minimă între cele două vârfuri, valoarea +∞ .
Admitem că pentru orice i = 1,2,..., n dispunem de un drum arbitrar de la x0 la xi
(dacă astfel de drumuri există, ele se pot depista prin procedeul descris la determinarea
drumului de lungime minimă între două vârfuri dintr-un graf).
Notăm valoarea drumului de la x0 la xi cu λ i , i = 1,2,..., n ; λ 0 = 0 . Dacă nu
există nici un drum de la x0 la xi , se ia λ i = +∞ .
Are loc următorul rezultat esenŃial în stabilirea algoritmului.
Teorema 3.3.1
CondiŃia necesară şi suficientă pentru ca λ i să fie minimul valorilor drumurilor de la
( )
x0 la xi , oricare ar fi i = 1,2,..., n , este ca pentru orice xk , x j ∈U , să aibă loc relaŃia:
λ j − λ k ≤ l ( xk , x j ) (3.3.1)
λ j − λ k > l ( xk , x j ) (3.3.2)
82
Fig. 3.3.1
(
Dacă µ j = x0 , x j ,..., x j
1 ) este drumul de la x0 la x j de valoare λ j şi
µ k = ( x0 , xk ,..., xk ) este drumul de la x0 la xk de valoare λ k , atunci drumul
1
Dacă însă relaŃiile (3.3.1) sunt verificate pentru orice arc ( xk , x j ) , atunci λi este
valoarea minimă a drumurilor de la x0 la xi , ( ∀ ) i = 1,2,.., n . Într-adevăr, dacă
µ = ( x0 , xi1 , xi2 ,..., xik , xi ) este un drum oarecare de la de la x0 la xi , atunci conform cu
relaŃia 1º, avem:
λi1 − λ 0 ≤ l ( x0 , xi1 ) ( j = i1, k = 0 )
λi2 − λi1 ≤ l ( xi1 , xi2 ) ( j = i2 , k = i1 )
.........................................................
λi − λik ≤ l ( xik , xi ) ( j = i, k = ik )
Prin însumarea relaŃiilor şi cu λ 0 = 0 , rezultă:
λi ≤ l ( µ ) (3.3.3)
Arătăm acum că dacă λ i sunt valorile optime, atunci vârfurile consecutive ale unui
drum optim de la x0 la xi verifică relaŃiile 1º cu semnul „=”.
(
Dacă µ = x0 ,..., xk , x j ,..., xi ) este drum de valoare minimă de la x0 la xi atunci
subdrumul µ′ = ( x0 ,..., xk , x j ) este drum de valoare minimă de la x0 la x j iar
µ′′ = ( x0 ,..., xk ) , este drum de valoare minimă de la x0 la xk şi deci avem: l ( µ′ ) = λ j ;
l ( µ′′ ) = λ k . Pe de altă parte, avem că:
l ( µ′ ) = l ( µ′′ ) + l ( xk , x j ) ⇔ λ j − λ k = l ( xk , x j ) (3.3.4)
83
b) Etapa ( k + 1) : pentru orice arc ( xi , x j ) calculăm diferenŃa λ(jk ) − λ(i k ) şi o
( )
comparăm cu valoarea arcului xi , x j . Poate apărea una din situaŃiile.
− b ) ( ∃) un arc (mai multe) ( xi , x j ) astfel încât
1
( ) ( )
λ jk − λi k > l ( xi , x j ) (3.3.5)
( k +1)
Dacă pentru un anumit j există mai mulŃi indici i care verifică (3.3.5), luăm λ j
(k )
( )
egal cu cea mai mică valoare dintre valorile λ i + l xi , x j corespunzătoare.
Dacă pentru un anumit indice j nu există nici un indice i care verifică relaŃia (3.3.5):
( ) ( )
λ jk − λi k > l ( xi , x j ) atunci vom lua:
( ) ( )
λ jk +1 = λ jk (3.3.7)
( )
− b2) Pentru orice arc xi , x j ∈U , avem:
( ) ( )
λ jk − λi k ≤ l ( xi , x j ) (3.3.8)
(k )
În acest caz valorile λ i = λ i , i = 0,1,2,..., n , reprezintă valorile optime ale
drumurilor de la x0 la xi şi trecem la depistarea drumului optim care ne interesează.
( )
Dacă drumul optim de la x0 la xn este x0 ,..., xi , x j , xn , determinăm mai întâi x j ,
apoi xi , ş.a.m.d. astfel:
− căutăm printre relaŃiile (3.3.1) satisfăcute cu semnul „=” în ultima etapă, vârful x j
care verifică relaŃia
λ n − λ j = l ( x j , xn ) (3.3.9)
− odată determinat x j , se caută printre egalităŃile (3.3.1) din ultima etapă vârful xi
pentru care:
λ j − λi = l ( xi , x j ) ,…etc. (3.3.10)
Exemplul 1
Să se determine drumul de valoare minimă de la x0 la x6 , în graful din figura
următoare:
84
Fig. 3.4.1
Etapa 0
( )
λ 00 = 0 ;
( )
λ10 = l ( x0 , x1 ) = 2 ;
( )
λ 20 = l ( x0 , x1, x2 ) = 14 ; l ( x0 , x3 , x2 ) = 15 > 14 ;
( )
λ30 = l ( x0 , x3 ) = 4 ; l ( x0 , x1, x3 ) = 3 < 4 ;
( ) l ( x0 , x3 , x4 ) = 6 > 5;
λ 40 = l ( x0 , x4 ) = 5 ;
l ( x0 , x1, x4 ) = 5;
( )
λ50 = l ( x0 , x4 , x5 ) = 8 ; l ( x0 , x3 , x5 ) = 8 ;
l ( x0 , x3 , x5 , x6 ) = 15;
l ( x0 , x4 , x5 , x6 ) = 15;
( )
λ 60 = l ( x0 , x3 , x6 ) = 15 ; l ( x0 , x1, x2 , x6 ) = 16 > 15;
l ( x0 , x1, x3 , x6 ) = 14;
l ( x , x , x , x , x ) = 12.
0 4 5 2 6
ObservaŃie
( 0)
În etapa „0”, fiecărui vârf xi i se ataşează o valoare λ i , care reprezintă valoarea
( 0)
unui drum de la x0 la xi , i = 1, n , λ 0 = 0 , fără însă a avea grijă ca un astfel de drum, între
x0 şi xi , să fie valoare minimă dintre toate drumurile posibile între cele două vârfuri.
85
( )
Etapa 1. ( k + 1 , pentru k = 0 ). Pentru fiecare arc xi , x j ∈U , vom face diferenŃa
( ) ( )
λ j0 − λi 0 şi o vom compara cu l ( xi , x j ) . În prima coloană scriem toate arcele grafului,
începând de la x6 până la x0 .
Vârful x6 :
( x5 , x6 ) : λ(60 ) − λ(50 ) = 7 = l ( x5 , x6 ) ;
(0) ( 0)
( x3 , x6 ) : λ 6 − λ3 = 11 = l ( x3 , x6 ) ;
( 0) (0)
( x2 , x6 ) : λ 6 − λ 2 = 1 < l ( x2 , x6 ) = 2;
Vârful x5 :
( x4 , x5 ) : λ(50 ) − λ(40 ) = 3 = l ( x4 , x5 ) ;
( 0) ( 0)
( x3 , x5 ) : λ5 − λ3 = 4 = l ( x3 , x5 ) ;
Vârful x4 :
( 0) ( 0)
( x3 , x4 ) : λ 4 − λ3 = 1 < l ( x3 , x4 ) = 2;
( 0) ( 0)
( x0 , x7 ) : λ 4 − λ 0 = 5 = l ( x0 , x4 ) ;
Vârful x3 :
( x2 , x3 ) : λ(30 ) − λ(20 ) = −10 < l ( x2 , x3 ) = 4;
( 0) ( 0)
( x1, x3 ) : λ3 − λ1 = 2 > l ( x1, x3 ) = 1; ( ∗)
( 0) ( 0)
( x0 , x3 ) : λ3 − λ 0 = 4 = l ( x0 , x3 ) ;
Vârful x2 :
( x5 , x2 ) : λ(20 ) − λ5( 0 ) = 6 > l ( x5 , x2 ) = 2; ( ∗)
( 0) ( 0)
( x3 , x2 ) : λ 2 − λ3 = 10 < l ( x3 , x2 ) = 11;
( 0) (0)
( x1, x2 ) : λ 2 − λ1 = 12 = l ( x1, x2 ) ;
Vârful x1 :
{( x , x ) : λ
0 1
( 0)
1
( )
− λ 00 = 2 = l ( x0 , x1 ) .
În etapa 1 am depistat două cazuri în care are loc relaŃia (3.3.5):
( ) ( )
λ jk − λi k > l ( xi , x j ) , k = 0
şi doar în aceste cazuri două cazuri este posibilă îmbunătăŃirea (în sensul micşorării) valorilor
( k +1)
pentru λ j , prin relaŃia:
86
( ) ( )
λ jk +1 = λi k + l ( xi , x j ) , k = 0 (punctul b1) din algoritm).
Pentru etapa următoare vom lua:
( ) ( )
λ31 = λ10 + l ( x1, x3 ) = 2 + 1 = 3 ;
( ) ( )
λ 21 = λ50 + l ( x5 , x2 ) = 8 + 2 = 10 ;
( ) ( )
λ j1 = λ j0 pentru toŃi indicii j ≠ 2 , j ≠ 3 .
( )
Etapa 2. ( k + 1 , pentru k = 1 ). Actualizăm toate valorile pentru λ j1 ,
j = 0,1, 2,...,6 :
(1) (1) (1) (1)
λ 0 = 0; λ1 = 2; λ 2 = 10 ( ∗) ; λ3 = 3 ( ∗) ;
(1) (1) (1)
λ 4 = 5; λ5 = 8; λ 6 = 15.
(1) (1)
Comparăm diferenŃele λ j − λ i cu l ( xi , x j ) pentru toate arcele ( xi , x j ) ∈U :
Vârful x6 :
λ(61) − λ 5(1) = 15 − 8 = 7 = l ( x5 , x6 ) ;
(1) (1)
λ 6 − λ 3 = 15 − 3 = 12 > l ( x3 , x6 ) = 11; ( ∗)
(1) (1)
λ 6 − λ 2 = 15 − 10 = 5 > l ( x2 , x6 ) = 2; ( ∗)
Vârful x5 :
λ5(1) − λ(41) = 8 − 5 = 3 = l ( x4 , x5 ) ;
(1) (1)
λ5 − λ3 = 8 − 3 = 5 > l ( x3 , x5 ) = 4; ( ∗)
Vârful x4 :
λ(41) − λ(31) = 5 − 3 = 2 = l ( x3 , x4 ) ;
(1) (1)
λ 4 − λ 0 = 5 − 0 = 5 = l ( x0 , x4 ) ;
Vârful x3 :
λ3(1) − λ(21) = 3 − 10 = −7 < l ( x2 , x3 ) = 4;
(1) (1)
λ3 − λ1 = 3 − 2 = l ( x1, x3 ) ;
(1) (1)
λ3 − λ 0 = 3 − 0 = 3 < l ( x0 , x3 ) = 4;
Vârful x2 :
87
λ(21) − λ 5(1) = 10 − 8 = 2 = l ( x5 , x2 ) ;
(1) (1)
λ 2 − λ 3 = 10 − 3 = 7 < l ( x3 , x2 ) = 11;
(1) (1)
λ 2 − λ1 = 10 − 2 = 8 < l ( x1, x2 ) = 12;
Vârful x1 :
{λ (1)
1
( )
− λ 01 = 2 − 0 = 2 = l ( x0 , x1 ) .
(k ) ( )
RelaŃia (3.3.5): λ j − λi k > l ( xi , x j ) , k = 1 , are loc în trei situaŃii, marcate cu (*).
(1) (1) (1)
Pot fi îmbunătăŃite valorile λ 6 (în două cazuri) şi λ 5 . Pentru λ 6 avem:
( ) ( ) ( ) ( )
λ 62 = λ31 + l ( x3 , x6 ) = 3 + 11 = 14 sau λ 62 = λ 21 + l ( x2 , x6 ) = 10 + 2 = 12 .
Deoarece căutăm un drum de valoare minimă, vom alege valoare mai mică:
( )
λ 62 = 12 .
( 2) ( 2) ( ) ( )
Pentru λ5 vom avea: λ 5 = λ 31 + l ( x3 , x5 ) = 3 + 4 = 7 , deci λ52 = 7 .
( 2) ( )
În rest, pentru toŃi indicii j ≠ 5,6 , vom avea: λ 5 = λ j1 .
( )
Etapa 3. ( k + 1 , pentru k = 2 ). Actualizăm toate valorile pentru λ j2 ,
j = 0,1, 2,...,6 :
( 2) ( 2) ( 2) ( 2)
λ 0 = 0; λ1 = 2; λ 2 = 10; λ3 = 3;
( 2) ( 2) ( 2)
λ 4 = 5; λ5 = 7; λ 6 = 12.
( 2) ( 2)
Comparăm diferenŃele λ j − λ i cu l ( xi , x j ) pentru toate arcele ( xi , x j ) ∈ U :
Vârful x6 :
λ(62 ) − λ5( 2 ) = 12 − 7 = 5 < l ( x5 , x6 ) = 7;
( 2) ( 2)
λ 6 − λ3 = 12 − 3 = 9 < l ( x3 , x6 ) = 11;
( 2) ( 2)
λ 6 − λ 2 = 12 − 10 = 2 = l ( x2 , x6 ) ;
Vârful x5 :
λ5( 2 ) − λ(42 ) = 7 − 5 = 2 < l ( x4 , x5 ) = 3;
( 2) ( 2)
λ5 − λ3 = 7 − 3 = 4 = l ( x3 , x5 ) ;
Vârful x4 :
λ(42 ) − λ(32 ) = 5 − 3 = 2 = l ( x3 , x4 ) ;
( 2) ( 2)
λ 4 − λ 0 = 5 − 0 = 5 = l ( x0 , x4 ) ;
Vârful x3 :
88
λ3( 2 ) − λ(22 ) = 3 − 10 = −7 < l ( x2 , x3 ) = 4;
( 2) (2)
λ3 − λ1 = 3 − 2 = 1 = l ( x1, x3 ) ;
( 2) (2)
λ3 − λ 0 = 3 − 0 = 3 < l ( x0 , x3 ) = 4;
Vârful x2 :
λ(22 ) − λ5( 2 ) = 10 − 7 = 3 > l ( x5 , x2 ) = 2; ( ∗)
( 2) ( 2)
λ 2 − λ3 = 10 − 3 = 7 < l ( x3 , x2 ) = 11;
( 2) ( 2)
λ 2 − λ1 = 10 − 2 = 8 < l ( x1, x2 ) = 12;
Vârful x1 :
{λ ( 2)
1
( )
− λ 02 = 2 − 0 = 2 = l ( x0 , x1 ) .
( 2)
În această etapă singura valoare care se îmbunătăŃeşte este λ 2 , astfel că pentru etapa
( 3) ( 2)
următoare ( k = 3) vom lua: λ 2 = λ5 + l ( x5 , x2 ) = 7 + 2 = 9 .
( 3) ( 2)
În rest, pentru j ≠ 2 vom avea: λ j = λ j .
( 3)
Etapa 4. ( k + 1 , pentru k = 3 ). Actualizăm valorile pentru λ j , j = 0,1, 2,...,6
( 3) ( 3) ( 3) ( 3)
λ 0 = 0; λ1 = 2; λ 2 = 9; λ3 = 3;
( 3) ( 3) ( 3)
λ 4 = 5; λ5 = 7; λ 6 = 12.
( 3) ( 3)
Comparăm diferenŃele λ j − λ i cu l ( xi , x j ) pentru toate arcele ( xi , x j ) ∈ U .
ObŃinem următoarele valori:
Vârful x6 :
λ(63) − λ5( 3) = 12 − 7 = 5 < l ( x5 , x6 ) = 7;
( 3) ( 3)
λ 6 − λ3 = 12 − 3 = 9 < l ( x3 , x6 ) = 11;
( 3) ( 3)
λ 6 − λ 2 = 12 − 9 = 3 > l ( x2 , x6 ) = 2; ( ∗)
Vârful x5 :
λ5( 3) − λ(43) = 7 − 5 = 2 < l ( x4 , x5 ) = 3;
( 3) ( 3)
λ5 − λ3 = 7 − 3 = 4 < l ( x3 , x5 ) = 4;
Vârful x4 :
89
λ(43) − λ (33) = 5 − 3 = 2 = l ( x3 , x4 ) ;
( 3) ( 3)
λ 4 − λ 0 = 5 − 0 = 5 = l ( x0 , x4 ) ;
Vârful x3 :
λ3( 3) − λ(23) = 3 − 9 = −6 < l ( x2 , x3 ) = 4;
( 3) ( 3)
λ3 − λ1 = 3 − 2 = 1 = l ( x1, x3 ) ;
( 3) ( 3)
λ3 − λ 0 = 3 − 0 = 3 < l ( x0 , x3 ) = 4;
Vârful x2 :
λ(23) − λ 5( 3) = 9 − 7 = 2 = l ( x5 , x2 ) ;
( 3) ( 3)
λ 2 − λ 3 = 9 − 3 = 6 < l ( x3 , x2 ) = 11;
( 3) ( 3)
λ 2 − λ1 = 9 − 2 = 7 < l ( x1, x2 ) = 12;
Vârful x1 :
{λ ( 3)
1
( )
− λ 03 = 2 − 0 = 2 = l ( x0 , x1 ) .
( 3)
Singura valoare care se îmbunătăŃeşte este λ 6 şi pentru etapa următoare vom lua:
( ) ( )
λ 64 = λ 23 + l ( x2 , x6 ) = 9 + 2 = 11 . În rest, pentru toŃi indicii j ≠ 6 vom lua:
( ) ( )
λ j4 = λ j3 .
( )
Etapa 5. ( k +1, pentru k = 4 ). Actualizarea valorilor pentru λ j4 :
( 4) ( 4) ( 4) ( 4)
λ 0 = 0; λ1 = 2; λ 2 = 9; λ3 = 3;
( 4) ( 4) ( 4)
λ 4 = 5; λ5 = 7; λ 6 = 11.
( 4) ( 4)
Comparăm diferenŃele λ j − λ i cu l ( xi , x j ) pentru toate arcele ( xi , x j ) ∈ U :
Vârful x6 :
λ(64 ) − λ5( 4 ) = 11 − 7 = 4 < l ( x5 , x6 ) = 7;
( 4) ( 4)
λ 6 − λ3 = 11 − 3 = 8 < l ( x3 , x6 ) = 11;
( 4) ( 4)
λ 6 − λ 2 = 11 − 9 = 2 = l ( x2 , x6 ) ; ( ∗)
Vârful x5 :
λ5( 4 ) − λ(44 ) = 7 − 5 = 2 < l ( x4 , x5 ) = 3;
( 4) ( 4)
λ5 − λ3 = 7 − 3 = 4 = l ( x3 , x5 ) ; ( ∗)
Vârful x4 :
90
λ(44 ) − λ3( 4 ) = 5 − 3 = 2 = l ( x3 , x4 ) ; ( ∗)
( 4) ( 4)
λ 4 − λ 0 = 5 − 0 = 5 = l ( x0 , x4 ) ; ( ∗)
Vârful x3 :
λ3( 4 ) − λ(24 ) = 3 − 9 = −6 < l ( x2 , x3 ) = 4;
( 4) (4)
λ3 − λ1 = 3 − 2 = 1 = l ( x1, x3 ) ; ( ∗)
( 4) (4)
λ3 − λ 0 = 3 − 0 = 3 < l ( x0 , x3 ) = 4;
Vârful x2 :
λ(24 ) − λ5( 4 ) = 9 − 7 = 2 = l ( x5 , x2 ) ; ( ∗)
( 4) ( 4)
λ 2 − λ3 = 9 − 3 = 6 < l ( x3 , x2 ) = 11;
( 4) ( 4)
λ 2 − λ1 = 9 − 2 = 7 < l ( x1, x2 ) = 12;
Vârful x1 :
{λ ( 4)
1
( )
− λ 04 = 2 − 0 = 2 = l ( x0 , x1 ). ( ∗)
Constatăm că la sfârşitul etapei a 5-a, în toate relaŃiile obŃinute nu mai apare semnul
( 4)
„>”, deci, conform teoremei demonstrate anterior, valorile λi = λ1 , i = 0,1, 2,...,6 , sunt
valorile optime.
Etapa finală a algoritmului presupune determinarea drumului optim (de valoare
minimă), de la x6 la x0 . În ultima etapă am marcat cu (*) toate relaŃiile (3.3.1) satisfăcute cu
semnul „=”. Dacă notăm cu i penultimul vârf al acestui drum, atunci indicele i verifică
ecuaŃia: λ 6 − λi = l ( xi , x6 ) (a se vedea relaŃia nr. 3.3.9). Vom căuta printre egalităŃile (*) din
relaŃiile scrise în ultima etapă şi care corespund vârfului x6 , indicele sau indicii i care verifică
această relaŃie tip egalitate. Rezultă i = 2 . Deci, pe drumul optim de la x0 la x6 , ultimul arc este
( x2 , x6 ) .
Fie acum xi vârful care-l precede pe x2 pe drumul optim. Trebuie să avem, conform
relaŃiei (3.3.10), îndeplinită λ 2 − λi = l ( xi , x2 ) . Căutăm la relaŃiile
condiŃia:
corespunzătoare vârfului x2 şi găsim: λ 2 − λ5 = 2 = l ( x5 , x2 ) . Deci x5 îl precede pe x2
pe drumul optim. Mai departe:
λ5 − λi = l ( xi , x5 ) ⇒ i = 3;
Rezultă:
λ5 − λ3 = 4 = l ( x3 , x5 ) .
λ3 − λi = l ( xi , x3 ) ⇒ i = 1;
Apoi:
λ3 − λ1 = l ( x1, x3 ) = 1.
În sfârşit: λ1 − λ 0 = 2 = l ( x0 , x1 ) ⇒ i = 0
Deci, drumul de valoare optimă (minimă) de la x0 la x6 este:
91
µ = ( x0 , x1, x3 , x5 , x2 , x6 ) .
ObservaŃie
1. Algoritmul se poate programa uşor.
2. Se poate evita etapa iniŃială a determinării unor drumuri de la x0 la xi ,
i = 1,2,..., n , astfel:
( 0) (0)
− în etapa „0” (iniŃială) se iau valorile: λ 0 = 0 şi λ i = M , unde M este un
număr mai mare decât, de exemplu, suma valorilor tuturor arcelor grafului. De obicei se ia
M = +∞ şi se utilizează convenŃia +∞ − ∞ = 0 ;
− pornind de la aceste valori iniŃiale se fac îmbunătăŃiri succesive, conform
algoritmului prezentat până la obŃinerea valorilor optime. Acest algoritm se numeşte
„algoritmul lui Ford”.
Exemplul 2
Să se determine drumul de valoare minimă între x0 şi x5 în graful următor:
Fig. 3.4.2
92
Singurul vârf pentru care are loc egalitatea este x1 . Deci, µ = ( x0 ,..., x1 , x3 , x2 , x5 ) .
( 4) ( 4)
Mai departe: λ1 − λ i = l ( xi , x1 ) ⇒ i = 0 (singurul vârf pentru care are loc relaŃia de
egalitate).
Aşadar, drumul optim (de valoare minimă) este:
µ = ( x0 , x1, x3 , x2 , x5 ) şi l ( µ ) = 8 .
Rezultatele calculelor vor fi trecute într-un tabel:
93
arce ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )
l ( xi , x j ) ( ) λ j0 − λi 0 ( ) λ j1 − λi1 ( ) λ j2 − λi 2 ( ) λ j3 − λi 3 ( ) λ j4 − λi 4
( xi , x j ) λi 0 λ i1 λi 2 λi 3 λi 4
Vârful x5
( ) ( ) ( ) ( ) ( )
( x4 , x5 ) 7 λ 00 = 0 0 λ 01 = 0 +∞ (*) λ 02 = 0 7 λ 03 = 0 5 λ 04 = 0 4<
( ) ( ) ( ) ( ) ( )
( x2 , x5 ) 4 λ10 = ∞ 0 λ11 = 2 0 λ12 = 2 8 (*) λ13 = 2 5 (*) λ14 = 2 4 „=”
Vârful x4
( ) ( ) ( ) ( ) ( )
( x3 , x4 ) 1 λ 20 = ∞ 0 λ 21 = ∞ −∞ λ 22 = 5 3 (*) λ 23 = 4 1 λ 24 = 4 1 „=”
( )
( ) λ31 = +∞ ( ) ( ) ( )
( x0 , x4 ) 6 λ30 =∞ ∞ (*) 6 λ32 = 3 6 λ33 = 3 4 λ34 = 3 4<
Vârful x3
( ) ( ) ( ) ( ) ( )
( x1, x3 ) 1 λ 40 = ∞ 0 λ 41 = 6 +∞ (*) λ 42 = 6 1 λ 43 = 4 1 λ 44 = 4 1 „=”
Vârful x2
( ) ( ) ( ) ( ) ( )
( x3 , x2 ) 1 λ50 = ∞ 0 λ51 = ∞ 0 λ 52 = 13 2 (*) λ53 = 9 1 λ54 = 8 1 „=”
( x1, x2 ) 3 0 +∞ (*) 3 2 2<
Vârful x1
( x0 , x1 ) 2 ∞ (*) 2 2 2 2 „=”
Vârful x0
( x3 , x0 ) 5 −∞ −∞ –3 –3 −3 <
( ) ( ) ( ) ( )
(
λ 41 = λ 00 + l x0 , x4 )=6 λ52 = λ 41 + l ( x4 , x5 ) = 6 + 7 = 13 ( ) ( )
( ) ( ) ( ) ( ) λ53 = λ 22 + l ( x2 , x5 ) = 5 + 4 = 9
(
λ11 = λ 00 + l x0 , x1 )=2 λ32 = λ11 + l ( x1, x3 ) = 2 + 1 = 3 ( ) ( )
( ) ( ) ( ) ( ) λ 43 = λ32 + l ( x3 , x4 ) = 3 + 1 = 4
(
λi1 = λi 0 , ∀ i ≠ 1.4 ) λ 22 = λ11 + l ( x1, x2 ) = 2 + 3 = 5 ( ) ( )
( ) ( ) λ 23 = λ32 + l ( x3 , x2 ) = 3 + 1 = 4
(
λ54 = λ 23 + l x2 , x5 )=4+4=8
94
3.6 Algoritmul lui Ford pentru determinarea drumurilor de valoare maximă
dintre două vârfuri ale unui graf fără circuite. Exemple.
Dacă G = ( X ,U ) este un graf fără circuite, putem căuta drumuri de valoare maximă
între două vârfuri distincte ale grafului. Deoarece într-un graf finit există un număr finit de
drumuri, atunci dacă există drumuri între vârfurile distincte x şi y, printre ele există (cel puŃin)
unul de valoare maximă.
Dacă între două vârfuri nu există nici un drum vom spune în mod convenŃional că
valoare maximă este −∞ . Presupunem că X = { x0 , x1,..., xn } şi că ne interesează drumul
de valoare maximă de la x0 la xn .
Dacă λi reprezintă valoarea unui drum de la x0 la xi , putem enunŃa o teoremă
analoagă celei din cazul determinării drumului de valoare minimă dintre două vârfuri distincte
ale grafului:
Teoremă 3.6.1
CondiŃia necesară şi suficientă pentru ca λ i să fie valoarea maximă a drumurilor de la
( )
x0 la xi ( i = 1,2,..., n ) este ca pentru orice xi , x j ∈U să aibă loc relaŃia:
λ j − λi ≥ l ( xi , x j ) , ( λ 0 = 0 ). (3.6.1)
(k )
atunci valoarea λ j poate fi îmbunătăŃită, luând pentru etapa următoare,
( ) ( ) ( )
λ jk +1 = λi k + l ( xi , x j ) > λ jk . (3.6.3)
(k )
Procesul continuă până când nici una din valorile λ j , j = 1,..., n nu mai poate fi
îmbunătăŃită. La sfârşitul acestei etape se obŃin valorile optime pentru λ j şi se trece la
determinarea drumului optim (de valoare maximă) de la x0 la xn , analog ca în cazul
drumurilor de valoare minimă.
95
Exemplul 1
Să se determine drumul de valoare maximă de la x0 şi x5 în graful următor:
Fig. 3.6.1
Etapa 1. ( k + 1 , pentru k = 0 ).
( 0) ( 0) ( ) ( )
Pentru început luăm: λ 0 = 0 ; λ1 = λ 20 = ... = λ50 = −∞ .
( 0) ( 0)
Dintre aceste valori singurele care se îmbunătăŃesc sunt λ1 şi λ 2 , astfel:
( ) ( )
λ11 = λ 00 + l ( x0 , x1 ) = 3 ;
( ) ( )
λ 21 = λ 00 + l ( x0 , x2 ) = 5 .
(1) (1) (1) (1)
Pentru celelalte valori, în etapa următoare luăm: λ3 = λ 4 = λ5 = −∞ ; λ 0 = 0 .
{( x , x ) : λ
0 2
(1)
2
( )
− λ 01 = 5 = l ( x0 , x2 ) ;
Vârful x1 :
( x2 , x1 ) : λ1(1) − λ(21) = 3 − 5 = −2 < l ( x2 , x1 ) = 4; ( ∗)
(1) (1)
( x0 , x1 ) : λ1 − λ 0 = 3 = l ( x0 , x1 ) .
Au fost marcate cu (*) relaŃiile care pot aduce efectiv îmbunătăŃiri valorilor λ j .
(
Primele trei relaŃii, deşi sunt de forma λ j − λi < l xi , x j , nu aduc practic nici o )
îmbunătăŃire. De exemplu, din prima relaŃie, pentru ( x4 , x5 ) , ar trebui să luăm:
( ) ( )
λ52 = λ 41 + l ( x4 , x5 ) = −∞ . Aceasta se întâmplă pentru toate arcele xi , x j ∈U , pentru ( )
(
care λi = λ j = −∞ şi l xi , x j > 0 şi finit.)
(1) (1) (1)
Se pot îmbunătăŃi valorile: λ 4 , λ 3 , λ1 şi le vom calcula:
λ (42 ) = λ(21) + l ( x2 , x4 ) = 5 + 5 = 10;
( 2) (1)
λ 4 = λ1 + l ( x1, x4 ) = 3 + 6 = 9.
( 2)
Cum noi căutăm drumul de valoare maximă, alegem λ 4 = 10 .
λ3( 2 ) = λ(21) + l ( x2 , x3 ) = 5 + 4 = 9;
( 2) ( 2) (1)
Pentru λ3 : λ3 = λ1 + l ( x1, x3 ) = 3 + 4 = 7;
( 2) (1)
λ3 = λ 0 + l ( x0 , x3 ) = 0 + 13 = 13.
( 2)
Alegem λ3 = 13 (valoarea maximă).
(1)
λ1( 2 ) = λ(21) + l ( x2 , x1 ) = 5 + 4 = 9;
Pentru λ1 : ( 2) (1)
λ1 = λ 0 + l ( x0 , x1 ) = 0 + 3 = 3.
( 2)
Alegem λ1 = 9 (valoarea maximă).
Pentru celelalte valori ale lui j, j ∈ {0,2,5} , păstrăm valorile anterioare:
( ) ( ) ( ) ( ) ( ) ( )
λ 02 = λ 01 = 0 , λ 22 = λ 21 = 5 , λ52 = λ51 = −∞ .
Se recalculează, pentru toate arcele ( xi , x j ) ∈U , diferenŃele: ( ) ( )
λ j2 − λi 2 şi se
(
compară cu l xi , x j . )
97
Valorile actualizate ale numerelor λ j pentru etapa a 3-a sunt, deci
Etapa 3. ( k + 1 pentru k = 2 )
Vârful x5 :
( 2) ( 2)
λ5 − λ 4 = −∞ < l ( x4 , x5 ) = 5; ( ∗)
( 2)
λ5 − λ3( ) = −∞ < l ( x3 , x5 ) = 10; ( ∗)
2
Vârful x4 :
λ( 2 ) − λ( 2 ) = −3 < l ( x , x ) = 5; ( ∗)
4 3 3 4
(2) ( 2)
λ 4 − λ 2 = 5 = l ( x2 , x4 ) ;
(2) ( 2)
λ 4 − λ1 = 1 < l ( x1, x4 ) = 6; ( ∗)
Vârful x3 :
λ( 2 ) − λ( 2 ) = 8 > l ( x , x ) = 4;
3 2 2 3
( 2) ( 2)
λ3 − λ1 = 4 = l ( x1, x3 ) ;
( 2) ( 2)
λ3 − λ 0 = 13 = l ( x0 , x3 ) ;
Vârful x2 :
{λ( ) − λ( ) = 5 = l ( x , x );
2
2
0
2
0 2
Vârful x1 :
λ ( 2 ) − λ ( 2 ) = 4 = l ( x , x ) ;
1 2 2 1
(2)
λ1 − λ(0 ) = 9 > l ( x0 , x1 ) = 3.
2
InegalităŃile λ j i (
i j )
( k ) − λ ( k ) < l x , x au fost marcate cu (*). Se pot îmbunătăŃi λ ( 2 )
5
( 2)
şi λ 4 . Valoarea îmbunătăŃită pentru etapa următoare se calculează cu relaŃia:
λ(j
k +1)
(
= λ(i ) + l xi , x j
k
) ( > λ( ) ) .
i
k
Pentru λ 5 avem:
λ( 3) = λ( 2 ) + l ( x , x ) = 10 + 5 = 15;
5 4 4 5
( 3)
λ5 = λ(3 ) + l ( x3 , x5 ) = 13 + 10 = 23.
2
( 3)
Vom lua λ 5 = 23 , deoarece căutăm drumul de valoare maximă între valorile x0 şi
x5 .
98
Pentru λ 4 avem:
λ( 3) = λ( 2 ) + l ( x , x ) = 13 + 5 = 18;
4 3 3 4
( 3)
λ 4 = λ1( ) + l ( x1, x4 ) = 9 + 6 = 15.
2
( 3)
Din acelaşi motiv vom lua, pentru etapa următoare, λ 4 = 18 .
Valorile actualizate ale numerelor λ j pentru etapa a 4-a sunt:
Vârful x5 :
λ ( 3 ) − λ ( 3 ) = 5 = ( x , x ) ;
5 4 4 5
( 3)
λ5 − λ(3 ) = 10 = l ( x3 , x5 ) ;
3
Vârful x4 :
λ ( 3 ) − λ ( 3) = 5 = l ( x , x ) ;
3 4
4 3
( 3) ( 3)
λ 4 − λ 2 = 13 > l ( x2 , x4 ) = 5;
( 3) ( 3)
λ 4 − λ1 = 9 > l ( x1, x4 ) = 6;
Vârful x3 :
λ( 3) − λ( 3) = 8 > l ( x , x ) = 4;
2 3
3 2
( 3) ( 3)
λ3 − λ1 = 4 = l ( x1, x3 ) ;
( 3) ( 3)
λ3 − λ 0 = 13 = l ( x0 , x3 ) ;
Vârful x2 :
{λ( ) − λ( ) = 5 = l ( x , x );
2
3
0
3
0 2
Vârful x1 :
λ ( 3 ) − λ ( 3) = 4 = l ( x , x ) ;
1 2 2 1
( 3)
λ1 − λ(0 ) = 9 > l ( x0 , x1 ) .
3
99
La sfârşitul acestei etape toate relaŃiile dintre λ j i ( i )
( k ) − λ ( k ) şi l x , x sunt de tip „=”
j
( 3)
sau „>”, deci nici unul dintre numerele λ i nu mai poate fi îmbunătăŃit. Rezultă că valorile:
λ 0 = 0 ; λ1 = 9 ; λ 2 = 5 ; λ3 = 13 ; λ 4 = 18 ; λ 5 = 23 sunt optime şi se poate trece
la etapa de depistare a drumului optim de la x0 şi x5 .
Determinarea drumului optim de la x0 la x5 .
Dacă xi este penultimul vârf al drumului optim, atunci: λ 5 − λ i = l ( xi , x5 ) (relaŃii
de tip „=”). Rezultă i = 3 sau i = 4 . Fie x3 penultimul vârf. Dacă x j precede pe x3 , atunci:
λ 3 − λ j = l ( x j , x3 ) . Rezultă j = 0 sau j = 1 . Dacă j = 0 , se obŃine drumul optim
µ1 = ( x0 , x3 , x5 ) . Dacă j = 1 se determină succesiv vârfurile care-l preced pe x1 şi se
obŃine drumul optim: µ 2 = ( x0 , x2 , x1, x3 , x5 ) . Dacă penultimul vârf este luat x4 , atunci
analog se determină toate vârfurile care-l preced pe x4 şi se obŃin drumurile optime:
µ3 = ( x0 , x3 , x4 , x5 ) , µ 4 = ( x0 , x2 , x1, x3 , x4 , x5 ) .
Valoarea fiecăruia dintre drumurile determinate este maximă şi egală cu 23.
100
LECłIA 8
3.7 Algoritmul Bellman-Kalaba pentru determinarea drumurilor de valoare
minimă dintre două vârfuri ale unui graf
DefiniŃia 3.7.1
Un graf se numeşte graf cu arce valorizate dacă este definit astfel: G = ( X ,U , l ) ,
unde X = { x0 , x1 ,..., xn } este mulŃimea vârfurilor, U = mulŃimea arcelor şi l :U → +
este o funcŃie reală, pozitivă, care asociază fiecărui arc un număr pozitiv numit valoarea sa.
FuncŃia l se poate prelungi pe mulŃimea drumurilor din graf. În cele ce urmează se va
considera că l este definită pe mulŃimea drumurilor.
Ne propunem să determinăm drumul de valoare minimă de la x0 la xn . Algoritmul
lui Bellman-Kalaba ce va fi descris în continuare are la bază „principiul optimalităŃii”
formulat, la modul general , astfel: „orice subpolitică a unei politici optime este, de asemenea,
o politică optimă”. În cazul grafurilor formularea este, pentru situaŃia determinării drumurilor
minime, următoarea: „orice subdrum al unui drum optim este, de asemenea, un drum optim”.
( )
l ( i, j ) , dacă xi , x j ∈U , i ≠ j;
Fie cij = 0, dacă i = j; (3.7.1)
+∞, ( )
dacă xi , x j ∉U , i ≠ j.
Pentru a înŃelege mai bine utilitatea introducerii acestei notaŃii vom considera graful
( )
G = X ,U% , l% , în care există toate arcele posibile, cu excepŃia buclelor, iar aceste arce sunt
valorizate astfel:
l ( u ) dacă u ∈U ;
l% ( u ) = (3.7.2)
+∞ dacă u ∈U% \ U .
( )
matricea c = cij . vi
( 0)
, i = 0,1,..., n − 1 , reprezintă valoarea drumului format dintr-un
singur arc, de la xi la xn .
Etapa 1
(1)
În etapa următoare vom lua vi = valoarea minimă a drumurilor formate din cel mult
două arce de la xi la xn , unde i = 0,1,..., n − 1 .
Pentru i fixat, drumurile de la xi la xn , formate din cel mult două arce, sunt
următoarele:
( xi , x1, xn ) , ( xi , x2 , xn ) ,..., ( xi , xi −1, xn ) , ( xi , xn ) , ( xi , xi +1, xn ) ,..., ( xi , xn −1, xn ) .
Valorile acestor drumuri sunt, respectiv următoarele:
l% ( xi , x1, xn ) = l% ( xi , x1 ) + l% ( x1, xn ) = ci1 + v1( ) ;
0
l% ( xi , x2 , xn ) = l% ( xi , x2 ) + l% ( x2 , xn ) = ci 2 + v2( ) ;
0
.......................................................................
l% ( xi , xn ) = vi( ) = cin = l% ( xi , xi , xn ) = cii + vi( ) = vi( ) , ( cii = 0 ) ;
0 0 0
........................................................................
l ( xi , xn −1, xn ) = l% ( xi , xn −1 ) + l% ( xn −1, xn ) = cin −1 + vn( −)1.
0
Valoarea minimă a drumurilor de la xi la xn , formate din cel mult două arce este:
( )
n
vi( ) = min cij + v (j ) , vn( ) = 0 , i = 0,1,..., n − 1
1 0 1
(3.7.3)
j =0
Etapa 2
( 2)
În etapa a doua vom lua vi = valoarea minimă a drumurilor de la xi la xn formate
( 2)
din cel mult trei arce, i = 0,1,..., n − 1 şi vn = 0 .
Cel mai bun drum de la xi la xn format din cel mult trei arce şi care are drept al
doilea vârf un anumit vârf x j este format din arcul xi , x j ( ) şi cel mai bun drum de la x j la
xn format din cel mult două arce. Valoarea acestui drum este:
cij + v(j ) ,
1
(3.7.4)
( )
n
vi( ) = min cij + v(j ) , i = 0, n − 1 şi vn( ) = 0 .
2 1 2
(3.7.5)
j =0
102
Să mai observăm că pentru j = i expresia (3.7.4) ne dă valoarea celui mai bum drum
(1) (1)
de la xi la xn format din cel mult două arce: cii + vi = vi , ( cii = 0 ) , iar pentru j = n
aceeaşi expresie, (3.7.4), ne dă valoarea drumului format dintr-un singur arc:
Deci, putem afirma că cel mai bun drum de la xi la xn format din cel mult trei arce
are valoarea
( )
n
vi( ) = min cij + v(j ) , i = 0,1,..., n − 1 . Cum, în general, cij ≥ 0 , rezultă că:
2 1
j =0
( )
n
vi( ) = min cij + v (j ) , i = 0, n − 1 şi vn( ) = 0 .
k k −1 k
(3.7.8)
j =0
vi( ) ≤ vi( )
k k −1
(3.7.9)
CondiŃia de oprire a algoritmului
(k )
< vi(
k −1)
Dacă, într-o anumită etapă, pentru un anumit i, avem că vi aceasta
înseamnă că există cel puŃin un drum de la xi la xn format din exact k + 1 arce care este mai
bun (adică de valoare mai mică) decât orice drum de la xi la xn format din cel mult k arce.
(Acest drum poate apare în etapa următoare, k + 1 ).
(k )
= vi(
k −1)
Procedeul de calcul se va întrerupe la prima etapă k în care vom avea: vi ,
(∀) i = 0, n − 1 .
(k )
= vi(
k −1)
În această etapă valoarea vi , pentru orice i = 0, n − 1 , reprezintă valoarea
(k )
celui mai bun drum (de valoare minimă) de la xi la xn , deci vi sunt valorile optime,
(∀) i = 0, n − 1 .
Faza II – determinarea drumului optim de la x0 la xn .
După realizarea condiŃiei de oprire a algoritmului (având ca stare iniŃială cunoaşterea
(k )
valorilor optime vi , i = 0, n − 1 ) se trece la determinarea drumului optim de la x0 la xn .
( )
Presupunând că acest drum este µ = x0 , xi , x j ,..., xn , se determină succesiv indicii
i, j ,... astfel:
1. indicele i se determină din relaŃia: v0 = c0i + vi ;
103
2. odată determinat i şi dacă i ≠ n se trece la determinarea vârfului următor x j din
relaŃia: vi = cij + v j etc.
În concluzie algoritmul Bellman-Kalaba pentru determinarea drumului de valoare
minimă de la x0 la xn constă în:
Faza I – declanşarea şi funcŃionarea algoritmului până la realizarea condiŃiei de
oprire.
( 0)
= cin , i = 0, n − 1 , vn( ) = 0 (Faza I, etapa 0);
0
a) se ia vi
( )
n
( k ) = min c + v( k −1) ,
i = 0, n şi vn( ) = 0 .
k
b) pentru k = 1,2,... , se calculează vi ij j
j =1
(Faza I, etapele 1, 2,...,k );
vi( ) = vi( ) ,
k −1
c) dacă într-o etapă k se ajunge la
k
( ∀ ) i = 0, n , valorile
Exemplul 3.8.1
Să se determine drumul de valoare minimă de la x0 la x6 în graful din figura
următoare
Fig. 3.8.1
104
( )
În această etapă se construieşte matricea C = cij , i, j = 0,1,...,6 şi se definesc
( )
6
(1) = min c + v( 0 ) ,
În această etapă se calculează valorile vi ij j i = 0,1,2,...,5 ,
j =0
( )
6
v0( ) = min c0 j + v(j ) = min ( 0 + ∞;2 + ∞; ∞ + 2;4 + 11;5 + ∞; ∞ + 7; ∞ + 0 ) = 15 ;
1 0
j =0
Practic, se adună elementele corespunzătoare din linia lui x0 cu elementele
corespunzătoare din coloana lui x6 din matricea C, după care se determină cea mai mică
valoare din vectorul rezultat.
Pentru i = 1 :
( )
6
v1( ) = min c1 j + v(j ) = min ( ∞ + ∞;0 + ∞;12 + 2;1 + 11; ∞ + ∞; ∞ + 7; ∞ + 0 ) = 12 =
1 0
j =0
6
( )
= min c1 j + c j 6 ⇔ min ( linia lui x1 + coloana lui x6 ) .
j =0
Pentru i = 2 :
( )
6
v2( ) = min c2 j + v(j ) = min ( ∞ + ∞; ∞ + ∞;0 + 2;4 + 11; ∞ + ∞; ∞ + 7;2 + 0 ) = 2 =
1 0
j =0
6
( )
= min c2 j + c j 6 ⇔ min ( linia lui x2 + coloana lui x6 ) .
j =0
105
Pentru i = 3 :
( )
6
v3( ) = min c3 j + v(j ) = min ( ∞ + ∞; ∞ + ∞;11 + 2;0 + 11;2 + ∞;4 + 7;11 + 0 ) = 11 =
1 0
j =0
6
( )
= min c3 j + c j 6 ⇔ min ( linia lui x3 + coloana lui x6 ) .
j =0
Pentru i = 4 :
( )
6
v4( ) = min c4 j + v(j ) = min ( ∞ + ∞; ∞ + ∞; ∞ + 2; ∞ + 11;0 + ∞;3 + 7; ∞ + 0 ) = 10 =
1 0
j =0
6
( )
= min c4 j + c j 6 ⇔ min ( linia lui x4 + coloana lui x6 ) .
j =0
Pentru i = 5 :
( )
6
v5( ) = min c5 j + v (j ) = min ( ∞ + ∞; ∞ + ∞;2 + 2; ∞ + 11; ∞ + ∞;0 + 7;7 + 0 ) = 4 =
1 0
j =0
6
( )
= min c5 j + c j 6 ⇔ min ( linia lui x5 + coloana lui x6 ) .
j =0
(1)
Pentru i = 6 : v6 = 0 .
La sfârşitul etapei 1 rezultă vectorul
1
( 1 1 1
)
V ( ) = v0( ) , v1( ) , v2( ) ,..., v6( ) = (15,12,2,11,10,4,0 ) .
1
( 0)
Comparând cu V = ( ∞, ∞,2,11, ∞,7,0 ) (comparaŃia se face între componentele
(1)
< vi( ) şi anume i ∈ {0,1,4,5} ,
0
de acelaşi rang) se constată că există indici i pentru care vi
deci algoritmul continuă.
Etapa 2; k = 2 .
( )
6
( 2 ) = min c + v(1) ,
În această etapă se calculează valorile vi ij j i = 0,1,2,...,5 şi
j =0
x6 formate din cel mult trei arce. Conform relaŃiilor 3.7.5 şi a observaŃiilor din etapa 1,
rezultă că pentru fiecare i = 0,1, 2,...,5 se va aduna linia corespunzătoare vârfului xi din
matricea C cu linia vectorului V
(1)
obŃinut la sfârşitul etapei 1, element cu element şi apoi se
va determina cea mai mică valoare din fiecare vector astfel obŃinut. Se obŃine:
( )
6
i = 0 : v0( ) = min c0 j + v (j ) = 14 < v0( ) = 15 ;
2 1 1
j =0
i = 1 : v( ) = min ( c + v( ) ) = 12 = v( ) ;
6
2 1 1
1 1j j 1
j =0
106
( )
6
i = 2 : v2 = min c2 j + v(j ) = 2 = v2( ) ;
( 2) 1 1
j =0
i = 3 : v( ) = min ( c + v( ) ) = 8 < v( ) = 11 ;
6
2 1 1
3 3j j 3
j =0
i = 4 : v( ) = min ( c + v( ) ) = 7 < v( ) = 10 ;
6
2 1 1
4 4j j 4
j =0
i = 5 : v( ) = min ( c + v( ) ) = 4 = v( ) ;
6
2 1 1
5 5j j 5
j =0
v6( )
2
i = 6: = 0.
(2)
Se obŃine vectorul V = (14,12,2,8,7, 4,0 ) .
(1)
Comparând cu vectorul V , obŃinut la sfârşitul etapei 1, se constată că există indici i
( 2) (1) ( 2)
pentru care vi < vi şi anume i ∈ {0,3,4} , deci valorile vi nu sunt optime, astfel că
algoritmul se continuă cu etapa următoare.
Etapa 3; k = 3 .
( 3) ( 3)
Se calculează valorile vi , i = 0,1,2,...,5 , v6 = 0 utilizând relaŃiile (3.7.8), pentru
( )
6
k = 3 : vi( ) = min cij + v(j ) , i = 0,1,2,...,5 . Se obŃine:
3 2
j =0
( )
6
i = 0 : v0( ) = min c0 j + v(j ) = 12 < v0( ) = 14 ;
3 2 2
j =0
i = 1 : v( ) = min ( c + v( ) ) = 9 < v( ) = 12 ;
6
3 2 2
1 1j j 1
j =0
i = 2 : v( ) = min ( c + v( ) ) = 2 = v( ) ;
6
3 2 2
2 2j j 2
j =0
i = 3 : v( ) = min ( c + v( ) ) = 8 = v( ) ;
6
3 2 2
3 3j j 3
j =0
i = 4 : v( ) = min ( c + v( ) ) = 7 = v( ) ;
6
3 2 2
4 4j j 4
j =0
i = 5 : v( ) = min ( c + v( ) ) = 4 = v( ) ;
6
3 2 2
5 5j j 5
j =0
i = 6 : v6( ) = 0 .
3
( 3)
Se obŃine vectorul V = (12,9,2,8,7,4,0 ) .
( 2)
În urma comparaŃiei (pe componente) cu V se constată că există indicii i ∈ {0,1}
( 3) (2) ( 3)
pentru care vi < vi , deci valorile vi nu sunt optime şi algoritmul continuă.
Etapa 4; k = 4 .
107
( 4) ( 4)
Se calculează valorile vi , i = 0,1,2,...,5 , v6 = 0 utilizând relaŃiile 3.7.8, pentru
( )
6
k = 4 : vi( ) = min cij + v (j ) , i = 0,1,2,...,5 . Se obŃine:
4 3
j =0
( )
6
i = 0 : v0( ) = min c0 j + v(j ) = 11 < v0( ) = 12 ;
4 3 3
j =0
i = 1 : v( ) = min ( c + v ( ) ) = 9 = v( ) ;
6
4 3 3
1 1j j 1
j =0
i = 2 : v( ) = min ( c + v( ) ) = 2 = v( ) ;
6
4 3 3
2 2j j 2
j =0
i = 3 : v( ) = min ( c + v( ) ) = 8 = v ( ) ;
6
4 3 3
3 3j j 3
j =0
i = 4 : v( ) = min ( c + v( ) ) = 7 = v( ) ;
6
4 3 3
4 4j j 4
j =0
i = 5 : v( ) = min ( c + v( ) ) = 4 = v( ) ;
6
4 3 3
5 5j j 5
j =0
i = 6 : v6( ) = 0 .
4
( 4 ) = 11,9,2,8,7,4,0
Se obŃine vectorul V ( ).
( 4) ( 3)
Există indicele i = 0 astfel încât v0 < v0 , deci se trece la etapa următoare.
Etapa 5; k = 5 .
(5) ( 5)
Se calculează valorile vi , i = 0,1,2,...,5 , v6 = 0 utilizând relaŃiile (3.7.8), pentru
( )
6
k = 5 : vi( ) = min cij + v(j ) , i = 0,1,2,...,5 . Se obŃine:
5 4
j =0
( )
6
i = 0 : v0( ) = min c0 j + v(j ) = 11 = v0( ) ;
5 4 4
j =0
i = 1 : v( ) = min ( c + v( ) ) = 9 = v( ) ;
6
5 4 4
1 1j j 1
j =0
i = 2 : v( ) = min ( c + v( ) ) = 2 = v( ) ;
6
5 4 4
2 2j j 2
j =0
i = 3 : v( ) = min ( c + v( ) ) = 8 = v( ) ;
6
5 4 4
3 3j j 3
j =0
i = 4 : v( ) = min ( c + v( ) ) = 7 = v( ) ;
6
5 4 4
4 4j j 4
j =0
i = 5 : v( ) = min ( c + v( ) ) = 4 = v( ) ;
6
5 4 4
5 5j j 5
j =0
v6( )
5
i = 6: = 0.
108
( 5 ) = 11,9,2,8,7,4,0
Se obŃine vectorul V ( ) şi se constată că vi(5) = vi( 4) , pentru
orice i = 0,1, 2,...,6 , deci s-a realizat condiŃia de oprire a algoritmului. Prin urmare
vi = vi( ) = vi( ) , ( ∀ ) i = 0,1,...,6 , reprezintă valoarea optimă a drumurilor de la xi la x6 ,
5 4
( )
6
v0( ) = min c0 j + v(j ) = min ( 0 + 11;2 + 9; ∞ + 2;4 + 8;5 + 7; ∞ + 4; ∞ + 0 ) = 11;
5 4
j =0
( )
6
v1( ) = min c1 j + v(j ) = min ( ∞ + 11;0 + 9;12 + 2;1 + 8; ∞ + 7; ∞ + 4; ∞ + 0 ) = 9;
5 4
j =0
( )
6
v2( ) = min c2 j + v(j ) = min ( ∞ + 11; ∞ + 9;0 + 2;4 + 8; ∞ + 7; ∞ + 4;2 + 0 ) = 2;
5 4
j =0
( )
6
v3( ) = min c3 j + v(j ) = min ( ∞ + 11; ∞ + 9;11 + 2;0 + 8;2 + 7;4 + 4;11 + 0 ) = 8;
5 4
j =0
( )
6
(5)
v4 = min c4 j + v(j ) = min ( ∞ + 11; ∞ + 9; ∞ + 2; ∞ + 8;0 + 7;3 + 4; ∞ + 0 ) = 7;
4
j =0
( )
6
v5( ) = min c5 j + v(j ) = min ( ∞ + 11; ∞ + 9;2 + 2; ∞ + 8; ∞ + 7;0 + 4;7 + 0 ) = 4;
5 4
j =0
109
Dacă x j este primul vârf care urmează după x0 pe drumul optim, atunci se caută în
relaŃia scrisă pentru i = 0 indicele j pentru care:
v0 = c0 j + v j = 11 .
Se obŃine j ∈ {0,1} . Cum x0 este primul vârf al drumului optim, rezultă j = 1 , deci
x1 este al doilea vârf al drumului optim: µ = { x0 , x1,..., x6 } .
Să mai observăm că l ( x0 , x1 ) = 2 şi evident, v1 = 9 = v0 − l ( x0 , x1 ) = 11 − 2 ,
reprezintă valoarea optimă a subdrumului de la x1 la x6 pe drumul optim.
Fie acum x j vârful care urmează după x1 pe drumul optim. Se va căuta în relaŃia
scrisă pentru i = 1 (corespunzătoare vârfului anterior, x1 ) indicele j pentru care:
v1 = c1 j + v j = 9 .
Se obŃine j ∈ {1,3} . Cum x1 este ultimul vârf al drumului optim până în acest
moment, rezultă j = 3 , deci x3 este al treilea vârf pe drumul optim: µ = { x0 , x1, x3 ,..., x6 } .
De asemenea, l ( x1 , x3 ) = 1 şi v3 = v1 − l ( x1 , x3 ) = 8 , reprezintă valoarea optimă a
subdrumului de la x3 la x6 pe drumul optim.
Fie x j vârful care urmează după x3 pe drumul optim. Se caută în relaŃia scrisă pentru
i = 3 indicele j pentru care:
v3 = c3 j + v j = 8 .
Se obŃine j ∈ {3,5} . Cum x3 este ultimul vârf al drumului optim până în acest
moment, rezultă j = 5 , deci x5 urmează după x3 pe drumul optim:
µ = { x0 , x1, x3 , x5 ,..., x6 } .
Analog l ( x3 , x5 ) = 4 şi v5 = v3 − l ( x3 , x5 ) = 4 , reprezintă valoarea optimă a
subdrumului de la x5 la x6 pe drumul optim.
Fie x j vârful care urmează după x5 pe drumul optim. Se caută în relaŃia scrisă pentru
i = 5 indicele j pentru care:
v5 = c5 j + v j = 4 .
Se obŃine j ∈ {2,5} . Cum x5 se află deja pe drumul optim, rezultă j = 2 , deci x2
urmează după x5 pe drumul optim: µ = { x0 , x1, x3 , x5 , x2 ,..., x6 } .
Avem şi l ( x5 , x2 ) = 2 , iar v2 = v5 − l ( x5 , x2 ) = 2 , reprezintă valoarea optimă a
subdrumului de la x2 la x6 pe drumul optim.
Fie x j vârful care urmează după x2 pe drumul optim. Se caută în relaŃia scrisă pentru
i = 2 indicele j pentru care:
v2 = c2 j + v j = 2 .
Se obŃine j ∈ {2,6} şi cum x2 se află deja pe drumul optim, rezultă j = 6 . Dar x6
este ultimul vârf al drumului optim, astfel că în acest moment s-a încheiat şi faza a II-a a
110
algoritmului, drumul optim obŃinut este µ = { x0 , x1 , x3 , x5 , x2 , x6 } , iar v2 = 2 reprezintă
valoarea ultimului arc al acestui drum: v2 = 2 = l ( x2 , x6 ) .
( )
valoarea −∞ (în loc de +∞ ), dacă arcul xi , x j ∉ U , i ≠ j ;
–
(k )
valorile v j , i, j = 0,1,..., n , se vor determina schimbând în relaŃia (3.7.8)
simbolul min cu simbolul max.
Dacă G = ( X ,U , l ) , X = { x0 , x1,..., xn } este un graf cu arce valorizate şi fără
circuite (aceasta se poate stabili uşor cu ajutorul criteriului rezultat din teorema 2.2.12 din
capitolul 2), atunci algoritmul lui Bellman-Kalaba pentru determinarea drumului (drumurilor)
de valoare maximă dintre vârfurile x0 şi xn necesită parcurgerea următoarelor faze şi etape:
Faza I – determinarea şi funcŃionarea algoritmului până la realizarea condiŃiei de
oprire.
La rândul său, faza I cuprinde mai multe etape.
Etapa 0
( )
Se construieşte matricea C = cij , i, j = 0,1,..., n , conform relaŃiilor:
l ( xi , x j ) , dacă ( xi , x j ) ∈U , i ≠ j;
cij = 0 dacă i ≠ j; (3.10.1)
−∞ dacă ( xi , x j ) ∉U , i ≠ j.
0
Tot în etapa 0 se definesc numerele vi , i = 0,1,..., n − 1 , reprezentând valoarea
maximă a drumurilor de la xi , i = 0,1,..., n − 1 , până la xn , formate dintr-un singur arc.
Aceste numere se află pe ultima coloană a matricei C, respectiv pe coloana lui xn .
Etapa k; ( k ≥ 1 ).
(k ) (k )
În etapa k se calculează numerele vi , i = 0,1,..., n − 1 , vn = 0 , reprezentând
valoarea maximă a drumului de la xi la xn format din k + 1 arce, cu relaŃiile:
111
( )
n
vi( ) = max cij + v(j ) , i = 0,1,..., n − 1 , vn( ) = 0 .
k k −1 k
(3.10.2)
j =0
(k )
> vi(
k −1)
Dacă la sfârşitul etapei k există indici i pentru care vi , aceasta înseamnă că
(k )
valorile vi nu sunt optime şi că există cel puŃin un drum de la xi la xn format din k + 1
arce mai bun (adică de valoare mai mare) decât orice drum de la xi la xn format din cel mult
k arce; acest drum poate apare în etapa următoare, k + 1 .
Algoritmul se continuă până la prima etapă k în care se va obŃine:
(k )
Valorile vi = vi = vi
( k −1)
, i = 0,1,..., n obŃinute la sfârşitul acestei etape sunt
valorile optime şi reprezintă, pentru fiecare i = 0,1,..., n , valoarea maximă a drumului
(k )
(drumurilor) de la xi la xn . Deci v0 = v0 este valoarea maximă a drumului optim de la x0
la xn .
RelaŃiile (3.10.3) reprezintă, în ansamblul lor, condiŃia de oprire a algoritmului în faza
I.
Faza II – determinarea drumului (drumurilor) optim (de valoare maximă) de la x0 la
xn .
Determinarea drumului optim se face în sensul de la x0 către xn , astfel:
– dacă x j este primul vârf care succede lui x0 pe drumul optim, atunci se caută în
relaŃia (3.10.2) din ultima etapă, scrisă pentru i = 0 , indicele j pentru care:
v0 = c0 j + v j . (3.10.4)
– algoritmul continuă până când ultimul vârf determinat al drumului optim este
însuşi xn ;
– dacă există mai mulŃi indici j pentru care are loc relaŃia (3.10.5) şi dacă vârfurile
care corespund acestor indici nu au fost depistate până în acest moment ca aparŃinând
drumului optim, rezultă că există mai multe drumuri optime, având aceeaşi valoare maximă,
(k )
respectiv v0 , iar vârful anterior lui x j este vârful unde aceste drumuri se ramifică.
Exemplul 3.10.1
Să se determine drumul de valoare maximă de la x0 la x6 în graful din figura
următoare:
112
Fig. 3.10.1
Faza I
Etapa 0; k = 0 .
( )
Matricea C = cij , i, j = 0,1,...,6 se construieşte cu ajutorul relaŃiilor (3.10.1) şi
este următoarea:
x0 x1 x2 x3 x4 x5 x6
0 5 −∞ 6 3 −∞ −∞ x0
−∞ 0 5 4 −∞ −∞ −∞ x1
−∞ −∞ 0 −∞ −∞ 6 8 x2
C=
−∞ −∞ 8 0 −∞ 8 10 x3
−∞ 6 −∞ 7 0 9 −∞ x4
−∞ −∞ −∞ −∞ −∞ 0 5 x5
−∞ −∞ −∞ −∞ −∞ −∞ 0 x6
( 0)
Numerele vi , i = 0,1,...,6 se află pe ultima coloană a matricei C;
0 0
( 0 0
)
V ( ) = v0( ) , v1( ) ,..., v6( ) = ( −∞, −∞,8,10, −∞,5,0 ) .
Etapa 1; k = 1 .
( )
6
(0) ,
i = 0,1,...,5 , v6( ) = 0 , conform
1 1
Se calculează valorile vi = max cij + v j
j =0
relaŃiilor (3.10.2) pentru k = 1 :
Pentru i = 0 :
113
( )
6
v0( ) = max c0 j + v(j ) = max ( 0 − ∞;5 − ∞; −∞ + 8;6 + 10;3 − ∞; −∞ + 5; −∞ + 0 ) =
1 0
j =0
6
( )
= 16 = max c0 j + c j 6 ⇔ max ( linia lui x0 + coloana lui x6 ) .
j =0
Pentru i = 1 :
( )
6
v1( ) = max c1 j + v(j ) = max ( −∞ − ∞;0 − ∞;5 + 8;4 + 10; −∞ − ∞; −∞ + 5; −∞ + 0 ) =
1 0
j =0
6
( )
= 14 = max c1 j + c j 6 ⇔ max ( linia lui x1 + coloana lui x6 ) .
j =0
Pentru i = 2 :
( )
6
v2( ) = max c2 j + v(j ) = max ( −∞ − ∞; −∞ − ∞;0 + 8; −∞ + 10; −∞ − ∞;6 + 5;8 + 0 ) =
1 0
j =0
6
( )
= 11 = max c2 j + c j 6 ⇔ max ( linia lui x2 + coloana lui x6 ) .
j =0
Pentru i = 3 :
( )
6
v3( ) = max c3 j + v(j ) = max ( −∞ − ∞; −∞ − ∞;8 + 8;0 + 10; −∞ − ∞;8 + 5;10 + 0 ) =
1 0
j =0
6
( )
= 16 = max c3 j + c j 6 ⇔ max ( linia lui x3 + coloana lui x6 ) .
j =0
Pentru i = 4 :
( )
6
v4( ) = max c4 j + v(j ) = max ( −∞ − ∞;6 − ∞; −∞ + 8;7 + 10;0 − ∞;9 + 5; −∞ + 0 ) =
1 0
j =0
6
( )
= 17 = max c4 j + c j 6 ⇔ max ( linia lui x4 + coloana lui x6 ) .
j =0
Pentru i = 5 :
( )
6
v5( ) = max c5 j + v (j ) = max ( −∞ − ∞; −∞ − ∞; −∞ + 8; −∞ + 10; −∞ − ∞;0 + 5;5 + 0 ) =
1 0
j =0
6
( )
= 5 = max c5 j + c j 6 ⇔ max ( linia lui x5 + coloana lui x6 ) .
j =0
(1)
Pentru i = 6 : v6 = 0 .
La sfârşitul etapei 1 rezultă vectorul
1 1
( 1 1
)
V ( ) = v0( ) , v1( ) ,..., v6( ) = (16,14,11,16,17,5,0 ) .
114
Etapa 2; k = 2 .
( )
6
( 2)
= max cij + v (j ) , i = 0,1,...,5 , v6( ) = 0 , reprezentând
1 0
Se calculează valorile vi
j =0
valoarea maximă a drumurilor de la xi la x6 formate din cel mult trei arce, pentru fiecare
i = 0,1,2,...,5 . Se obŃine:
( )
6
i = 0 : v0( ) = max c0 j + v(j ) = 22 > v0( ) = 16 ;
2 1 1
j =0
i = 1 : v( ) = max ( c + v( ) ) = 20 > v ( ) = 14 ;
6
2 1 1
1 1j j 1
j =0
i = 2 : v( ) = max ( c + v( ) ) = 11 = v( ) ;
6
2 1 1
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 > v( ) = 16 ;
6
2 1 1
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 23 > v( ) = 17 ;
6
2 1 1
4 4j j 4
j =0
i = 5 : v( ) = max ( c + v( ) ) = 5 = v( ) ;
6
2 1 1
5 5j j 5
j =0
( 2)
i = 6 : v6 = 0 .
( 2 ) = 22,20,11,19,23,5,0
Se obŃine vectorul V ( ) . Comparându-l, pe componente,
cu vectorul V
(1) obŃinut la sfârşitul etapei 1, se constată că există indici i pentru care
( )
6
( 3) = max c + v( 2 ) ( 3)
pentru k = 3 : vi ij j , i = 0,1,2,...,5 , v6 = 0 . Se obŃine:
j =0
i = 0 : v( ) = max ( c + v ( ) ) = 26 > v( ) = 22 ;
6
3 2 2
0 0j j 0
j =0
i = 1 : v( ) = max ( c + v( ) ) = 23 > v( ) = 20 ;
6
3 2 2
1 1j j 1
j =0
i = 2 : v( ) = max ( c + v( ) ) = 11 = v( ) ;
6
3 2 2
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 = v( ) ;
6
3 2 2
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 26 > v( ) = 23 ;
6
3 2 2
4 4j j 4
j =0
115
( )
6
i = 5 : v5 = max c5 j + v (j ) = 5 = v5( ) ;
( 3) 2 2
j =0
i = 6 : v6( ) = 0 .
3
( )
6
pentru k = 4 : vi
( 4 ) = max c + v( 4 ) , i = 0,1,2,...,5 , v( 4 ) = 0 . Se obŃine:
ij j 6
j =0
i = 0 : v( ) = max ( c + v ( ) ) = 29 > v( ) = 26 ;
6
4 3 3
0 0j j 0
j =0
i = 1 : v( ) = max ( c + v( ) ) = 23 = v( ) ;
6
4 3 3
1 1j j 1
j =0
i = 2 : v( ) = max ( c + v( ) ) = 11 = v( ) ;
6
4 3 3
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 = v( ) ;
6
4 3 3
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 29 > v( ) = 26 ;
6
4 3 3
4 4j j 4
j =0
i = 5 : v( ) = max ( c + v ( ) ) = 5 = v( ) ;
6
4 4 3
5 5j j 5
j =0
( 4)
i = 6 : v6 = 0 .
( 4 ) = 29,23,11,19,29,5,0
Se obŃine vectorul V ( ) . Există indicii i ∈ {0,4} pentru
( 4)
> vi( ) , deci se trece la etapa următoare.
3
care vi
Etapa 5; k = 5 .
(5) ( 5)
Se calculează valorile vi , i = 0,1,2,...,5 , v6 = 0 , cu relaŃiile (3.10.2) pentru
( )
6
k = 5 : vi( ) = max cij + v(j ) , i = 0,1,2,...,5 , v6( ) = 0 . Se obŃine:
5 4 5
j =0
( )
6
i = 0 : v0( ) = max c0 j + v(j ) = 32 > v0( ) = 29 ;
5 4 4
j =0
116
( )
6
i = 1 : v1 = max c1 j + v(j ) = 23 = v1( ) ;
( 5) 4 4
j =0
i = 2 : v( ) = max ( c + v ( ) ) = 11 = v( ) ;
6
5 4 4
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 = v( ) ;
6
5 4 4
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 29 = v ( ) ;
6
5 4 4
4 4j j 4
j =0
i = 5 : v( ) = max ( c + v( ) ) = 5 = v ( ) ;
6
5 4 4
5 5j j 5
j =0
( 5)
i = 6 : v6 = 0 .
( 5)
Se obŃine vectorul V = ( 32,23,11,19,29,5,0 ) . Mai există un singur indice,
i = 0 , pentru care vi( ) > vi( ) , deci se trece la etapa următoare.
5 4
Etapa 6; k = 6 .
( 6) ( 6)
Se calculează valorile vi , i = 0,1,2,...,5 , v6 = 0 , cu relaŃiile (3.10.2) pentru
( )
6
k = 6 : vi( ) = max cij + v(j ) , i = 0,1,2,...,5 şi v6( ) = 0 . Se obŃine:
6 5 6
j =0
( )
6
i = 0 : v0( ) = max c0 j + v(j ) = 32 = v0( ) ;
6 5 5
j =0
i = 1 : v( ) = max ( c + v( ) ) = 23 = v( ) ;
6
6 5 5
1 1j j 1
j =0
i = 2 : v( ) = max ( c + v( ) ) = 11 = v( ) ;
6
6 5 5
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 = v( ) ;
6
6 5 5
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 29 = v( ) ;
6
6 5 5
4 4j j 4
j =0
i = 5 : v( ) = max ( c + v( ) ) = 5 = v( ) ;
6
6 5 5
5 5j j 5
j =0
i = 6 : v6( ) = 0 .
6
optim (de valoare maximă) de la xi la x6 , format din cel mult 7 arce. S-a realizat, deci
condiŃia de oprire a algoritmului, respectiv relaŃiile (3.10.3), astfel că se poate trece la
determinarea drumului optim de la x0 la x6 .
117
Faza a II-a
Determinarea drumului optim se face în sensul de la x0 către x6 . Valoarea maximă a
(6)
drumului optim de la x0 la x6 este v0 = v0 = 32 , deci valoarea primei componente a
vectorului V
(6) obŃinut la sfârşitul ultimei etape din faza I.
Se rescriu în detaliu, pe componente şi pentru fiecare i = 0,1,...,6 , relaŃiile cu ajutorul
( 6)
cărora s-au obŃinut valorile optime vi = vi , în ultima etapă din faza I.
i = 0:
( )
6
v0 = v0( ) = max c0 j + v(j ) =
6 5
j =0
( )
6
v1 = v1( ) = max c1 j + v (j ) =
6 5
j =0
( )
6
v2 = v2( ) = max c2 j + v(j ) =
6 5
j =0
( )
6
(6)
v3 = v3 = max c3 j + v(j ) =
5
j =0
i = 4:
( )
6
( 6)
v4 = v4 = max c4 j + v (j ) =
5
j =0
118
( )
6
v5 = v5( ) = max c5 j + v(j ) =
6 5
j =0
{ }
la x6 : µ = x0 , x j ,..., x6 . Se caută în relaŃia scrisă pentru i = 0 indicele j pentru care:
v0 = c0 j + v j = 32 .
Se obŃine j ∈ {0,4} . Cum x0 este primul vârf al drumului optim, rezultă j = 4 , deci
x4 este al doilea vârf al drumului optim: µ = { x0 , x4 ,..., x6 } .
Se mai observă că l ( x0 , x4 ) = 3 şi evident, v4 = v0 − l ( x0 , x4 ) = 29 , reprezintă
valoarea maximă a subdrumului de la x4 la x6 pe drumul optim.
Fie acum x j vârful care urmează după x4 pe drumul optim. Se va căuta în relaŃia
scrisă pentru i = 4 indicele j pentru care: v4 = c4 j + v j = 29 .
Se obŃine j = {1,4} . Cum x4 se află deja pe drumul optim, rezultă j = 1 , deci x1
este al treilea vârf al drumului optim: µ = { x0 , x4 , x1 ,..., x6 } .
De asemenea, l ( x4 , x1 ) = 6 şi v1 = v4 − l ( x4 , x1 ) = 23 reprezintă valoarea
maximă a subdrumului de la x1 la x6 pe drumul optim.
Fie x j vârful care urmează după x1 pe drumul optim. Se caută în relaŃia scrisă pentru
i = 1 indicele j pentru care: v1 = c1 j + v j = 23 .
Se obŃine j = {1,3} . Cum x1 se află deja pe drumul optim, rezultă j = 3 , deci x3
urmează după x1 pe drumul optim: µ = { x0 , x4 , x1 , x3 ,..., x6 } .
Analog l ( x1 , x3 ) = 4 şi v3 = v1 − l ( x1 , x3 ) = 19 reprezintă valoarea maximă a
subdrumului de la x3 la x6 pe drumul optim.
Fie x j vârful care urmează după x3 pe drumul optim. Se caută în relaŃia scrisă pentru
i = 3 indicele j pentru care: v3 = c3 j + v j = 19 .
Se obŃine j = {2,3} . Cum x3 se află deja pe drumul optim, rezultă j = 2 , deci x2
urmează după x3 pe drumul optim: µ = { x0 , x4 , x1 , x3 , x2 ,..., x6 } .
Avem şi l ( x3 , x2 ) = 6 , iar v2 = v3 − l ( x3 , x2 ) = 11 reprezintă valoarea maximă a
subdrumului de la x2 la x6 pe drumul optim.
Fie x j vârful care urmează după x2 pe drumul optim. Se caută în relaŃia scrisă pentru
i = 2 indicele j pentru care: v2 = c2 j + v j = 11 .
119
Se obŃine j = {2,5} şi cum x2 se află deja pe drumul optim, rezultă j = 5 , deci x5
urmează după x2 pe drumul optim: µ = { x0 , x4 , x1, x3 , x2 , x5 ,..., x6 } .
Avem şi l ( x2 , x5 ) = 6 , iar v5 = v2 − l ( x2 , x5 ) = 5 reprezintă valoarea maximă a
subdrumului de la x5 la x6 pe drumul optim.
Fie x j vârful care urmează după x5 pe drumul optim. Se caută în relaŃia scrisă pentru
i = 5 indicele j pentru care: v5 = c5 j + v j = 5 .
Se obŃine j = {5,6} şi cum x5 se află deja pe drumul optim, rezultă j = 6 . Dar x6
este ultimul vârf al drumului optim, astfel că în acest moment s-a încheiat şi faza a II-a a
algoritmului. v5 = 5 reprezintă valoarea ultimului arc al drumului optim:
v5 = 5 = l ( x5 , x6 ) . Drumul de valoare maximă dintre vârfurile x0 şi x6 este
µ = { x0 , x4 , x1, x3 , x2 , x5 , x6 } , este format din 6 arce şi valoarea sa maximă este v0 = 32 .
120
LECłIA 9
3.11 Algoritmul matriceal pentru determinarea drumurilor de valoare minimă
dintre două vârfuri oarecare ale unui graf
Fie G = ( X ,U , l ) un graf cu arce valorizate, X = { x0 , x1 ,..., xn } , l :U → + şi
( )
C = cij , i, j = 0,1, 2,..., n matricea valorilor arcelor grafului, unde
( ) (
l xi , x j , dacă xi , x j ∈U , i ≠ j;
)
cij = 0, dacă i = j; (3.11.1)
+∞, (
dacă xi , x j ∉U , i ≠ j. )
În etapa 0 a algoritmului lui Bellman-Kalaba s-a pornit cu valorile iniŃiale:
( )
n
vi( ) = min cis + vs( ) , i = 0,1,2,..., n − 1 , vn( ) = 0 ,
k k −1 k
(3.11.3)
s =0
(k )
unde vi reprezintă minimul valorilor drumurilor de la xi la xn formate din cel mult k + 1
arce.
Se poate constata că vârful x0 nu are o situaŃie aparte faŃă de celelalte vârfuri xi ,
i ≠ n ale grafului, în etapele succesive ale algoritmului. Abia în faza a doua a algoritmului,
deci după aflarea valorilor optime de la fiecare vârf xi până la xn , se Ńine seama de faptul că
interesează drumul optim de la x0 la xn . În fond x0 şi xn sunt două vârfuri oarecare ale
grafului şi deci toate consideraŃiile făcute în paragrafele anterioare (care se referă la
algoritmul lui Bellman-Kalaba) pot fi utilizate pentru determinarea drumului optim între două
vârfuri oarecare xi şi x j ale grafului.
În continuare se vor preciza modificările care trebuie făcute în algoritmul lui Bellman-
Kalaba astfel încât în etapa k din faza I a algoritmului să se determine minimul valorilor
drumurilor formate din cel mult k + 1 arce dintre două vârfuri oarecare xi şi x j , i ≠ j ale
grafului şi nu doar dintre vârfurile xi , i = 0,1,..., n − 1 şi xn .
Astfel, dacă în relaŃia (3.11.3) vârful xn nu ar fi subînŃeles, atunci relaŃia trebuie
modificată astfel:
( )
n
( k ) = min c + v( k −1) , v( k ) = 0 .
vin (3.11.4)
is sn nn
s =0
(k )
În această relaŃie vin reprezintă minimul valorilor drumurilor de la xi la xn formate
din cel puŃin k + 1 arce.
121
Dacă ne interesează minimul valorilor drumurilor de la vârful xi la vârful x j (în loc
de xn ) formate din cel mult k + 1 arce, i ≠ j , atunci rolul lui xn va fi luat de x j şi relaŃiile
(3.11.4) devin:
( )
n
vij( ) = min cis + vsj( ) , i ≠ j , v(jj ) = 0 ,
k k −1 s
(3.11.5)
s =0
vij( ) = C ( ) .
k k +1
(3.11.6)
C( ) = C .
1
(3.11.7)
Pe intervalul [ 0, +∞ ) vom defini operaŃiile:
a ×& b = a + b , (3.11.9)
a doua operaŃie fiind adunarea obişnuită pe [ 0, +∞ ) .
Se poate arăta uşor că aceste operaŃii sunt asociative şi comutative, iar operaŃia ×& este
& . Rezultatul compunerii a n elemente din [ 0, +∞ ) cu operaŃia
distributivă faŃă de operaŃia +
n
+& (3.11.8), respectiv „suma” ( a1 +& a2 +& ... +& an ) , se va nota cu simbolul ∑ as , iar dacă n
&
s =1
122
& B.
C = A⊗ (3.11.11)
& dintre matrice este asociativă.
Se arată uşor că operaŃia ⊕
Având în vedere operaŃiile + & şi ×& definite pe [ 0, +∞ ) prin relaŃiile (3.11.8) şi
& definită pe mulŃimea matricelor pătratice de ordinul m cu elemente din
(3.11.9) şi operaŃia ⊗
[0, +∞ ) prin relaŃia (3.11.10), rezultă că relaŃiile (3.11.5) se scriu astfel:
vij( ) = ∑ cis ×& vsj( k −1) , (∀) i, j = 0,1,..., n .
k
(3.11.12)
s =1
Rezultă că matricea C
( k +1)
este produsul ⊗& (relaŃia (3.11.11)) matricelor C şi C (k ) ,
& definită prin relaŃia (3.11.11):
deci puterea ( k + 1 ) a matricei C în raport cu operaŃia ⊗
C(
k +1) & C⊗
& ... ⊗
&C
=C
14⊗ 4244 3 (3.11.13)
k +1
(k )
Dată fiind semnificaŃia valorilor vij , i, j = 0,1,..., n , rezultă că elementul cij
( k +1)
din matricea C
( k +1) reprezintă valoarea minimă a drumului (drumurilor) de la vârful x la
i
vârful x j , formate din cel mult k + 1 arce.
Faza I a algoritmului prezentat sub această formă, numit algoritmul matriceal pentru
determinarea drumului de valoare minimă între oricare două vârfuri distincte ale unui graf,
se încheie într-o etapă k în care se realizează condiŃia:
C(
k +1)
= C( ) ,
k
(3.11.14)
( k +1) (k )
numită şi condiŃia de oprire a algoritmului. C =C este matricea drumurilor de
valoare minimă dintre oricare două vârfuri ale grafului.
Faza a II-a a algoritmului, respectiv determinarea drumului (drumurilor) de valoare
minimă între două vârfuri oarecare xi şi x j , va fi prezentată pe exemple; valoarea minimă a
ObservaŃia 3.11.1
Din prezentarea algoritmului matriceal pentru determinarea drumului de valoare
minimă dintre două vârfuri oarecare ale unui graf rezultă că algoritmul lui Bellman-Kalaba
este un caz particular al algoritmului matriceal. Într-adevăr, fie V j
( k +1) coloana j a matricei
C(
k +1)
: Vj
( k +1)
( k +1 k +1 ( k +1) t
= v0( j ) , v1( j ) ,..., vnj . )
Atunci relaŃiile (3.11.4) pentru j = n se scriu astfel:
Vn(
k +1) & V (k )
=C⊗ n (3.11.15)
Altfel spus, în etapa k a algoritmului Bellman-Kalaba se determină numai ultima
( k +1)
coloană a matricei C .
123
În mod asemănător şi varianta algoritmului Bellman-Kalaba prezentată şi
exemplificată în paragraful 3.9 poate fi prezentată matriceal. Astfel, dacă se notează cu
Vi(
k +1) ( k +1) , adică:
linia i a matricei C
Vi(
k +1)
(
= vi(0 ) , vi(1 ) ,..., vin
k +1 k +1 ( k +1) ,
)
atunci pentru i = 0 , relaŃiile:
( )
n
v0( j ) = min csj + v0( s ) ,
k k −1
(3.11.15)
s =0
pot fi scrise astfel:
V0(
k +1)
= V0( ) ⊗
k &
C. (3.11.16)
Cu alte cuvinte, în această variantă a algoritmului Bellman-Kalaba, în etapa k se
( k +1)
determină prima linie a matricei C .
Exemplul 3.11.2
Să se determine matricea drumurilor de valoare minimă corespunzătoare grafului din
figura următoare:
Fig. 3.11.1
124
În continuare, utilizând operaŃiile definite prin (3.11.8) şi (3.11.9) se calculează, cu
& definită prin
relaŃiile (3.11.13) „puterile” succesive ale matricei C, în raport cu operaŃia ⊗
(3.11.10) şi (3.11.11)
0 3 2 4 10 8 0 3 2 4 10 5
1 0 3 4 10 5 1 0 3 4 7 5
2 1 0 2 8 3 ( 3) 2 1 0 2 5 3
C( ) =
2
; C = ;
4 3 ∞ 0 3 1 4 3 6 0 3 1
∞ 13 ∞ ∞ 0 5 14 13 ∞ 17 0 5
9 8 ∞ 12 2 0 9 8 11 12 2 0
0 3 2 4 7 5 0 3 2 4 7 5
1 0 3 4 7 5 1 0 3 4 7 5
2 1 0 2 5 3 (5) 2 1 0 2 5 3
C( ) =
4
; C = .
4 3 6 0 3 1 4 3 6 0 3 1
14 13 16 17 0 5 14 13 16 17 0 5
9 8 11 12 2 0 9 8 11 12 2 0
Se constată că pentru k = 5 s-a obŃinut C
( 5) = C ( 4 ) , deci s-a realizat condiŃia de
după obŃinerea matricei drumurilor optime. Să determinăm, cu ajutorul matricei vij = C ( ) (5) ,
ObservaŃia 3.11.3
& de înmulŃire a matricelor definită prin relaŃiile
Datorită asociativităŃii operaŃiei ⊗
(3.11.10) şi (3.11.11), rezultă că se poate reduce numărul etapelor necesare determinării
matricei drumurilor de valoare minimă dintre oricare două vârfuri ale grafului. Într-adevăr,
după calculul matricei C
( 2 ) se poate obŃine direct C ( 4 ) fără a mai calcula C ( 3) :
( 4) ( 2) & ( 2)
C = C ⊗C .
Mai departe, se obŃine direct C
(8) fără a mai calcula C ( 5) , C ( 6 ) , C ( 7 ) :
125
C( ) = C( ) ⊗ C ( ) , etc.
8 4 & 4
( )
de +∞ ), dacă arcul xi , x j ∉U , i ≠ j ;
– pe intervalul [ −∞, +∞ ) se definesc operaŃiile:
a ×& b = a + b , (3.12.2)
C(
k +1) & C⊗
& ... ⊗
& C,
=C
14⊗ 4244 3 (3.12.4)
k +1
reprezintă maximul valorilor drumurilor de la vârful xi la vârful x j , formate din cel mult
k + 1 arce.
Dacă graful este fără circuite atunci există o valoare a lui k astfel încât
C(
k +1)
= C( ) ,
k
(3.12.5)
126
aceasta reprezentând condiŃia de oprire a algoritmului în faza I.
Matricea C
( k ) obŃinută în această etapă de calcul se numeşte matricea drumurilor de
(k )
valoare maximă, iar valoarea elementului cij reprezintă valoarea maximă a drumului
(drumurilor) de la vârful xi la vârful x j , ( ∀ ) i, j = 1, 2,..., n .
Drumul optim dintre vârfurile xi şi x j se determină după obŃinerea matricei
drumurilor de valoare maximă, din aproape în aproape, în sensul de la xi către x j .
127
PROBLEME REZOLVATE LA UI 3 UTILIZÂND VARIANTE ALE
ALGORITMILOR LUI FORD ŞI BELLMAN-KALABA
Fig. 3.5.1
( ) ( )
Avem: l ( µi ) = λ i , l µ j = λ j , l ( µ′i ) = l xi , x j + λ j .
( )
Dacă pentru orice xi , x j ∈U are loc relaŃia:
λi − λ j ≤ l ( xi , x j ) , (3.5.1)
atunci rezultă la fel ca în teorema demonstrată anterior că λ i sunt valorile optime. În acest
caz vârfurile consecutive xi , x j ,... ale unui drum optim verifică relaŃia (3.5.1) cu semnul
egal.
(0)
= +∞ , i = 0,1,..., n − 1 şi λ(n ) = 0 .
0
În etapa iniŃială se va lua: λ i
128
Exemplu
Să se determine drumul de valoare minimă de la x0 la x5 din graful următor,
utilizând această variantă a algoritmului Ford.
Fig. 3.5.2
(0) (0)
= ...λ(4 ) = +∞ şi λ(5 ) = 0 .
0 0
În etapa 0 (start) vom lua: λ 0 = λ1
Rezultă că pentru orice j≠5 şi ( ∀ ) ( xi , x j ) ∈U avem:
( ) ( )
λi 0 − λ j0 = 0 < l ( xi , x j ) , iar pentru j = 5 avem:
( ) ( )
λ10 − λ50 = +∞ > l ( x1, x5 ) = 7 ;
( ) ( )
λ30 − λ50 = +∞ > l ( x3 , x5 ) = 3 ;
( ) ( )
λ 40 − λ 50 = +∞ > l ( x4 , x5 ) = 8 .
( 0) (0) ( 0)
Se pot îmbunătăŃii, deci trei valori şi anume: λ1 , λ 3 şi λ 4 , astfel că pentru etapa
1 vom lua:
( ) ( )
λ11 = λ50 + l ( x1, x5 ) = 0 + 7 = 7 ;
( ) ( )
λ31 = λ50 + l ( x3 , x5 ) = 0 + 3 = 3 ;
( ) ( )
λ 41 = λ50 + l ( x4 , x5 ) = 0 + 8 = 8 .
(1)
= λ(i ) = +∞ .
0
În rest, pentru i = 0,2,5 vom lua λ i
Pentru etapa 1 vom scrie toate arcele (dar începând de la vârful x0 ) grafului şi vom
(1) ( )
calcula diferenŃele λ i − λ j1 corespunzătoare:
Vârful x0 :
129
( x0 , x1 ) : λ(01) − λ1(1) = +∞ − 7 = +∞ > l ( x0 , x1 ) = 2; ( ∗)
(1) (1)
( x0 , x2 ) : λ 0 − λ 2 = +∞ − ∞ = 0 < l ( x0 , x2 ) = 5;
(1) (1)
( x0 , x4 ) : λ 0 − λ 4 = +∞ − 8 = +∞ > l ( x0 , x4 ) = 7; ( ∗)
Vârful x1 :
( x1, x2 ) : λ1(1) − λ(21) = 7 − ∞ = −∞ < l ( x1, x2 ) = 1;
(1) (1)
( x1, x4 ) : λ1 − λ 4 = 7 − 8 = −1 < l ( x1, x4 ) = 6;
(1) (1)
( x1, x5 ) : λ1 − λ5 = ( 7 − ∞ ) = ( −∞ ) < l ( x1, x5 ) = 7;
Vârful x2 :
( x2 , x3 ) : λ(21) − λ (31) = +∞ − 3 = +∞ > l ( x2 , x3 ) = 5; ( ∗)
(1) (1)
( x2 , x4 ) : λ 2 − λ 4 = +∞ − 8 = +∞ > l ( x2 , x4 ) = 1; ( ∗)
Vârful x3 :
{( x , x ) : λ
3 5
(1)
3
( )
− λ51 = 3 − ∞ = −∞ < l ( x3 , x5 ) = 3 ;
Vârful x4 :
(1) (1)
( x4 , x3 ) : λ 4 − λ 3 = 8 − 3 = 5 > l ( x4 , x3 ) = 2; ( ∗)
(1) (1)
( x4 , x5 ) : λ 4 − λ5 = 8 − ∞ = −∞ < l ( x4 , x5 ) = 8.
(1) (1) (1)
Se pot îmbunătăŃii valorile: λ 0 , λ 2 şi λ 4 , şi pentru etapa următoare vom lua:
λ(02 ) = λ1(1) + l ( x0 , x1 ) = 7 + 2 = 9;
( 2) (1)
λ 0 = λ 4 + l ( x0 , x4 ) = 8 + 7 = 15.
Cum noi determinăm drumul de valoare minimă între x0 şi x5 , vom prefera să luăm:
λ(0 ) = 9 . Pentru λ(2 ) avem tot două posibilităŃi:
2 2
λ(22 ) = λ3(1) + l ( x2 , x3 ) = 3 + 5 = 8;
(2) (1)
λ 2 = λ 4 + l ( x2 , x4 ) = 8 + 1 = 9.
( 2) ( 2)
Conform aceluiaşi raŃionament vom lua: λ 2 = 8 . Pentru λ 4 vom avea:
( ) ( ) ( )
λ 42 (
= λ31 + l x4 , x3 ) = 3 + 2 = 5 . Deci λ 42 = 5 . În rest, pentru i = 1,3,5 vom avea:
( ) ( )
λi 2 = λi1 adică:
130
λ1( 2 ) = λ1(1) = 7; ( )
λ 02 = 9;
( 2) (1) ( )
λ3 = λ3 = 3; λ 22 = 8;
( 2) (1) ( )
λ5 = λ5 = +∞; λ 42 = 5.
Etapa 2
Vârful x0 :
( x0 , x1 ) : λ(02 ) − λ1( 2 ) = 9 − 7 = 2 = l ( x0 , x1 ) ;
( 2) ( 2)
( x0 , x2 ) : λ 0 − λ 2 = 9 − 8 = 1 < l ( x0 , x2 ) = 5;
( 2) ( 2)
( x0 , x4 ) : λ 0 − λ 4 = 9 − 5 = 4 < l ( x0 , x4 ) = 7;
Vârful x1 :
( x1, x2 ) : λ1( 2 ) − λ(22 ) = 7 − 8 = −1 < l ( x1, x2 ) = 1;
( 2) (2)
( x1, x4 ) : λ1 − λ 4 = 7 − 5 = 2 < l ( x1, x4 ) = 6;
( 2) ( 2)
( x1, x5 ) : λ1 − λ5 = 7 − ∞ = −∞ < l ( x1, x5 ) = 7;
Vârful x2 :
( x2 , x3 ) : λ(22 ) − λ3( 2 ) = 8 − 3 = 5 = l ( x2 , x3 ) ;
(2) ( 2)
( x2 , x4 ) : λ 2 − λ 4 = 8 − 5 = 3 > l ( x2 , x4 ) ; ( ∗)
Vârful x3 :
{ (x ,x ):λ
3 5
( 2)
3
( )
− λ52 = 3 − ∞ = −∞ < l ( x3 , x5 ) = 3;
Vârful x4 :
( x4 , x3 ) : λ(42 ) − λ 3( 2 ) = 5 − 3 = 2 = l ( x4 , x3 ) ;
( 2) ( 2)
( x4 , x5 ) : λ 4 − λ5 = 5 − ∞ = −∞ < l ( x4 , x5 ) = 8.
( 2)
Se poate îmbunătăŃi valoarea λ 2 şi pentru etapa următoare vom lua:
( ) ( )
λ 23 = λ 42 + l ( x2 , x4 ) = 5 + 1 = 6 , iar celelalte valori rămân nemodificate.
( ) ( ) ( ) ( ) ( )
λ 03 = 9 , λ13 = 7 , λ33 = 3 , λ 43 = 5 , λ53 = +∞ .
Etapa 3
Vârful x0 :
131
( x0 , x1 ) : λ(03) − λ1( 3) = 9 − 7 = 2 = l ( x0 , x1 ) ; ( ∗)
( 3) ( 3)
( x0 , x2 ) : λ 0 − λ 2 = 9 − 6 = 3 < l ( x0 , x2 ) = 5;
( 3) ( 3)
( x0 , x4 ) : λ 0 − λ 4 = 9 − 5 = 4 < l ( x0 , x4 ) = 7;
Vârful x1 :
( x1, x2 ) : λ1( 3) − λ(23) = 7 − 6 = 1 = l ( x1, x2 ) ; ( ∗)
( 3) ( 3)
( x1, x4 ) : λ1 − λ 4 = 7 − 5 = 2 < l ( x1, x4 ) = 6;
( 3) ( 3)
( x1, x5 ) : λ1 − λ 5 = 7 − ∞ = −∞ < l ( x1, x5 ) = 7;
Vârful x2 :
( x2 , x3 ) : λ(23) − λ(33) = 6 − 3 = 3 < l ( x2 , x3 ) = 5;
( 3) ( 3)
( x2 , x4 ) : λ 2 − λ 4 = 6 − 5 = 1 = l ( x2 , x4 ) ( ∗)
Vârful x3 :
{( x , x ) : λ
3 5
( 3)
3
( )
− λ 53 = 3 − ∞ = −∞ < l ( x3 , x5 ) = 3;
Vârful x4 :
( x4 , x3 ) : λ(43) − λ(33) = 5 − 3 = 2 = l ( x4 , x3 ) ; ( ∗)
( 3) ( 3)
( x4 , x5 ) : λ 4 − λ5 = 5 − ∞ = −∞ < l ( x4 , x5 ) = 8.
Constatăm că la sfârşitul acestei etape pentru nici un vârf al grafului nu se
( 3) ( 4) ( 3)
( )
înregistrează nici o relaŃie de forma: λ i − λ j > l xi , x j , deci valorile λ i = λ i ,
i = 0,1,2,3,4,5 , sunt optime. Am marcat cu (*) toate relaŃiile de forma (3.3.1) verificate cu
semnul „=” obŃinute la sfârşitul etapei 3.
132
ObservaŃie
( 0) (1) ( 2)
= λ5( ) = 0 , se obŃine şi drumul µ1 = ( x0 , x1, x5 ) .
3
Pe varianta λ 5 = λ 5 = λ 5
l ( xi , x j ) , dacă ( xi , x j ) ∈U , i ≠ j;
cij = 0 , dacă i = j; (3.9.1)
+ ∞ ( )
, dacă xi , x j ∉U , i ≠ j.
–
( 0)
Se definesc numerele v j = c0 j , j = 0,1, 2,..., n , reprezentând valoarea minimă
a drumurilor de la x0 la x j , j = 1,2,..., n , formate dintr-un singur arc. Aceste valori se află
pe prima linie a matricei C, respectiv pe linia lui x0 .
Etapa k ( k ≥ 1 ).
(k ) (k )
În etapa k se calculează numerele v j , j = 1,2,..., n , v0 = 0 , reprezentând
valoarea minimă a drumului de la x0 la x j format din cel mult k + 1 arce, cu relaŃiile:
( )
n
v(j ) = min cij + vi( ) , j = 1,2,..., n , v0( ) = 0 .
k k −1 k
(3.9.2)
i =0
133
(k )
Valorile v j = v j = v j
( k −1)
, j = 0,1, 2,..., n , obŃinute la sfârşitul acestei etape sunt
valorile optime şi reprezintă, pentru fiecare j = 0,1, 2,..., n , valoarea minimă drumului
(k )
(drumurilor) de la x0 la x j . Valoarea vn = vn este valoarea minimă a drumului optim de la
x0 la xn . RelaŃiile (3.9.3) reprezintă, în ansamblul lor, condiŃia de oprire a algoritmului în
faza I.
Faza II – determinarea drumului optim (de valoare minimă) de la x0 la xn .
Determinarea drumului optim se face în sensul de la xn către x0 , astfel:
– dacă xi este primul vârf care-l precede pe xn pe drumului optim, atunci se caută
în relaŃia (3.9.2) din ultima etapă a fazei I, scrisă pentru j = n , indicele i pentru care:
vn = cin + vi . (3.9.4)
vm = cim + vi . (3.9.5)
– algoritmul se continuă până când ultimul vârf determinat al drumului optim este
însuşi x0 .
Exemplul 3.9.1
Să se determine drumul de valoare minimă dintre vârfurile x0 şi x6 în graful din
figura 3.8.1, utilizând această variantă a algoritmului lui Bellman-Kalaba.
Faza I
Etapa 0.
Matricea C este aceeaşi ca în cea din exemplul 3.8.1.
x0 x1 x2 x3 x4 x5 x6
0 2 ∞ 4 5 ∞ ∞ x0
∞ 0 12 1 ∞ ∞ ∞ x1
∞ ∞ 0 4 ∞ ∞ 2 x2
C=
∞ ∞ 11 0 2 4 11 x3
∞ ∞ ∞ ∞ 0 3 ∞ x4
∞ ∞ 2 ∞ ∞ 0 7 x5
∞ ∞ ∞ ∞ ∞ ∞ 0 x6
( 0)
Numerele v j = c0 j , j = 0,1,...,6 se află în matricea C pe linia corespunzătoare lui
x0 şi reprezintă valoarea minimă a drumurilor de la x0 la x j , j = 1,2,...,6 , formate dintr-
un singur arc. Vectorul V
( 0 ) este următorul:
V ( ) = 0,2, ∞,4,5, ∞, ∞
( ).
0
134
Etapa 1; k = 1 .
(1) (1)
Calculăm numerele v j , j = 1,2,..., n , v0 = 0 , cu relaŃiile (3.9.2), pentru k = 1 .
Avem:
(1)
Pentru j = 0 : v0 = 0 .
Pentru j = 1 :
( )
6
(1)
v1 = min ci1 + vi( ) = min ( 2 + 0;0 + 2; ∞ + ∞; ∞ + 4; ∞ + 5; ∞ + ∞; ∞ + ∞ ) = 2 .
0
i =0
Practic, se adună elementele corespunzătoare din coloana lui x1 cu elementele
vectorului V
( 0)
(aflate în această etapă pe linia lui x0 în matricea C), după care se determină
cea mai mică valoare din vectorul rezultat.
Pentru j = 2 :
( )
6
(1)
v2 = min ci 2 + vi( ) = min ( ∞ + 0;12 + 2;0 + ∞;11 + 4; ∞ + 5;2 + ∞; ∞ + ∞ ) = 14
0
i =0
⇔ min ( coloana lui x2 + linia lui x0 ) .
Pentru j = 3 :
( )
6
v3( ) = min ci 3 + vi( ) = min ( 4 + 0;1 + 2;4 + ∞;0 + 4; ∞ + 5; ∞ + ∞; ∞ + ∞ ) = 3
1 0
i =0
⇔ min ( coloana lui x3 + linia lui x0 ) .
Pentru j = 4 :
( )
6
v4( ) = min ci 4 + vi( ) = min ( 5 + 0; ∞ + 2; ∞ + ∞;2 + 4;0 + 5; ∞ + ∞; ∞ + ∞ ) = 5
1 0
i =0
⇔ min ( coloana lui x4 + linia lui x0 ) .
Pentru j = 5 :
( )
6
v5( ) = min ci 5 + vi( ) = min ( ∞ + 0; ∞ + 2; ∞ + ∞;4 + 4;3 + 5;0 + ∞; ∞ + ∞ ) = 8
1 0
i =0
⇔ min ( coloana lui x5 + linia lui x0 ) .
Pentru j = 6 :
( )
6
v6( ) = min ci 6 + vi( ) = min ( ∞ + 0;0 + 2;2 + ∞;11 + 4; ∞ + 5;7 + ∞;0 + ∞ ) = 15
1 0
i =0
⇔ min ( coloana lui x6 + linia lui x0 ) .
( 0 ) = 0,2, ∞, 4,5, ∞, ∞
Comparând, pe componente, cu vectorul V ( ) , se constată că
(1) ( 0) (1)
există indici j pentru care v j < v j şi anume j ∈ {2,3,5,6} , deci valorile v j nu sunt
optime, astfel că algoritmul continuă.
135
Etapa 2; k = 2 .
( )
6
( 2 ) = min c + v(1) ( 2)
Se calculează valorile v j ij i , j = 1,2,...,6 , v0 = 0 (relaŃiile
i =0
(3.9.2), k = 2 ). Practic, pentru fiecare j = 1,2,...,6 se va aduna (pe componente) coloana
corespunzătoare vârfului x j din matricea C cu vectorul V
(1) obŃinut la sfârşitul etapei 1,
element cu element şi apoi se determină cea mai mică valoare din fiecare vector astfel obŃinut.
Rezultă:
j = 0 : v0( ) = 0 ;
2
( )
6
j = 1 : v1( ) = min ci1 + vi( ) = 2 = v1( ) ;
2 1 1
i =0
j = 2 : v( ) = min ( c + v( ) ) = 10 < v( ) = 14 ;
6
2 1 1
2 i2 i 2
i =0
j = 3 : v( ) = min ( c + v( ) ) = 3 = v( ) ;
6
2 1 1
3 i3 i 3
i =0
j = 4 : v( ) = min ( c + v ( ) ) = 5 = v( ) ;
6
2 1 1
4 i4 i 4
i =0
j = 5 : v( ) = min ( c + v( ) ) = 7 < v( ) = 8 ;
6
2 1 1
5 i5 i 5
i =0
j = 6 : v( ) = min ( c + v( ) ) = 14 < v( ) = 15 .
6
2 1 1
6 i6 i 6
i =0
( 2)
= ( 0,2,10,3,5,7,14 ) . Comparând cu vectorul V ( ) obŃinut
1
Se obŃine vectorul V
( )
6
Se calculează valorile v j
( 3) = min c + v( 2 ) , j = 1, 2,...,6 , v( 3) = 0 şi se obŃine:
ij i 0
i =0
j = 0 : v0( ) = 0 ;
3
( )
6
j = 1 : v1( ) = min ci1 + vi( ) = 2 = v1( ) ;
3 2 2
i =0
j = 2 : v( ) = min ( c + v( ) ) = 9 < v( ) = 10 ;
6
3 2 2
2 i2 i 2
i =0
j = 3 : v( ) = min ( c + v ( ) ) = 3 = v( ) ;
6
3 2 2
3 i3 i 3
i =0
j = 4 : v( ) = min ( c + v( ) ) = 5 = v( ) ;
6
3 2 2
4 i4 i 4
i =0
j = 5 : v( ) = min ( c + v( ) ) = 7 = v( ) ;
6
3 2 2
5 i5 i 5
i =0
136
( )
6
j = 6 : v6 = min ci 6 + vi( ) = 12 < v6( ) = 14 .
( 3) 2 2
i =0
( 3) = 0,2,9,3,5,7,12
Se obŃine vectorul V ( ) şi în urma comparaŃiei (pe componente)
( 2 ) se constată că există indicii j ∈ 2,6 pentru care ( 3) ( 2 ) , deci valorile
cu vectorul V { } vj < vj
v(j ) nu sunt optime şi algoritmul continuă.
3
Etapa 4; k = 4 .
( )
6
Se calculează valorile v j
( 4 ) = min c + v ( 3) , j = 1, 2,...,6 , v ( 4 ) = 0 şi se obŃine:
ij i 0
i =0
j = 0 : v0( ) = 0 ;
4
( )
6
j = 1 : v1( ) = min ci1 + vi( ) = 2 = v1( ) ;
4 3 3
i =0
j = 2 : v( ) = min ( c + v( ) ) = 9 = v( ) ;
6
4 3 3
2 i2 i 2
i =0
j = 3 : v( ) = min ( c + v( ) ) = 3 = v( ) ;
6
4 3 3
3 i3 i 3
i =0
j = 4 : v( ) = min ( c + v( ) ) = 5 = v( ) ;
6
4 3 3
4 i4 i 4
i =0
j = 5 : v( ) = min ( c + v ( ) ) = 7 = v( ) ;
6
4 3 3
5 i5 i 5
i =0
j = 6 : v( ) = min ( c + v( ) ) = 11 < v( ) .
6
4 3 3
6 i6 i 6
i =0
( 4)
Se obŃine vectorul V = ( 0,2,9,3,5,7,11) şi există indicele i = 6 astfel încât
v6( ) < v6( ) , deci algoritmul continuă.
4 3
Etapa 5; k = 5 .
( )
6
Se calculează valorile v j
( 5) = min c + v( 4 ) , j = 1, 2,...,6 , v( 5) = 0 şi se obŃine:
ij i 0
i =0
j = 0 : v0( ) = 0 ;
5
( )
6
j = 1 : v1( ) = min ci1 + vi( ) = 2 = v1( ) ;
5 4 4
i =0
j = 2 : v( ) = min ( c + v( ) ) = 9 = v( ) ;
6
5 4 4
2 i2 i 2
i =0
j = 3 : v( ) = min ( c + v( ) ) = 3 = v( ) ;
6
5 4 4
3 i3 i 3
i =0
j = 4 : v( ) = min ( c + v( ) ) = 5 = v( ) ;
6
5 4 4
4 i4 i 4
i =0
137
( )
6
j = 5 : v5 = min ci 5 + vi( ) = 7 = v5( ) ;
( 5) 4 4
i =0
j = 6 : v( ) = min ( c + v( ) ) = 11 = v( ) .
6
5 4 4
6 i6 i 6
i =0
( 5 ) = 0,2,9,3,5,7,11
Se obŃine vectorul V ( ) care este identic cu V ( 4) de la sfârşitul
( 5) ( 4)
etapei a 4-a, deci v j = v j pentru toŃi indicii j = 0,1,...,6 , în acest moment fiind realizată
condiŃia de oprire a algoritmului.
( 5) = v( 4 ) , ∀ j = 0,1,...,6 , reprezintă, pentru fiecare j,
Prin urmare valorile v j = v j j ( )
valoarea optimă (minimă) a drumului optim de la vârful iniŃial x0 până la vârful x j .
Faza a II-a – determinarea drumului optim de la x0 la x6 .
Determinarea vârfurilor drumului optim se face în sensul de la x6 către x0 . Valoarea
( 5)
minimă a acestui drum este v6 = v6 = 11 , deci valoarea ultimei componente a vectorului
V ( ) obŃinut la sfârşitul etapei a 5-a din faza I.
6
j = 0 : v0 = v0( ) = 0 ;
5
( )
6
v1 = v1( ) = min ci1 + vi( ) =
5 4
j = 1:
i =0
= min ( 2 + 0;0 + 2; ∞ + 9; ∞ + 3; ∞ + 5; ∞ + 7; ∞ + 11) = 2;
minimul se obŃine pentru i ∈ {0,1} .
( )
6
v2 = v2( ) = min ci 2 + vi( ) =
5 4
j = 2:
i =0
= min ( ∞ + 0;12 + 2;0 + 9;11 + 3; ∞ + 5;2 + 7; ∞ + 11) = 9;
minimul se obŃine pentru i ∈ {2,5} .
( )
6
v3 = v3( ) = min ci3 + vi( ) =
5 4
j = 3:
i =0
= min ( 4 + 0;1 + 2;4 + 9;0 + 3; ∞ + 5; ∞ + 7; ∞ + 11) = 3;
minimul se obŃine pentru i ∈ {1,3} .
( )
6
v4 = v4( ) = min ci 4 + vi( ) =
5 4
j = 4:
i =0
= min ( 5 + 0; ∞ + 2; ∞ + 9;2 + 3;0 + 5; ∞ + 7; ∞ + 11) = 5;
minimul se obŃine pentru i ∈ {3,4} .
138
( )
6
( 5)
v5 = v5 = min ci 5 + vi( ) =
4
j = 5:
i =0
= min ( ∞ + 0; ∞ + 2; ∞ + 9;4 + 3;3 + 5;0 + 7; ∞ + 11) = 7;
minimul se obŃine pentru i ∈ {3,5} .
( )
6
v6 = v6( ) = min ci 6 + vi( ) =
5 4
j = 6:
i =0
= min ( ∞ + 0; ∞ + 2;2 + 9;11 + 3;8 + 5;7 + 7;0 + 11) = 11;
minimul se obŃine pentru i ∈ {2,6} .
Presupunem că xi este primul vârf care-l precede pe x6 pe drumul optim de la x0 la
x6 : µ = { x0 ,..., xi , x6 } . Se caută în relaŃia (3.9.4) scrisă pentru j = 6 din ultima etapă
indicele i pentru care: v6 = ci 6 + vi = 11 .
Se obŃine i = {2,6} . Cum x6 este ultimul vârf al drumului optim, rezultă i = 2 , deci
x2 este vârful care-l precede pe x6 pe drumul optim: µ = { x0 ,..., x2 , x6 } .
Cum l ( x2 , x6 ) = 2 , rezultă că v6 − l ( x2 , x6 ) = 11 − 2 = 9 = v2 şi reprezintă
valoarea minimă a subdrumului de la x0 la x2 pe drumul optim.
Fie xi vârful care-l precede pe x2 pe drumul optim. Se caută în relaŃia (3.9.2) scrisă
pentru j = 2 din ultima etapă indicele i pentru care:
v2 = ci 2 + vi = 9 .
Se obŃine i ∈ {2,5} şi cum x2 se află deja pe drumul optim rezultă i = 5 , deci x5 îl
precede pe x2 pe drumul optim: µ = { x0 ,..., x5 , x2 , x6 } .
Cum l ( x5 , x2 ) = 2 , rezultă că v2 − l ( x5 , x2 ) = 9 − 2 = 7 = v5 şi reprezintă
valoarea minimă a subdrumului de la x0 la x5 pe drumul optim.
Fie xi vârful care-l precede pe x5 pe drumul optim. Se caută în relaŃia (3.9.2) scrisă
pentru j = 5 din ultima etapă indicele i pentru care:
v5 = ci 5 + vi = 7 .
Se obŃine i = {3,5} şi cum x5 se află deja pe drumul optim rezultă i = 3 , deci x3 îl
precede pe x5 pe drumul optim: µ = { x0 ,..., x3 , x5 , x2 , x6 } .
Cum l ( x3 , x5 ) = 4 , rezultă că v5 − l ( x3 , x5 ) = 7 − 4 = 3 = v3 şi reprezintă
valoarea minimă a subdrumului de la x0 la x3 pe drumul optim.
Fie xi vârful care-l precede pe x3 pe drumul optim. Se caută în relaŃia (3.9.2) scrisă
pentru j = 3 din ultima etapă indicele i pentru care:
v3 = ci 3 + vi = 3 .
Se obŃine i = {1,3} şi cum x3 se află deja pe drumul optim rezultă i = 1 , deci x1 îl
precede pe x3 pe drumul optim: µ = { x0 ,..., x1 , x3 , x5 , x2 , x6 } .
139
Cum l ( x1 , x3 ) = 1 , rezultă că v3 − l ( x1, x3 ) = 3 − 1 = 2 = v1 şi reprezintă valoarea
minimă a subdrumului de la x0 la x1 pe drumul optim.
Fie xi vârful care-l precede pe x1 pe drumul optim. Se caută în relaŃia (3.9.2) scrisă
pentru j = 1 din ultima etapă indicele i pentru care:
v1 = ci1 + vi = 2 .
Se obŃine i = {0,1} şi cum x1 se află deja pe drumul optim, rezultă i = 0 . Dar x0
este primul vârf al drumului optim, astfel că în acest moment s-a încheiat şi faza a II-a a
algoritmului. v1 = 2 reprezintă valoarea primului arc, ( x0 , x1 ) al drumului optim. Prin
urmare, drumul de valoare minimă dintre vârfurile x0 şi x6 este µ = { x0 , x1 , x3 , x5 , x2 , x6 } ,
este format din 5 arce şi are valoarea minimă v6 = 11 .
Se constată că rezultatul final este identic cu cel obŃinut prin algoritmul lui Bellman-
Kalaba în „sensul direct” de la x0 la x6 , ceea ce era de aşteptat.
140
TESTE DE AUTOEVALOARE
Test de autoevaluare
Problema nr. 1
Într-o întreprindere există 7 secŃii între care se face permanent un schimb de produse
sub diferite forme (componente, subansamble, ansamble, etc.). PosibilităŃile de transport între
cele 7 secŃii sunt reprezentate printr-un graf cu arce valorizate cu 7 vârfuri, având matricea
conexiunilor următoare:
x1 x2 x3 x4 x5 x6 x7
0 1 0 1 0 0 0 x1
0 0 1 0 0 1 0 x2
1 0 0 0 1 1 1 x3
A= .
1 0 1 0 1 0 0 x4
0 0 0 0 0 1 1 x5
0 1 0 0 0 0 1 x6
0 0 0 0 1 0 0 x7
Valoarea ataşată fiecărui arc reprezintă timpul de transport dintre secŃiile
corespunzătoare extremităŃilor arcului respectiv. Matricea valorilor arcelor grafului este
următoarea:
x1 x2 x3 x4 x5 x6 x7
0 3 ∞ 6 ∞ ∞ ∞ x1
∞ 0 2 ∞ ∞ 4 ∞ x2
3 ∞ 0 ∞ 5 1 4 x3
C= .
1 ∞ 1 0 4 ∞ ∞ x4
∞ ∞ ∞ ∞ 0 3 2 x5
∞ 2 ∞ ∞ ∞ 0 2 x6
∞ ∞ ∞ ∞ 1 ∞ 0 x7
1) Să se construiască o reprezentare sagitală a grafului schemei de transport;
2) Să se planifice transportul de la secŃia x1 la secŃia x5 astfel încât acesta să se facă
într-un timp minim;
3) Cum trebuie organizat transportul între oricare dintre cele 7 secŃii ale întreprinderii,
astfel încât timpul total de transport să fie minim;
4) Presupunând că datorită unei mai bune organizări a activităŃii din întreprindere se
micşorează timpul de transport de la secŃia x2 la secŃia x6 cu 2 unităŃi de timp, să se
determine soluŃia problemei de la punctul 3) în această ipoteză;
5) În ipoteza apariŃiei unei defecŃiuni care necesită suspendarea legăturii dintre secŃiile
x6 şi x7 , să se determine noua soluŃie a problemei de la punctul 4).
141
Problema nr. 2
Pentru prelucrarea unui produs complex într-o întreprindere economică, acesta poate
trece pe la unele din staŃiile x1 , x2 ,..., x8 , în care se execută anumite lucrări specifice fiecărei
staŃii de lucru. Între aceste staŃii există un sistem de transport reprezentat printr-un graf a cărei
matrice a conexiunilor este următoarea:
x1 x2 x3 x4 x5 x6 x7 x8
0 1 0 0 0 0 1 0 x1
0 0 1 0 0 1 0 0 x2
0 0 0 1 1 0 0 1 x3
A= 1 1 0 0 0 0 0 0 x4 .
1 0 0 1 0 0 0 0 x5
0 0 0 1 1 0 0 0 x6
0 1 0 0 1 1 0 0 x7
1 0 0 1 0 0 1 0 x8
Valoarea ataşată unui arc oarecare ( xi , x j ) din această reŃea de transport reprezintă
creşterea, cu numărul respectiv, a beneficiului net pe unitatea de produs când acesta trece de
la staŃia xi la staŃia x j pentru prelucrarea din staŃia x j , atunci când valoarea este pozitivă,
iar când este negativă, reprezintă o micşorare a acestui beneficiu, datorită faptului că
transportul unitar dintre xi şi x j costă mai mult decât se câştigă prin îmbunătăŃirea adusă
prin prelucrarea din staŃia x j . Matricea valorilor arcelor grafului descris de matricea A este
următoarea:
x1 x2 x3 x4 x5 x6 x7 x8
0 −2 −∞ −∞ −∞ −∞ −4 −∞ x1
−∞ 0 2 −∞ −∞ −2 −∞ −∞ x2
−∞ −∞ 0 −1 1 −∞ −∞ −2 x3
C= 1 −3 −∞ 0 −∞ −∞ −∞ −∞ x4 .
−3 −∞ −∞ −2 0 −∞ −∞ −∞ x5
−∞ −∞ −∞ 3 1 0 −∞ −∞ x6
−∞ 1 −∞ −∞ −2 −3 0 −∞ x7
−2 −∞ −∞ 1 −∞ −∞ −1 0 x8
1) Să se construiască o reprezentare sagitală a grafului sistemului de transport dintre
cele 8 secŃii ale întreprinderii;
2) Să se determine matricea conexă terminală ataşată grafului utilizând algoritmul lui
Chen;
3) Să se stabilească dacă graful are circuite;
4) Să se determine numărul şi lungimea drumurilor (numărul arcelor) dintre oricare
două vârfuri xi şi x j ale grafului;
142
5) Să se determine prin care dintre cele opt staŃii şi în ce ordine trebuie transportat
produsul dacă, odată ajuns într-o staŃie, el trebuie supus prelucrării din staŃia respectivă şi
astfel încât mărimea totală a beneficiului net pe unitatea de produs să fie maximă;
6) Cum se modifică soluŃia problemei dacă beneficiul suplimentar net la unitatea de
produs, transportat de la staŃia x6 la staŃia x4 scade cu două unităŃi;
7) DeterminaŃi cu algoritmul lui Ford valoarea maximă a drumului de la x6 la x5 , în
ipoteza l ( x6 , x4 ) = 3 ;
8) DeterminaŃi cu algoritmul lui Bellman-Kalaba valoarea maximă a drumului de la
x6 la x5 în ipoteza de la punctul 6: l ( x6 , x4 ) = 1 .
143
TEME DE CONTROL
Problema nr. 1
O companie de transport mărfuri trebuie să efectueze transportul unor produse între
şapte puncte economice notate cu x1 , x2 ,..., x7 , acestea fiind întreprinderi, depozite,
magazine de desfacere, etc. ReŃeaua de transport este un graf cu 7 vârfuri, x1 , x2 ,..., x7 şi
având matricele A a conexiunilor, respectiv C a valorilor arcelor, următoare:
x1 x2 x3 x4 x5 x6 x7
0 1 0 0 1 1 1 x1
0 0 1 1 0 0 0 x2
1 0 0 1 0 0 0 x3
A= ;
0 1 0 0 0 1 0 x4
0 0 1 1 0 1 0 x5
1 0 1 0 1 0 0 x6
1 0 0 1 0 1 0 x7
x1 x2 x3 x4 x5 x6 x7
0 3 ∞ ∞ 3 2 1 x1
∞ 0 2 4 ∞ ∞ ∞ x2
3 ∞ 0 2 ∞ ∞ ∞ x3
C= .
∞ 4 ∞ 0 ∞ 2 ∞ x4
∞ ∞ 3 4 0 2 ∞ x5
2 ∞ 3 ∞ 2 0 ∞ x6
1 ∞ ∞ 3 ∞ 2 0 x7
(
Valoarea arcului xi , x j ) reprezintă valoarea cheltuielilor de transport pe unitatea de
produs între vârfurile xi şi x j ale reŃelei formate din cele 7 puncte economice.
1) Să se construiască o reprezentare sagitală a grafului reŃelei de transport
corespunzătoare matricelor A şi C;
2) Să se determine modul în care trebuie organizat transportul între două puncte
arbitrare ale reŃelei astfel încât costul total de transport să fie minim;
3) Să se determine modificările soluŃiei problemei de transport de la punctul 2) în
ipoteza că nu mai poate fi utilizată legătura de la punctul x1 la punctul x6 .
Problema nr. 2
În departamentul de cercetare al unei fabrici din industria aeronautică s-au făcut studii
şi cercetări privind influenŃa anumitor tratamente suplimentare în prelucrarea unor piese
asupra mărimii sau micşorării timpului mediu de funcŃionare al pieselor respective.
144
Rezultatele cercetărilor au arătat că acest timp se măreşte sau se micşorează cu un
anumit număr de unităŃi de timp, aceasta depinzând numai de ordinea în care se aplică aceste
tratamente.
S-a stabilit că modificarea timpului mediu de funcŃionare a unei piese esenŃiale din
ansamblul trenului de aterizare depinde de tratamentul aplicat la un moment dat şi de
tratamentul aplicat anterior, existând numai posibilităŃile indicate prin arcele unui graf cu 9
vârfuri, reprezentând cele 9 tratamente posibile care pot fi aplicate. Matricea conexiunilor
acestui graf este următoarea:
x1 x2 x3 x4 x5 x6 x7 x8 x9
0 0 0 1 1 1 0 0 0 x1
1 0 1 0 1 0 0 0 0 x2
0 1 0 0 0 0 0 0 1 x3
1 1 1 0 0 0 0 0 0 x4
A= .
0 0 0 0 0 1 0 0 0 x5
0 0 0 0 1 0 1 0 0 x6
0 0 0 0 0 1 0 1 0 x7
0 0 0 0 1 0 1 0 0 x8
0 1 0 0 1 1 0 1 0 x9
Valoarea ataşată fiecărui arc ( xi , x j ) reprezintă numărul de unităŃi de timp cu care
creşte timpul mediu de funcŃionare al piesei dacă se aplică consecutiv tratamentele xi şi x j ,
cu convenŃia că o valoare pozitivă reprezintă o creştere propriu-zisă, iar o valoare negativă
reprezintă o scădere a acestui timp. Matricea valorilor arcelor grafului este următoarea:
x1 x2 x3 x4 x5 x6 x7 x8 x9
0 −∞ −∞ 1 2 6 −∞ −∞ −∞ x1
−7 0 −4 −∞ 8 −∞ −∞ −∞ −∞ x2
−∞ 1 0 −∞ −∞ −∞ −∞ −∞ 4 x3
−2 2 2 0 −∞ −∞ −∞ −∞ −∞ x4
C= .
−∞ −∞ −∞ −∞ 0 5 −∞ −∞ −∞ x5
−∞ −∞ −∞ −∞ −7 0 −1 −∞ −∞ x6
−∞ −∞ −∞ −∞ −∞ −2 0 1 −∞ x7
−∞ −∞ −∞ −∞ 6 −∞ −2 0 −∞ x8
−∞ −1 −∞ −∞ 5 3 −∞ 2 0 x9
Cercetările au evidenŃiat şi faptul că modificările din timpul mediu de funcŃionare a
piesei descrise prin graful dat, se cumulează prin aplicarea succesivă a mai multor tratamente
succesive, dar nu mai multe de 10; aplicarea a mai mult de 10 tratamente devine incomodă şi
costisitoare şi creşterea numărului lor peste 10 nu conduce la modificarea semnificativă a
timpului mediu de funcŃionare a piesei.
1) Să se construiască o reprezentare sagitală a grafului celor 9 tratamente termice,
având matricea conexiunilor A şi matricea valorilor arcelor C;
145
2) Să se determine matricea drumurilor T ataşată grafului şi să se precizeze dacă în
graf există circuite;
3) Să se determine care dintre cele 9 tratamente posibile trebuie efectuate asupra piesei
şi care este ordinea aplicării lor astfel încât timpul mediu de funcŃionare a piesei să crească cu
un număr cât mai mare de unităŃi de timp;
4) Presupunând că în urma unor studii suplimentare s-a constatat că aplicarea
tratamentului x7 după tratamentul x5 conduce la creşterea timpului mediu de funcŃionare a
piesei cu 5 unităŃi de timp, să se determine soluŃia problemei în această ipoteză suplimentară.
Problema nr. 3
Între opt puncte de lucru ale unui sistem economic există o reŃea de transport al cărui
graf este dat prin matricea A a conexiunilor dintre vârfurile x1 , x2 ,..., x8 ale sale, unde:
x1 x2 x3 x4 x5 x6 x7 x8
0 1 0 0 0 1 0 1 x1
0 0 1 0 1 0 0 0 x2
0 0 0 1 0 0 0 0 x3
A= 0 0 0 0 0 1 0 1 x4 .
1 0 0 1 0 0 0 0 x5
0 0 1 0 1 0 1 0 x6
1 1 0 1 0 0 0 0 x7
0 1 0 0 0 0 1 0 x8
Valorile asociate fiecărui arc ( xi , x j ) reprezintă cheltuielile de transport
corespunzătoare, pe unitatea de produs transportată, de la punctul xi la punctul x j al reŃelei.
Matricea valorilor arcelor grafului este următoarea:
x1 x2 x3 x4 x5 x6 x7 x8
0 3 ∞ ∞ ∞ 2 ∞ 1 x1
∞ 0 5 ∞ 3 ∞ ∞ ∞ x2
∞ ∞ 0 3 ∞ ∞ ∞ ∞ x3
C=∞ ∞ ∞ 0 ∞ 3 ∞ 2 x4 .
3 ∞ ∞ 4 0 ∞ ∞ ∞ x5
∞ ∞ ∞ ∞ 6 0 2 ∞ x6
4 2 ∞ 2 ∞ ∞ 0 ∞ x7
∞ 2 ∞ ∞ ∞ ∞ 3 0 x8
1) Să se construiască o reprezentare sagitală a grafului cu arce valorizate a sistemului
de transport dintre cele opt puncte ale sistemului economic aferent matricelor A şi C;
2) Să se determine matricea drumurilor asociată acestui graf utilizând algoritmul lui
Chen;
3) Să se stabilească dacă graful are circuite;
146
4) Să se determine cum trebuie organizat transportul între oricare două puncte ale
sistemului astfel încât costul total de transport între aceste puncte să fie minim;
5) Să se studieze cum se modifică această organizare dacă apare o nouă posibilitate de
transport, între vârfurile x3 şi x7 , valoarea asociată acestui arc fiind de două unităŃi băneşti.
1. Claude Berge: Teoria grafurilor şi aplicaŃiile ei, Editura tehnică, Bucureşti, 1969;
2. Tiberiu Ionescu: Grafuri. AplicaŃii, Vol I, II, Editura didactică şi pedagogică,
Bucureşti, Bucureşti, 1973;
3. Al. Roşu: Teoria grafurilor. Algoritmi şi aplicaŃii, Editura militară, Bucureşti,
1974;
4. C. Dinescu, B. Săvulescu: Metode de matematică modernă pentru economişti.
Culegere de probleme, Editura didactică şi pedagogică, Bucureşti, 1975;
5. O. Popescu, D.P. Vasiliu, ş.a.: Matematici aplicate în economie, Editura didactică
şi pedagogică, Bucureşti, 1997;
6. Nicolae Micu: Teoria grafurilor, Editura Academiei Militare, Bucureşti, 1981;
7. C. Dinescu, I. Fătu: Matematici pentru economişti, vol. II, III, Editura didactică şi
pedagogică, Bucureşti, 1995.
8. Dragoş-Radu Popescu: Combinatorică şi teoria grafurilor, Biblioteca SocietăŃii de
StiinŃe Matematice din România, Bucureşti, 2005.
147
Chestionar feedback
Partea I . ConŃinut
148
5. Timpul alocat acestui modul a fost suficient?
4) CunoaşteŃi care sunt disciplinele din anii următori de studiu la care veŃi
utiliza cunoştinŃele dobândite la această disciplină ?
149