Sunteți pe pagina 1din 149

UNIVERSITATEA TITU MAIORESCU

Facultatea de INFORMATICĂ

Conf. univ. dr.

VALENTIN GÂRBAN

Curs pentru învăţământul la distanţă

BUCUREŞTI – 2015
CUPRINS

ALGORITMICA GRAFURILOR........................................................................................4

UNITATEA DE ÎNVĂŢARE 1 - Elemente de combinatorică .........................................7


Lecţia 1 - Elemente de combinatorică…............................................................................. 8
Mulţimi ordonate...........................................................................................................…..8
Permutări..............................................................................................................................9
Aranjamente…………………………………………………………………...................10
Combinări……………………………………………………………………...................12
Binomul lui Newton şi aplicaţii………………………………………………..................17

Lecţia 2 - Extensii şi generalizări.........................................................................................20


Aranjamente cu repetiţie............................................................................................ ........20
Permutări cu repetiţie…………………………………………………………...... ...........23
Combinări cu repetiţie………………………………………………………....... .............25
Aplicaţii…………………………………………………………………………...............27
Teste de autoevaluare......................................................................................... ................30
Teme de control.................................................................................................. ................32
Bibliografie pentru Unitatea de învăţare 1..........................................................................34

UNITATEA DE ÎNVĂŢARE 2 - Elemente de teoria grafurilor. Studiul grafurilor


cu ajutorul matricelor booleene asociate..............................................................................35

Lecţia 3 - Elemente de teoria grafurilor................................................................................36


Definiţii, terminologie, notaţii, concepte fundamentale ……………………..….…..….... 36
Definirea noţiunilor legate de orientare...................................................... .........................36
Definirea noţiunilor legate de neorientare............................................................................41
Succesori şi predecesori.......................................................................................................43
Împărţirea unui graf fără circuite în nivele...........................................................................44

Lecţia 4 – Matrici booleene asociate grafurilor.....................................................................47


Matricea de adiacenţă asociată unui graf.............................................................................47
Matricea drumurilor asociată unui graf. ..............................................................................51
Algoritmi pentru determinarea matricei drumurilor şi a unor drumuri speciale în grafuri..52

Lecţia 5 - Operaţii cu grafuri şi cu matrice booleene asociate grafurilor............................57


Adunarea booleană şi reuniunea grafurilor..........................................................................57
Înmulţirea booleană şi produsul de compoziţie al grafurilor... ..........................................58
Matricea booleană a închiderii tranzitive.............................................................................65
Împărţirea în nivele a unui graf fără circuite cu ajutorul matricei booleene asociate.........68
Teste de autoevaluare...........................................................................................................71
Teme de control....................................................................................................................73
Bibliografie pentru Unitatea de învăţare 2...........................................................................75

UNITATEA DE ÎNVĂŢARE 3 - Grafuri cu arce valorizate. Algoritmi de


optimizare.................................................................................................................................76

Lecţia 6 - Grafuri cu arce valorizate. Drum de lungime minimă......................................... 77

2
Noţiuni introductive. Punerea problemei...............................................................................77
Algoritm pentru determinarea drumului de lungime minimă între două vârfuri dintr-un
graf..........................................................................................................................................79

Lecţia 7 - Algoritmul lui Ford pentru determinarea drumurilor de valoare minimă


dintre două vârfuriale unui graf................................................................................................82
Algoritmul lui Ford pentru determinarea drumurilor de valoare minimă dintre două
vârfuri.......................................................................................................................................82
Exemple la algoritmul lui Ford pentru determinarea drumurilor de valoare minimă
dintre două vârfuri ale unui graf..............................................................................................84.
Algoritmul lui Ford pentru determinarea drumurilor de valoare maximă dintre două
vârfuri ale unui graf fără circuite. Exemple........................................................................... 95

Lecţia 8 - Algoritmul Bellman-Kalaba pentru determinarea drumului de valoare


minimă dintre două vârfuri......................................................................................................101
Algoritmul Bellman-Kalaba pentru determinarea drumurilor de valoare minimă dintre
două vârfuri ale unui graf.......................................................................................................101
Exemple la algoritmul lui Bellman-Kalaba pentru determinarea drumurilor de
valoare minimă dintre două vârfuri ale unui graf...................................................................104
Algoritmul lui Bellman-Kalaba pentru determinarea drumurilor de valoare maximă
dintre două vârfuri ale unui graf fără circuite. Exemple.........................................................111

Lecţia 9 - Algoritmul matriceal pentru determinarea drumului de valoare minimă dintre


două vârfuri oarecare ale unui graf.........................................................................................121
Algoritmul matriceal pentru determinarea drumurilor de valoare minimă dintre
două vârfuri oarecare ale unui graf.........................................................................................121
Algoritmul matriceal pentru determinarea drumurilor de valoare maximă dintre
două vârfuri oarecare ale unui graf fără circuite....................................................................126
Probleme rezolvate la unitatea de învăţămant nr. 3...............................................................128
Teste de autoevaluare.............................................................................................................141
Teme de control.....................................................................................................................144
Bibliografie pentru Unitatea de învăţare 3.............................................................................147
Chestionar pentru feedback....................................................................................................148

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.

Disciplina Algoritmica grafurilor îşi propune următoarele obiective specifice:


 Însuşirea noţiunilor fundamentale din domeniile teoriei grafurilor şi combinatoricii.
 Formarea deprinderilor de modelare matematică a unor probleme de natură
informatică, tehnică sau economică, cu utilizarea cunoştinţelor însuşite.
 Formarea şi dezvoltarea bazei matematice a studenţilor pentru disciplinele
fundamentale şi de specialitate din anii superiori;
 Formarea şi dezvoltarea aptitudinilor şi deprinderilor de analiză logică, formulare
corectă şi argumentare fundamentată, în rezolvarea problemelor tehnico-economice şi
de specialitate;
 O comparaţie critică a metodelor de rezolvare evidenţiind, eventual, calea optimă de
soluţionare.

Cunoştinţele şi competenţele dobândite de către studenţi prin însuşirea conţinutului cursului


Algoritmica grafurilor sunt des folosite la disciplinele de specialitate care vor fi studiate în anii
următori, precum: Algoritmi şi structuri de date, Probabilităţi şi statistică matematică, Tehnici
avansate de programare, Reţele de calculatoare, Administrarea reţelelor de calculatoare, etc. O
neînţelegere a noţiunilor fundamentale prezentate în acest curs poate genera dificultăţi în asimilarea
conceptelor mai complexe ce vor fi introduse în aceste cursuri de specialitate.
Competenţele specifice disciplinei Algoritmica grafurilor se pot clasifica astfel:
1. Competenţe instrumentale
 Capacitatea de a defini, distinge şi identifica noţiuni, elemente, principii, reguli,
relaţii în modele teoretice ale teoriei grafurilor şi în situaţii teoretice ale altor
discipline, pentru care se pot adopta modele ale teoriei grafurilor.
 Capacitatea de a identifica şi soluţiona probleme care se modelează cu ajutorul
algoritmilor specifici teoriei grafurilor, aplicând cunoştintele şi metodele actuale de
Competenţe studiu din acest domeniu.
generale  Cunoştinţe, priceperi, deprinderi, strategii de bază ale teoriei grafurilor necesare
integrării sociale printr-o profesie din domeniul Informaticii şi realizării mobilităţii
profesionale specifice.
2. Competenţe interpersonale
 Capacitatea de a-şi regla şi armoniza repertoriul de comunicare (structuri
mentale capabile să recepteze conţinuturi ale teoriei grafurilor, limbaj propriu
teoriei) cu cel al profesorului, al specialistului.
4
 Capacitatea de a propune, a specifica, a modifica, a dezvolta, a critica, structuri,
idei ale conţinuturilor în participarea la activităţile didactice şi de cercetare.
 Capacitatea de evaluare şi autoevaluare.
 Capacitatea de a colabora în soluţionarea situaţiilor problema.
 Abilitatea de a colabora cu specialişti/experţi din alte domenii.
 Capacitatea de a lucra în echipă.
3. Competenţe sistemice
 Capacitatea de a formaliza probleme generate de practică în termenii teoriei
grafurilor şi combinatoricii.
 Capacitatea de transpune şi utiliza conţinuturile însuşite în alte domenii ale
informaticii.
 Capacitatea de a crea, a produce, a combina, a deriva prin metode specifice ale
teoriei grafurilor, conţinuturi care să răspundă unor probleme proprii disciplinei şi
unor probleme interdisciplinare.
 Formarea şi dezvoltarea deprinderilor şi aptitudinilor de analiză logică, formulare
corectă şi argumentare fundamentată în soluţionarea problemelor de natură
matematică şi de specialitate, precum şi formarea şi dezvoltarea unui raţionament
riguros şi a abilităţilor de calcul rapid şi corect necesare pentru diferite aplicaţii.
 Abilitatea de a lucra independent.
 Abilităţi de documentare, căutare pe internet.
1. Cunoaştere şi înţelegere
 Cunoaşterea noţiunilor, ideilor şi conceptelor fundamentale cu care operează
combinatorica şi teoria grafurilor.
Competenţe  Observarea activă, explorarea fenomenului sau procesului studiat, identificarea
specifice semnificaţiilor convenţionale, cu echivalente formale, ale elementelor componente
disciplinei şi ale relaţiilor dintre ele.
 Elaborarea de reprezentări în descrierea desfăşurării fenomenului sau procesului
studiat, şi a unor aspecte calitative şi cantitative ale manifestării acestuia.
2. Explicare şi interpretare
 Exprimarea proprie a cunoştinţelor fundamentale ale teoriei grafurilor, prelucrate
şi integrate în sistemul individual de cunoştinţe.
 Categorisirea fenomenelor şi proceselor studiate după similarităţi cu modelele
teoretice clasificate.
3. Instrumental - aplicative
 Utilizarea rezultatelor teoretice ce privesc teoria grafurilor şi combinatoricii în
descrierea calitativa şi determinarea unor caracteristici cantitative ale procesului sau
fenomenului studiat.
 Formarea deprinderilor de modelare matematică a unor probleme de natură
tehnico-inginerească în general şi de informatică în special, cu utilizarea
cunoştinţelor însuşite din domeniile teoriei grafurilor şi combinatoricii.
4. Atitudinale
 Orientarea studiului teoriei grafurilor şi combinatoricii, a participării la
activităţile didactice, către rezultate „deziderat”, măsurabile relativ la standarde
cunoscute.
 Dezvoltarea unei gândiri sistemice privind aplicaţiile specifice de modelare şi
simulare matematică, având la bază rezultate ale teoriei grafurilor şi
combinatoricii.

5
Structura cursului este următoarea:

Unitatea de învăţare 1 - Elemente de combinatorică


Unitatea de învăţare 2 - Studiul grafurilor cu ajutorul matricelor booleene asociate
Unitatea de învăţare 3 - Grafuri cu arce valorizate. Algoritmi de optimizare

Este foarte important ca parcurgerea materialului sa se facă în ordinea unităţilor de învăţare


incluse (1 – 3). Fiecare UI (unitate de învăţare) conţine, pe lângă prezentarea noţiunilor teoretice, şi
exerciţii rezolvate, activităţi de lucru individual cu indicaţii de rezolvare şi exemple, iar la sfârşitul
fiecărei lecţii, un test de autoevaluare. În plus, la sfârșitul fiecărei UI sunt incluse probleme propuse
care testează cunoaşterea noţiunilor teoretice de catre student, precum şi temele de control
prevăzute în calendarul disciplinei. Materialul a fost elaborat astfel incat algoritmii prezentati să
poată fi implementaţi şi într-un limbaj de programare, recomandabil fiind limbajul C care se
studiază în anul I.

Vă precizăm de asemenea că, din punct de vedere al verificărilor şi al notării, cu adevărat


importantă este capacitatea pe care trebuie să o dobândiţi şi să o probaţi de a rezolva toată tipologia
de probleme aplicative aferente materialului teoretic prezentat în continuare. De aceea vă
recomandăm să parcurgeţi cu atenţie toate problemele rezolvate, să rezolvaţi problemele propuse
din testele de autoevaluare si temele de control; fiţi convinşi că examenul final apelează la tipurile
de probleme prezente în secţiunile menţionate anterior.
Prezentăm în continuare criteriile de evaluare şi ponderea fiecărei activităţi de evaluare la
stabilirea notei finale.
La stabilirea notei finale se iau în Ponderea în notare, exprimată în %
considerare: {Total = 100%}
- răspunsurile la examen / colocviu 70%
(evaluarea finală)
- testarea periodică prin lucrări de control 20%
- testarea continuă pe parcursul semestrului 10%
şi participarea la activitatile didactice
Modalitatea practică de evaluare finală – Examen, constând în:
 Lucrare scrisă descriptivă, constând din 3-4 subiecte, fiecare conţinând 1-2 chestiuni teoretice
(enunţ şi demonstraţie) şi 2-3 probleme.
Cerinţe minime pentru nota 5 Cerinţe pentru nota 10
 Însuşirea cunoştinţelor de bază  Rezolvarea corectă şi completă a subiectelor de examen
 Obţinerea unui număr de 5  Participarea activă la toate orele de seminar şi la toate
puncte din totalul de 10 orele de curs.
repartizat pentru diferite  Obţinerea punctajului de minim 90 % la lucrările de
categorii de subiecte control
 Activitate în timpul semestrului  Rezolvarea temelor anunţate la seminar, respectiv
 Participarea la minimum 14 ore conţinute în temele de control şi testele de autoevaluare.
de curs si la 8 ore de seminar.
În dorinţa de ridicare continuă a standardelor desfăşurării activităţilor dumneavoastră, după
parcurgerea fiecărei unităţi de învăţare vă rugăm să completaţi un formular de feedback şi să-l
transmiteţi îndrumatorului de an. Acest formular se gaseşte la sfârsitul acestui material

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:

1. Însuşirea noţiunilor fundamentale din domeniul combinatoricii.


2. Formarea şi dezvoltarea bazei matematice a studenţilor pentru disciplinele
fundamentale şi de specialitate din anii superiori;
3. Formarea deprinderilor de modelare matematică a unor probleme de natură
informatică, tehnică sau economică, cu utilizarea cunoştinţelor însuşite.

Rezumat:

În această unitate de învăţare sunt prezentate, în Lecţia 1, principalele noţiuni cu care


operează Combinatorica: mulţimi ordonate, permutări, aranjamente, combinări şi aplicaţii ale
lor. Este pusă în evidenţă şi legătura dintre aceste noţiuni şi aplicaţiile bijective, injective şi
crescătoare sau descrescătoare definite pe o mulţime finită, cu valori într-o mulţime finită . De
fapt materialul prezentat în Lectia 1 poate fi privit şi ca o reluare la un nivel superior a acestor
cunoştinţe studiate în ciclul liceal, din dorinţa de a actualiza şi uniformiza aceste cunoştinţe la
toţi studenţii, dat fiind că aceştia au absolvit liceul la profile diferite, în fiecare profil
insistându-se în mod diferenţiat asupra acestor noţiuni, atât ca ca timp alocat cât şi ca grad de
complexitate, conform programei fiecărui profil.
În Lecţia 2 a acestei unităţi de învăţare sunt prezentate generalizările naturale ale
conceptelor prezentate în Lecţia 1, respectiv permutări cu repetiţie, aranjamente cu repetiţie,
combinări cu repetiţie, precum şi câteva aplicaţii ale acestora, lăsând totodată câmp deschis
utilizării tuturor noţiunilor din această unitate în celelalte unităţi de învăţare ale disciplinei,
precum şi în cadrul altor discipline din planul de învăţământ care se vor studia în semestrele
următoare (ex: Teoria probabilităţilor şi statistică matematică).

Cuvinte cheie:

Multime ordonată, permutări, aranjamente, combinări, permutări cu repetiţie, aranjamente cu


repetiţie, combinări cu repetiţie, funcţii injective, surjective, bijective, crescătoare,
descrescătoare şi oarecare definite pe o mulţime finită, cu valori într-o mulţime finită.

Timp de studiu:

Timpul mediu necesar însuşirii noţiunilor teoretice, formării deprinderilor de calcul şi


utilizării algoritmilor de rezolvare a problemelor specifice Combinatoricii este estimat la
aproximativ 2-3 ore pentru fiecare din cele două lecţii ale unităţii de învăţare. Se adaugă un
timp mediu aproximativ egal pentru rezolvarea Testelor de autoevaluare şi a Temelor de
control

7
LECŢIA 1 - ELEMENTE DE COMBINATORICĂ

În practică se ajunge uneori la problema de a alege, dintr-o mulţime oarecare de obiecte,


submulţimi de elemente caracterizate prin anumite proprietăţi, de a aşeza elementele uneia sau ale
mai multor submulţimi într-o anumită ordine etc. Poate apărea, de asemenea, problema determinării
numărului tuturor submulţimilor unei mulţimi, constituite după anumite reguli, sau a numărului
tuturor funcţiilor definite pe o mulţime formată din n elemente, cu valori într-o mulţime cu m
elemente etc.
Deoarece în astfel de probleme se operează cu anumite combinaţii de obiecte, ele se numesc
probleme combinatorii, iar domeniul matematicii în care se studiază astfel de probleme se numeşte
combinatorică.
Combinatorica poate fi considerată ca o parte a teoriei mulţimilor, orice problemă de
combinatorică putând fi redusă la o problemă de mulţimi finite şi aplicaţii. Această ramură a
matematicii are mare importanţă în teoria probabilităţilor, ciberneticii, logica matematică, teoria
numerelor, dar şi în diverse ramuri ale ştiinţei şi tehnicii.
În toate problemele de care ne vom ocupa în acest capitol vom lucra numai cu mulţimi
finite.

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

Ank  n  n  1 n  2  ... n  k  1 


n  n  1 ... n  k  1 n  k  n  k  1...  2  1 n!
  .
 n  k  n  k  1...  2 1  n  k !
n!
Deci, An 
k
.
 n  k !
n!
Pentru k  0 se obţine An   1 , ceea ce este adevărat, deoarece orice mulţime conţine
0
n!
mulţimea vidă, pe care am convenit s-o considerăm ordonată într-un singur mod.
n! n!
Pentru k  n se obţine: An    n!  Pn . Prin urmare, ambele formule stabilite
n
0! 1
pentru calculul numărului aranjamentelor de n elemente luate câte k, respectiv:
Ank  n  n  1 n  2 ... n  k  1 ;
n!
Ank  ,
 n  k !
sunt adevărate pentru orice k, astfel încât 0  k  n .
Aplicaţia 3.3
Fie A şi B două mulţimi finite, având k, respectiv n elemente cu k  n . Să se determine
numărul funcţiilor injective f : A  B .

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

În acest caz mulţimea B se poate înlocui cu A, obţinând f : A  A şi din acest motiv


funcţia bijectivă f : A  A se mai numeşte şi permutare a mulţimii A. Reformulând, vom spune
că numărul aplicaţiilor bijective definite pe o mulţime finită formată din n elemente, cu valori în ea
însăşi, este egal cu numărul permutărilor mulţimii respective. Această formulare reprezintă totodată
şi interpretarea egalităţii An  Pn  n! în termenii aplicaţiilor bijective definite pe o mulţime finită
n

cu n elemente, cu valori în ea însăşi.

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

Ank n  n  1 n  2 ... n  k  1


Cnk   .
Pk k!

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.

Are loc următoarea teoremă:


Teorema 4.3
Fie A şi B mulţimi ordonate având m, respectiv n elemente, cu m  n . Există o bijecţie între
mulţimea F c  A, B  a funcţiilor strict crescătoare definite pe A cu valori în B şi mulţimea
P m  B  a submulţimilor lui B, care au câte m elemente fiecare.
Demonstraţie
Definim funcţia  :F c  A, B  P m  B  , prin   f   f  A . Cum f este injectivă,
rezultă că f  A este o submulţime a lui B, cu m elemente. Evident, dacă f  f  , atunci
  f     f  , adică  este injectivă. Dacă B  B este o submulţime a lui B cu m elemente,
considerăm că B este ordonată cu ordinea indusă de cea de pe B. Însă, deoarece A şi B au acelaşi
număr de elemente, m, rezultă că există o unică funcţie strict crescătoare f : A  B . Considerăm
atunci funcţia f : A  B , astfel încât f  ai   f  ai  . Avem că f este strict crescătoare, deci
f F c  A, B   
şi mai mult,  f  B . Am arătat, astfel, că  este şi surjectivă, deci în final
rezultă că  este bijectivă.

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.

4.1 Formula combinărilor complementare


nk
Dacă 0  k  n , atunci are loc egalitatea: Cn  Cn
k
.

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
nk
submulţimilor sale cu (n  k ) elemente, adică are loc relaţia Cn  Cn
k
.

4.2 Numărul tuturor submulţimilor unei mulţimi cu n elemente


Pentru orice număr natural n  0 are loc egalitatea:
Cn0  Cn1  Cn2  ...  Cnn  2n .
Demonstraţie
Suma din membrul stâng al acestei egalităţi reprezintă numărul tuturor submulţimilor unei
mulţimi cu n elemente. Anterior am constatat că pentru o mulţime cu n  3 elemente, numărul
tuturor submulţimilor sale este C3  C3  C3  C3  2  8 .
0 1 2 3 3

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

adevărată. Rezultă atunci că P  n  este adevărată pentru orice n .

Exemplu:
1) n  0 ; 2  1  P  B0    ;
0

2) n  1 ; 2  2 ; B1  b1   ; b1 ;


1

3) n  2 ; 2  4 ; B2  b1, b2   ; b1 ; b2  ; b1, b2  ;


2

4) n  3 ; 2  8 ; B3  b1, b2 , b3   ; b1 ; b2 ; b1, b2 ; b3 ; b1, b3 ;
3

b2 , b3 ; b1, b2 , b3 .


4.3 Formula de recurenţă pentru calculul numărului
de combinări
Pentru orice k şi n, astfel încât 0  k  n , are loc egalitatea:
Cnk  Cnk11  Cnk1 .
Demonstraţie
k
Utilizând formula pentru calculul combinărilor Cn , obţinem:
Ank1  n  1 n  2 ... n  1  k  1
Cnk1   ;
Pk k!
Ak 1  n  1 n  2 ... n  1   k  1  1
Cnk11  n 1  .
Pk 1  k  1!
Mai departe rezultă:
 n  1 n  2  ... n  k   n  1 n  2 ... n  k  1
Cnk1  Cnk11   
k!  k  1!
 n  1 n  2  ... n  k  1 n  k   k   n  1 n  2 ... n  k  1
 
k!
 n  1 n  2  ... n  k  1 n  k  k 
 
k!
n  n  1 n  2  ... n  k  1 Ank
   Cnk ,
k! Pk
adică are loc relaţia din enunţ.

16
4.4 Triunghiul lui Pascal
Cu ajutorul formulei de recurenţă pentru calculul numărului de combinări putem calcula
Cnk , dacă se cunosc Cnk1 şi Cnk11 . 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

5. Binomul lui Newton şi aplicaţii

5.1 Binomul lui Newton


Fie a şi b . Se cunosc sau se stabilesc uşor formulele:

 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 n  Cn0a n  Cn1a n 1b  ...  Cnma n mbm  ...  Cnnbn .


Demonstraţie
Vom aplica metoda inducţiei matematice.
Notăm cu P  n  formula binomului lui Newton.
1. Verificare. Pentru n  1 , P 1 este adevărată, deoarece

 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:

 a  b k  Ck0a k  Ck1a k 1b  ...  Ckma k mbm  ...  Ckk bk .


Să arătăm că şi P  k  1 este adevărată:

 a  b k 1   a  b k   a  b    Ck0a k  Ck1 a k 1b  ...  Ckma k  mb m  ...  Ckk b k   a  b  


 Ck0a k 1  Ck1 a k b  ...  Ckm 1a k  mb m 1  ...  Ckk ab k  Ck0a k b  ...  Ckma k  mb m 1  ... 
...  Ckk 1ab k  Ckk b k 1  Ck0a k 1   Ck0  Ck1  a k b  ...   Ckm  Ckm 1  a k  mb m 1  ... 
...   Ckk 1  Ckk  ab k  Ckk b k 1
Cum, însă:

Ck0  1  Ck01 ; Ck0  Ck1  Ck1 1,..., Ckm  Ckm1  Ckm11,..., Ckk 1  Ckk  Ckk1 ,

Ckk  1  Ckk11 , rezultă:

 a  b k 1  Ck01a k 1  Ck1 1a k b  ...  Ckm11a k mbm1  ...  Ckk1abk  Ckk11bk 1 ,


deci P  k  1 este adevărată. Rezultă, deci, conform metodei inducţiei matematice, că P  n  este
adevărată pentru orice n .
Proprietăţi legate de binomul lui Newton
1. În dezvoltarea  a  b n sunt n  1 termeni, iar coeficienţii dezvoltării sunt
Cn0 , Cn1 ,..., Cnn , în număr de n  1. Aceştia se numesc coeficienţi binomiali şi se regăsesc pe linia n
a triunghiului lui Pascal.
nm
2. Deoarece Cn  Cn
m
(formula combinărilor complementare), rezultă că termenii din
dezvoltare egal depărtaţi de termenii extremi au coeficienţi binomiali egali.
3. În formula binomului lui Newton exponenţii puterilor lui a descresc de la n la 0, în timp
ce cei ai lui b cresc de la 0 la n. În orice termen suma exponenţilor puterilor lui a şi b este egală cu
exponentul puterii binomului, deci cu n.
4. Coeficienţii binomiali mai întâi cresc şi apoi descresc. Dacă exponentul n este par,
n  2m , atunci coeficientul binomial al termenului din mijloc, respectiv C2mm este cel mai mare,
18
iar dacă n este impar, n  2m  1, atunci coeficienţii binomiali ai celor doi termeni din mijlocul
m 1
dezvoltării sunt egali între ei şi sunt cei mai mari: C2m 1  C2m 1 .
m

k nk 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:

Ank 1 n  n  1 n  2 ... n  k  1 n  k  n  k k


Cnk 1     Cn .
Pk 1 1  2  ...  k   k  1 k 1
Mai departe rezultă
n  k k nk k b
Tk  2  Cnk 1a n  k 1bk 1   Cn a b  .
k 1 a

nk 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)

Cnk  Cnk11  Cnk1 (2)

Cn0  Cn1  ...  Cnn 1  Cnn  2n . (3)

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:

Cn0  Cn2  Cn4  ...  Cn1  Cn3  Cn5  ...  2n 1 , (5)


adică suma coeficienţilor binomiali ai termenilor de rang par este egală cu suma coeficienţilor
binomiali ai termenilor de rang impar.

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

prin metoda inducţiei matematice, după k.


Fie P  k  afirmaţia: „Numărul funcţiilor definite pe o mulţime cu k elemente, cu valori
k
într-o mulţime cu n elemente, este n ”.
1) P 1 este adevărată, deoarece pe mulţimea B1  b1 se pot defini n  n funcţii cu
1

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

Ank  n  n  1 n  2 ... n  k  1 .


Prin aplicaţia 3.3 am stabilit că numărul aranjamentelor (fără repetiţie) de n elemente luate
câte k este egal cu numărul funcţiilor injective definite pe o mulţime formată din n elemente cu
valori într-o mulţime de k elemente.
În continuare vom particulariza rezultatul formulat şi demonstrat în teorema 6.1.2, şi anume:
vom analiza ce devine această teoremă în cazul aranjamentelor fără repetiţie de n elemente luate
câte k.
Notăm cu Inj N k , A mulţimea funcţiilor injective definite pe Nk  1,2,..., k cu valori
în mulţimea A care n elemente  k  n . Evident, Inj Nk , A F  N k , A , deoarece
F  Nk , A este mulţimea tuturor funcţiilor definite pe N k cu valori în A.
Să notăm cu A k  A mulţimea aranjamentelor (fără repetiţie) de cele n elemente ale
mulţimii A, luate câte k.

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

mi1 ori mi2 ori mik ori

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  C61010 1  C15
10
 C15
5
   3003 .
P5 120
Aplicaţii

I Numărul termenilor în scrierea canonică a unui polinom.


I. 1 Un polinom omogen de gradul k în n nedeterminate are cel mult
Cnk  Cnk k 1  Cnnk1 1 termeni.
Demonstraţie
Fie P  X1, X 2 ,..., X n  un polinom omogen de gradul k, cu coeficienţi într-un corp K.
Condensat, el se va scrie astfel

P  X1, X 2 ,..., X n    ak1k2 ...kn  X1k1  X 2k2 ... X nkn


k1  k2 ... kn  n
şi numărul termenilor săi este maxim dacă toţi coeficienţii săi ak k ...k sunt nenuli. Prin urmare,
1 2 n
numărul maxim de termeni al polinomului este egal cu numărul combinărilor cu repetiţie de n
k
elemente X1, X 2 ,..., X n , luate câte k, deci egal cu Cn . Dacă m este numărul termenilor
polinomului considerat, avem că
m  Cnk  Cnk k 1  Cnnk1 1 .
I. 2 Un polinom de gradul k în n nedeterminate are cel mult Ck  n  Ck  n termeni.
k n

Demonstraţie
Fie polinomul de gradul k în n nedeterminate:

P  X1, X 2 ,..., X n    ak1k2 ...kn  X1k1  X 2k2 ... X nkn


0 k1  k2 ... kn  k
şi polinomul omogen de gradul k în n  1 nedeterminate:
n
k   ki
Q  X1, X 2 ,..., X n , X    ak1k2 ...kn  X1k1  X 2k2 ... X nkn  X i 1
.
0 k1  k2 ... kn  k
Cele două polinoame P şi Q au acelaşi număr de termeni. Conform rezultatului demonstrat
la punctul I. 1 deducem că numărul de termeni ai polinomului P este mai mic sau egal cu numărul
combinărilor cu repetiţie de n  1 elemente luate câte k, adică
Cnk1  Cnk1 k 1  Cnk k  Cnn k .
II Formula unui produs de binoame. Binomul lui Newton. Puterea m a unei sume din n
termeni.
II. 1 Fie produsul a n factori de forma:
n

 a  bi    a  b1  a  b2 ... a  bn  .
i 1

27
nk
Î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

22
– coeficientul lui a  a (deci k  2 ) este: b1b2 (suma produselor de k  2 factori).
0

Presupunem afirmaţia adevărată pentru produsul a n  1 factori şi o demonstrăm şi pentru


produsul a n factori.
Fie, deci,
n 1

 a  bi   an1  Pa1 n2  P2an3  ...  Pk 1ank  ...  Pn1 ,


i 1
unde Pk 1 este suma tuturor produselor posibile de k  1 factori dintre b1, b2 ,..., bn 1 . Înmulţim în
ambii membrii cu a  bn şi obţinem:
n

 a  bi    an1  Pa1 n2  P2an3  ...  Pk 1ank  ...  Pn1   a  bn  


i 1

 a n   P1  bn  a n 1   P2  Pb
1 na
n2
 ...   Pk  Pk 1  bn  a n  k  ...  Pn 1bn .
În expresia  Pk  Pk 1  bn  (coeficientul lui a
nk
) 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 .
nk
Într-adevăr, numărul termenilor asemenea care conţin pe a  b este dat de numărul
k

permutărilor cu repetiţie de n  k litere egale cu a şi k litere egale cu b, deci cu numărul


permutărilor cu repetiţie de tip n  k, k  şi care este egal cu Cnk . Deci,
 a  b n  an  Cn1an1b  ...  Cnk ank bk  ...  bn .
28
II. 3 Puterea a m-a a sumei x1  x2  ...  xn are dezvoltarea următoare:

 x1  x2  ...  xn m   P  m1, m2 ,..., mn  x1m1 x2m2 ...xnmn ,


m1  m2 ... mn  m

unde P  m1, m2 ,..., mn  


 m1  m2  ...  mn ! .
m1 !m2 !...mn
Demonstraţie
Pentru efectuarea dezvoltării  x1  x2  ...  xn 
m
trebuie să înmulţim m factori egali între
ei:
 x1  x2  ...  xn ;
 x  x  ...  x ;
 1 2 n
m linii 
..........................
 x1  x2  ...  xn .
Astfel, se înmulţeşte fiecare termen din linia 1 cu fiecare termen din linia a doua, apoi
fiecare termen al sumei obţinute din produsul primelor două linii cu fiecare termen din linia a treia
şi se continuă tot aşa până se termină cele m linii. În final se adună toate produsele obţinute.
m
Numărul termenilor produsului obţinut în final este egal cu numărul An al aranjamentelor cu
m
repetiţie de n elemente luate câte m, deci cu n . În etapa următoare se grupează termenii
asemenea. Este clar că numărul termenilor asemenea cu x1m1 x2m2 ...xnmn , unde
m1  m2  ...  mn  m este egal tocmai cu numărul permutărilor cu repetiţie de tip
 m1, m2 ,..., mn  . Astfel, coeficientul termenului x1 1 x2 2 ...xn n unde m1  m2  ...  mn  m
m m m

este egal, în suma finală, cu P  m1, m2 ,..., mn  .

Exemplu
Conform formulei stabilite anterior, avem:

 x  y  z 3  P  3,0,0   x3  P  0,3,0   y 3  P  0,0,3 z 3 


P  2,1,0  x 2 y  P  2,0,1 x 2 z  P  0,2,1 y 2 z  P 1,2,0  xy 2 
3!
 P 1,0,2  xz 2  P  0,1,2  yz 2  P 1,1,1 xyz  x3 
3! 0! 0!
3! 3! 3! 3!
 y3  z3  x2 y  x2 z 
0! 3! 0! 0! 0! 3! 2! 1! 0! 2! 0! 1!
3! 3! 3! 3! 3!
 y2 z  xy 2  xz 2  yz 2  xyz 
0! 2! 1! 1! 2! 0! 1! 0! 2! 0! 1! 2! 1! 1! 1!

 x3  y 3  z 3  3 x 2 y  x 2 z  y 2 z  xy 2  xz 2  yz 2  6 xyz 

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:

a) Cn  2Cn  3Cn  ...  nCn ;


1 2 3 n

Cn0 Cn1 Cn2 Cnn


b)    ...  ;
1 2 3 n 1
c) Cn  Cn  Cn  ...   1 Cn .
0 1 2 m m

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:

1) Cn  2Cn  3Cn  ...   1  n  1 Cnn ;


0 1 2 n

2) 3Cn  7Cn  11Cn  ...   4n  1 Cn ;


1 2 3 n

Cn0 Cn1 Cn2   n Cn


n
3)    ...  1 ;
1 2 3 n 1

 0   Cn1   Cn2   ...   1  Cnn  .


2 2 2 n 2
4) Cn

3. Permutări cu repetiţie, aranjamente cu repetiţie, combinări cu repetiţie

1) Să se determine numărul funcţiilor f : 1,2,3,4,5  1,2,3,4,5 cu proprietatea că


f 1  4 ;
2) 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 ;
3) Fie mulţimea A  0,1,2,3,4,5,6,7,8,9 . Să se determine probabilitatea ca, alegând o
submulţime de forma a, b , unde a, b  A să aibă loc egalitatea a  b  8 .

4) 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 4.

31
TEME DE CONTROL

TEMĂ DE CONTROL Nr. 1

Multimi finite, ordonate. Aplicaţii injective, bijective, permutări, aranjamente,


combinări.

1. Să se demonstreze relaţiile:

 0   Cn1   ...   Cnn  ;


2 2 2
1) C2n  Cn
n

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:

1) Cn  2Cn  3Cn  ...   n  1 Cn ;


0 1 2 n

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

Permutări cu repetiţie, aranjamente cu repetiţie, combinări cu repetiţie

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

2. Să se genereze toate sistemele de numere naturale  k1, k2 ,..., kn  , cu proprietatea


k1  k2  ...  kn  k , ştiind că n  3 şi k  4 ;
3. Să se determine numărul funcţiilor f : 1,2,3,4,5  1,2,3,4,5 cu proprietatea că
f 1  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 ;

6. Fie mulţimea A  0,1,2,3,4,5,6,7,8,9 . Să se determine numărul submulţimilor


mulţimii A care au 5 elemente, dintre care exact două sunt numere pare.

7. Să se determine numărul funcţiilor strict descrescătoare f : 1,2,3,4  1,2,3,4,5,6 ,


cu proprietatea f  4   2 ;

8. Câte funcţii f : 1,2,3,...,10  0,1 cu proprietatea


f 1  f  2  f  3  f  4  f  5  f  6   f  7   f 8  f 9   f 10   3 se
pot construi ?

9. Să se calculeze probabilitatea ca, alegând un număr din multimea numerelor naturale


formate din trei cifre, acesta să aibă toate cifrele pare.

10. Fie mulţimea A  0,1,2,3,4,5,6,7,8,9 . Să se determine probabilitatea ca, alegând o


submulţime de forma a, b , unde a, b  A să aibă loc egalitatea a  b  8 .

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.

BIBLIOGRAFIE RECOMANDATĂ PENTRU UNITATEA DE ÎNVĂŢARE NR. 1:

1. Tomescu, I. – Introducere în combinatorică, Editura Tehnică, Bucureşti, 1972;


2. Ion, D. I., Niţă, C., Năstăsescu, C. – Complemente de algebră, Editura Ştiinţifică
şi Enciclopedică, Bucureşti, 1984;
3. Năstăsescu, C., Niţă, C., Brandiburu, M., Joiţa, D. – Exerciţii şi probleme de
algebră, Editura Didactică şi Pedagogică, Bucureşti, 1982.

34
UNITATEA DE ÎNVĂŢARE NR. 2 - ELEMENTE DE TEORIA GRAFURILOR. STUDIUL
GRAFURILOR CU AJUTORUL MATRICELOR BOOLEENE ASOCIATE
Obiective urmărite:

 Însuşirea unor noţiuni fundamentale din domeniul teoriei grafurilor.


 Formarea deprinderilor de modelare matematică a unor probleme de natură
informatică, tehnică sau economică, cu utilizarea cunoştinţelor însuşite.
 Formarea şi dezvoltarea bazei matematice a studenţilor pentru disciplinele
fundamentale şi de specialitate din anii superiori;
 Formarea şi dezvoltarea aptitudinilor şi deprinderilor de analiză logică, formulare
corectă şi argumentare fundamentată, în rezolvarea problemelor tehnico-economice
şi de specialitate;

Rezumat:

În această unitate de învăţare sunt prezentate, pe parcursul a trei lecţii, următoarele:


– definiţii, terminologie, notaţii, concepte fundamentale în teoria grafurilor;
– algoritmi şi metode de studiu în teoria grafurilor cu ajutorul matricelor booleene
asociate.
După parcurgerea acestei unităţi de învăţare studenţii trebuie să-şi însuşească următoarele:
– noţiunea de graf în reprezentare analitică, sagitală sau matriceală;
– noţiuni legate de orientare: drum, subdrum, circuit, graf parţial, subgraf, graf tare conex,
componentă tare conexă, succesori şi predecesori, arbori;
– noţiuni legate de neorientare: muchie, lanţ, ciclu, graf conex, componentă conexă;
– matrice booleană, matrice de adiacenţă, matricea drumurilor sau matricea conexă
terminală asociate unui graf;
– drum hamiltonian în grafuri fără circuite şi în grafuri cu circuite;
– algoritmi de determinare a drumului hamiltonian, graf condensat;
– operaţii cu grafuri şi cu matrice booleene asociate grafurilor: reuniunea, intersecţia,
produsul de compoziţie, graful reciproc;
– algoritmi pentru determinarea numărului şi lungimii circuitelor şi a arborilor într-un
graf.

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:

Timpul mediu necesar însuşirii noţiunilor teoretice şi algoritmilor prezentaţi în


unitatea de învăţare nr.2, precum şi formării deprinderilor de calcul şi utilizării algoritmilor
pentru rezolvarea claselor de probleme specifice acestei părţi a cursului este estimat la
aproximativ 2-3 ore pentru fiecare lecţie. Se adaugă un timp mediu aproximativ egal pentru
rezolvarea Testelor de autoevaluare şi a Temei de control.

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

xA

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  .

1.2 Definirea noţiunilor legate de orientare


Un graf G   X ,   poate fi dat şi în reprezentare geometrică sau sagitală. Aceasta se
obţine în modul descris în continuare.
Se reprezintă fiecare element al mulţimii X printr-un punct ales arbitrar în plan, cu
respectarea condiţiei ca la elemente diferite ale lui X să corespundă puncte diferite în plan. Mai
departe, dacă x  X şi y   x  , atunci punctul care-l reprezintă pe x se leagă de punctul care-l
reprezintă pe y printr-un arc orientat (săgeată) de la x la y. Vârful x se numeşte originea sau
extremitatea iniţială a arcului  x, y  , iar vârful y se numeşte extremitatea sa finală sau terminală.

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

De asemenea, dacă se dă aplicaţia  , se poate determina mulţimea U a arcelor grafului.


Reciproc, dacă se dă reprezentarea sagitală a unui graf se poate deduce reprezentarea
analitică a sa, adică aplicaţia  : X P  X  şi evident, mulţimea X.

Exemplul 1.2.2
Fie graful G având reprezentarea sagitală în figura 1.2.2.

37
Fig. 1.2.2

Mulţimea vârfurilor: X   x1, x2 , x3 , x4 , x5 .


Mulţimea arcelor:
U   x1, x1  ,  x1, x2  ,  x1, x3  ,  x2 , x1  ,  x3 , x2  ,  x3 , x4  ,  x4 , x3  ,  x2 , x4  ,  x5 , x5 
Aplicaţia  : X P  X  este definită astfel:   x1    x1, x2 , x3 ,   x2    x1, x4 ,
  x3    x2 , x4 ,   x4    x3 ,   x5    x5 .
Două vârfuri distincte x şi y se numesc adiacente dacă există un arc care le uneşte:
 x, y  U . Două arce sunt adiacente dacă originea sau extremitatea unuia din ele coincide cu
originea sau extremitatea celuilalt. Un arc  xi , x j  se spune că este incident cu vârful xi spre
exterior şi este incident cu vârful x j spre interior.
Într-un graf G   X ,U  , se numeşte drum un şir de arce  u1, u2 ,..., uk  astfel încât
extremitatea terminală a unui arc ui coincide cu extremitatea iniţială a arcului următor, ui 1 . Un
drum din graful G se numeşte simplu dacă parcurge o singură dată fiecare arc al său, în caz contrar
numindu-se drum compus. Un drum se poate defini şi ca o succesiune de vârfuri, xi1 , xi2 ,..., xik ,  
astfel încât xi
j 1  
 xi j ,   j 1,2,..., k  1 , ceea ce este echivalent cu xi j , xi j 1 U ,  
  j 1,2,..., k  1 . Un drum de la x la x se numeşte circuit. Între două vârfuri oarecare ale
grafului G pot exista mai multe drumuri sau nici unul.
Un drum care trece o singură dată prin fiecare vârf al său se numeşte drum elementar, iar
în caz contrar se numeşte neelementar. Un drum elementar este simplu, dar un drum simplu poate fi
neelementar (de exemplu, un drum simplu care conţine un circuit).
Un circuit se numeşte simplu dacă parcurge o singură dată fiecare arc al său şi este
elementar dacă trece o singură dată prin fiecare vârf al său. O buclă se mai poate defini şi ca un caz
particular al unui circuit format dintr-un arc.
Lungimea unui drum este dată de numărul de arce din care este compus drumul; nu trebuie să
confundăm această noţiune cu lungimea drumului în sensul curent al acestei noţiuni (măsurabilă în
m, de exemplu).
Un drum elementar care trece prin toate vârfurile grafului G se numeşte drum hamiltonian.

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 .

  şi presupunem prin absurd că intersecţia lor este nevidă. Rezultă,


2. Fie C  xi   C x j

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 .

Prin urmare există un circuit ce trece prin xi şi x j şi xk , de unde rezultă că xi  C x j şi  


   
x j  C  xi  , deci C  xi   C x j , contradicţie cu ipoteza că C  xi   C x j . Rezultă că
presupunerea făcută este falsă, deci rămâne că C  xi   
C xj   .
3. Este evident că   xi  X , avem C  xi   X , deci C  xi   X .
xi X

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

Mulţimea vârfurilor care nu au predecesori din acest subgraf este X 2   x2 , x3 , x7  şi va


forma nivelul al doilea al grafului G. Subgraful obţinut prin suprimarea vârfurilor din mulţimea X 2
şi a tuturor arcelor care au o extremitate în aceste vârfuri este prezentată în fig. 1.5.3.

Fig. 1.5.3

Mulţimea vârfurilor care nu au predecesori din acest subgraf este X 3   x4 , x5 , x8 şi va


forma al treilea nivel.
Ultimul nivel va fi format numai din vârful x9 , singurul care nu are nici un succesor.
Graful iniţial se poate redesena, punând pe o aceeaşi dreaptă verticală toate vârfurile situate
pe acelaşi nivel.

45
Fig. 1.5.4

Mai observăm că nivelele formează o partiţie a lui X.


La algoritmul de împărţire a unui graf finit fără circuite se mai poate adăuga o condiţie. De
exemplu, se poate cere ca toţi succesorii unui vârf x să se afle în nivelul imediat următor (sau
implicit, toţi predecesorii lui x să se afle pe nivelul imediat anterior). Fără o astfel de condiţie este
posibil să se poată obţine împărţiri diferite pe nivele ale aceluiaşi graf, cu structuri diferite ale
mulţimilor vârfurilor pe nivelele respective.
În exemplul anterior, în absenţa ultimei condiţii, vârful x3 de pe nivelul 2 se poate plasa pe
nivelul 3 sau pe nivelul 4, obţinându-se reprezentări diferite de cea din figura 1.5.4, cu structuri
diferite ale mulţimilor vârfurilor de pe nivelele 2, respectiv 3 sau 4.

46
LECŢIA 4 - MATRICI BOOLEENE ASOCIATE GRAFURILOR

2.1 Matricea de adiacenţă asociată unui graf.

Definiţia 2.1.1
O matrice AM 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)

Rezultă atunci că gradul vârfului x este

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 .
 

d) Un vârf x  X se numeşte punct izolat dacă g  x   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 ,
 

trecute pe o linie, respectiv coloană suplimentară a matricei booleene asociate A, constatăm că

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

(o valoare) c  u   cij numit capacitatea arcului  xi , x j  . O reţea de transport se notează prin


R  X ,U , C, x0 , xn  .
Alături de matricea booleană A (sau matricea conexă), unui graf i se mai poate asocia şi o
altă matrice cu ajutorul căreia se pot studia legăturile dintre vârfurile grafului.

2.2 Matricea drumurilor asociată unui graf


Definiţia 2.1.6
Se numeşte matricea drumurilor (matricea conexă terminală) asociată unui graf
 
G   X ,   , matricea T  tij , i, j  1,2,..., n , definită prin:


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  .

2.3 Algoritmi pentru determinarea matricei drumurilor şi a unor drumuri speciale în


grafuri

Algoritmul lui Y. C. Chen


1. Fie a1i1 , a1i2 ,..., a1im elementele diferite de zero de pe linia 1 a matricei A. Adunăm
boolean liniile i1, i2 ,..., im la linia 1.

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

şi reprezintă suma elementelor din linia lui xi a matricei conexe terminale T.


Calculăm puterile de atingere ale tuturor vârfurilor grafului G însumând elementele nenule
de pe liniile corespunzătoare din matricea T şi permutăm liniile lui T astfel încât puterile de atingere
ale vârfurilor sale să fie în ordine descrescătoare.
Astfel, dacă p xk    p  xk   p  xk   ...  p  xk  , atunci ordinea vârfurilor devine:
1 2 3 n

xk1 , xk2 , xk3 ,..., xkn .


Fie  permutarea care corespunde acestei ordini a vârfurilor grafului:

 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, xj  , cu
j  i , adică linia vârfului xj 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 xj la xi , cu j  i .
 conţine arcul
Însă, conform presupunerii făcute, succesiunea arcelor din d H  xi, xj  , 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
43
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

2.2 a) Adunarea booleană şi reuniunea grafurilor

Pe mulţimea 0,1 definim următoarea operaţie:

a  b  max a, b (2.2.1)


Tabela acestei legi de compoziţie este următoarea:
 0 1
0 0 1
1 1 1
Este evident că această operaţie, numită adunarea booleană, este asociativă şi comutativă.
Cu ajutorul ei putem defini operaţia de adunare booleană a matricelor booleene de acelaşi ordin.
Definiţia 2.2.1
  şi
Fie A  aij  
B  bij două matrice booleene de acelaşi ordin, n. Atunci matricea
 
C  cij , definită prin:

cij  aij  bij ,   i, j  1,2,.., n , (2.2.2)

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.

b) Înmulţirea booleană şi produsul de compoziţie al grafurilor

Pe aceeaşi mulţime 0,1 definim şi operaţia:

a  b  min a, b . (2.2.4)


Tabela acestei legi de compoziţie este următoarea:
 0 1
0 0 0
1 0 1
Operaţia se numeşte înmulţirea booleană şi pe mulţimea 0,1 coincide cu înmulţirea
obişnuită. Înmulţirea booleană este distributivă faţă de adunarea booleană. Cu ajutorul operaţiei de
înmulţire booleană vom defini produsul boolean al matricelor booleene.
Dacă a1, a2 ,..., an 0,1 vom nota suma lor booleană astfel:
n 
a1  a2  ...  an   ai   ai , (2.2.5)
i 1 i
dacă n este subînţeles.
Definiţia 2.2.4
 
Fie A  aij  
şi B  bij , i, j  1,2,..., n , două matrice booleene. Atunci matricea

 
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  21 , dacă

58
 x   2  y  ,   x  X , (2.2.8)
y1  x 

relaţie care se mai scrie şi astfel:

 21  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  21  şi
   32  1 . Pentru x  X arbitrar, avem:
  x    3   21    x   3  y  
y  2 1  x 

 
 3  y    3  y     3 2  z  
y 2  z 

z1  x   y 2  z 

 z1  x 
z1  x 

  3 2   1  x      3 2  1   x     x 


Interpretarea egalităţilor este următoarea:  x, y  este arc în G2G1 dacă există z  X astfel
încât  x, z  este arc în G1 , iar  z, y  este arc în G2 .
Dacă vom considera G1  G2  G , atunci ţinând seama de rezultatul exprimat şi
demonstrat în teorema 2.2.7 rezultă că pentru   k 
se poate construi graful

G   X ,   , unde G   X ,  . Pentru aceasta vom lua:


k k

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   21 , (ca în definiţia 2.2.5). Atunci avem:

 G2G1 1  G11G21 . (2.2.12)

Demonstraţie
Vom arăta că  21 
1
 z    1121   z  , punând în evidenţă dubla incluziune.
1
Fie z  X arbitrar şi x0   21   z  . Conform definiţiei grafului reciproc (definiţia
2.2.6), aceasta este echivalent cu:
z   21  x0   2  y  .
y1  x0 

Rezultă că   y0 1  x0  astfel încât z 2  y0  , ceea ce este echivalent cu faptul că


  y0  X astfel încât x0 11  y0  , y0 21  z  .
Aceasta înseamnă că
x0    
11  y   11  21  z   11 21  z 
y21  z
Rezultă că  21 
1
 z    1121   z  .
Similar se arată şi incluziunea inversă, teorema fiind complet demonstrată.
Pentru graful reciproc de ordinul k vom lua:

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 ;

3)   astfel încât  xi , x  U1 şi x , x j U 2 ; 


4)   astfel încât ai  1 şi b j  1;

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:

aijk  1  x j k  xi  (2.2.17)

În acelaşi timp afirmaţia este echivalentă cu: aij  1  există în G drumuri de lungime k
k

(formate din k arce) de la vârful xi la vârful x j .


Rezultatul formulat şi demonstrat în teorema următoare permite stabilirea unei legături între
produsul boolean şi produsul obişnuit a două matrice booleene.
Teorema 2.2.11
Fie A şi B două matrice booleene de aceeaşi dimensiune şi A  B , respectiv AB produsul
boolean şi produsul obişnuit al celor două matrice. Atunci matricea A  B se obţine din AB prin
înlocuirea în AB a tuturor elementelor nenule cu 1.

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:

 aik bkj  0   max  aik bkj   0 ;



1.
k
k

2.  aik bkj  0   aik  0 sau bkj  0,  k  1,2,..., n  .


k
Însă, oricare din cele două sume este nulă dacă şi numai dacă toţi termenii săi sunt nuli şi cu
aceasta demonstraţia se încheie. Pe baza acestei teoreme obţinem informaţii despre numărul de
drumuri de lungime k între două vârfuri xi şi x j (şi nu doar existenţa unor astfel de drumuri),
precum şi despre numărul şi lungimea circuitelor distincte care conţin un vârf oarecare xi .
Din teorema 2.2.11 mai deducem că dacă A  A  A... A este puterea k a matricei A
k

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  aij3 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

numai dacă există k  


astfel încât A  On, n  A  On, n .
k k

Demonstraţie
„  ” Fie G   X ,   un graf cu n vârfuri şi fără circuite şi A matricea booleană asociată
grafului G. Cum card X  n , rezultă că în G nu există drumuri de lungime mai mare decât n  1 ,
deci A  On, n , unde n este numărul vârfurilor grafului.
n

„  ” Presupunem că   k astfel încât A  On, n . Presupunem prin absurd că


k

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

distincte formate din k arce care conţin vârful xi .

Exemplul 2.2.13
Fie graful G   X ,   dat în reprezentare sagitală în figura următoare:

63
Fig. 2.2.1

Matricea booleană asociată acestui graf este:


x1 x2 x3 x4 x5
0 0 0 1 1 x1
1 0 0 0 1 x2
A
1 1 0 0 0 x3
1 1 1 0 0 x4
0 0 1 0 1 x5
2 3 4
Matricele (produs obişnuit) A , A şi A sunt:
x1 x2 x3 x4 x5 x1 x2 x3 x4 x5
1 1 2 0 1 x1 3 2 1 1 3 x1
0 0 1 1 2 x2 2 2 3 0 2 x2
A2  ; A3  ;
1 0 0 1 2 x3 1 1 3 1 3 x3
2 1 0 1 2 x4 2 1 3 2 5 x4
1 1 1 0 1 x5 2 1 1 1 3 x5
x1 x2 x3 x4 x5
4 2 4 3 8 x1
5 3 2 2 6 x2
A4  .
5 4 4 1 5 x3
6 5 7 2 8 x4
3 2 4 2 9 x5
2 3 4
Dacă în A , A şi A vom înlocui elementele nenule cu 1 vom obţine, respectiv matricele
A2 , A3 şi A4 .
Analizând aceste matrice obţinem informaţii referitoare la numărul de drumuri de lungime k
 k  2,3,4 între două vârfuri xi şi x j ale grafului, precum şi despre numărul şi lungimea
circuitelor distincte care conţin un vârf oarecare xi . Astfel:

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

orice vârf x j , cu excepţia vârfurilor x2 şi x3 ;

aij   0 ,   i, j  1,2,...,5  există drumuri de lungime 4 de la oricare vârf xi la


4

oricare vârf x j , (în particular rezultă că graful este tare conex);


3 
a11  3  există trei drumuri distincte, formate din câte 3 arce fiecare de la x1 la x1 ,
deci 3 circuite care conţin vârful x1 . Acestea sunt:  x1, x4 , x2 , x1  ;  x1, x4 , x3 , x1  ;
 x1, x5 , x3 , x1  ;
 
4
a11  1  există 4 drumuri de lungime 4 de la x1 la x1 , acestea fiind:
 x1, x4 , x1, x4 , x1  ;  x1, x4 , x3 , x2 , x1  ;  x1, x5 , x5 , x3 , x1  ;  x1, x5 , x3 , x2 , x1  .
2.4 Matricea booleană a închiderii tranzitive
Fie G   X ,   un graf finit, cu X   x1, x2 ,..., xn  şi A matricea booleană asociată lui

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)

Matricea  este matricea booleană care corespunde grafului  X , 0



  , se obţine
înlocuind în A toate elementele nule de pe diagonala principală cu 1 şi corespunde grafului obţinut
din G prin adăugarea buclelor la toate vârfurile la care acestea nu există. În graful  X , 1  , unde
1  0   , mulţimea 1  x  este mulţimea formată din vârful x şi toţi succesorii săi de ordinul
1. Pătratul boolean al matricei  este:

Â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

corespunde grafului  X , 2  , unde 2       şi


0 2

 
2  x   0    2  x    x   x  2  x  ,   x  X . Deci, în graful

G2   X , 2  , corespunzător matricei Â2 , fiecărui element x  X îi corespunde o mulţime


formată din el însuşi şi din toţi succesorii săi de ordinul 1 şi de ordinul 2.
Tot astfel, pas cu pas, se deduce că matricea:

Aˆ r  I  A  A2  ...  Ar , (2.4.4)

corespunde grafului Gr   X , r  , unde r        ...   şi în care fiecărui element


0 2 r

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)

Astfel, se deduce că ridicând matricea  la puteri booleene succesive, la un moment dat


ˆ k 1  Aˆ k . La acest pas al procesului s-a obţinut matricea închiderii tranzitive a
vom avea A
ˆk .
grafului G, aceasta fiind A
Exemplul 2.4.1
Fie graful G   X ,U  , dat în reprezentarea sagitală în figura 2.4.1.

Fig. 2.4.1

Matricea booleană asociată acestui graf este:

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

Fie graful G   X ,U  a cărui matrice booleană asociată este:


0 1 1 0
 
0 0 1 1
A ;
0 0 0 1
 
0 0 0 0
1) Să se construiască o reprezentare sagitală a grafului G;
2) Să se determine matricea drumurilor asociată grafului G cu algoritmul lui Chen;
3) Să se cerceteze existenţa circuitelor în graful G;
4) Să se determine, cu ajutorul matricei drumurilor faptul că în graful G există un drum
hamiltonian şi să se precizeze vârfurile sale.

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

Într-o hală a unei întreprinderi industriale procesul de producţie se desfăşoară la 6 puncte de


lucru legate printr-un sistem de benzi rulante. Fiecare punct de lucru execută câte o anumită
operaţie. Întreprinderea asimilează la un moment dat un produs nou care trebuie să treacă prin
toate cele 6 operaţii, deci pe la toate punctele de lucru. Matricea booleană asociată grafului
sistemului de transport cu benzi rulante dintre cele 6 puncte de lucru este:

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

Se dă graful G   X , A prin mulţimea vârfurilor sale, X   x1, x2 , x3 , x4 , x5 şi prin


0 1 0 0 0
0 0 1 0 0 

matricea booleană asociată : A   0 0 0 0 0
 
0 1 1 0 1
1 0 1 0 0 

1) Să se construiască reprezentarea sagitală a grafului G şi să se calculeze gradul de emisie şi
de recepţie al fiecărui vârf ;
2) Să se prezinte algoritmul lui Chen pentru determinarea matricei conexe terminale T asociate
unui graf G şi să se utilizeze acest algoritm în cazul grafului dat. Precizaţi cu ajutorul matricei
T determinate la punctul b) dacă graful G are circuite.
3) Să se calculeze puterea de atingere a fiecărui vârf al grafului G . Să se stabilească dacă în G
există un drum hamiltonian şi în caz afirmativ să se precizeze succesiunea vârfurilor sale.

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

Se dă graful G   X , A prin mulţimea vârfurilor sale, X   x1, x2 , x3 , x4 , x5 şi prin


0 1 0 0 0
0 0 1 0 0 

matricea booleană asociată : A   0 0 0 0 0
 
0 1 1 0 1
1 0 1 0 0 

1) Să se construiască reprezentarea sagitală a grafului G şi să se calculeze gradul de emisie şi
de recepţie al fiecărui vârf ;
2) Să se prezinte algoritmul lui Chen pentru determinarea matricei drumurilor T asociate unui
graf G şi să se utilizeze acest algoritm în cazul grafului dat. Precizaţi cu ajutorul matricei T
determinate la punctul b) dacă graful G are circuite.
3) Să se calculeze puterea de atingere a fiecărui vârf al grafului G . Să se stabilească dacă în
G există un drum hamiltonian şi în caz afirmativ să se precizeze succesiunea vârfurilor sale.

BIBLIOGRAFIE RECOMANDATĂ PENTRU UNITATEA DE ÎNVĂŢARE NR. 2

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

GRAFURI CU ARCE VALORIZATE. ALGORITMI DE OPTIMIZARE

Obiective urmărite:

 Însuşirea unor noŃiuni fundamentale din domeniul teoriei grafurilor.


 Formarea deprinderilor de modelare matematică a unor probleme de natură
informatică, tehnică sau economică, cu utilizarea cunoştinŃelor însuşite.
 Formarea şi dezvoltarea bazei matematice a studenŃilor pentru disciplinele
fundamentale şi de specialitate din anii superiori;
 Formarea şi dezvoltarea aptitudinilor şi deprinderilor de analiză logică, formulare
corectă şi argumentare fundamentată, în rezolvarea problemelor tehnico-economice
şi de specialitate;

Rezumat:

În această unitate de învăŃare sunt prezentate, pe parcursul a patru lecŃii, următoarele:


– noŃiunea de graf cu arce valorizate;
– algoritmi pentru determinarea drumului de lungime minimă între două vârfuri ale
unui graf;
– algoritmii lui Ford şi Bellman-Kalaba pentru determinarea drumului de valoare
minimă între două vârfuri oarecare ale unui graf;
– algoritmii lui Ford şi Bellman-Kalaba pentru determinarea drumului de valoare
maximă între două vârfuri oarecare ale unui graf fără circuite;
– algoritmul matriceal pentru determinarea drumului de valoare minimă sau maximă
între două vârfuri oarecare ale unui graf; variante ale algoritmilor prezentaŃi.
– Fiecare algoritm este prezentat cu justificarea teoretică de rigoare şi totodată este
însoŃit de cel puŃin un exemplu rezolvat complet, care reprezintă totodată şi un
model pentru rezolvarea testelor de autoevaluare şi a temei de control.

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:

Timpul mediu necesar pentru însuşirea noŃiunilor teoretice şi algoritmilor prezentaŃi


în unitatea de învăŃare nr. 3, precum şi cel necesar formării deprinderilor de calcul şi utilizării
algoritmilor pentru rezolvarea claselor de probleme specifice acestei părŃi a cursului este
estimat la aproximativ 3-4 ore pentru lecŃia 1, cu tendinŃa micşorării acestuia ajungând în
final la 2-3 ore, de la lecŃia 1 către lecŃia 4, pe măsura înŃelegerii şi însuşirii cunoştinŃelor
transmise şi a formării deprinderilor de calcul.

76
LECłIA 6 - GRAFURI CU ARCE VALORIZATE. DRUM DE LUNGIME MINIMĂ

3.1 NoŃiuni introductive. Punerea problemei


Unele procese şi fenomene practice pot fi modelate prin grafuri ale căror arce trebuie
valorizate. Aceasta înseamnă că fiecărui arc i se ataşează o valoare numerică a cărei
semnificaŃie concretă diferă în raport cu natura problemei modelate; de exemplu, aceasta
poate fi de tip cost, distanŃă, consum, durată, productivitate, probabilitate etc.
Exemple
a) Dacă se pune problema efectuării unor transporturi între diferite localităŃi, legate
printr-o reŃea de drumuri, se poate modela această problemă printr-un graf ale cărui vârfuri
sunt localităŃi. Un drum între localităŃile x şi y se va reprezenta prin arcul ( x, y ) . Dacă pe
acest drum circulaŃia se face în ambele sensuri, în graf va exista şi arcul ( y, x ) . Dacă se
studiază problema din punct de vedere al timpului necesar efectuării transporturilor, atunci
fiecărui arc i se va ataşa un număr pozitiv reprezentând durata transportului pe drumul căruia i
s-a asociat acel arc. Putem întâlni situaŃii diverse după cum se prezintă în exemplele
următoare:

⇔ Durata transportului de la x la y este de


10 unităŃi;

⇔ ( ∃) şi arcul ( y, x ) şi are aceeaşi valoare


cu arcul ( x, y ) ;

⇔ ( ∃) ambele arce ( x, y ) şi ( y, x ) , dar


Fig. 3.1.1 au valori diferite; obligatoriu figurează ambele
arce.
După ce se reprezintă întregul graf se poate rezolva problema următoare: Să se
determine traseul pentru efectuarea unui transport între două localităŃi astfel încât timpul
necesar să fie minim.
b) Dacă se studiază problema din punct de vedere al costului transportului, valorile
arcelor vor avea altă semnificaŃie (costul transportului de la x la y) şi drumurile optime în
rezolvarea unei probleme de tipul: „determinarea traseului pentru efectuarea unui transport de
cost minim între două localităŃi”, vor fi altele.
c) În alte aplicaŃii se pot întâlni şi alte semnificaŃii ale valorilor arcelor.
DefiniŃia 3.1.1
Fiind dat un graf G = ( X , Γ ) , X = { x1, x2 ,..., xn } , fie U mulŃimea arcelor sale.

( )
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

Acest drum de la xi la x j nu poate fi de valoare minimă, deoarece el conŃine

( )
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ă.

3.2 Algoritm pentru determinarea drumului de lungime minimă dintre două


vârfuri ale unui graf
Această problemă este un caz particular al problemei determinării drumului de valoare
minimă între cele două vârfuri ale unui graf şi ea rezultă dând fiecărui arc valoarea 1, caz în
care noŃiunile de valoare şi lungime coincid, atât pentru un arc, cât şi pentru un drum.
Fie graful G = ( X , Γ ) , cu X = { x1, x2 ,..., xn } şi două vârfuri oarecare x, y ∈ X ,
x≠ y.
Pentru determinarea drumului de lungime minimă de la x la y vom folosi următorul
procedeu de marcare a vârfurilor:
− vârful iniŃial, x, se marchează cu 0;
− dacă xi a fost marcat cu r, arcul ( xi , x j ) ∈U şi x j nu a fost marcat până în
acest moment, atunci x j se marchează cu r + 1;
− ne oprim în momentul în care y a fost marcat. Se pot face următoarele afirmaŃii.
a) Dacă procesul de marcare a vârfurilor se termină fără ca y să fie marcat, aceasta
înseamnă că nu există nici un drum de la x la y.
b) Numărul cu care este marcat un vârf reprezintă lungimea celui mai scurt drum prin
care se poate ajunge de la x la acel vârf.
Dacă y a fost marcat, pentru determinarea unui drum de lungime minimă de la x la y
vom proceda astfel:
1º – Dacă y a fost marcat cu m ( ⇔ lungimea minimă a drumurilor de la x la y este m),
atunci căutăm un vârf x
( m −1)
, marcat cu m − 1 , astfel încât arcul x (( m −1)
)
, y ∈U ;
( m −1) ( m −2)
2º – după alegerea lui x , căutăm un vârf x , marcat cu m − 2 , astfel încât

( 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

Să se determine drumul de lungime minimă de la x1 la x9


− marcăm mai întâi vârful x1 cu cifra 0 şi apoi marcăm cu 1 toate vârfurile x j care
respectă condiŃiile:
( )
1º arcul x1, x j ∈ U ;
2º x j nu a fost marcat. Aceste vârfuri, în cazul nostru, sunt x2 şi x3 . (Se redesenează
graful, însoŃit de numerele atribuite vârfurilor sau se numerotează vârfurile cu altă culoare);
− marcăm cu cifra 2 toate vârfurile care îndeplinesc condiŃiile:
( )
1º xi , x j ∈U şi xi a fost marcat cu cifra 1;
2º vârful x j este nemarcat.
Aceste vârfuri vor fi x4 , x5 şi x6 .
Deci, de la x1 se poate ajunge la oricare din vârfurile x4 , x5 sau x6 pe un drum de
lungime minimă egală cu 2.
− Marcăm cu cifra 3 vârfurile x j , care îndeplinesc condiŃiile:

( )
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

− Căutăm un vârf xi , marcat cu 3, şi astfel încât. ( xi , x9 ) ∈ U . Găsim vârfurile x7


şi x8 .
Dacă ne interesează doar un drum de lungime minimă, reŃinem, la fiecare astfel de
etapă, un singur vârf. Dacă ne interesează, însă, toate drumurile de lungime minimă, reŃinem
şi reprezentăm toate vârfurile notate cu cifra 3.
Găsim vârfurile x7 şi x8 , marcate cu cifra 3 şi astfel încât ( xi , x9 ) ∈ U ( i ∈{7,8}) .
− Căutăm apoi un vârf notat cu (2) şi astfel încât ( xi , x7 ) ∈U şi ( xi , x8 ) ∈U .
Găsim vârfurile x5 şi x6 .
− Căutăm un vârf xi marcat cu cifra 1 şi astfel încât arcul ( xi , x5 ) ∈U şi arcul
( xi , x6 ) ∈U . Găsim vârfurile x2 şi x3 .
− Căutăm un vârf xi , marcat cu cifra 0 şi astfel încât arcul ( xi , x2 ) sau
( xi , x3 ) ∈U
Acest vârf este x1 .
Observăm că pe un drum optim între x1 şi x9 , vârful x9 poate fi precedat numai de
x7 sau x8 . Analog, x7 poate fi precedat numai de x5 , iar x8 numai de x6 .
Mai departe, x5 poate fi precedat de x2 şi x3 , iar x6 numai de x3 .
În ultima etapă, atât x2 cât şi x3 sunt precedate de x1 .
Deci, toate drumurile optime (în sensul lungimii minime) dintre vârfurile x1 şi x9 din
graful prezentat în acest exemplu sunt următoarele:
µ1 = ( x1, x2 , x5 , x7 , x9 )
µ 2 = ( x1, x3 , x5 , x7 , x9 )
µ3 = ( x1, x3 , x6 , x8 , x9 ) .

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)

Vârfurile consecutive ale unui drum de valoare minimă de la x0 la xi verifică relaŃia


de mai sus cu semnul egal.
DemonstraŃie
( )
Arătăm întâi că dacă ( ∃) un arc xk , x j astfel încât

λ j − λ k > l ( xk , x j ) (3.3.2)

atunci λ j nu reprezintă minimul valorilor drumurilor de la x0 la x j


Fie subgraful din figura următoare:

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

µ′j = ( x0 , xk ,..., xk , x j ) este un drum de la x0 la x j , la fel ca şi µ j , dar de valoare λ′j


1

mai mică decât valoarea λ j a lui µ j . Într-adevăr avem:


λ′j = l ( µ′j ) = l ( µ k ) + l ( xk , x j ) = λ k + l ( xk , x j ) < λ j , datorită relaŃiei (3.3.2),
presupusă adevărată în ipoteza de lucru:
λ j − λ k > l ( xk , x j )

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)

Teorema ne sugerează următorul algoritm pentru determinarea drumului (sau


drumurilor) de valoare minimă de la vârful x0 la xn .
( 0)
a) Etapa 0: Fiecărui vârf xi i se ataşează o valoare λi care să reprezinte valoarea
( 0)
unui drum de la x0 la xi cu i = 1,2,..., n şi λ 0 = 0 .

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)

În acest caz luăm


( ) ( )
λ jk +1 = λi k + l ( xi , x j ) (3.3.6)

( 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)

− Ne oprim în momentul în care ajungem la x0 .

3.4 Exemple la algoritmul lui Ford pentru determinarea drumurilor de valoare


minimă între două vârfuri ale unui graf

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

La sfârşitul etapei a 4-a constatăm că toate relaŃiile (3.3.1) sunt de forma „ ≤ ”:


λ(i )
( ) ( )
(
λ jk − λi k ≤ l xi , x j , ) k = 4 , deci valorile 4
sunt valorile optime
( 4) ( 4)
(
( λ j − λ i ≤ l xi , x j , ) ( ∀ ) ( xi , x j ) ∈U ).
Depistarea drumului optim de la x0 la x5
Notăm cu xi penultimul vârf pe drumul optim. Atunci, pentru indicele i avem relaŃia:
( ) ( )
λ5 − λi ≤ l ( xi , x5 ) , în etapa k = 4 . Rezultă: λ54 − λ 24 = l ( x2 , x5 ) = 4 . Deci,
penultimul vârf este x2 : µ = (..., x2 , x5 ) .
Fie acum, xi vârful care precede pe x2 pe drumul optim. Vom avea:
( ) ( )
λ 24 − λi 4 = l ( xi , x2 ) . Pentru vârful x2 această relaŃie este verificată pentru i = 3 ,
( ) ( )
λ 24 − λ34 = l ( x3 , x2 ) = 1. Rezultă că predecesorul lui x2 , pe drumul optim este vârful
x3 ; µ = ( x0 ,..., x3 , x2 , x5 ) .
Fie xi vârful care precede pe x3 , pe drumul optim. Avem:
( ) ( )
λ34 − λi 4 = l ( xi , x4 ) .

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)

Vârfurile consecutive ale unui drum optim de la x0 la xi ( i ≠ 0 ) verifică relaŃia cu


semnul „=”.
DemonstraŃia este analoagă celei de la teorema anterioară.
Pe baza teoremei se dezvoltă algoritmul lui Ford, pentru determinarea drumului de
valoare maximă dintre vârfurile x0 şi xn .
( 0) ( 0) ( 0) ( 0)
În prima etapă, fie se calculează valorile iniŃiale λ 0 , λ1 ,..., λ n , λ 0 = 0 , fie se
( 0) ( 0) (0) ( 0)
pleacă de la următoarele valori: λ 0 = 0 ; λ1 = λ 2 = ... = λ n = −∞ , cu convenŃia
−∞ − ( −∞ ) = −∞ + ∞ = 0 .
În etapele următoare aceste valori se vor îmbunătăŃi succesiv până la obŃinerea
valorilor optime.
(
Astfel, dacă la etapa k + 1 există un arc xi , x j astfel încât )
( ) ( )
λ jk − λi k < l ( xi , x j ) , (3.6.2)

(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 .

Etapa 2. ( k + 1 , pentru k = 1 ). Se calculează pentru toate arcele ( xi , x j ) ∈U ,


(1)
diferenŃele λ j − λi (
(1) şi se compară cu l x , x .
i j )
Vârful x5 :
( x4 , x5 ) : λ(51) − λ(41) = 0 < l ( x4 , x5 ) = 5;
 (1) (1)
( x3 , x5 ) : λ5 − λ3 = 0 < l ( x3 , x5 ) = 10;
Vârful x4 :
( x3 , x4 ) : λ(41) − λ(31) = 0 < l ( x3 , x4 ) = 5;

 (1) (1)
( x2 , x4 ) : λ 4 − λ 2 = −∞ < l ( x2 , x4 ) = 5; ( ∗)
 (1) (1)
( x1, x4 ) : λ 4 − λ1 = −∞ < l ( x1, x4 ) = 6; ( ∗)
Vârful x3 :
96
( x2 , x3 ) : λ(31) − λ (21) = −∞ < l ( x2 , x3 ) = 4; ( ∗)

 (1) (1)
( x1, x3 ) : λ3 − λ1 = −∞ < l ( x1, x3 ) = 4; ( ∗)
 (1) (1)
( x0 , x3 ) : λ3 − λ 0 = −∞ < l ( x0 , x3 ) = 13; ( ∗)
Vârful x2 :

{( 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

λ(0 ) = 0 , λ1( ) = 9 , λ(2 ) = 5 , λ(3 ) = 13 , λ(4 ) = 10 , λ (5 ) = −∞ .


2 2 2 2 2 2

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:

λ(0 ) = 0 , λ1( ) = 9 , λ(2 ) = 5 , λ 3( ) = 13 , λ(4 ) = 18 , λ(5 ) = 23 .


3 3 3 3 3 3

Etapa 4. ( k + 1 pentru k = 3 ). Se recalculează pentru toate arcele ( xi , x j ) ∈U ,


( 3)
diferenŃele λ j − λ i (
( 3) şi se compară cu l x , x .
i j )

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 .

Prin urmare cij ( i ≠ j ) reprezintă valoarea arcului ( xi , x j ) în G% ; orice drum în G%


care nu există în G are valoarea +∞ , iar orice drum din G există şi în G% şi are aceeaşi
valoare în ambele grafuri.
Aflarea unui drum de valoare minimă între două vârfuri în G este echivalentă cu
aflarea drumului de valoare minimă între cele două vârfuri din G% . Este preferabil să folosim
( )
graful G% deoarece în raŃionamente putem vorbi despre arcul xi , x j , oricare ar fi vârfurile
distincte xi şi x j . Dacă un drum optim între două vârfuri va avea valoarea +∞ , atunci
aceasta înseamnă că în graful G nu există nici un drum între cele două vârfuri.
Fazele şi etapele algoritmului:
Faza I – declanşarea şi funcŃionarea algoritmului până la realizarea condiŃiei de
oprire.
Etapa 0
(k ) (k )
Definim numerele vi , i = 0,1,..., n − 1 , vn = 0 , ca fiind valoarea minimă a
drumurilor de la xi la xn formate din k + 1 arce.
101
(k )
Determinarea valorilor optime vi cuprinde k etape.
(0)
= cin , i = 0,1,..., n ; vn( ) = 0 . Se construieşte
0
În această etapă se definesc vi

( )
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)

astfel că pentru această etapă vom lua:

( )
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:

cin + vn( ) = cin , vn( ) = 0 .


1
( 1
) (3.7.6)

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

vi( ) ≤ vi( ) , ( ∀ ) i = 0,1,..., n − 1.


2 1
(3.7.7)
În continuare se procedează analog şi la etapa a k-a vom lua:

( )
n
vi( ) = min cij + v (j ) , i = 0, n − 1 şi vn( ) = 0 .
k k −1 k
(3.7.8)
j =0

Printr-un raŃionament similar se arată că vi


( k ) reprezintă valoarea celui mai bun drum
de la xi la xn , format din cel mult k + 1 arce şi că, pentru orice k şi i,

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

vi = vi( ) = vi( ) sunt valorile optime şi se trece la determinarea drumului optim.


k k −1

Faza II – determinarea drumului optim (de valoare minimă )de la x0 la xn .


Aceasta se face Ńinând cont că dacă xi , x j sunt vârfuri consecutive în această ordine
ale drumului optim, atunci vi = cij + v j .

3.8 Exemple la algoritmul lui Bellman-Kalaba pentru determinarea drumurilor


de valoare minimă dintre două vârfuri ale unui graf

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

Faza I – declanşarea şi funcŃionarea algoritmului până la realizarea condiŃiei de


oprire.
Etapa 0; k = 0 .

104
( )
În această etapă se construieşte matricea C = cij , i, j = 0,1,...,6 şi se definesc

= ci 6 , i = 0,1,...,5 , v6( ) = 0 , reprezentând valoarea drumului format dintr-un


( 0) 0
numerele vi
singur arc de la xi , i = 0,1,...,5 , la x6 .
Matricea C este următoarea:
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
Se observă că elementele diagonalei principale ale matricei C sunt nule ( cii = 0 ,
(0) ,
conform cu relaŃia (3.7.1)). Valorile vi i = 0,1, 2,...,6 , se află pe ultima coloană a
matricei C.
Etapa 1; k = 1 .

( )
6
(1) = min c + v( 0 ) ,
În această etapă se calculează valorile vi ij j i = 0,1,2,...,5 ,
j =0

v6( ) = 0 (conform relaŃiilor 3.7.3), reprezentând valoarea minimă a drumurilor de la xi la


1

x6 , formate din cel mult două arce. Avem:


Pentru i = 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

v6( ) = 0 (conform relaŃiilor (3.7.5)), reprezentând valoarea minimă a drumurilor de la xi la


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

formate din cel mult 6 arce.


Faza a II-a – determinarea drumului optim de la x0 la x6 .
Determinarea drumului optim se face în sensul de la x0 către x6 . Valoarea minimă a
( 5)
drumului optim de la x0 la x6 este v0 = v0 = 11, deci valoarea primei componente a
vectorului V
(5)
obŃinut la sfârşitul ultimei etape din faza I.
Rescriem în detaliu (pe componente) relaŃiile cu ajutorul cărora s-au obŃinut valorile
optime vi = vi
( 5) ,
i = 0,1,2,...,6 , în ultima etapă din faza I.
i = 0:

( )
6
v0( ) = min c0 j + v(j ) = min ( 0 + 11;2 + 9; ∞ + 2;4 + 8;5 + 7; ∞ + 4; ∞ + 0 ) = 11;
5 4
j =0

minimul se obŃine pentru j ∈ {0,1}.


i = 1:

( )
6
v1( ) = min c1 j + v(j ) = min ( ∞ + 11;0 + 9;12 + 2;1 + 8; ∞ + 7; ∞ + 4; ∞ + 0 ) = 9;
5 4
j =0

minimul se obŃine pentru j ∈ {1,3}.


i = 2:

( )
6
v2( ) = min c2 j + v(j ) = min ( ∞ + 11; ∞ + 9;0 + 2;4 + 8; ∞ + 7; ∞ + 4;2 + 0 ) = 2;
5 4
j =0

minimul se obŃine pentru j ∈ {2,6}.


i = 3:

( )
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

minimul se obŃine pentru j ∈ {3,5}.


i = 4:

( )
6
(5)
v4 = min c4 j + v(j ) = min ( ∞ + 11; ∞ + 9; ∞ + 2; ∞ + 8;0 + 7;3 + 4; ∞ + 0 ) = 7;
4
j =0

minimul se obŃine pentru j ∈ {4,5}.


i = 5:

( )
6
v5( ) = min c5 j + v(j ) = min ( ∞ + 11; ∞ + 9;2 + 2; ∞ + 8; ∞ + 7;0 + 4;7 + 0 ) = 4;
5 4
j =0

minimul se obŃine pentru j ∈ {2,5}.

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 ) .

3.10 Algoritmul lui Bellman-Kalaba pentru determinarea drumurilor de valoare


maximă dintre două vârfuri ale unui graf fără circuite. Exemple
Algoritmul lui Bellman-Kalaba poate fi utilizat, întocmai ca şi algoritmul lui Ford, şi
pentru determinarea drumului (drumurilor) de valoare maximă între două vârfuri ale unui graf
fără circuite.
Modificările de esenŃă ale algoritmului lui Bellman-Kalaba pentru determinarea
drumului (drumurilor) de valoare minimă între două vârfuri ale unui graf care permit
transformarea sa în algoritmul pentru determinarea drumului (drumurilor) de valoare maximă
între două vârfuri ale unui graf fără circuite sunt următoarele:
– ( )
în matricea C = cij , i, j = 0,1,..., n a valorilor drumurilor formate dintr-un
singur arc de la vârful xi , i = 0,1,..., n − 1 până la vârful x j , j = 0,1,..., n se va lua

( )
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:

vi( ) = vi( ) , ( ∀ ) i = 0,1,..., n .


k k −1
(3.10.3)

(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)

– dacă se cunoaşte un vârf xm al drumului optim şi xm ≠ xn şi dacă x j este vârful


care succede lui xm pe drumul optim, atunci se caută în relaŃia (3.10.2) din ultima etapă a
fazei I, scrisă pentru i = m , indicele j pentru care
vm = cmj + v j . (3.10.5)

– 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 ) .

V ( ) = ( −∞, −∞,8,10, −∞,5,0 )


0
Comparând cu (comparaŃia se face între
(1)
> vi( ) şi anume
0
componentele de aceleaşi rang) se constată că există indici i pentru care vi
i ∈ {0,1,2,3,4} , deci algoritmul continuă.

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

vi( ) > vi( ) şi anume { ( 2)


} , deci valorile vi
2 1
i ∈ 0,1,3, 4 nu sunt optime.
Etapa 3; k = 3 .
( 3) ( 3)
Se calculează valorile vi , i = 0,1,2,...,5 , v6 = 0 , utilizând relaŃiile (3.10.2)

( )
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

( 3) = 26,23,11,19,26,5,0 . Comparându-l, pe componente,


Se obŃine vectorul V ( )
( 2) ( 3) ( 2) ( 3)
cu V se găsesc indicii i ∈ {0,1,4} pentru care vi > vi , deci valorile vi nu sunt
optime şi algoritmul continuă.
Etapa 4; k = 4 .
( 4) ( 3)
Se calculează valorile vi , i = 0,1,2,...,5 , v6 = 0 , utilizând relaŃiile (3.10.2)

( )
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

V ( ) = ( 32,23,11,19,29,5,0 ) vi( ) = vi( ) ,


6 6 5
Se obŃine vectorul şi întrucât

(∀) i = 0,1.2,...,6 , rezultă că vi = vi( ) , i = 0,1, 2,...,6 reprezintă valoarea drumului


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

= max ( 0 + 32;5 + 23; −∞ + 11;19 + 6;29 + 3; −∞ + 5; −∞ + 0 ) = 32;


maximul se obŃine pentru j ∈ {0, 4}.
i = 1:

( )
6
v1 = v1( ) = max c1 j + v (j ) =
6 5
j =0

= max ( −∞ + 32;0 + 23;5 + 11;4 + 19; −∞ + 29; −∞ + 5; −∞ + 0 ) = 23;


maximul se obŃine pentru j ∈ {1,3}.
i = 2:

( )
6
v2 = v2( ) = max c2 j + v(j ) =
6 5
j =0

= max ( −∞ + 32; −∞ + 23;0 + 11; −∞ + 19; −∞ + 29;6 + 5;8 + 0 ) = 11;


maximul se obŃine pentru j ∈ {2,5}.
i = 3:

( )
6
(6)
v3 = v3 = max c3 j + v(j ) =
5
j =0

= max ( −∞ + 32; −∞ + 23;8 + 11;0 + 19; −∞ + 29;8 + 5;10 + 0 ) = 19;


maximul se realizează pentru j ∈ {2,3}.

i = 4:

( )
6
( 6)
v4 = v4 = max c4 j + v (j ) =
5
j =0

= max ( −∞ + 32;6 + 23; −∞ + 11;7 + 19;0 + 29;9 + 5; −∞ + 0 ) = 29;


maximul se realizează pentru j ∈ {1,4}.
i =5:

118
( )
6
v5 = v5( ) = max c5 j + v(j ) =
6 5
j =0

= max ( −∞ + 32; −∞ + 23; −∞ + 11; −∞ + 19; −∞ + 29;0 + 5;5 + 0 ) = 5;


maximul se realizează pentru j ∈ {5,6}.
i = 6 : v6 = v6( ) = 0 .
6

Presupunem că x j este primul vârf care urmează după x0 pe drumul optim de la x0

{ }
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:

vi( ) = cin , i = 0,1,..., n ,


0
(3.11.2)
iar în etapa k, k ≥ 1 , s-au calculat valorile:

( )
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

iar relaŃiile (3.11.2) din etapa 0 devin:

vij( ) = cij , ( ∀ ) i, j = 0,1,2,..., n .


0
(3.11.6)

Astfel, în fiecare etapă k = 0,1,2,... din faza I a algoritmului se calculează matricea


vij( ) , i, j = 0,1, 2,..., n . Vom nota această matrice cu C ( ) :
k k +1

vij( ) = C ( ) .
k k +1
(3.11.6)

Având în vedere relaŃiile (3.11.6) rezultă:

C( ) = C .
1
(3.11.7)
Pe intervalul [ 0, +∞ ) vom defini operaŃiile:

a +& b = min {a, b} , (3.11.8)

cu convenŃia min {∞, a} = min {a, ∞} = a , ( ∀ ) a ∈ [ 0, +∞ ) şi

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

este subînŃeles, cu ∑ as . Cu ajutorul acestor două operaŃii definite pe [0, +∞ ) se poate


s =1
defini, pe mulŃimea matricelor pătrate de ordinul m cu elemente din [ 0, +∞ ) , un „produs ” a
două matrice, prin analogie cu înmulŃirea obişnuită a matricelor, astfel:

cij = ∑ ais ×& bsj , (∀) i, j = 0,1,2,..., m , (3.11.10)


s =1

( ) şi B = (bij ) , i, j = 1,2,..., m . Vom spune că matricea C = ( cij ) obŃinută


unde A = aij
prin relaŃiile (3.11.10) este „produsul” matricelor A şi B şi vom nota:

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

acestui drum este vij


( k +1) = v( k ) = c( k +1) din matricea C ( k +1) = C ( k ) .
ij ij

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

Matricea C a valorilor drumurilor dintre oricare două vârfuri xi şi x j ,


i, j = 1, 2,...,6 , se completează cu ajutorul relaŃiilor (3.11.1) şi este următoarea:
x1 x2 x3 x4 x5 x6
0 4 2 ∞ ∞ ∞ x1
1 0 ∞ 4 10 ∞ x2
C = C( ) = ∞
1
1 0 2 8 6 x3
∞ 3 ∞ 0 ∞ 1 x4
∞ ∞ ∞ ∞ 0 5 x5
∞ 8 ∞ ∞ 2 0 x6

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

oprire a algoritmului matriceal. Matricea C = C


(5) ( 4 ) este matricea valorilor minime
(optime) ale drumurilor de la orice vârf xi la orice vârf x j al grafului, i, j = 1,2,...,6 .
Drumurile optime dintre două vârfuri oarecare xi şi x j ale grafului pot fi determinate

după obŃinerea matricei drumurilor optime. Să determinăm, cu ajutorul matricei vij = C ( ) (5) ,

drumul de valoare minimă de la x2 la x5 . Valoarea sa se află în matricea C


( 5) , la intersecŃia
liniei lui x2 cu coloana lui x5 : v25 = 7 .
Dacă pe drumul optim vârful xi este succesorul lui x2 , atunci indicele i se va
determina din relaŃia:
c2i + vi 5 = v25 = 7 . (3.11.17)
Singurul indice diferit de 2 care verifică această relaŃie este i = 4 . Analog, din
aproape în aproape, se obŃine drumul µ = { x2 , x4 , x6 , x5} .

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

Algoritmul se opreşte la pasul r pentru care C


( 2r +1 )
=C
( 2r )
şi în acest caz C
( 2r )

este matricea drumurilor de valoare minimă.

3.12 Algoritmul matriceal pentru determinarea drumurilor de valoare maximă


dintre două vârfuri oarecare ale unui graf fără circuite
Întocmai ca şi algoritmii lui Ford sau Bellman-Kalaba, şi algoritmul matriceal poate fi
utilizat pentru determinarea drumului (drumurilor) de valoare maximă dintre două vârfuri
oarecare ale unui graf fără circuite. De la început se face menŃiunea că algoritmul matriceal
este şi în acest caz mai general decât algoritmul lui Bellman-Klaba, acesta regăsindu-se ca un
caz particular în algoritmul matriceal.
Modificările de esenŃă ale algoritmului matriceal pentru determinarea drumului
(drumurilor) de valoare minimă între oricare două vârfuri ale unui graf care conduc la
transformarea sa în algoritmul matriceal pentru determinarea drumului (drumurilor) de
valoare maximă între oricare două vârfuri ale unui graf fără circuite sunt următoarele:
– ( )
în matricea C = cij , i, j = 1,2,..., n a valorilor drumurilor formate dintr-un
singur arc de la vârful xi până la vârful x j , i, j = 1,2,..., n , se va lua valoarea −∞ (în loc

( )
de +∞ ), dacă arcul xi , x j ∉U , i ≠ j ;
– pe intervalul [ −∞, +∞ ) se definesc operaŃiile:

a +& b = max {a, b} ; (3.12.1)

a ×& b = a + b , (3.12.2)

cu ajutorul cărora se defineşte „produsul” C = cij ( ) a două matrice ( ) ( )


A = aij , B = bij ,
& B , prin relaŃiile:
i, j = 1, 2,..., n , C = A ⊗

cij = ∑ air ⊗& brj , i, j = 1, 2,..., n . (3.12.3)


r =1
Este evident că cele trei operaŃii definite prin relaŃiile (3.12.1), (3.12.2) şi (3.12.3) sunt
asociative şi comutative, iar „înmulŃirea” ×& (3.12.2) este distributivă faŃă de „adunarea” + &
(3.12.1).
În continuare, făcând aceleaşi raŃionamente ca în paragraful anterior, se ajunge la
concluzia că elementul cij
( k +1) aflat la intersecŃia liniei i cu coloana j din matricea

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

3.5 Variantă a algoritmului lui Ford


Algoritmul lui Ford poate fi organizat astfel încât numerele λ i din fiecare etapă să
aibă semnificaŃia valorilor unor drumuri de la vârfurile xi la xn , i = 0,1,2,..., n − 1 .
Într-adevăr, să presupunem că pentru fiecare i = 0,1,2,..., n − 1 , dispunem de un
drum de la xi la xn şi că valoarea acestui drum este λ i . Luăm λ n = 0 .
( )
Pentru orice arc xi , x j ∈ U comparăm diferenŃa λ i − λ j cu l xi , x j . ( )
( )
Dacă λi − λ j > l xi , x j , atunci λ i nu reprezintă valoarea drumului optim de la xi
la xn , căci putem afirma că există un drum de valoare mai mică între xi şi xn . Valoarea
(
acestui drum este: λ′i = λ j + l xi , x j < λi . )
Punem în evidenŃă acest lucru în exemplul următor:
( ) ( )
Fie drumurile µi = ( xi , xk ,..., xn ) , µ j = x j , xl ,..., xn şi µ′i = xi , x j , xl ,..., xn ,
ca în figura următoare:

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.

Determinarea drumului optim de la x0 la x5


Primul vârf este x0 . Dacă xi este al doilea vârf al acestui drum, atunci
λ 0 − λi = l ( x0 , xi ) . Analizând aceste relaŃii pentru vârful x0 , rezultă i = 1 . Deci x1 este al
doilea vârf pe drumul optim. Dacă xi urmează după x1 pe drumul optim, atunci trebuie să
avem: λ1 − λ i = l ( x1, xi ) . Rezultă i = 2 . Deci x2 este al treilea vârf al drumului optim.
RelaŃia: λ 2 − λ i = l ( x2 , xi ) este verificată pentru i = 4 . Rezultă că x4 este al patrulea vârf
al drumului optim. λ 4 − λ i = l ( x4 , xi ) . Rezultă i = 3 , deci vârful următor este x3 şi apoi,
ultimul vârf pe drumul optim este x5 . Aşadar drumul optim este µ = ( x0 , x1 , x2 , x4 , x3 , x5 )
şi lungimea sa este λ 0 = 9 .

132
ObservaŃie
( 0) (1) ( 2)
= λ5( ) = 0 , se obŃine şi drumul µ1 = ( x0 , x1, x5 ) .
3
Pe varianta λ 5 = λ 5 = λ 5

3.9 Variantă a algoritmului lui Bellman-Kalaba pentru determinarea drumurilor


de valoare minimă între două vârfuri ale unui graf
Ca şi în cazul algoritmului lui Ford şi în cazul de faŃă algoritmul lui Bellman-Kalaba
poate fi organizat „în sens invers”, prin aceasta înŃelegând următoarele: în etapele succesive
ale algoritmului se vor determina valorile optime ale drumurilor formate dintr-un arc, din cel
mult două arce, din cel mult trei arce etc., dar de la vârful iniŃial x0 şi până la fiecare din
celelalte vârfuri x j , j = 1,2,..., n ale grafului. Algoritmul cuprinde aceleaşi faze şi etape ca
şi în cazul anterior, prezentat în paragraful 3.8.
Faza I – declanşarea şi funcŃionarea algoritmului până la realizarea condiŃiei de
oprire.
Faza I cuprinde mai multe etape.
Etapa 0.
– ( )
Se formează matricea c = cij , i, j = 1, 1, 2,..., n , conform relaŃiilor:

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

Dacă la sfârşitul etapei k există indici j pentru care v j


( k ) < v( k −1) , aceasta înseamnă că
j
( k ) nu sunt optime şi că există cel puŃin un drum, de la x la
valorile v j 0 x j format din k + 1
arce, mai bun (deci de valoare mai mică) decât orice drum de la x0 la x j 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:

v(j ) = v(j ) , ( ∀ ) j = 0,1, 2,..., n .


k k −1
(3.9.3)

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)

– dacă se cunoaşte un vârf xm al drumului optim şi xm ≠ x0 şi dacă xi este vârful


care-l precede pe xm pe drumul optim, atunci se caută în relaŃia (3.9.2) din ultima etapă a
fazei 1 scrisă pentru j = m , indicele i pentru care:

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 ) .

La sfârşitul etapei 1 se obŃine vectorul:


1
( 1 1
)
V ( ) = v0( ) , v1( ) , v2( ) ,..., v6( ) = ( 0,2,14,3,5,8,15) .
1 1

( 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

la sfârşitul etapei 1, se constată că există indicii j ∈ {2,5,6} pentru care v j


( 2 ) < v(1) , deci
j
( 2)
valorile v j nu sunt optime.
Etapa 3; k = 3 .

( )
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

Se rescriu în detaliu, pe componente şi pentru fiecare indice j = 0,1,...,6 , relaŃiile


(3.9.2), cu care s-au obŃinut valorile optime v j = v j
( 5) în ultima etapă ( k = 5 ) din faza I.

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.

BIBLIOGRAFIE RECOMANDATĂ PENTRU UNITATEA DE ÎNVĂłARE NR. 3:

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

În dorinŃa de ridicare continuă a standardelor desfăşurării activităŃilor


dumneavoastră, va rugăm ca după parcurgerea fiecărei unităŃi de învăŃare să
completaŃi acest chestionar şi să-l transmiteŃi indrumatorului de an.

Disciplina: Algoritmica grafurilor


Unitatea de invatare/modulul:__________________
Anul/grupa:__________________________
Tutore:_________________________

Partea I . ConŃinut

1. Care dintre subiectele tratate in aceasta unitate/modul consideraŃi că este cel


mai util şi eficient? Argumentati raspunsul.

2. Ce aplicatii/proiecte din activitatea dumneavoastra doriŃi să


imbunatatiti/modificaŃi/implementaŃi în viitor în urma cunoştinŃelor acumulate
în cadrul acestei unitati de invatare/modul?

3. Ce subiecte din acesta unitate de invatare/modul consideraŃi că ar fi trebuit să


fie tratate mai extins ?

4. La care aplicatii practice ati intampinat dificultati in realizare? Care credeti


ca este motivul dificultatilor intalnite?

148
5. Timpul alocat acestui modul a fost suficient?

6. Daca ar fi sa va evaluati cunostintele acumulate din parcurgerea unitatii de


invatare/modului, care este nota pe care v-o alocati, pe o scala de la 1-10?.
Argumentati.

Partea II. Impresii generale

1. Acest modul a întrunit aşteptările dumneavoastră?

În totalitate În mare măsură În mică măsură Nu

2) AveŃi sugestii care să conducă la creşterea calităŃii acestei unitati de


invatare/modul?

3) AveŃi propuneri pentru alte teme în cadrul acestei discipline ?


Argumentati.

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ă ?

Vă mulŃumim pentru răspunsul dumneavoastră!

149

S-ar putea să vă placă și