Sunteți pe pagina 1din 143

XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXX
XXXXXXXXXX

XXXXXXXX

XXXXXXXXXXX
Universitatea de Stat din Moldova
Facultatea de Matematică şi Informatică

Sergiu CATARANCIUC
Angela NICULIŢĂ

Aspecte algoritmice
ale teoriei grafurilor

Partea I

Aprobată de
Consiliul metodico-ştiinţific
şi editorial al USM

CEP USM
Chişinău, 2006
CZU 519.17 (075.8)
C 29

Responsabil de ediţie: Petru Soltan, academician,


profesor universitar

Recenzent: Dumitru Zambiţchi,


doctor în ştiinţe fizico-matematice,
conferenţiar universitar, ASEM

Recomandată de: Consiliul Profesoral


al Facultăţii de Matematică şi Informatică

Descrierea CIP a Camerei Naţionale a Cărţii

Cataranciuc Sergiu
Aspecte algoritmice ale teoriei grafurilor / Sergiu Cataranciuc,
Angela Niculiţă; Univ. de Stat din Moldova. Fac. de Matematică şi
Informatică – Ch.: CEP USM, 2006. –ISBN 978-9975-70-655-1
Partea I. – 2006. – 140 p. – Bibliogr. P. 138-140 (48 tit.). –
ISBN 978-9975-70-655-1

- - 1. Teoria grafurilor.
519.17(075.8)

C Sergiu Cataranciuc,
Angela Niculiţă, 2006

C USM, 2006
ISBN 978-9975-70-655-1
CUPRINS

INTRODUCERE.....................................................................................................5
I. NOŢIUNI DE BAZĂ...........................................................................................7
1.1. GRAFUL NEORIENTAT ŞI ELEMENTELE SALE...................................................7
1.2. GRAFURI ORIENTATE......................................................................................9
1.3. TIPURI DE GRAFURI......................................................................................10
1.4. SUBGRAFURI.................................................................................................12
1.5. LANŢURI ŞI CICLURI.....................................................................................12
1.6. REPREZENTĂRI ALE GRAFURILOR................................................................14
1.7. PROBLEME....................................................................................................16
II. MULŢIMI STABILE ÎN GRAFURI NEORIENTATE................................22
2.1. MULŢIMI DE VÂRFURI STABILE INTERIOR....................................................22
2.1.1. Modelul matematic al problemei de determinare.............................32
a mulţimii de vârfuri stabile interior maxime............................................32
2.1.2. Algoritmul recursiv al lui Bednarek şi Taulbee................................36
2.1.3. Algoritmul Malgrange.......................................................................39
2.1.3.1. Noţiuni preliminare.................................................................................39
2.1.3.2. Descrierea algoritmului...........................................................................42
2.1.4. Algoritmul Bron şi Kerbosch............................................................47
2.1.4.1. Noţiuni preliminare.................................................................................47
2.1.4.2. Descrierea algoritmului...........................................................................50
2.2. MULŢIMI DE VÂRFURI STABILE EXTERIOR....................................................51
2.2.1. Modelul matematic al problemei de determinare.............................56
a mulţimii de vârfuri stabile exterior minime.............................................56
2.2.2. Algoritmul de construire a mulţimii de.............................................58
vârfuri stabile exterior minime...................................................................58
2.3. CUPLAJURI....................................................................................................66
2.3.1. Lanţuri de majorare a cuplajurilor...................................................70
2.3.2. Cuplajuri în grafuri bipartite............................................................72
2.3.2.1. Algoritmul construirii cuplajului maxim într-un graf bipartit...................76
2.3.2.2. Descrierea algoritmului...........................................................................77
2.3.3. Cuplajuri în grafuri neorientate. Caz general.............................78
2.4. PROBLEME....................................................................................................85
III. COLORAREA GRAFURILOR....................................................................92
3.1. COLORAREA VÂRFURILOR............................................................................92
3.2. METODA PROGRAMĂRII DINAMICE...............................................................95
3.3. ALGORITMUL DE TRIERE IMPLICITĂ...........................................................100
3.4. METODE EURISTICE DE COLORARE............................................................101

3
3.4.1. Metoda succesivă.............................................................................101
3.4.2. Metoda dihotomiei...........................................................................102
3.5. COLORAREA MUCHIILOR............................................................................104
3.6. PROBLEME..................................................................................................105
IV. DRUMURI MINIME....................................................................................112
4.1. ALGORITMUL DIJKSTRA.............................................................................114
4.2. ALGORITMUL FORD....................................................................................118
4.3. ALGORITMUL FLOYD..................................................................................124
4.4. ALGORITMUL DANTZIG..............................................................................126
4.5. ALGORITMUL DE CĂUTARE DUBLĂ.............................................................127
4.5.1. Expunerea algoritmului de căutare dublă.....................................129
4.6. PROBLEME..................................................................................................133
BIBLIOGRAFIE...................................................................................................138

4
INTRODUCERE

Teoria grafurilor reprezintă una dintre domeniile cele mai


tinere ale matematicii moderne, care s-a dezvoltat într-un ritm
accelerat, în special în ultimii 30-40 ani. Datorită specificului acestei
teorii, metodele ei de cercetare se aplică pe larg la soluţionarea unor
probleme cu caracter aplicativ din diverse domenii, cum ar fi chimia,
fizica, economia, informatica ş.a. Grafurile reprezintă nişte structuri
matematice discrete prin intermediul cărora se modelează un şir de
procese sociale, economice, biologice etc. Mai multe probleme, atât
cu caracter teoretic, cât şi practic, se formulează uşor în termenii
grafurilor şi se rezolvă elegant prin aplicarea metodelor teoriei
respective.
Această situaţie a impus necesitatea elaborării unor metode
specifice de soluţionare, care odată cu dezvoltarea tehnicii de calcul
au condus la fundamentarea şi dezvoltarea aparatului algoritmic al
teoriei grafurilor. Situaţia la moment în acest domeniu ne permite să
vorbim de rând cu aspectul teoretic şi despre aspectul algoritmic.
Practic soluţionarea oricărei probleme se finalizează cu elaborarea
unor algoritmi. Astăzi am putea cu certitudine să afirmăm că
algoritmica de performanţă se face, în mare măsură, datorită
cunoaşterii tehnicilor din algoritmica grafurilor.
Prezenta lucrare ţine de studierea unor probleme clasice ale
teoriei grafurilor: mulţimi stabile, colorarea grafurilor, drumuri
minime etc. Sunt propuşi mai mulţi algoritmi de soluţionare a
problemelor menţionate, ceea ce oferă posibilitatea de a alege în
dependenţă de situaţia concretă algoritmul adecvat, efectuând o
analiză comparativă a eficienţei acestora în dependenţă de diferiţi
parametri. Expunerea materialului este însoţită de unele noţiuni şi
rezultate teoretice menite să faciliteze conceperea metodelor şi
algoritmilor propuşi. Fiecare capitol conţine un număr mare de
probleme, prin rezolvarea cărora se oferă posibilitatea de a obţine un
şir de cunoştinţe utile în domeniul respectiv. De asemenea, la
5
sfârşitul lucrării se propune o listă bibliografică în care sunt
menţionate cele mai importante lucrări din domeniul teoriei
grafurilor şi aplicaţiilor acestora.
Lucrarea este destinată în special studenţilor de la facultăţile
de matematică şi informatică şi ţine să completeze cursul teoretic al
teoriei grafurilor. De asemenea, lucrarea ar putea să prezinte interes
şi pentru specialiştii din alte domenii, preocupaţi de folosirea
aparatului teoriei grafurilor la soluţionarea problemelor practice.
Autorii îşi exprimă recunoştinţa faţă de colegii Andrei
Poştaru, Oleg Topală, Boris Hâncu, care în procesul pregătirii acestei
lucrări au intervenit cu sfaturi, idei şi propuneri utile, ce ţin de unele
rezultate şi stilul expunerii materialului, precum şi faţă de Irina
Andros pentru executarea grafică a copertei.
De asemenea aducem mulţumiri recenzentului Dumitru
Zambiţchi şi în mod special academicianului Petru Soltan, ale căror
observaţii şi sfaturi au contribuit la îmbunătăţirea calitativă a lucrării.

6
I. NOŢIUNI DE BAZĂ

1.1. Graful neorientat şi elementele sale

Definiţia 1.1.1. Perechea  X , U  , unde X este o mulţime


nevidă de elemente distincte, iar U este o mulţime formată din
perechi neordonate de elemente din X , se numeşte graf neorientat.

În cele ce urmează vom nota graful neorientat, determinat de


perechea de mulţimi  X , U  , prin G   X ;U  . Elementele lui X şi
U le numim respectiv vârfuri şi muchii ale grafului G.
În dependenţă de structura mulţimilor X şi U, grafurile pot fi
atât finite, cât şi infinite. Noi ne vom referi în continuare doar la
cazul grafurilor fnite, adică vom studia grafuri cu mulţimile X şi U
finite. Dacă X  n , atunci se spune că graful este de ordin n .
Uneori, pentru a specifica că X şi U sunt mulţimile de vârfuri şi
muchii ale grafului G , se va folosi notaţia X G şi U G .
Fie X  {x1 , x 2 ,..., x n } şi U  {u1 , u2 ,..., u m } . Dacă o
muchie u j este determinată de perechea de vârfuri  x k , xl  , atunci
vom scrie u j   x k , xl  şi vom spune că vârfurile x k , xl sunt unite
cu ajutorul muchiei u j . În acest caz, x k şi xl sunt considerate
extremităţi ale muchiei u j şi se numesc vârfuri adiacente. Se mai
spune că fiecare dintre vârfurile x k şi xl este incident muchiei u j
şi reciproc. Adiacenţa dintre x k , xl se notează prin x k ~ xl . Două
muchii se numesc adiacente, dacă sunt incidente unui vârf comun.
Astfel, relaţia de adiacenţă este definită atât pe mulţimea de vârfuri,
cât şi pe mulţimea de muchii ale grafului.
Dacă xi este un vârf al grafului G   X ;U  , atunci
   
mulţimea x j  X : xi , x j  U se numeşte vecinătate a lui xi şi se
notează prin Г G  xi  sau simplu Г  xi  . Grad al vârfului xi  X este
cardinalul mulţimii Г  xi  şi se notează prin deg xi , sau g  xi  .
Altfel spus, gradul unui vârf xi este egal cu numărul de vârfuri ale
grafului, adiacente lui xi (sau numărul de muchii incidente lui xi ).
7
Prin urmare, are loc inegalitatea 1  deg xi  n, n  X . Un graf, în
care gradele tuturor vârfurilor sunt egale cu un număr k, se numeşte
graf k-regulat.
Prin analogie, vecinătate a unei submulţimi de vârfuri A  X
a grafului neorientat G   X ;U  se numeşte mulţimea
Г A   z  X \ A :  y  A astfel încât z ~ y . Uneori, concomitent cu
mulţimea  ( A) vom folosi şi mulţimea  ( A)  ( x ) . Spre
x A

deosebire de  ( A) mulţimea  ( A) poate să conţină şi vârfuri


din A. Prin urmare, între  ( A) şi  ( A) are loc relaţia

( A)   ( A) \ A .
Gradul maxim şi gradul minim al vârfurilor unui graf G se
notează prin   G  şi   G  . Astfel,

 G   max deg x ,   G   min deg x .


xX x X

Vârful x  X se numeşte izolat în graful G , dacă deg x  0


şi suspendat dacă deg x  1 (vârful suspendat în literatura de
specialitate se mai numeşte vârf terminal). Muchia incidentă unui
vârf terminal, de asemenea, se numeşte suspendată (terminală).
Evident, dacă   G   2 , atunci graful nu conţine vârfuri suspendate
şi dacă   G   1 , atunci graful nu conţine vârfuri uzolate.
Uşor se verifică, că pentru un graf cu n vârfuri şi m muchii
este adevărată egalitatea:

 deg x  2m .
x X

1.2. Grafuri orientate

8
În cazul grafurilor neorientate, mulţimea de muchii U este
definită ca o mulţime de perechi neordonate de vârfuri ale grafului.
Dacă cerem ca mulţimea U să fie formată din perechi ordonate de
vârfuri ale grafului, atunci acesta ne permite să vorbim despre un alt
obiect matematic – graful orientat.

Definiţia 1.2.1. Perechea  X , U  , unde X este o mulţime


nevidă de elemente distincte, iar U este o mulţime formată din
perechi ordonate de elemente din X , se numeşte graf orientat.

Graful orientat se notează prin G  ( ;U ) . Dacă din context


va fi clar că este vorba de un graf orientat, atunci săgeţile respective
vor fi omise.
În cazul grafului orientat, elementele mulţimii U se numesc
arce. Pentru arcul u  ( x, y ) vârful x este extremitate iniţială, iar y –
extremitate finală. Se spune că arcul u  ( x, y ) este orientat de la x
spre y. Vârful x se mai numeşte predecesorul vârfului y, iar y –
succesorul vârfului x.
Spre deosebire de cazul neorientat, în graful orientat perechile
de vârfuri ( xi , x j ) şi ( x j , xi ) reprezintă arce diferite. Graful orientat
G  ( ;U ) , care nu conţine în acelaşi timp arcele ( xi , x j ) şi
( x j , xi ) pentru xi , x j  X se numeşte antisimetric. Graful
antisimetric cu un număr maxim de arce se numeşte turnir.

Definiţia 1.2.2. Şirul de vârfuri D  ( x0 , x1 ,  , x r ) cu



proprietatea că ( x0 , x1 ), ( x1 , x2 ), , ( xr 1 , xr )  U , se numeşte
drum în graful G. Vârfurile x 0 şi x r se numesc extremităţi ale
drumului D.
Dacă toate vârfurile drumului sunt distincte două câte două,
atunci drumul se numeşte elementar.

Vârful x 0 se mai numeşte extremitate iniţială, iar x r -


extremitate finală a drumului D.

9
Definiţia 1.2.3. Drumul D  ( x0 , x1 , , x r ) în care toate
arcele ( x 0 , x1 ), ( x1 , x 2 ),  , ( x r 1 , x r ) sunt distincte două câte două
şi x0  x r se numeşte circuit.
Circuitul se numeşte elementar dacă toate vârfurile sale sunt
distincte două câte două, cu excepţia primului şi ultimului vârf care
coincid.
Dacă xi este un vârf al grafului orientat G  ( ;U ) , atunci

cardinalul mulţimii Г   xi   x j   : ( xi , x j )  U  se numeşte
semigrad exterior, iar cardinalul mulţimii
 
Г  x i   x j   : ( x j , x i )  U – semigrad interior al vârfului xi .


Semigradul exterior se notează prin g ( xi ) , iar semigradul interior –
prin g  ( xi ) . Observăm că g  ( xi ) şi g  ( xi ) reprezintă respectiv
numărul succesorilor şi al predecesorilor vârfului xi .
Gradul unui vârf xi al grafului orientat se formează din
gradul exterior şi gradul interior şi se defineşte astfel:

g ( xi )  g  ( xi )  g  ( xi ) .

(Evident, în cazul grafurilor neorientate are loc egalitatea


g ( xi )  g  ( xi )  g  ( xi ) = deg xi .)

1.3. Tipuri de grafuri

În dependenţă de structura mulţimilor de vârfuri şi de


muchii, putem face o clasificare a grafurilor. În afară de grafurile
neorientate şi cele orientate descrise anterior, se mai întâlnesc
următoarele tipuri de grafuri:
 Graf vid – graful fără muchii. Se notează prin On .
 Graf trivial –graful G   X ;U  pentru care U   şi
X  1.

10
 Multigraf – graful în care există cel puţin o pereche de vârfuri
xi , x j , care reprezintă mai mult decât o muchie a grafului.
În acest caz, vârfurile xi , x j sunt unite cu ajutorul a k  2
muchii şi se spune că această pereche de vârfuri defineşte o
muchie multiplă de ordin k.
 Pseudograf – multigraful care conţine cel puţin o muchie,
extremităţile căreia coincid. Astfel de muchie se numeşte
buclă.
 Graf simplu – graful finit, ce nu conţine bucle şi muchii
multiple.

În cele ce urmează, ca regulă, vom considera că grafurile


examinate sunt grafuri simple.
 Graf complet – graful, oricare două vârfuri ale căruia sunt
adiacente. Se notează prin K n . Numărul de muchii din K n
este
n(n  1)
U  C n2  .
2
 Graf bipartit – graful, a cărui mulţime de de vârfuri poate fi
divizată în două submulţimi X 1 şi X 2 astfel, încât fiecare
muchie are o extremitate în X 1 , iar altă extremitate – în X 2 .
Se notează graful bipartit prin G  ( X 1 , X 2 ;U ) . Dacă în
graful bipartit fiecare vârf din X 1 este adiacent cu toate
vârfurile din X 2 , atunci avem un graf bipartit complet.
Numărul de muchii într-un astfel de graf este X 1  X 2 .
Graful bipartit complet G  ( X 1 , X 2 ;U ) cu X 1 = p şi X 2
= q se notează prin K p , q . În cazul p=1 graful K 1 , q se
numeşte stea.
 Graf complementar al grafului G   ;U  – graful, cu
aceeaşi mulţime de vârfui X, în care două vârfuri sunt
adiacente, dacă şi numai dacă ele nu sunt adiacente în G.
Graful complementar se notează prin G .
 Graf al muchiilor grafului G   X ;U  – graful, vârfurile
căruia corespund muchiilor grafului G, şi două vârfuri sunt
11
adiacente, dacă şi numai dacă sunt adiacente muchiile
corespunzătoare lor în G. Graful muchiilor se notează prin
L(G ) .
1.4. Subgrafuri

Definiţia 1.4.1. Un graf H   X H ;U H  se numeşte subgraf


al grafului G   X G ;U G  , dacă X H  X G şi U H  U G .

Conform definiţiei, orice graf poate fi considerat drept


subgraf al său.

Definiţia 1.4.2. Un graf H   X H ;U H  se numeşte subgraf


parţial al grafului G   X G ;U G  , dacă X H  X G iar U H  U G .

Definiţia 1.4.3. Un graf H   X H ;U H  se numeşte subgraf


al grafului G   X G ;U G  , generat de submulţimea de vârfuri
A  X G , dacă
1) X H  A ;
2) două vârfuri x, y  X H sunt adiacente în H dacă şi numai
dacă ele sunt adiacente în G.

1.5. Lanţuri şi cicluri

O succesiune de vârfuri    x1 , x 2 ,..., x k , x k 1  se numeşte


lanţ în graful G   X ;U  , dacă  xi , xi 1   U pentru i  1, k . În
acest caz, se spune că lanţul  uneşte vârfurile x1 , x k 1 . Vom
considera că o muchie u j   x p , xl  din G aparţine lanţului  ,
dacă şi numai dacă x p şi xl sunt vârfuri vecine în  , adică
p  1,2,..., k  şi l  p  1 (sau invers). Vârfurile x1 , xk 1 se
numesc extremităţi ale lanţului, iar numărul k - lungimea lui. Dacă
x1  xk 1 atunci  se numeşte ciclu.

12
Lanţul, ce conţine fiecare muchie a grafului cel mult o
singură dată se numeşte lanţ simplu, iar lanţul, toate vârfurile căruia
sunt distincte două câte două, se numeşte lanţ elementar.
Ciclul ce conţine fiecare muchie a grafului cel mult o singură
dată se numeşte ciclu simplu, iar ciclul, toate vârfurile căruia sunt
distincte două câte două, se numeşte ciclu elementar.
Nu orice graf conţine cicluri elementare. Graful conex ce nu
conţine cicluri elementare se numeşte arbore. Subgraful parţial conex
ce nu conţine cicluri elementare se numeşte arbore parţial.

Definiţia 1.5.1. Lanţul (ciclul) ce conţine fiecare muchie a


grafului exact o singură dată se numeşte lanţ (ciclu) eulerian.

Definiţia 1.5.2. Lanţul (ciclul) ce conţine fiecare vârf al


grafului exact o singură dată se numeşte lanţ (ciclu) hamiltonian.

Graful care conţine ciclu eulerian se numeşte graf eulerian,


iar graful care conţine ciclu hamiltonian se numeşte graf hamiltonian.

Dacă într-un graf orice două vârfuri sunt unite printr-un lanţ,
atunci acest graf se numeşte conex. Subgraful maximal conex al
grafului G se numeşte componentă conexă.

Definiţia 1.5.3. Submulţimea cu un număr minim de vărfuri


A ale unui graf G   X ;U  se numeşte mulţime de articulaţie a
acestui graf, dacă după eliminarea acesteia din G se obţine un graf
nou cu un număr mai mare de componente conexe în raport cu G.

În cazul A  1 , unicul vârf ce aparţine mulţimii A se


numeşte punct de articulaţie. Muchia grafului cu aceeaşi proprietate
se numeşte istm. Evident, dacă u este un istm al unui graf cu n  3
vârfuri, atunci cel puţin una dintre extremităţile sale este punct de
articulaţie. Afirmaţia inversă nu este adevărată.

Definiţia 1.5.4. Orice subgraf maximal al grafului


G   X ;U  , care nu conţine puncte de articulaţie, se numeşte bloc.
13
Notăm prin d  x, y  lungimea minimă a lanţurilor ce unesc
vârfurile x, y. În cazul când între două vârfuri x, y  X G nu există
nici un lanţ, se consideră d  x, y    . Numărul d  x, y  se numeşte
distanţa pe mulţimea de vârfuri ale unui graf G   X ;U  , deoarece
satisface axiomele metricii, adică pentru oricare trei vârfuri
x, y , z  X G au loc următoarele relaţii:
1) d  x, y   0 şi d  x, y   0 , dacă şi numai dacă x  y ,
2) d  x, y   d  y , x  ,
3) d  x, y   d  y, z   d  x, z  .
Cu ajutorul distanţei se defineşte puterea de gradul k  1 al
grafului. Vom numi putere de gradul k al unui graf G , graful G k
ce conţine aceeaşi mulţime de vârfuri cu G şi în care două vârfuri
x, y sunt adiacente dacă şi numai dacă în G are loc inegalitatea
d  x, y   k .

1.6. Reprezentări ale grafurilor

În afară de reprezentarea grafului descris nemijlocit cu


ajutorul mulţimilor de vârfuri şi muchii, graful mai poate fi
reprezentat atât algebric, prin intermediul matricei de adiacenţă, a
matricei de incidenţă etc. , cât şi geometric, unde vârfurile grafului
corespund unor puncte din spaţiu, iar orice muchie se reprezintă
printr-o linie continuă, ce uneşte punctele corespunzătoare
extremităţilor acesteia. În cazul grafurilor orientate, liniile sunt
înzestrate cu săgeţi, care corespund orientării arcelor. Graful
G   X ;U  care poate fi reprezentat în plan astfel, încăt orice două
muchii ale sale nu au puncte comune interioare se numeşte planar.
Însăşi reprezentarea geometrică a grafului planar, ce posedă
proprietatea indicată, se numeşte graf-plan. Se mai spune că graful-
plan este o reprezentare corectă în plan a grafului planar. La
14
suprimarea din plan a muchiilor şi vârfurilor unui graf-plan
G   X ;U  întreg planul se împarte în componente conexe, numite
faţete (feţe) ale lui G . Componentele conexe mărginite se numesc
faţete interioare, iar componenţa conexă nemărginită - faţetă
exterioară. Orice graf-plan conţine exact o faţetă exterioară.
O matrice binară A  aij de dimensiune n  n se numeşte
matrice de adiacenţă a grafului G cu mulţimea de vârfuri
X G   x1 , x2 ,..., xn  , dacă:

1, în cazul când xi  x j ,


aij  
0, în caz contrar.
Matricea de adiacenţă a grafului este o matrice simetrică cu
elementele de pe diagonala principală egale cu zero. Liniile şi
coloanele acestei matrici corespund vârfurilor grafului. Numărul de
unităţi dintr-o linie (coloană) este egal cu gradul vârfului
corespunzător acestei linii (coloane).

O matrice binară B  bij , de dimensiune n  m se numeşte


matrice de incidenţă a grafului G   X ;U  , X  {x1 , x 2 ,..., x n } ,
U  {u1 , u 2 ,..., u m } , dacă

1, în cazul când vârful xi şi muchia u j sunt incidente,


bij  
0, în caz contrar.
Deseori acelaşi graf, fiind reprezentat în diferite moduri,
creează iluzia că este vorba despre structuri diferite. Ar fi firesc ca în

15
toate aceste cazuri să convenim că se studiază un obiect matematic
identic. Astfel de grafuri în viitor se vor numi izomorfe.
Două grafuri G1   X 1 ;U 1  şi G2   X 2 ;U 2  se numesc
izomorfe, dacă există o aplicaţie bijectivă  : X 1  X 2 astfel încât
  
 xi , x j   U 1 , dacă şi numai dacă   xi  , x j  U 2 .
În diverse aplicaţii ale teoriei grafurilor se mai întâlnesc şi
alte tipuri de matrici, printre care matricea distanţelor, matricea
Kirhgoff, matricea de accesibilitate etc.

1.7. Probleme

1. Fie X o mulţime cu n elemente. Să se determine:


a) numărul grafurilor neorientate, a căror mulţime de vârfuri
este X;
b) numărul grafurilor neorientate cu bucle, a căror mulţime de
vârfuri este X;
c) numărul grafurilor orientate, a căror mulţime de vârfuri este
X;
d) numărul grafurilor orientate, fără bucle, antisimetrice, a
căror mulţime de vârfuri este X;
e) numărul turnirurilor, a căror mulţime de vârfuri este X;
f)numărul grafurilor neorientate care au gradele vârfurilor
distincte.

2. Care este numărul de diagonale într-un poligon convex cu n


vârfuri.

3. Să se demonstreze că pentru orice n  2 , graful stea K 1, n nu


este graf al muchiilor (adică nu există un astfel de graf neorientat G,
încât graful muchiilor L(G ) să fie izomorf lui K 1, n ).

16
4. Fie A o submulţime de vârfuri ale grafului neorientat
G   X ;U  , iar k – numărul muchiilor care au exact o extremitate în
A. Să se demonstreze că numărul k este de aceeaşi paritate cu
numărul vârfurilor de grad impar din A.

5. Un graf neorientat G se numeşte autocomplementar, dacă


graful complementar G este izomorf lui G. Să se construiască un
graf autocomplementar cu un număr minim de vârfuri n  1 .

6. O matrice se numeşte total unimodulară, dacă orice minor al


său este egal cu 1, –1 sau 0. Să se demonstreze că matricea de
incidenţă a unui graf bipartit este unimodulară.

7. Să se determine condiţiile în care graful muchiilor al unui


graf G   X ;U  este regulat. Să se construiască un graf conex G, cu
un număr minim de vârfuri n  3 , astfel încât graful muchiilor L(G)
să fie regulat.

8. Fie G  ( X ;U ) un graf orientat. Să se demonstreze


egalităţile:
a) g
x

( x)  g
x

( x) ;

b) g
x

( x )  g  ( x)  2k , k  N .

9. Fie G  ( X ;U ) un graf orientat antisimetric cu n vârfuri şi


un număr maxim de arce ( G este turnir). Să se verifice relaţiile:
a) g  ( x)  g  ( x)  n  1, x   ;

b) g
x

( x)  g
x

( x)  C n2 ;

g  g 
 2  2
c) ( x)  ( x) ;
x x

17
g   n  g 
 2  2
d) ( x)  ( x)  1 .
x x

10. Să se verifice următoarele afirmaţii:


a) există grafuri neorientate de ordin 10 pentru care şirul
gradelor vârfurilor sale este resprectiv
1, 1, 1, 3, 3, 3, 4, 6, 7, 9 ;
b) există grafuri neorientate pentru care gradele
vârfurilor sunt
distincte două câte două;
c) există grafuri neorientate cu n  4 vârfuri, pentru care
exact
3 vârfuri sunt de grad impar, iar celelalte (n – 3) vârfuri sunt de grad
par;
d) pentru orice graf neorientat, numărul vârfurilor de
ordin
impar este par.

11. Fie G   X ;U  un graf neorientat cu n vârfuri şi m muchii.


Să se demonstreze că dacă gradul fiecărui vârf al acestui graf este k
sau k  1 , atunci numărul vârfurilor de grad k este ( k  1)n  2m .

12. Să se verifice care dintre următoarele afirmaţii este


adevărată şi care este falsă:
a) reuniunea a două lanţuri disjuncte ce leagă vârfurile x şi y
ale unui graf G formează un ciclu elementar;
b) reuniunea a două lanţuri elementare disjuncte ce leagă
vârfurile x şi y ale unui graf G formează un ciclu elementar.

13. Să se construiască un graf 3-regulat cu 2n vârfuri, care nu


conţine cicluri elementare de lungimea egală cu trei.

14. Care este numărul maxim de muchii într-un graf cu n


vârfuri ce nu conţine cicluri elementare de lungime pară?
18
15. Să se construiască un graf G   X ;U  ,   4, pentru
care:
a. graful muchilor L(G ) nu este eulerian, iar L2 (G )
este graf eulerian;
b. graful muchiilor L(G ) nu este eulerian, însă este
hamiltonian;
c. graful muchiilor L(G ) nu este nici eulerian şi nici
hamiltonian;
d. graful muchiilor L(G ) este şi eulerian şi hamiltonian;
e. graful muchiilor L(G ) este eulerian, însă nu este
hamiltonian.

16. Să se verifice afiramţiile:


a) orice ciclu conţine un ciclu elementar;
b) orice ciclu de lungime impară conţine un
elementar.

17. Fie G n un graf neorientat, vârfurile căruia reprezintă


primele n numere naturale {1, 2, ..., n} , iar două vârfuri x, y sunt
adiacente, dacă şi numai dacă numerele x şi y sunt reciproc prime.
a) Să se scrie matricea de adiacenţă a grafurilor G5 , G6 , G7 .
Care este structura matricei de adiacenţă a gragului G n ?
b) Să se verifice dacă graful G n este conex.
c) Să se demonstreze că G m , m  n este subgraf al grafului
G n , generat de submulţimea de vârfuri {1, 2, ..., m} .

18. Să se demonstreze că dacă G este un graf neorientat cu


n  2 vârfuri şi m  C n21 muchii, atunci G este conex.

19. Să se demonstreze că dacă  (G )  (n  1) 2 , atunci graful


G este conex.

19
20. Să se verifice afiramţia: un graf G este conex, dacă şi numai
dacă pentru orice divizare a mulţimii de vârfuri X G în submulţimile
X 1 , X 2 , există o muchie din G cu o extremitate în X 1 şi altă
extremitate în X 2 .

21. Fie G un graf conex. Este adevărat oare că graful


complementar nu este conex? Cum ar fi graful complementar, dacă
graful G nu ar fi conex?

22. Fie G un graf conex. Este adevărat oare că graful


complementar nu este conex? Cum ar fi graful complementar, dacă
graful G nu ar fi conex?

23. Să se verifice afirmaţia: într-un graf conex orice două


lanţuri elementare de lungime maximă conţin cel puţin un vârf
comun.

24. Să se demonstreze că pentru oricare trei numere naturale


n, m şi k, care satisfac condiţiile
1 k  n ;
n  k  m  Cn2 k 1
există graf neorientat G cu n vârfuri, m muchii şi exact k componente
conexe.

25. Fie G un graf planar, conex cu n vârfuri, m muchii şi f


faţete. Să se demonstreze formula Euler
nm f  2.

26. Să se demonstreze că dacă un graf neorientat G cu n vârfuri


nu conţine cicluri de lungimea trei şi numărul muchiilor m verifică
inegalitatea
m  2n  2 ,
atunci G nu este planar.

20
27. Să se demonstreze că în orice graf planar
G   X ;U  , X  5 există cel puţin patru vârfuri de grad cel mult
cinci.

28. Fie n, m şi f reprezintă numărul de vârfuri, numărul de


muchii şi numărul de faţete ale unui graf planar. Să se verifice
inegalităţile:
a) m  3n  6 ;
b) f  2n  4 .

29. Un graf planar G   X ;U  se numeşte exterior planar, dacă


poate fi desenat în plan astfel, încât toate vârfurile sale să aparţină
frontierei unei faţete. Să se demonstreze că pentru orice graf planar
exterior G  ( X , U ) , X  3 , cu un maxim de muchii, sunt adevărate
următoarele afirmaţii:
a) U  2n  3 ;
b) există cel puţin două vârfuri de grad doi.

30. Fie G un graf planar cu n  4 vârfuri, gradele cărora sunt


d1 , d 2 ,..., d n . Să se demonstreze inegalitatea:
n

d
i 1
i
2
 2(n  3) 2  62 .

Să se verifice afirmaţia: pentru orice n  4 există graf planar


G   X ;U  , X  n , cu toate feţele triunghiulare astfel, încât
inegalitatea menţionată se transformă într-o egalitate?

II. MULŢIMI STABILE ÎN GRAFURI NEORIENTATE

Noţiunea de stabilitate este una dintre noţiunile fundamentale


ale teoriei grafurilor ce ţine de relaţia de adiacenţă dintre elementele
21
sale. Dat fiind faptul că relaţia de adiacentă se defineşte atât pentru
vârfurile, cât şi pentru muchiile unui graf, în cele ce urmează vom
vorbi despre diferite variaţii ale noţiunii de stabilitate. În acest
capitol, vor fi studiate unele metode şi algoritmi de soluţionare a
problemelor legate de determinarea mulţimilor de vârfuri stabile
interior, stabile exterior, a cuplajului grafului etc.
Pentru descrierea unor mulţimi de elemente, deseori se recurge
la utilizarea vectorilor binari. Fie Z o submulţime de elemente din
X  {x1 , x 2 ,..., x n } . Pentru Z definim vectorul C z  (c1 , c2 ,..., cn )
cu elementele

1, dacă xi  Z ,
ci  
0, dacă xi  Z .
Un astfel de vector se numeşte vector caracteristic al mulţimii Z.

2.1. Mulţimi de vârfuri stabile interior

Definiţia 2.1.1. Submulţimea de vârfuri A  X a unui graf G


se numeşte stabilă interior, dacă nu conţine două vârfuri adiacente.

Folosind notaţiile descrise mai sus, orice mulţime stabilă


interior A  X este caracterizată de relaţia

A  (x )  Ø, x  A
sau
A   ( A)  Ø.

În conformitate cu definiţia dată, orice graf G conţine mulţimi


stabile interior. Astfel, de exemplu, orice mulţime formată dintr-un
singur vârf din G este stabilă interior.

22
Definiţia 2.1.2. Mulţimea de vârfuri stabilă interior A se
numeşte maximală, dacă în graf nu există o altă mulţime stabilă
interior H astfel, încât A  H .

Mulţimea stabilă interior maximală A poate fi reprezentată prin


relaţia:
A   (H )  Ø , pentru H  X , astfel încât A H .

Definiţia 2.1.3. Mulţimea de vârfuri stabilă interior A se


numeşte maximă, dacă pentru orice mulţime stabilă interior H din
graf are loc relaţia
A  H .

Cardinalul mulţimii stabile interior maxime a grafului G se


notează prin  0 (G ) şi se numeşte număr de stabilitate internă.
Dacă notăm prin Q familia tuturor mulţimilor stabile interior din
graf, atunci

 0 (G )  max A  .
AQ

Pentru graful G din fig.1, mulţimile

S1   x4  ,
S 2   x1 , x3  ,
S3   x2 , x7  ,
S 4   x1 , x3 , x7  ,
S5   x1 , x3 , x5 , x6 , x8  ,
S6   x2 , x5 , x6 , x8  .

sunt stabile interior. Printre ele S3, S4, S5, S6 sunt maximale, şi numai
una – S5 este mulţime stabilă interior maximă. Prin urmare,
 0 (G )  5 . x x
1 5

x2 23 x8
x4 x7
x3
x
Fig. 1

Sunt cunoscute unele estimări ale numărului de stabilitate


internă  0 (G ) . Să menţionăm doar câteva dintre ele:

a)  0 (G )   (1  deg x)
x
1
.
(2.1)

În cazul grafului din fig.1, după cum a fost calculat mai sus,
 0 (G )  5 . Suma din partea dreaptă a inegalităţii (2.1) este:

1 1 1 1 1 1 1 1 15
 (1  deg x)
x
1
        
3 4 3 6 3 3 4 2 6
,

ceea ce confirmă estimarea lui  0 (G ) dată prin relaţia a).


Pentru unele grafuri neorientate, inegalitatea a) se transformă
într-o egalitate. De exemplu, în cazul unui graf complet K n ,
1
obţinem
x
 (1  deg x) 1
 (1  ( n  1)) 1  n 
n
 n  1 , care coincide

cu numărul de stabilitate internă  0 ( K n )  1 . În realitate însă,


diferenţa dintre  0 (G ) şi suma indicată în (2.1.) ar putea fi oricât de
mare.
Pentru a ne convinge de acest fapt, vom analiza graful
G   X ;U  cu mulţimea de vârfuri X  X 1 U X 2 , astfel încât
X I X  Ø , X  k , X  k  1 şi cu mulţimea de muchii
1 2 1 2

U  U 1 U 2 , unde

24

U 1  ( x, y ) : x  1 , y   2 , 

U 2  ( s, t ) : s, t   2 şi s  t . 
În graful construit, gradul unui vârf z este k – 1, dacă z  X 1
şi 2k – 2, dacă z  X 2 . Prin urmare,

 (1  deg x)
x
1
  (1  deg x)
1
1
  (1  deg x)
2
1

x x

 (1  (k  1)) 1  k  (1  ( 2k  2)) 1  ( k  1) 
1 k 1
  k  (2k  1) 1  ( k  1)  1  2 pentru orice k  1.
k 2k  1

Deci, partea dreaptă a relaţiei a) în cazul grafului studiat este un


număr mai mic decât 2.

Fig. 2
X1→ ……
Pe de altă parte, precum se poate observa din fig.2, numărul de
stabilitate internă pentru acest graf este  0 (G )  k şi odată cu
creşterea valorii lui k poate fi făcut oricât de mare.
X2→ …
n
b)  0 (G )  , unde n este numărul de vârfuri din graf, iar
1 d
d este gradul mediu al vârfurilor care se calculează după formula

25
d   deg x / n .
x

c)  0 (G)  n , unde  este gradul maxim al vârfurilor din



graf.
Această evaluare poate fi folosită în special în cazurile când G
este un graf regulat sau aproape de un graf regulat. Astfel, dacă G
este un graf cubic (graf, în care gradele tuturor vârfurilor sunt egale
n
cu trei), atunci în baza relaţiei c) vom avea  0 (G )  . Folosind
3
n
relaţia b) însă, vom obţine  0 (G )  .
4

n
d)  0 (G )    (1  deg x) 1 .
 (1   ) x

e)  0 (G )  p  min p , p  , unde p 0 , p  , p  sunt respectiv


0  

numărul de rădăcini caracteristice egale cu zero, negative şi pozitive,


ale matricei de adiacenţă a grafului G.

La studierea unui graf neorientat G  (; U) , concomitent cu


noţiunea de mulţime stabilă interior, în diverse aplicaţii, deseori, se
foloseşte şi noţiunea de clică. Dacă în primul caz toate vârfurile
mulţimii nu sunt adiacente două câte două, atunci în cazul clicii, din
contra, vârfurile sunt adiacente două câte două. În acest sens, clica
poate fi privită ca o noţiune reciprocă a noţiunii de mulţime stabilă
interior.

Definiţia 2.1.4. Submulţimea de vârfuri A  X a grafului G se


numeşte clică, dacă oricare două vârfuri din A sunt adiacente.

Conform acestei definiţii, dacă A este o clică a grafului G,


atunci ea generează în G un subgraf complet. Orice graf neorientat
conţine clici. Cele mai simple dintre ele sunt mulţimile ce conţin câte

26
un singur vârf al grafului, mulţimile formate din două vârfuri
adiacente ş.a.
Dacă cunoaştem o clică oarecare a grafului, atunci totdeauna
putem cerceta posibilitatea extinderii ei din contul vârfurilor rămase.
Această situaţie conduce la noţiunea de clică maximală şi clică
maximă.

Definiţia 2.1.5. Clica A se numeşte maximală, dacă în graf nu


există o altă clică B astfel, încât A  B .

Definiţia 2.1.6. O clică A se numeşte maximă, dacă pentru


orice clică B din graf are loc inegalitatea B  A .

x5
x1 x8

x2
x4 x7
x3
x6

Fig. 3

Cardinalul clicii maxime a unui graf neorientat G  ( X ; U) se


notează prin  (G ) şi se numeşte densitate a acestui graf. Densitatea
grafului poate căpăta orice valoare cuprinsă între 1 şi n-numărul de
vârfuri din graf. Observăm că densitatea grafului poate fi egală cu 1
doar într-un singur caz – când graful este vid.
Dacă analizăm graful din fig.3, atunci observăm că în calitate
de clici pot fi considerate mulţimile:

27
C1   x1  ,
C 2   x 4 , x5  ,
C 3   x1 , x 2 , x 4  ,
C 4   x 4 , x5 , x 6  ,
C 5   x 4 , x5 , x 6 , x 7  .

Dintre aceste mulţimi numai C3 şi C5 sunt clici maximale, iar C5


este şi maximă. Deci pentru acest graf avem  (G )  4 .
Uşor putem observa că dacă într-un graf G mulţimea de vârfuri
A este clică, atunci în graful complementar G , mulţimea A este
stabilă interior. Este adevărată şi afirmaţia inversă. Aceasta ne
permite să considerăm adevărată următoarea egalitate
 (G )   0 (G ) . (Aici prin G se notează graful complementar
grafului G.) Relaţia dată ne permite să obţinem unele estimări ale
densităţii grafului  (G ) în baza estimărilor numărului  0 (G ) .
Deseori soluţionarea unor probleme atât cu caracter teoretic, cât
şi practic se reduce la determinarea mulţimilor de vârfuri stabile
interior. Vom descrie unele dintre aceste probleme:

I. Între două staţii A şi B, conectate la o reţea informaţională, se


transmit nişte mesaje, codificate cu ajutorul simbolurilor unui alfabet
X   x1 , x 2 ,..., x n  . În timpul transmisiunii, din anumite motive, are
loc perturbarea informaţiei, adică unele simboluri transmise din A pot
fi confundate în staţia B cu alte simboluri. În aceste condiţii, este
necesar de stabilit o submulţime de simboluri din X, folosite la
codificarea mesajelor transmise din A şi care să garanteze
recepţionarea lor corectă în B. (Este clar că problema are sens numai
în cazul când cunoaştem perechile de simboluri ce pot fi confundate
la recepţionarea mesajului.)
Drept model matematic al problemei în cauză poate servi un
graf neorientat G cu mulţimea de vârfuri X  {x1 , x 2 ,..., x n } , în care
xi ~ x j , dacă şi numai dacă simbolurile xi şi x j pot fi confundate
la transmiterea mesajelor din A în B. Pentru a obţine un cod fără
28
erori, adică un cod care garantează transmiterea corectă a mesajelor,
este suficient să folosim simbolurile ce corespund vârfurilor unei
mulţimi stabile interior a grafului G. Deoarece fiabilitatea oricărui
cod într-o măsură oarecare depinde şi de numărul de simboluri
utilizate ale alfabetului X, vom folosi simbolurile ce corespund
vârfurilor din mulţimea stabilă interior maximă. În acest caz, este util
să cunoaştem numărul de stabilitate internă  0 (G ) .
Deseori se recurge la o astfel de codificare a mesajului, încât
textul transmis este format din cuvinte de aceeaşi lungime k. Atunci
numărul cuvintelor diferite care pot fi formate din simbolurile
alfabetului de codificare X şi care nu pot fi confundate la
transmiterea informaţiei nu este mai mic decât  0 (G) . De
k

exemplu, dacă graful model G, construit în conformitate cu cele


descrise mai sus, este un ciclu simplu de lungimea 5 cu vârfurile
x1 ~ x 2 ~ x3 ~ x 4 ~ x5 ~ x1 , atunci  0 (G )  2 . În calitate de mulţime
stabilă interior maximă poate servi mulţimea  x1 , x3  . Din
simbolurile x1, x3 putem forma 4 cuvinte diferite de lungimea 2:
x1 x1 , x1 x3 , x3 x1 şi x3 x3 , care nu vor fi confundate între ele la
transmiterea informaţiei. În realitate numărul cuvintelor recepţionate
corect la staţia B este mai mare decât  0 (G) . Astfel, pentru
k

exemplul descris există 5 cuvinte inconfundabile:


x1 x1 , x 2 x3 , x3 x5 , x 4 x 2 şi x 5 x 4 . La o analiză mai minuţioasă
ne putem uşor da seama că de fapt numărul cuvintelor
inconfundabile de lungimea k ce pot fi formate din simbolurile
mulţimii X   x1 , x 2 ,..., x n  este egal cu numărul de stabilitate
internă a grafului  G  k , a cărui mulţime de vârfuri este determinată
de produsul cartezian al mulţimii X luată de k ori, iar două vârfuri
(u1 , u 2 ,..., u k ) şi (v1 , v2 ,..., v k ) sunt adiacente, dacă şu numai
dacă în G avem ui  vi sau ui ~ vi pentru orice i  1, k . Este
 
evidentă relaţia  0  G   ( 0 (G )) k .
k

29
II. Pentru efectuarea a n lucrări, o instituţie foloseşte o mulţime
oarecare de resurse disponibile R  {r1 , r2 ,..., rP } . Se cunoaşte că
efectuarea unei lucrări xi , i  1, n necesită utilizarea unei
submulţimi de resurse Ri  R . Orice resurs r j , j  1, n , nu poate fi
utilizat concomitent pentru două sau mai multe lucrări. Se cere de
determinat numărul maxim de lucrări, care pot fi realizate în paralel
(în acelaşi timp, concomitent).
În cazul acestei probleme, se construieşte modelul matematic în
forma unui graf neorientat G în care două vârfuri xi , x j se consideră
adiacente, dacă şi numai dacă Ri  R j  Ø. În aceste condiţii orice
mulţime de vârfuri stabilă interior din G reprezintă o totalitate de
lucrări care pot fi realizate în paralel. Prin urmare, numărul maxim de
lucrări ce pot fi realizate în acelaşi timp este egal cu numărul de
stabilitate internă  0 (G ) , iar vârfurile mulţimii stabile interior
maxime corespund acelor lucrări.

III. Fie f ( x1 , x2 ,..., xn ) o funcţie booleană, adică atât funcţia


f, cât şi argumentele sale x1 , x2 ,..., xn iau valori din mulţimea
{0, 1} . Să notăm prin x 0  {x10 , x20 ,..., xn0 } şi x1  {x11 , x12 ,..., x1n }
două cortegii de valori ale variabilelor funcţiei f. (Aceste cortegii mai
pot fi privite şi ca doi vectori, coordonatele cărora sunt egale cu 0 sau
1). Vom spune că cortegiul x 0 se află în relaţia de precedenţă cu
cortegiul x1 , şi vom nota x 0  x1 , dacă xi  xi , i  1, n . O
0 1

funcţie booleană f se numeşte monotonă, dacă pentru oricare două


cortegii de valori x1 şi x 2 este adevărată implicaţia

( x 2  x1 )  ( f ( x 2 )  f ( x1 )) .
Cortegiul x  ( x1 , x 2 ,..., x n ) se numeşte unitate a funcţiei
booleene f, dacă f ( x)  1 şi unitate inferioară, dacă pentru oricare
alt cortegiu y  x are loc egalitatea f ( y )  0 . La rândul său, un
cortegiu x  ( x1 , x2 ,..., xn ) se numeşte zerou al funcţiei booleene f,

30
dacă f ( x)  0 , şi zerou superior, dacă pentru oricare alt cortegiu y
cu proprietatea x  y are loc egalitatea f ( y )  1 .
Este evident că orice funcţie monotonă se determină în mod
univoc de mulţimea unităţilor sale inferioare (sau de mulţimea
zerourilor sale superioare).
În cazul unui cortegiu binar x  ( x1 , x2 ,..., xn ) , numărul
n

x
i 1
i se numeşte normă a acestui cortegiu, iar funcţia monotonă,

pentru care normele unităţilor inferioare sunt egale cu doi sau cu


funcţia identic egală cu zero, se numeşte funcţie grafică.
Pentru o funcţie grafică f ( x1 , x2 ,..., xn ) definim un graf
neorientat G f cu mulţimea de vârfuri V  {v1 , v2 ,..., vn } în care vi
~ v j , dacă şi numai dacă există un cortegiu x*  ( x1* , x2* ,..., xn* ) cu
proprietăţile:
n
a) x
i 1
*
i 2;

b) x * este unitate a funcţiei f;


c) xi  x j  1 .
* *

Uşor se poate observa, că dacă C z este vectorul caracteristic al


unei submulţimi de vârfuri Z  V , atunci f (C z )  0 , dacă şi numai
dacă Z este o mulţime stabilă interior în G f . Prin urmare, zerourile
funcţiei grafice pot fi interpretate drept vectori caracteristici ai
mulţimilor de vârfuri stabile interior din G f .
La rândul său, pentru orice graf G, există o funcţie grafică
astfel, încât G f este izomorf cu G. Într-adevăr, în cazul grafului vid
putem considera f  0 . În cazul grafului diferit de graful vid, în
calitate de funcţie grafică putem considera funcţia determinată de
unităţile inferioare, care reprezintă vectorii caracteristici ai tuturor
perechilor de vârfuri adiacente.

31
2.1.1. Modelul matematic al problemei de determinare
a mulţimii de vârfuri stabile interior maxime

Problema determinării mulţimii de vârfuri stabile interior


maxime într-un graf neorientat poate fi tratată drept o problemă de
optimizare, ceea ce permite, la rândul său, crearea unui model de
programare matematică. În cele ce urmează, vom analiza două dintre
aceste modele.

A. După cum a mai fost menţionat, orice submulţime de vârfuri


B  X poate fi descrisă în mod univoc printr-un vector binar C B
numit vector caracteristic al mulţimii B. Mai frecvent însă la
studierea grafurilor se folosesc diferite matrici.
Pentru descrierea unei mulţimi de vârfuri stabile interior, vom
folosi o matrice pătratică  de dimensiunea n  n , cu elementele

1, dacă xi , x j  B ,
ij  
0, în caz contrar .
În această matrice, evident, pentru orice vârf xi  B , vom avea
 ii  1 . Astfel cardinalul mulţimii B este egal cu numărul de unităţi
de pe diagonală principală din  .
x2

x1 x3

x4 x5

Fig. 4

32
Exemplu. Mulţimea de vârfuri stabilă interior B   x2 , x4 , x5 
a grafului din fig.4 se descrie prin matricea

0 0 0 0 0
 
0 1 0 1 1
ξ  0 0 0 0 0
 
0 1 0 1 1
0 1 0 1 1  .

Se ştie [2] că dacă o matrice binară   ( ij ), i, j  1, n


reprezintă o mulţime stabilă interior a unui graf G, iar
A  ( aij ) i , j 1, n este matricea de adiacenţă a acestui graf, atunci sunt
adevărate următoarele două egalităţi:

1)  ij  aij  0 , i, j  1, n ;
2)  ii   jj   ij , i, j  1, n .

După cum uşor poate fi observat, cele n 2 egalităţi de primul


tip sunt echivalente cu următorul sistem liniar din n ecuaţii omogene:

a1111  a1212  ...  a1n1n  0 ,


a   a   ...  a   0 ,
 21 21 22 22 2n 2n
 (2.2)
         
an1 n1  an 2 n 2  ...  ann nn  0 .

La rândul său, pentru ca o matrice binară   ( ij ), i, j  1, n să


corespundă unei mulţimi stabile interior a unui graf G, reprezentat
prin matricea de adiacenţă A  ( aij ) i , j 1,n , pe lângă ecuaţiile
sistemului (2.2) ea trebuie să mai satisfacă şi egalitatea 2) descrisă
mai sus, adică

33
 ii   jj   ij , i , j  1, n .

Această ecuaţie poate fi înlocuită prin două inecuaţii liniare


 ii   jj
  ij , i, j  1, n ;
2
 ii   jj  1   ij , i , j  1, n .

Astfel obţinem problema de programare liniară: Să se


determine valorile necunoscutelor  ij , i  1, n, j  1, n , care
maximizează valoarea funcţiei
n
Z    ii (2.3)
i 1
cu restricţiile:
a1111  a1212  ...  a1n1n  0 ,
a   a   ...  a   0 ,
 21 21 22 22 2n 2n

        

an1 n1  an 2 n 2  ...  ann nn  0 , (2.4)
  
 ii jj
  ij , i, j  1, n ,
 2
    1   , i, j  1, n .
 ii jj ij

 ij   0,1 , i  1, n , j  1, n . (2.5)

Mulţimea de soluţii admisibile, determinată de sistemul (2.4) şi


condiţiile (2.5) nu este vidă şi orice soluţie admisibilă şi nenulă este o
matrice binară, care reprezintă o mulţime de vârfuri stabilă interior a
grafului G, descrisă de matricea de adiacenţă A  ( aij ) i , j 1,n (vezi
[2]). Prin urmare, problema (2.3)-(2.5) poate fi privită drept model
matematic al problemei de determinare a mulţimii de vârfuri stabilă
interior maximă într-un graf.

34
B. Un alt model al problemei studiate, reprezentat de asemenea
ca problemă de programare liniară cu variabile booleene, se obţine
prin utilizarea matricei de incidenţă a grafului.
Pentru graful G  ( X ;U ) cu n vârfuri şi m muchii, vom nota
prin B T matricea transpusă a matricei de incidenţă. Prin urmare,
B T este o matrice de dimensiune m  n , elementele căreia sunt

1, dacă muchia ui şi vârful x j sunt incidente ,


bij  
0, în caz contrar .
Dacă S este o mulţime de vârfuri stabilă interior a grafului G,
atunci vom introduce variabilele

1, dacă vârful x j apartine multimii S ,


xj  
0, în caz contrar .
şi
1, dacă nici una dintre extremităxile muchiei u i

U i   nu apartine multimii S ,
0, în caz contrar .

Astfel, o mulţime de vârfuri stabilă interior S poate fi descrisă
printr-un vector binar W ( S )  ( x1 ,..., x n ; U 1 ,..., U m ) . Acest
vector este o soluţie admisibilă a următoarei probleme de programare
matematică:

35
n
Z   x j  max (2.6)
j 1
n

b x
j 1
ij j  U i  1, i  1, m , (2.7)
x j  {0,1} , (2.8)
U j  {0,1} . (2.9)

Este adevărată şi afirmaţia reciprocă: orice soluţie admisibilă a


problemei (2.6)-(2.9) reprezintă o mulţime de vârfuri stabilă interior
a unui graf G  ( X ;U ) , X  n , U  m , matricea de incidenţă a
căruia este B  ( B T ) T .
Ţinând cont de funcţia-obiectiv (2.6), rezultă că problema
obţinută (2.6)-(2.9) este modelul matematic al problemei de
determinare a mulţimii de vârfuri stabile interior maximea unui graf.

2.1.2. Algoritmul recursiv al lui Bednarek şi Taulbee

Pentru graful G  ( X ;U ) cu n vârfuri, vom nota prin X k


mulţimea primelor k vârfuri, adică X k   x1 , x 2 ,..., x k  . Prin Lk
vom nota familia mulţimilor stabile interior maximale în subgraful
generat de mulţimea de vârfuri X k , iar prin Yk – mulţimea tuturor
vârfurilor din X k , neadiacente vârfului x k .
( Yk   y   k : y nu este adiacent vârfului xk  .
Folosind notaţiile menţionate, toate mulţimile stabile interior
maximale pot fi găsite cu ajutorul următorului algoritm:

Pasul l. Fixăm  1   x1  , L1   x1  , Y1   x1  . Considerăm


k 1.

Pasul 2. Fixăm mulţimea

36
 x2, dacă x1 ~ x2 ,
Y2  
 x1, x2, dacă x1, x2 nu sunt adiacente .
Pasul 3. Construim familia de mulţimi
I k*   S  M Yk 1 : M este un element al familiei Lk  .

Pasul 4. Determinăm I k - familia tuturor mulţimilor maximale


din I k* .

Pasul 5. Construim familia de mulţimi L*k 1 prin examinarea


fiecărui element M din Lk :

a) dacă M  Yk 1 , atunci M  x k 1   L*k 1 ;

b) dacă M  Yk 1 , atunci M  L*k 1 şi dacă în acest caz se


respectă şi condiţia M Yk 1  I k , atunci se mai consideră că
 x k 1   ( M Yk 1 )  L*k 1 .

Pasul 6. Determinăm Lk 1 - familia tuturor mulţimilor


maximale din L*k 1 .

Pasul 7. Dacă k  n  1 , atunci considerăm k  k  1 şi ne


întoarcem la executarea pasului 3. În caz contrar, Ln conţine toate
mulţimile maximale stabile interior în graful G. STOP.

Să analizăm algoritmul descris, luând în calitate de exemplu


graful din fig.5.

x3

x1 x2 37 x4

x
Fig. 5

38
Rezultatele pentru fiecare iteraţie k a algoritmului Bednarek şi Taulbee sunt prezentate în tabelul 1.
Familia L5 conţine toate mulţimile maximale stabile interior ale grafului studiat. Observăm că pentru acest
graf numărul de stabilitate internă este  0 (G )  3 .
Pentru graful din fig.5, există două mulţimi stabile interior maxime M 1  {x1 , x4 , x5 } şi
M 2  { x2 , x4 , x5 } . După cum se vede din tabelul 1, ambele mulţimi aparţin familiei L5 .

Tabelul 1

k Yk 1 I k* Ik L*k 1 Lk 1
1 Y2   x 2  I 1*   Ø I 1   Ø L*2   x1  ,  x 2  L2   x1  ,  x 2 
2 Y3   x1 , x3  I 2*   Ø,  x 1  I 2   Ø,  x 1  L3   x 2  ,  x3  ,  x1 , x3  L3   x 2  ,  x1 , x3 
*
38

3 Y4   x1 , x 2 , x 4  I   x1  ,  x2 
*
I 3   x1  ,  x 2  L4  {{x1, x3},{x1, x4},
L  {{x1, x3,{x1, x4},
*
3

4 {x2 , x4}}

{x2 , x4}}
4 Y   x , x , x , x I *   x1  ,  x1 , x 4  , I 4*   x1 , x 4  ,  x 2 , x 4  L*5   x1 , x3  ,  x1 , x4 , x5 L,5   x1 , x3  ,  x1 , x4 , x5  ,
5 1 2 4 5 4

 x2 , x4   x2 , x4 , x5   x2 , x4 , x5 
2.1.3. Algoritmul Malgrange

2.1.3.1. Noţiuni preliminare

Fie M o matrice binară, finită, de dimensiune m  n , cu


mulţimea de linii L  {l1 , l2 ,..., lm } şi mulţimea de coloane
C  {c1 , c2 ,..., cm } . Vom nota prin f  ( A, B ) matricea f, formată
din elementele de la intersecţia liniilor A  I şi a coloanelor B  J .
Fie acum f1 şi f 2 două submatrice ale matricei M,
determinate de perechile de mulţimi de linii şi coloane
( Ai , Bi ) i  1,2 ( f1  ( A1 , B1 ) şi f 2  ( A2 , B2 )) .

Definiţia 2.1.7. Matricea f 1 se numeşte submatrice a matricei


f 2 , dacă A1  A2 , B1  B2 şi se notează f1  f 2 .

Definiţia 2.1.8. Submatricea f a matricei M se numeşte


completă, dacă toate elementele din f sunt egale cu 1.

Definiţia 2.1.9. Submatricea f a matricei M se numeşte


principală, dacă ea este completă şi în M nu există o altă submatrice
completă f ' astfel, încât f  f ' .

Definiţia 2.1.10. Familia de submatrice C   f 1 , f 2 ,..., f p  din


M se numeşte acoperire a matricei M, dacă orice element egal cu 1
din M aparţine cel puţin unei submatrice din familia C.

Este evident că pentru orice matrice binară, totdeauna există o


acoperire de submatrice. O acoperire trivială ar fi determinată de
submatricele formate din fiecare element M ij  1 . În acelaşi timp,
este clar că putem vorbi şi despre acoperirile minimale şi minime,
determinarea cărora devine o problemă de optimizare. (Pentru astfel
de probleme, de asemenea, putem obţine diverse modele în forma de
problemă de programare matematică.)

39
Exemplu. Fie dată matricea

1 0 1 0 0 1   l1
 
1 1 0 1 0 0   l2
M  1 0 1 0 0 0   l3
 
1 1 0 1 0 1   l4
0 0 1 0 1 0   l5

     
c1 c2 c3 c4 c5 c6

liniile căreia sunt notate prin l1 , l 2 , l3 , l 4 , l5 iar coloanele – prin


c1 , c2 , c3 , c4 , c5 , c6 . În calitate de submatrice ale matricei M,
vom alege următoarele:
f1    l1 , l 3  ,  c1 , c3   ,
f 2    l1 , l3 , l5  ,  c 4 , c5   ,
f 3    l1 , l 2 , l3 , l 4  , Ø ,
f 4    l1 , l3  ,  c1   ,
f 5    l 4 , l 5  ,  c1 , c 2 , c 4   ,
f 6    l1 , l 4  ,  c1 , c6   ,
f 7    l5  ,  c3 , c5   .

Printre aceste submatrice, matricele f1 , f 4 , f 5 , f 6 , f 7 sunt


complete, iar f1 , f 5 , f 6 , f 7 sunt principale. Totodată, familia
F   f1 , f 5 , f 6 , f 7  formează o acoperire a matricei M.
Notăm prin M * familia tuturor submatricelor complete din M.
Pentru oricare două submatrice f 1  ( A1 , B1 ) şi f 2  ( A2 , B 2 ) ,
* *

definim două operaţii  şi  :


*
f 1  f 2  ( A1  A2 , B1  B 2 ) ,

40
*
f 1  f 2  ( A1  A2 , B1  B 2 ) .
* *

Uşor se poate de arătat că f1  f 2  M *


şi f1  f 2  M *
.
* *

Structura T = ( M * ,  şi ) este o latice distributivă. Se


verifică cu uşurinţă că operaţiile definite posedă proprietăţile de
asociativitate, comutativitate, idempotenţă, absorbţie şi
*

distributivitate. Să demonstrăm că operaţia  este distributivă în


*
raport cu operaţia .
Într-adevăr,

*  *  *  * 
f1  f 2  f3
 
  A1 , B1   A1 , B2  ( A3 , B3 ) 
   

 A1 , B1   A2 A3 ,    
*
 B2 B3  A1  A2 A3 , B1  B2 B


 ( A1 A2 )( A1 A3 ), ( B1 B2 )( B1 B3 )  

 ( A A  ( A A 
*
 1 2 ), ( B1 B2 ) 1 3 ), ( B1 B3 ) 

 *  *  * 
    
 ( A1 , B1 )( A2 , B2 )  ( A1 , B1 )( A3 , B3 )  
   
 *  *  * 
   
 f1  f 2  f1  f 3  .

   
Deoarece M este o matrice finită, rezultă că şi laticea T este
finită, deci are un element nul şi un element universal.
Dacă f1 , f 2  M * şi f1  f 2 , atunci au loc proprietăţile:
* *
f1  f 2  f 2 şi f1  f 2  f 2 .
*

Într-adevăr, f 1  f 2  ( A1  A2 , B1  B 2 )  ( A1 , B 2 )  f 2
*

şi f 1  f 2  ( A1  A2 , B1  B2 )  ( A2 , B1 )  f 2 .

41
De aici rezultă, în particular, că dacă f 2 nu este o submatrice
* *

principală, atunci nici f1  f 2 , nici f1  f 2 nu sunt


submatrice principale.
În baza celor expuse mai sus, putem afirma că o acoperire
C   f1 , f 2 ,..., f p  a unei matrice M generează o sublatice T ' a lui
T, conţinând toate submatricele principale din M.

2.1.3.2. Descrierea algoritmului

Fie A matricea de adiacenţă a unui graf neorientat G  ( X ; U ) ,


iar A – matricea complementară a acesteia. (Elementele aij ale
matricei A se calculează în baza elementelor a ij ale matricei A
după formula aij  1  aij .)

Algoritmul Malgrange este un algoritm iterativ de construire a


tuturor submatricelor principale pătratice ale lui A , în baza cărora
se determină mulţimile maximale stabile interior ale grafului G.

Pasul 1. Construim o acoperire arbitrară C0 a matricei A . De


obicei în calitate de acoperirea C0 se ia familia tuturor
submatricelor complete din A de forma f i  ( Ai , Bi ) , unde
Ai  1 , iar Bi este formată din coloanele matricei A , ce conţin
unitatea în linia Ai . Considerăm p  0 .

Pasul 2. Construim familia

X p   f i  C p : f j  C p , f j  f i astfel, încât f i  f j 

Aşadar, X p este familia tuturor submatricelor complete din


C p , care se conţin în alte submatrice ale lui C p .

42
Pasul 3. Construim familia  (C p \ X p ) de submatrice, obţinute
*
*
prin aplicarea ambelor operaţii  şi  tuturor perechilor posibile de

matrice f i , f j din C p \ X p , cu condiţia ca aceste elemente noi să nu se


conţină în submatricele din Cp \ X p .

Pasul 4. Formăm acoperirea de matrice

C p1  (C p \ X p ) (C p \ X p ) .
Pasul 5. Dacă C p1  C p , atunci considerăm p  p  1 şi
trecem la executarea pasului 2. În caz contrar C p conţine toate
submatricele principale ale matricei A .

Pasul 6. Construim o familie nouă F în care includem


submatricele pătratice maximale ale submatricelor principale din
C p , respectând condiţia ca fiecare dintre acestea să nu se conţină în
altă submatrice pătratică din F. Vârfurile ce corespund liniilor
(coloanelor) matricelor familiei F formează o mulţime stabilă
interior. Astfel, numărul tuturor mulţimilor stabile interior este egal
cu F .

Exemplu. Vom construi toate mulţimile stabile interior maxime


în graful G din fig.6, în conformitate cu algoritmul descris.

e d
f 43

c
Fig. 6

Matricea de adiacenţă A a grafului şi complementara ei A


sunt:

0 1 1 0 1 0  a
 
1 0 0 1 1 0  b
1 0 0 1 1 1  c
A 
0 1 1 0 1 0  d
 
1 1 1 1 0 1  e
0 0 1 0 1 0   f

     
a b c d e f

1 0 0 1 0 1  a
 
0 1 1 0 0 1  b
0 1 1 0 0 0  c
A  
1 0 0 1 0 1  d
0 0 0 0 1 0   e

1 1 0 1 0 1   f

     
a b c d e f

Pentru a simplifica descrierea formală a matricelor de tipul


f 1  {a, b},{c, d , e}  , f 2  {a},{a, d } etc. , folosite în algoritmul
Malgrange, vom utiliza transcripţia f1   ab, cde  , f 2   a, ad  .

44
Acoperirea iniţială C0 a matricei A este:

C0   (a, adf ), (b, bcf ), (c, bc), (d , adf ), (e, e), ( f , abdf ) .

În acest caz X 0  Ø şi, prin urmare, C0 \ X 0  C0 . Obţinem:


Γ(C0  Χ 0 )  (ab,f), (ad,adf), (af,adf), (bc,bc), (bd,f),
(bf,bf), (cf,b), (df,adf)  ;
(de exemplu, submatricea (ab, f) se obţine astfel:
(a, adf )  (b, bcf )  (a  b, adf bcf )  (ab, f ) ).

Formăm acoperirea C1  (C 0  X 0 ) U (C 0  X 0 ) .

C1   ( a, adf ), (b, bcf ), (c, bc), (d , adf ), (e, e), ( f , abdf ), (ab, f ),
( ad , adf ), (af , adf ), (bc, bc), (bd , f ), (bf , bf ), (cf , b), ( df , adf ).
Determinăm mulţimile:
X 1   ( a, adf ), (c, bc), (d , adf ) ,

C1  X 1   (b, bcf ), (e, e), ( f , abdf ), ( ab, f ), (ad , adf ), ( af , adf )


(bc, bc), (bd , f ), (bf , bf ), (cf , b), (df , adf ).

Formăm acoperirea C 2  (C1  X 1 ) U (C1  X 1 ) .

C2   (b, bcf ), (e, e), ( f , abdf ), ( ab, f ), ( ad , adf ), ( af , adf ),


(bc, bc), (bd , f ), (bf , bf ), (cf , b), ( df , adf ), ( abd , f ),
( abf , f ), (bcf , b), (bdf , f ), ( adf , adf ), ( abdf , f ).

Determinăm mulţimile:

X 2   ( ab, f ), ( ad , adf ), ( af , adf ), (bd , f ), (cf , b),


( df , adf ), ( abd , f ), ( abf , f ), (bdf , f ) ,

45
C 2  X 2   (b, bcf ), (e, e), ( f , abdf ), (bc, bc), (bf , bf ),
(bcf , b), ( adf , adf ), ( abdf , f ) .

Deoarece (C 2  X 2 )  Ø, obţinem

C3  (C 2  X 2 ) U (C 2  X 2 )  C 2  X 2 ,

de unde rezultă că X 3  Ø şi prin urmare C4  C3 .


În conformitate cu algoritmul descris, acoperirea matricei A ,
ce conţine toate submatricele principale, este:

C3   (b, bcf ), (e, e), ( f , adbf ), (bc, bc),


(bf , bf ), (bcf , b), ( adf , adf ), ( abdf , f ).

Extragem din fiecare submatrice principală submatricea


pătratică maximală şi le selectăm pe acelea care nu se conţin în alte
submatrice pătratice. Obţinem familia

F   (e, e), (bc, bc), (bf , bf ), (adf , adf ) .


În baza rezultatului obţinut, putem afirma că familia tuturor
mulţimilor stabile interior a grafului din figura 6 este:

S   e ,  b, c ,  b, f  ,  a, d , f  .

Mulţimea stabilă interior maximă este  a, d , f  şi prin urmare


 0 (G )  3 .

2.1.4. Algoritmul Bron şi Kerbosch

2.1.4.1. Noţiuni preliminare

Algoritmul propus de către C.Bron şi J.Kerbosch în anul 1973


reprezintă o modificare a algoritmului de triere, ce foloseşte arborele
46
de căutare. Ca rezultat al aplicării acestui algoritm, pentru un graf
neorientat G=(X;U), obţinem lista tuturor mulţimilor stabile interior
maximale.
La fiecare etapă k de realizare a algoritmului, se construiesc
două mulţimi S k şi Qk . Mulţimea S k reprezintă mulţimea de
vârfuri stabilă interior, obţinută la etapa k, iar Q k reprezintă
mulţimea vârfurilor din graf, neadiacente vârfurilor din S k . Prin
urmare, putem considera Qk  X \ ((S k ) U S k ) . Adăugarea oricărui
vârf din Q k la S k permite să extindem mulţimea stabilă interior
curentă şi să obţinem la etapa următoare o mulţime nouă S k 1 .
Pentru organizarea procesului de parcurgere în arborele de
căutare, vom reprezenta mulţimea Q k drept reuniune a două
  
mulţimi Qk şi Q k , considerând că în Qk sunt incluse acele vârfuri
din Q k , care în procesul de căutare au fost folosite pentru extinderea
mulţimii S k , iar Qk  Qk \ Qk . Cu alte cuvinte, la etapa respectivă
Qk reprezintă mulţimea vârfurilor, care potenţial pot fi folosite
pentru extinderea mulţimii stabile interior S k .
Astfel, dacă pentru extinderea mulţimii S k se alege vârful
xik  Qk , atunci la etapa următoare k  1 mulţimile curente S k ,
Qk şi Qk se modifică în modul următor:

 
S k 1  S k  xik ,

 
Q  Q \ ( x )
k1 k ik
,

47
  
Qk1  Qk \ (xik )  xik .

Pentru a obţine toate mulţimile stabile interior folosind arborele


de căutare, la unele etape ale algoritmului este necesar de efectuat
pasul de întoarcere, care constă în excluderea vârfului x i din S k 1
k

şi revenirea la S k , precum şi transferul lui x ik din Qk în Qk .


În conformitate cu cele descrise, rezultă că mulţimea de vârfuri
stabilă interior S k este maximală numai în cazul când Qk =Ø. Dacă

însă Qk  Ø , atunci aceasta înseamnă că la o etapă oarecare
anterioară mulţimea S k a fost extinsă din contul unor vârfuri situate

acum în Qk şi, prin urmare, ea nu poate fi considerată drept
mulţime maximală în graf. De aici rezultă – condiţia necesară şi
suficientă pentru ca mulţimea de vârfuri stabilă interior să fie
maximală este

Q k  Qk  Ø.

În acelaşi timp, este absolut clar că dacă există un vârf x  Q k ,
astfel încât ( x)  Qk  Ø, atunci indiferent de faptul care dintre

vârfurile mulţimii Q k este ales pentru extinderea mulţimii S k , la
orice pas următor p  k nu vom obţine respectarea condiţiei Qk =Ø.
Aceasta înseamnă că condiţia

x  Q k astfel încât ( x )  Q k  Ø (*)


este suficientă pentru a efectua pasul de întoarcere, deoarece pe
ramura dată a arborelui de căutare nu vom obţine mulţime stabilă
interior maximală în baza mulţimii curente S k .
Pentru a exclude parcurgerea unei părţi inutile a arborelui de
căutare, care la sigur nu conţine nici o mulţime stabilă interior
maximală, este important de a obţine condiţia suficientă a pasului de
48
întoarcere cât mai repede posibil. În acest scop, se va alege în mod

special vârful din Q k pentru extinderea mulţimii S k . Dacă condiţia
pasului de întoarcere nu are loc, iar pentru extinderea mulţimii S k se

alege un vârf oarecare x ik  Qk , atunci există un vârf z k  Qk astfel


încât x ik  ( z k ) Q k . În condiţiile efectuării acum a pasului de
întoarcere, valoarea mărimii

 ( z k )   ( z k )  Q k

se va micşora exact cu o unitate, ceea ce va urgenta respectarea


condiţiei (*). Astfel, la alegerea vârfului x i , folosit pentru
k

extinderea mulţimii stabile S k , se va căuta mai întâi un vârf


x*  Qk cu valoare cât mai mică a mărimii

 ( x*)   ( x*)  Q k .
Este important să cunoaştem ce condiţie trebuie să se respecte
pentru atingerea scopului indicat.
Vârful x i k
se va alege acum în mod arbitrar din mulţimea

( x*)  Q . O astfel de alegere a vârfului x ik va grăbi îndeplinirea
k

condiţiei (*) pentru efectuarea pasului de întoarcere.


Deoarece la efectuarea pasului de întoarcere vârful x i , care a
k
 
fost folosit pentru extinderea mulţimii S k , trece din Q în Qk , s-
k

ar putea întâmpla ca mărimea  ( x ik ) acum să fie mai mică decât


 ( x*) . Prin urmare, în continuare se va ţine cont de această situaţie

la alegerea vârfului x*  Qk .

2.1.4.2. Descrierea algoritmului

Pasul 1. Considerăm iniţial S 0  Q0  Ø, Q0  X , k  0 .

49
Pasul 2. În conformitate cu cele descrise anterior, alegem un

vârf x ik  Qk şi formăm mulţimile

 
S k 1  S k  xik ,

 
Q  Q \ ( x )
k 1 k ik
,

  
Qk1  Qk \ ( xik )  xik .

În acelaţi timp, vom păstra neschimbate şi mulţimile Qk şi


Q k . Considerăm k  k  1 .

Pasul 3. Dacă x  Q k astfel încât ( x)  Qk  Ø, adică are


loc condiţia suficientă pentru efectuarea pasului de întoarcere, atunci
trecem la pasul 5. În caz contrar, trecem la pasul 4.
 
Pasul 4. Dacă Qk  Qk  Ø, atunci tipărim mulţimea S k ca
mulţime stabilă interior maximală şi trecem la pasul 5. Dacă Qk =Ø,
iar Qk  Ø, atunci trecem la pasul 5.În caz contrar, trecem la pasul
2.

Pasul 5. Considerăm k  k  1 şi eliminăm vârful x i k


din

S k 1 , obţinând mulţimea S k . Modificăm mulţimile vechi Q k şi
  
Q k prin excluderea vârfului x i din Q
k k şi includerea lui în Q :k

50

Qk  Qk \ xik ,

 
Q k  Qk  x ik .

Dacă k  0 şi Q0  Ø, atunci aceasta înseamnă toate
mulţimile
stabile interior maximale ale grafului G  ( X ; U ) au fost găsite în
procesul realizării algoritmului. STOP. În caz contrar, trecem în
continuare la realizarea pasului 3.

Algoritmul Bron şi Kerbosch a fost testat pe un număr mare de


grafuri neorientate şi s-a constatat că timpul necesar pentru
construirea tuturor mulţimilor de vârfuri stabile interior este aproape
constant şi se modifică neesenţial odată cu creşterea dimensiunii
grafului. Aceasta ne permite să considerăm că algoritmul dat este
efectiv.

2.2. Mulţimi de vârfuri stabile exterior

Definiţia 2.2.1. Submulţimea de vârfuri A  X a unui graf G

se numeşte stabilă exterior, dacă pentru oricare vârf y  X \ A există


un vârf x  A astfel încât y ~ x .

Conform definiţiei, dacă A este o mulţime de vârfuri stabilă


exterior, atunci A U  ( A)  X . În orice graf G  ( X ; U ) mulţimea
tuturor vârfurilor X este stabilă exterior. La rândul său, G ar putea să
conţină şi alte submulţimi stabile exterior A  X , ceea ce conduce la
noţiunea de mulţime stabilă exterior minimală şi minimă.

Definiţia 2.2.2. Submulţimea de vârfuri stabilă exterior A a


unui graf G se numeşte minimală, dacă în G nu există o altă mulţime
stabilă exterior B astfel încât A  B .

51
Cu alte cuvinte, mulţimea stabilă exterior este minimală, dacă
orice submulţime proprie a acesteia nu este la rândul său stabilă
exterior.

Definiţia 2.2.3. Submulţimea de vârfuri stabilă exterior A a


unui graf G se numeşte minimă, dacă pentru orice mulţime stabilă
exterior B din G are loc relaţia
A  B .

Observăm că în cazul mulţimii de vârfuri stabile exterior, spre


deosebire de mulţimea stabilă interior, este admisă relaţia de
adiacenţă între vârfuri.
Să analizăm pentru graful din fig.1 următoarele mulţimi:

E1   x1 , x3 , x4 , x5 , x6 , x8  ,
E2   x1 , x3 , x5 , x6 , x8  ,
E3   x2 , x7  ,
E4   x4 , x7  ,
E5   x2 , x5 , x6  .

În baza definiţiilor 2.2.1–2.2.3, mulţimile E1 , E 2 , E3 , E 4 sunt


stabile exterior. Printre ele E 2 , E3 , E 4 sunt mulţimi stabile exterior
minimale, iar E3 , E 4 sunt chiar şi minime. Mulţimea E5 nu este
stabilă exterior, deoarece vârful x8   \ E5 nu este adiacent cu nici
unul dintre vârfurile mulţimii E5.
După cum urmează din cele menţionate, în orice graf neorientat
G există atât mulţimi stabile interior, cât şi mulţimi stabile exterior.
Uşor ne convingem însă că nu orice mulţime stabilă interior este şi
stabilă exterior. Totuşi, astfel de situaţii întâlnim în orice graf
neorientat. De exemplu, pentru graful din fig.1 mulţimea
E 2   x1 , x3 , x5 , x6 , x8  posedă proprietatea menţionată.

52
Definiţia 2.2.4. Submulţimea de vârfuri A  X a unui graf G,
care este atât stabilă interior, cât şi stabilă exterior se numeşte
nucleu al acestui graf.

Pentru graful din fig.1 mulţimea E 2   x1 , x3 , x5 , x6 , x8  este


nucleu. Cu uşurinţă se poate observa, că o mulţime de vârfuri stabilă
interior este maximală, dacă şi numai dacă ea este stabilă exterior.
Prin urmare, nucleu al grafului neorientat este orice mulţime de
vârfuri stabilă interior maximală. În calitate de nucleu al grafului din
fig.1 poate servi oricare dintre mulţimile E2, E3, E4, descrise mai sus,
precum şi E 6   x1 , x3 , x7  , E 7   x 4 , x8  , E8   x 2 , x5 , x 6 , x8  .
Ca şi în cazul mulţimilor de vârfuri stabile interior, şi mulţimile
de vârfuri stabile exterior îşi găsesc aplicaţii la soluţionarea
problemelor cu caracter aplicativ.
Printre problemele, a căror soluţionare se reduce la
determinarea unor mulţimi stabile exterior, deseori se numără diferite
variaţii ale problemelor de:
 amplasare a staţiilor de retranslare a semnalelor de radio
sau TV pentru un teritoriu oarecare;
 construire de baze militare menite să ţină sub control
anumite regiuni;
 amplasare a centrelor comerciale menite să deservească
un anumit număr de localităţi.
Să analizăm următoarea problemă:
N localităţi l1 , l 2 ,..., l N sunt unite printr-o reţea de drumuri.
Fie d ij – distanţa minimă dintre localităţile li şi l j , determinată de
reţeaua dată de drumuri. Pentru deservirea populaţiei se construiesc
câteva centre medicale. Se cunoaşte că pentru o deservire efectivă şi
calitativă a populaţiei distanţa de la o localitate până la cel mai
apropiat centru medical nu poate fi mai mare decât o mărime fixată
 . Astfel, dacă centrul medical cel mai apropiat pentru localitatea
li se va construi în localitatea l j , atunci numaidecât este necesară

53
respectarea condiţiei d ij   . Trebuie de determinat numărul minim
de centre medicale pentru deservirea populaţiei a celor N localităţi.
Pentru soluţionarea problemei, construim graful-model,
vârfurile căruia corespund localităţilor şi două vârfuri i şi j le
considerăm adiacente dacă d ij   . În aceste condiţii, mulţimea
minimă de vârfuri stabilă exterior a acestui graf reprezintă localităţile
în care se vor construi centrele medicale.
Deseori, în legătură cu studierea mulţimilor de vârfuri stabile
ale unui graf, se mai vorbeşte şi despre aşa-numitele mulţimi de
vârfuri de acoperire, definite prin relaţia de incidenţă dintre
elementele grafului.

Definiţia 2.2.5. Submulţimea de vârfuri A  X a unui graf G


se numeşte acoperire de vârfuri, dacă orice muchie din G este
incidentă cel puţin unui vârf din A.

Conform definiţiei date, mulţimea tuturor vârfurilor X formează


o acoperire de vârfuri în graf. Totodată, având o mulţime de vârfuri
A, ce formează o acoperire a grafului, s-ar putea de cercetat problema
determinării unei submulţimi din A ce posedă aceeaşi proprietate cu
A. Această situaţie conduce la noţiunea de acoperire minimală sau
minimă a grafului.

Definiţia 2.2.6. O acoperire de vârfuri se numeşte minimală,


dacă orice submulţime proprie a sa nu formează la rândul său
acoperire de vârfuri.

Definiţia 2.2.7. Acoperirea de vârfuri cu un număr minim de


elemente se numeşte acoperire minimă.

Cardinalul acoperirii minime a unui graf neorientat


G  ( X ; U ) se notează prin  0 (G ) . Pentru graful din fig.1, în
calitate de acoperiri de vârfuri pot servi următoarele mulţimi:

54
B1   x1 , x2 , x4 , x7  ,
B2   x1 , x2 , x3 , x5 , x6 , x8  ,
B3   x2 , x4 , x7  .
Printre aceste mulţimi B2 şi B3 sunt minimale şi numai B3 este
minimă. Deci pentru acest graf avem  0 (G )  3 .
Analizând definiţiile respective, putem observa o mare
asemănare între acoperirea de vârfuri a unui graf şi mulţimea stabilă
exterior. Astfel orice acoperire de vârfuri a unui graf este şi mulţime
stabilă exterior. Afirmaţia inversă însă nu este adevărată.
Observăm, de asemenea, că dacă A formează o acoperire de
vârfuri în graf, atunci mulţimea X \ A nu conţine vârfuri adiacente,
adică este stabilă interior. În cazul unei mulţimi stabile exterior,
această proprietate nu numaidecât are loc. Mai mult decât atât, dacă
A formează o acoperire de vârfuri minimală (sau minimă), atunci

X \ A este o mulţime stabilă interior maximală (sau maximă). Este


adevărată şi afirmaţia inversă. Astfel obţinem următorul rezultat: o
submulţime de vârfuri A a unui graf G  ( X ; U ) formează o

acoperire (minimală, minimă), dacă şi numai dacă X \ A este stabilă


interior (maximală, maximă). De aici, la rândul său, rezultă că într-un
graf neorientat G cu n vârfuri are loc egalitatea:
 0 (G )   0 (G )  n .

2.2.1. Modelul matematic al problemei de determinare


a mulţimii de vârfuri stabile exterior minime

Fie T matricea, ce se obţine din matricea de adiacenţă a unui


graf G  ( X ; U ) ,   n , prin înlocuirea elementelor de pe
diagonala principală cu 1. În aceste condiţii, cardinalul mulţimii de
vârfuri stabile exterior minime este egal cu numărul minim de
coloane din T ce conţin în ansamblu cel puţin o unitate în fiecare
55
linie a matricei. Vârfurile grafului ce corespund coloanelor respective
formează mulţimea de vârfuri stabilă exterior minimă.
Pentru fiecare vârf xj  X , formăm mulţimile
S j  { x j }  ( x j ) . Vom nota prin Y* mulţimea de vârfuri stabilă
exterior minimă din G.
Problema determinării mulţimii Y* poate fi formulată ca o
problemă de programare liniară, în modul următor:

Să se minimizeze funcţia
n
Z   j (2.10)
j 1

cu restricţiile
n

t
j 1
ij  j  1 , pentru i  1, n , (2.11)

1, dacă x j  Y *,
j   (2.12)
0, dacă x j  Y *.
1, dacă xi  S j ,
tij   (2.13)
0, dacă xi  S j .
Exemplu. Să analizăm graful din fig.7 .
x2
x1 x3

x5
x4 x6
x7
56
Fig.7
Formăm următoarele mulţimi de vărfuri:

S1  {x1}  ( x1 )  {x1 , x3 , x4 },
S 2  {x2 }   ( x2 )  {x2 , x5 , x7 },
S3  { x3}  ( x3 )  {x1 , x3 , x6 },
S 4  {x4 }   ( x4 )  {x1 , x4 , x5 , x7 },
S5  {x5 }  ( x5 )  {x2 , x4 , x5 , x6 },
S 6  {x6 }  ( x6 )  {x3 , x5 , x6 , x7 },
S 7  {x7 }   ( x7 )  {x2 , x4 , x6 , x6 }.

Matricea T obţinută din matricea de adiacenţă prin înlocuirea


elementelor de pe diagonala principală cu unităţi este

1 0 1 1 0 0 0
 
0 1 0 0 1 0 1
1 0 1 0 0 1 0
 
T  1 0 0 1 1 0 1
0 1 0 1 1 1 0 

0 0 1 0 1 1 1
 
0 1 0 1 0 1 1 .

Una dintre posibilele mulţimi stabile exterior minime este


Y  {x1 , x 2 , x3 } . În acest caz, variabilele  j , j  1,7 , ale problemei
*

(2.10) – (2.13) ar fi
1   2   3  1 ,
4  5  6  7  0 .

Elementele t ij alte matricei T satisfac condiţiile (2.13).

57
Printr-o verificare simplă ne convingem că se respectă
7

condiţiile (2.11). Valoarea funcţiei obiectiv este Z    j  3 . Prin


j 1

urmare, mulţimii Y îi corspunde o soluţie admisibilă a problemei


*

(2.10)–(2.11), şi printr-o analiză a grafului din fig.7 ne putem uşor


convinge că aceaşi situaţie va avea loc şi pentru oricare altă mulţime
stabilă exterior.

2.2.2. Algoritmul de construire a mulţimii de


vârfuri stabile exterior minime

Problema determinării mulţimii de vârfuri stabilă exterior


minimă este de fapt echivalentă cu o problemă de divizare minimă,
care poate fi formulată în modul următor.
Fie R  {r1 , r2 ,..., rM } o mulţime de elemente arbitrare şi
S  {S1 , S 2 ,..., S N } , o familie de submulţimi din R. Să se determine

subfamilia S'  {S j1 , S j2 ,. ., S jk }  S cu un număr minim de elemente

astfel încât
k

S ji R
i 1

şi S j  S j   , q, s  {1,2,..., k}, q  s .


q s

Echivalenţa acestor două probleme se constată imediat ce


considerăm R  X şi S i  {xi }  ( xi ) , i  1, X . În această
interpretare, mulţimea de vârfuri stabilă exterior minimă este formată
din acele vârfuri xi  X , pentru care S i  S' .

Expunem în continuare un algoritm care se utilizează la


soluţionarea problemei de acoperire minimă a unei mulţimi de
elemente R  {r1 , r2 ,..., rM } .

58
Iniţial construim un tabel special liniile căruia corespund
elementelor mulţimii R, coloanele corespund mulţimilor S j  S , iar
elementul din linia cu numărul p şi coloana cu numărul j este egal cu
1, dacă rp  S j ( j  1, n) , şi este egal cu 0 – în caz contrar. Fiecărui
element rp i se pune în corespondenţă blocul de coloane ce
corespund acelor submulţimi din S, care conţin acest element şi nu
conţin elemente rk , k  p . Coloanele ce corespund submulţimilor
din S şi care formează blocul p le vom aranja în acest bloc într-o
p p p
ordine arbitrară şi le vom nota prin S1 , S 2 ,..., S k , p  1, n (aici p

kp este numărul mulţimilor familiei S care conţin elementul r p ).


Structura tabelului pe blocuri este prezentată schematic în tabelul 2.
Remarcăm că dacă toate mulţimile S j  S , ce conţin elementul r p ,
conţin elemente rk cu indicele k  p , atunci blocul cu numărul p va
lipsi din tabel.
Tabelul 2

Blocul nr. 1 Blocul nr. 2 Blocul nr. 3 Blocul nr. n


S11 , S 21 ,..., S k11 S12 , S 22 ,..., S k22 S13 , S 23 ,..., S k33 ... S1n , S 2n ,..., S knn
r1 1 1 ... 1 0 .
r2 1 1 ... 1 0 .
.
r3
.
0
sau 0
1 1 ... 1 .
.
0
. sau 0
1 sau .
. 1 .
1
rM 1 1 ... 1

La descrierea algoritmului vom folosi următoarele notaţii:

B* – soluţia optimă curentă;

Z* – cardinalul mulţimii B* (numărul de submulţimi S j , care


formează o divizare a mulţimii R);

59
B – familia mulţimilor din S, care poate conduce la obţinerea
soluţiei optime;

Z – cardinalul familiei B;

E – submulţimea de elemente din R, care aparţin mulţimilor din


 
B E  S  .
 i 
 S i B 

Algoritmul propus este un algoritm iterativ, şi în procesul


determinării soluţiei optime aplică arborele de căutare. Toată
informaţia necesară pentru soluţionarea problemei se reprezintă sub
forma unui tabel descris mai sus. În procesul executării algoritmului,
fiecare coloană a tabelului, folosită pentru extinderea familiei B, este
marcată într-un mod oarecare pentru a ţine cont de această situaţie la
etapele următoare.

Descrierea algoritmului:

Pasul 1. Construim tabelul descris anterior. Considerăm


B = Ø, E = Ø, Z = 0, Z* = 0.

Pasul 2. Calculăm p  min{i : ri  E} .


Dacă toate coloanele blocului „p” au fost folosite la careva
etape anterioare pentru extinderea mulţimii B, sau blocul „p” este
vid, atunci trecem la pasul 5.
În caz contrar, alegem prima coloană, neutilizată încă pentru
p
extinderea lui B. Fie S j coloana aleasă din blocul cu numărul p.

Pasul 3. Dacă Z  1  Z* , atunci trecem la pasul 4. În caz


contrar trecem la pasul 6.

Pasul 4. Formăm mulţimea

60
TP  S jp \ E .
Extindem mulţimile:
B  B {S jp },
E  E  S jp
şi considerăm
Z  Z 1.
Dacă E  R , atunci considerăm B *  B , Z*  Z şi trecem la
pasul 6. În caz contrar, trecem la pasul 2.

Pasul 5. Dacă p  1 , atunci fixăm B * drept soluţie optimă a


problemei. STOP.

Dacă p  1 , atunci revenim la componenţa precedentă a


mulţimilor B şi E, prin excluderea ultimei mulţimi adăugate
S ij , i  p

B  B \ {S ij },
E  E \ Ti .
Considerăm Ti   şi modificăm valoarea lui Z  Z  1 .
Toate coloanele blocului p le declarăm libere (în viitor orice coloană
a acestui bloc poate fi folosită pentru extinderea mulţimii B). Trecem
la pasul 2.

Pasul 6. Modificăm mulţimile B şi E. Dacă ultimul element


p
adăugat în B a fost S j , atunci

B  B \ {S jp},
E  E \ Tp .

61
Considerăm T p   şi modificăm valoarea lui Z  Z  1 .
Trecem la executarea pasului 2.

Dacă E  R , atunci considerăm B *  B , Z*  Z şi trecem la


pasul 4. În caz contrar, trecem la pasul 2.

Exemplu. Să analizăm graful din fig.8, pentru care vom


considera
R  X  {x1 , x 2 , x3 , x 4 , x5 } ,

S1  {x1 , x3 , x5 },
S 2  {x2 , x3 , x4 },
S3  {x1 , x2 , x3},
S 4  {x2 , x4 },
S5  {x1 , x5 },

S  {S1 , S 2 , S3 , S 4 , S5 } .

x3 x4 x5

x1 x2
Fig. 8

Observăm cu uşurinţă că una dintre acoperirile minime este


determinată de mulţimile S1 şi S 2 (adică B *  {S1 , S 2 } ). De aici
deducem că drept mulţime de vârfuri stabilă exterior minimă poate
servi mulţimea A  {x1 , x 2 } .

(Menţionăm că în calitate de mulţime de vârfuri stabilă exterior


minimă pentru graful din fig. 8 ar putea servi şi alte mulţimi, de
exemplu {x1 , x 4 } sau {x 2 , x5 } .)
62
Vom analiza în continuare realizarea pas cu pas a algoritmului
descris. În conformitate cu pasul 1 construim tabelul 3.

Tabelul 3
Blocul nr. 1 Blocul nr. 2
S11 ( S1 ) S 21 ( S 3 ) S 31 ( S 5 ) S12 ( S 2 ) S 22 ( S 4 )
x1 1 1 1 0 0
x2 0 1 0 1 1
x3 1 1 0 1 0
x4 0 0 0 1 1
x5 1 0 1 0 0

j
Notaţia S i ( S k ) din tabel înseamnă că coloana cu numărul „i” a
blocului cu numărul „j” corespunde mulţimii S k a familiei S.
Iniţial considerăm B = Ø, E = Ø, Z = 0, Z* = +∞.

Pasul 2. Deoarece r1  E , considerăm p  1 şi marcăm


coloana S11 .

Pasul 3. Z + 1 = 0 + 1<Z* = +∞. Trecem la pasul 4.

Pasul 4. T1  {x1 , x 3 , x 5 } ,
B  B {S11}  Ø {S11}  {S11  {x1 , x3 , x5 }} ,

E  {x1 , x3 , x5 } ,

Z = 1.
Deoarece E  R , trecem la pasul 2 al algoritmului.

Pasul 2. p = 2. Marcăm coloana S12 .

Pasul 3. Z + 1 = 2 < Z*. Trecem la pasul 4 al algoritmului.


63
Pasul 4. Obţinem mulţimile noi :
T2  { x 2 , x 4 } ,
B  B {S }  {S  {x1 , x3 , x 5 }, S 12  {x 2 , x3 , x 4 }} ,
1
2 1
1

E  {x1 , x2 , x3 , x4 , x5 } ,
Z =2.
Deoarece E =R, vom avea:
B *  {S11  {x1 , x3 , x5 }, S12  {x2 , x3 , x4 }} şi Z* = 2.

Observăm că B * determină o divizare a mulţimii de vârfuri X


în două submulţimi. Obţinem o mulţime de vârfuri stabilă exterior –
{x1 , x 2 } . În continuare algoritmul se foloseşte pentru a determina
dacă s-a obţinut o acoperire minimă sau nu.

Pasul 6. Eliminăm din B ultimul element adăugat S12 .


Obţinem: B  {S1  {x1 , x3 , x5 }} ,
1

E  {x1 , x 3 , x 5 } ,
T2   ,
Z = Z – 1= 1.
Pasul 2. Alegem coloana S 22 .

Pasul 3. Z + 1 = 1 + 1 = Z*.

Pasul 6. Eliminăm S 22 din B. Obţinem:


B = Ø, E = Ø, T1  Ø ,
Z = 0.
Pasul 2. Deoarece p  min{i : x i  E}  1 , alegem coloana S 21 .

Pasul 3. Z  1  0  1  Z * (Z *  2) .

Pasul 4. Formăm mulţimi noi:

64
T1  {x1, x2 , x3 ) ,

B  B {S 21 }   {S 21 }  {x1 , x 2 , x 3 } ,

E  E  S  {x , x , x )
1
2 123
,

Z = 1.
Este clar că E  X .

Pasul 2. Calculăm p  min{i : x i  E}  4 . Bloc cu numărul


patru în tabelul nostru nu există.

Pasul 4. Modificăm mulţimile B şi E :


B = Ø, E = Ø.
Declarăm T1  Ø şi considerăm Z = 0.
Pasul 2. Deoarece p  min{i : x i  E}  1 , alegem coloana S 31 .

Pasul 3. Z  1  0  1  Z * (Z *  2) .

Pasul 4. Formăm mulţimi noi:

T1 {x1, x5 ) ,

B  B {S 31 }  {x1 , x5 } ,

65
E  E  S  {x , x )
1
3 1 5
,

Z = 1.
Pasul 2. Calculăm p  min{i : x i  E}  2 . Alegem prima
coloană nefolosită din blocul 2 – coloana S 12 .

Pasul 3. Z  1  2  Z * . Trecem la pasul 6.


1
Pasul 6. Modificăm mulţimile B şi E. Eliminăm coloana S 3 .
B = Ø, E = Ø, T1  Ø ,
Z = 0.

Pasul 2. Calculăm p  min{i : xi  E}  1 .

Pasul 5. Mulţimea B * reprezintă soluţia optimă :


B *  {S11 , S12 } .

Deci mulţimea {x1 , x 2 } este mulţimea stabilă exterior minimă


a grafului din fig.8.

2.3. Cuplajuri

La baza noţiunilor de mulţime stabilă interior şi mulţime stabilă


exterior stă relaţia de adiacenţă între vârfurile grafului. Prin analogie
cu cele expuse anterior, deoarece relaţia de adiacenţă este definită şi
pentru muchiile grafului, putem vorbi despre mulţimile de muchii
stabile interior. Astfel de mulţimi în literatura de specialitate sunt
cunoscute ca cuplajuri. Cuplajurile prezintă interes din punct de
vedere atât teoretic, cât şi practic datorită unui spectru larg de
probleme aplicative soluţionarea cărora se reduce la determinarea
unor cuplajuri speciale.

66
Definiţia 2.3.1. Submulţimea de muchii E  U a grafului G se
numeşte cuplaj, dacă oricare două muchii din E nu sunt adiacente.

Uşor se observă că în conformitate cu această definiţie în orice


graf neorientat există cuplajuri. Printre cele mai simple cuplajuri,
nevide, se află mulţimile ce conţin o singură muchie din graf.
Grafurile în care orice cuplaj conţine o singură muchie sunt grafurile
G  ( X ;U ) cu U  1 şi grafurile K 1, p , numite grafuri stea.
Dacă E este un cuplaj al grafului neorientat G  ( X ;U ) , atunci
putem încerca să extindem mulţimea dată din contul celorlalte
muchii. Această situaţie conduce la construirea cuplajului maximal şi
a cuplajului maxim.

Definiţia 2.3.2. Cuplajul E se numeşte maximal, dacă în graf


nu există un alt cuplaj T astfel încât E  T .

Definiţia 2.3.3. Cuplajul E se numeşte maxim, dacă pentru


oricare cuplaj T din graf are loc relaţia E  T .

Numărul de muchii ale grafului G ce aparţin cuplajului maxim


se notează prin  1 (G ) . Prin urmare, dacă E* este cuplajul maxim al

grafului G, atunci 1 (G)  E * .

Uşor se poate de observat că cuplajurile unui graf neorientat


G  ( X ;U ) pot fi studiate prin intermediul mulţimilor stabile
interior ale grafului muchiilor L(G ) . Într-adevăr, oricărui cuplaj din
G îi corespunde o mulţime de vârfuri stabilă interior în L(G). În
realitate are loc egalitatea  1 (G )   0 ( L(G )) . Cu toate acestea,
există algoritmi efectivi de construire a cuplajului maxim într-un graf
neorientat G, care îşi găsesc aplicaţie la soluţionarea unor probleme
cu aspect aplicativ.
Pentru graful G prezentat în fig.9, evidenţiem cuplajurile:

67
E1   u4  ,
E2   u 4 , u 7  ,
E3   u1 , u6  ,
E4   u 4 , u 5 , u 7  ,
E6   u1 , u2 , u3  .

Printre aceste mulţimi numai E3, E4, E5 sunt maximale, iar E4,
E5 sunt şi maxime. Deci  1 (G )  3 .
Ca şi în cazul mulţimilor de vârfuri stabile interior, studierea
cuplajurilor poate fi făcută în coordonare cu acoperirile de muchii.
u4

u1 u6 u3
u2
u5
u7

Fig.9

Definiţia 2.3.4. Submulţimea de muchii E '  U a unui graf


G  ( X ;U ) se numeşte acoperire de muchii, dacă orice vârf din G
este incident cel puţin unei muchii din E'.

În conformitate cu această definiţie, orice graf conţine acoperiri


de muchii. În calitate de acoperire de muchii trivială poate servi
mulţimea tuturor muchiilor grafului. Totodată, având o acoperire
arbitrară de muchii E, putem încerca să-i păstrăm această proprietate
prin eliminarea din E a unor muchii. Astfel ajungem la noţiunea de
acoperire minimală.

Definiţia 2.3.5. Acoperirea de muchii E' se numeşte minimală,


dacă în graf nu există o altă acoperire de muchii T ' astfel încât
T '  E ' (adică orice submulţime proprie din E' nu formează
acoperire de muchii).
68
Definiţia 2.3.6. Acoperirea de muchii E' se numeşte minimă,
dacă pentru oricare acoperire de muchii T ' a grafului are loc
relaţia:
E'  T ' .

Numărul de muchii ale grafului G din acoperirea minimă se


notează prin  1 (G ) .
Pentru graful G  ( X ;U ) din fig.9, menţionăm câteva
acoperiri de muchii:
E1'   u1 , u2 , u3 , u4 , u5 , u6 , u7   U ,
E2'   u1 , u3 , u4 , u7  ,
E3'   u1 , u2 , u5 , u6  ,
E4'   u1 , u2 , u3  .
'
Printre acestea E 3 şi E 4' sunt acoperiri minimale, iar E 4' este
acoperire minimă. Deci pentru graful G din fig. 9 avem  1 (G )  3 .
Între cuplajurile unui graf şi acoperirile de muchii există o legătură
strânsă, care îşi găseşte exprimare în egalitatea

 1 (G )   1 (G )  n , unde n X .

Din cele studiate până acum, putem observa că există cuplajuri


care pot servi în acelaşi timp şi ca acoperiri de muchii. După cum
vom vedea, asemenea situaţie nu are loc pentru orice graf neorientat.

Definiţia 2.3.7. Orice cuplaj, care formează o acoperire de


muchii în graf, se numeşte cuplaj perfect.

Pentru graful din fig.9, mulţimea de muchii E5   u1 , u 2 , u3 


este un cuplaj perfect. Conform definiţiilor 2.3.1–2.3.7, într-un graf
ar putea exista cuplaj perfect numai dacă numărul de vârfuri este par.
În grafurile cu număr impar de vârfuri astfel de cuplajuri nu există.

69
2.3.1. Lanţuri de majorare a cuplajurilor

Vom considera în continuare că este fixat un cuplaj oarecare M

într-un graf neorientat G  ( X ;U ) . Orice muchie uU \ M se va

numi muchie liberă a grafului G în raport cu cuplajul M. Dacă


vârfurile x, y sunt extremităţi ale unei muchii u  M , atunci x se va
numi partener al lui y şi invers. Vârfurile, care nu sunt incidente
muchiilor cuplajului M se vor numi vârfuri libere.

Definiţia 2.3.8. Un lanţ simplu p  [ x1 , x2 ,..., xk ] se numeşte


alternant în raport cu cuplajul M, dacă muchiile determinate de
perechile de vârfuri ( x1 , x2 ) , ( x3 , x4 ) , ..., ( x2 j 1 , x2 j ) ,...sunt
libere, iar cele determinate de perechile de vârfuri ( x2 , x3 ) ,
( x4 , x5 ) , ..., ( x2 j , x2 j 1 ) ,... sunt muchii ale cuplajului M.

Vârfurile de pe locurile impare ale unui lanţ alternant se vor


numi vârfuri exterioare, iar cele de pe locurile pare – vârfuri
interioare.

Definiţia 2.3.9. Vârful x   se numeşte vârf exterior


(interior), determinat de cuplajul M, dacă în graf există un lanţ
alternant p, în raport cu care x este vârf exterior (interior).

În graful din fig.10 este fixat un cuplaj

M  [( x2 , x3 ), ( x4 , x5 ), ( x6 , x8 ), ( x7 , x10 )] .

În acest graf, lanţurile

P1  [ x1 , x2 , x3 , x5 , x4 , x8 ]

şi P2  [ x1 , x4 , x5 , x6 , x8 , x7 , x10 , x9 ]

70
sunt alternante. Vârfurile x1 , x3 , x4 sunt exterioare, iar x2 , x5 , x8 –
interioare în cazul lanţului P1 . (În cazul lanţului P2 , vârfuri
exterioare vor fi x1 , x5 , x8 , x10 , iar interioare – x4 , x6 , x7 , x9 .)
Uşor ne convingem de faptul că în raport cu cuplajul
M  {( x2 , x3 ), ( x4 , x5 ), ( x6 , x8 ), ( x7 , x10 )} graful din fig.10 conţine
numai două vârfuri libere.

x1 x4 x7

x5 x8
x2 x10

x3 x6 x9

Fig.10

Definiţia 2.3.10. Un lanţ alternant p  [ x1 , x2 ,..., xk ] se


numeşte lanţ de majorare în raport cu un cuplaj M, dacă ambele
extremităţi x1 şi xk ale lui p sunt vârfuri libere.

Pentru graful din fig.10, lanţul


p  [ x1 , x4 , x5 , x6 , x8 , x7 , x10 , x9 ] este un lanţ de majorare.
Observăm că, dacă muchiile cuplajului din p le declarăm libere, iar
cele libere le declarăm muchii ale cuplajului, atunci, în rezultatul
acestei operaţii, obţinem un cuplaj nou
M  [( x1 , x 4 ), ( x 5 , x 6 ), ( x 8 , x 7 ), ( x10 , x 9 ), ( x 2 , x 3 )] , de cardinal mai
'

mare decât M.
Lanţurile de majorare ar putea juca un rol decisiv în
soluţionarea problemei cuplajului maxim într-un graf neorientat. Să
71
notăm prin P mulţimea muchiilor unui lanţ de majorare p, în raport
cu cuplajul M. Este adevărată afirmaţia:

Dacă p este un lanţ de majorare în raport cu un cuplaj M al

grafului neorientat G  ( X ;U ) , atunci M  (' M \P) (P \ M) este un cuplaj

nou în G şi M '  M 1.

Totodată, menţionăm că dacă M este un cuplaj maxim în graful


G, atunci G nu conţine lanţuri de majorare în raport cu M. Cu alte
cuvinte, este adevărată afirmaţia:

Un cuplaj M al grafului G  ( X ;U ) este maxim, dacă şi


numai dacă în G nu există lanţuri de majorare în raport cu M.

Ideea expusă cu privire la folosirea lanţului de majorare pentru


construirea cuplajului maxim stă la baza elaborării algoritmului
respectiv. Vom analiza mai întâi cazul grafului bipartit, dat fiind
faptul că datorită structurii sale într-un graf bipartit construirea unui
astfel de cuplaj este mai simplă.

2.3.2. Cuplajuri în grafuri bipartite

Să studiem o metodă iterativă de construire a unui cuplaj


maxim, pornind de la un cuplaj oarecare şi construind la fiecare etapă
un lanţ de majorare. Problema principală ar fi, desigur, depistarea
acestui lanţ.

Fie G  ( X 1 , X 2 ;U ) un graf bipartit şi M un cuplaj oarecare în


G (iniţial s-ar putea considera că M conţine o singură muchie a
grafului). Evident, căutarea unui lanţ de majorare trebuie să înceapă
din vârfurile libere ale grafului. Luând în consideraţie definiţia
2.3.10, orice lanţ de majorare va conţine o extremitate în X 1 , iar
72
cealaltă – în X 2 . Din aceste considerente, fără a pierde din
generalitate, vom căuta astfel de lanţuri începând cu vârfurile libere
ale mulţimii X 1 . În acest scop, pornind dintr-un vârf liber x  X 1
putem construi toate lanţurile alternante folosind principiul de
căutare în lăţime.

Pentru a elucida cele expuse mai sus, vom analiza graful din
fig.11, în care este fixat cuplajul.

M  {( x11 , x42 ), ( x12 , x62 ), ( x31 , x22 ), ( x14 , x32 ), ( x51 , x62 ), ( x16 , x52 )} .

Alegem vârful x 2  X  {x1 , x 2 , x3 , x 4 , x5 , x6 } . Folosind


1 1 1 1 1 1 1 1

metoda de căutare în lăţime la construirea lanţurilor alternante, vom


2
ajunge la pasul următor în vârfurile x22 şi x6 .

x11 x12 x31 x14 x51 x16

x12 x22 x32 x42 x52 x62

Fig.11

Dacă cel puţin unul dintre aceste vârfuri ar fi liber, atunci putem
considera că lanţul de majorare este construit. În conformitate cu
definiţia lanţului alternant (vezi definiţia 2.3.8), în continuare ne
mişcăm numai pe muchiile cuplajului. Astfel ajungem în vârfurile
73
x31 , x51  X 1 . Aceste vârfuri se determină în mod univoc ca vârfuri-
partenere pentru x22 şi x62 . Din vârfurile x31 şi x51 , în conformitate
2 2 2
cu metoda de parcurgere în lăţime ajungem la x3 , x4 , x5 .
Întreaga procedură de construire a lanţurilor alternante este
prezentată în fig.12.

x12

2 x62
x 2

1 x51
x3

x32 x42 x52

x14 x11 x16

x12

Fig.12

Să considerăm primul vârf din care a pornit procesul de căutare


în lăţime – vârful x12 drept vârf de nivelul „0”, apoi vârfurile
2
următoare x22 , x6 – vârfuri de nivelul „1” ş.a.m.d. Vârful x12 va fi
vârf de nivelul „5”. Putem observa că folosirea metodei de căutare în
lăţime în acest caz este destul de specifică, dat fiind faptul că trecerea
de la nivelul cu număr impar la cel cu număr par se determină în mod
univoc datorită definiţiei cuplajului (fiecare vârf de la nivelul impar

74
este incident unei singure muchii a cuplajului şi prin urmare vârful-
partener al său se determină în mod univoc).

1
x31
x5

x14
x16 x11

Fig. 13

Această situaţie
1
x31 ideea că trecerile de la nivelurile
ar sugera
x11 la cele xpare
impare 2
ar putea fi omise într-un
1 mod oarecare.
1
x5
x16
Vom
x4
simplifica procesul de căutare prin omiterea nivelurilor impare
efectuând nemijlocit trecerea din vârfuri exterioare în vârfuri noi, de
asemenea exterioare. O astfel de căutare ar putea fi interpretată
printr-un graf orientat (graful respectiv este prezentat în fig. 13).

Fig. 14

Din exemplul analizat, devine clar că problema construirii unui


lanţ de majorare poate fi redusă la problema construirii unui drum
75
într-un graf orientat, mulţimea de vârfuri a căruia coincide cu X 1 şi
în care două vârfuri x, y sunt unite printr-un arc (x, y), dacă şi numai
dacă y poate fi vârf exterior în careva drum de majorare după vârful
x. Un astfel de graf orientat, ce corespunde grafului din fig.11 este
prezentat în fig. 14.

2.3.2.1. Algoritmul construirii cuplajului maxim într-un


graf bipartit

Pentru descrierea algoritmului, vom folosi notaţiile:


M – cuplajul curent din graful bipartit G  ( X 1 , X 2 ;U ) ;
G * ( M )  ( X 1 , U * ) – graful orientat, construit după regulile
descrise anterior în baza grafului bipartit G şi în corespundere cu
cuplajul curent M;
L – o matrice de dimensiunile X 1  X 2 , liniile căreia
corespund vârfurilor din X 1 , coloanele – vârfurilor din X 2 şi cu
elementele

1, dacă x 2j este vârf liber şi adiacent cu xi1 ,


lij  
0, în caz contrar;
A – matricea de adiacenţă a grafului bipartit G  ( X 1 , X 2 ;U )
cu dim A   1   2 şi elementele

1, dacă xi1  x2j ,


aij  
0, în caz contrar.

76
În graful orientat G * ( M ) , construirea lanţului de majorare se
va face conform metodei de căutare în lăţime, pornind de la un vârf
x i1 , care în graful bipartit G  ( X 1 , X 2 ;U ) este vârf liber. Dacă în
procesul de căutare ajungem la un vârf x 1k pentru care linia cu
numărul k a matricei L conţine cel puţin o unitate, atunci aceasta
înseamnă că există lanţ de majorare în G. În caz contrar, procesul de
construire continuă.
Dacă în final nu reuşim să construim pentru G * ( M ) un drum,
căruia i-ar corespunde în G un lanţ de majorare, atunci cuplajul
curent M va fi cuplaj maxim. Aceasta s-ar întâmpla în cazul când
printre elementele mulţimii X 1 nu există vârfuri libere, sau în cazul
când în X 1 astfel de vârfuri există, însă toate elementele matricei L
sunt egale cu zero.

2.3.2.2. Descrierea algoritmului

Pasul 1. Iniţial considerăm M =  şi L = A.

Pasul 2. Dacă în X 1 nu există vârfuri libere ale grafului


bipartit în raport cu cuplajul curent M sau dacă L = 0, atunci trecem
la pasul 10. În caz contrar, realizăm pasul 3.
Pasul 3. Construim graful orientat G * ( M ) în modul următor:
a) Alegem mulţimea de vârfuri X 1 ;
1 1
b) Orice două vârfuri x k şi x m le unim printr-un arc, orientat
de la x 1k spre x 1m , dacă şi numai dacă în graful bipartit
există un vârf x q  X astfel încât x q  x k , x m , muchia
2 2 2 1 1

( x 1k , x q2 ) este liberă, iar ( x 1m , x q2 ) este muchie din M.


Dacă M   , atunci G * ( M ) va fi un graf vid.

Pasul 4. În graful construit G * ( M ) , alegem un vârf x 10 , care


este un vârf liber din G.

77
1
Pasul 5. Începând cu vârful x 0 , construim arborele de căutare
în lăţime.
(Dacă M   , atunci vom obţine numai vârful x 10 .)

Pasul 6. Dacă printre vârfurile suspendate ale arborelui de


căutare nu se găseşte nici unul, linia căruia în matricea L să conţină
cel puţin o unitate, atunci trecem la pasul 10. În caz contrar, dacă
există un astfel de vârf x11 , realizăm pasul 7.

Pasul 7. Ramura arborelui de căutare, care uneşte vârfurile x 10


cu x11 corespunde unui drum de majorare P în graful bipartit G.

Pasul 8. Modificăm cuplajul (obţinem un cuplaj nou, de


cardinal mai mare):

M  (M \P) (P \ M) .

Pasul 9. În conformitate cu cuplajul nou, construim matricea L.


Realizăm în continuare pasul 2.

Pasul 10. Cuplajul M este maxim. STOP.

Algoritmul descris rezolvă efectiv problema cuplajului maxim


într-un graf bipartit, având o complexitate polinomială în raport cu
numărul de vârfuri. Complexitatea algoritmului este de
O(min ( n1 , n 2 )  m) , unde n1  X 1 , n 2  X 2 , m  U .

2.3.3. Cuplajuri în grafuri neorientate. Caz general

78
Ideea extinderii unui cuplaj într-un graf bipartit din contul unui
lanţ de majorare este valabilă şi în cazul unui graf arbitrar, numai că
în acest caz apar unele complicaţii care pot fi depăşite într-un mod
special. În cazul grafurilor bipartite, se construieşte graful orientat
G * ( M ) , în baza cuplajului curent M cu mulţimea de vârfuri X 1 a
grafului bipartit G  ( X 1 , X 2 ;U ) . Această situaţie se datorează
faptului că vârfurile exterioare ale oricărui lanţ alternant ce porneşte
dintr-un vârf liber al mulţimii X 1 din G vor aparţine numaidecât
aceleiaşi mulţimi X 1 . Dacă însă vom analiza un graf arbitrar, atunci
aici situaţia este de altă natură: în calitate de vârf exterior ar putea
figura orice vârf al său.

Să analizăm graful din fig.15.

x10 x9 x8 x7

x2 x6 x5
x1

x3 x4

Fig. 15

Dacă raportat la cuplajul

M  {( x 2 , x3 ), ( x 4 , x5 ), ( x6 , x7 ), ( x8 , x9 )}

examinăm lanţurile alternante

79
P1  [ x10 , x9 , x8 , x7 , x6 , x5 , x4 , x3 , x2 , x1 ]
şi
P2  [ x10 , x9 , x8 , x7 , x6 , x 2 , x3 , x 4 , x5 ] ,

atunci vârfuri exterioare trebuiesc considerate aproape toate vârfurile


grafului, şi anume: x 2 , x3 , x 4 , x5 , x6 , x8 , x10 . Ba mai mult decât
atât: vârful x 2 , conform lanţului P1, este vârf exterior, iar conform
lanţului P2 – vârf interior.

Caz În caz general, graful orientat G * (M )


se construieşte pe
mulţimea tuturor vârfurilor X ale grafului G. Două vârfuri s şi t se
unesc printr-un arc ce porneşte din s în t, dacă în G există un lanţ
alternant în raport cu cuplajul curent M, în care s şi t sunt vârfuri
exterioare şi t este următorul vârf exterior după s în acest lanţ. Este
clar că orice lanţ de majorare a cuplajului corespunde unui drum din
G * ( M ) , ce porneşte dintr-un vârf x, liber în graful G, şi se termină
într-un vârf y, adiacent în G unui vârf liber. Afirmaţia reciprocă însă,
după cum uşor ne putem convinge, nu totdeauna are loc. Adică, nu
orice drum din G * ( M ) cu proprietatea menţionată, reprezintă un
lanţ de majorare a cuplajului curent în G. Pentru a ne convinge de
acest fapt, vom construi pentru graful din fig.15 graful orientat
G * ( M ) (vezi fig. 16).

În G * ( M ) există drumul [ x10 , x8 , x6 , x5 , x7 , x9 ] în care


x10 este un vârf liber în G, iar x9 este adiacent în G vârfului liber
x1 . Acestui drum însă îi corespunde în G lanţul

P0  [ x10 , x9 , x8 , x 7 , x6 , x 4 , x5 , x 6 , x7 , x8 , x9 , x1 ] ,

care la sigur nu este lanţ de majorare. Într-adevăr, dacă s-ar accepta


acest lucru, atunci cuplajul nou

80
M  (M \ P0) (P0 \ M )
va conţine două muchii adiacente ( x 4 , x6 ) şi ( x5 , x6 ) , ceea ce nu
poate avea loc în virtutea definiţiei cuplajului. Mai mult ca atât – P0
nici nu este cel puţin lanţ simplu în G.

x7
x8
x10 x9

x1 x2 x6 x5

x3 x4

Fg.16

Exemplul studiat confirmă ipoteza: căutarea lanţului de


majorare în cazul grafului arbitrar este o procedură mai complicată
decât în cazul grafului bipartit. Greutăţile în acest sens sunt datorate
existenţei într-un graf arbitrar a ciclurilor elementare de lungime
impară. Cu siguranţă, aici rolul decisiv îl joacă nu orice ciclu
elementar de lungime impară, ci numai ciclurile cu un număr maxim
de muchii ale cuplajului. Dacă lungimea ciclului elementar este
2k  1 , atunci numărul de muchii ale cuplajului în acest ciclu este k.
Astfel de cicluri le vom numi M-saturate. Pentru a ocoli ciclurile M-
saturate, vom construi pentru G un graf special.
Dacă C este un ciclu M-saturat în graful G, atunci se
construieşte un graf nou G / C  ( X / C ; U / C ) , unde X/C se obţine
pin eliminarea din X a tuturor vârfurilor ciclului C şi adăugarea unui

81
vârf nou xC (cu alte cuvinte, toate vârfurile ciclului C se înlocuiesc
printr-un vârf nou xC ).
Mulţimea de muchii U / C se obţine din U prin eliminarea
tuturor muchiilor incidente vârfurilor ciclului C şi înlocuirea
muchiilor de tipul (v, u ) , unde v nu este vârf al ciclului C, iar u este
vârf al acestui ciclu, printr-o singură muchie (v, xC ) . Căutarea
lanţului de majorare într-un graf G se face luând în consideraţie
următoarele două afirmaţii:

1) Într-un graf G care conţine un ciclu M-saturat C există lanţ


de majorare a cuplajului curent M, dacă şi numai dacă un astfel de
lanţ există în graful G / C ;

2) Dacă în G / C există un lanţ de majorare, ce conţine vârful


xC , atunci în graful G lanţul de majorare trece printr-o porţiune a
ciclului M-saturat C.

Cele spuse por fi ilustrate prin exemplul din fig.17. În graful G


există ciclul M-saturat

C  [ x 0 , x1 , x 2 , x3 ,..., x 2 j  2 , x 2 j 1 , x 2 j , x 2 j 1 ,..., x 2 k  2 , x 2 k 1 , x 2 k , x 0 ]
.

Construind graful G / C , obţinem trei lanţuri de majorare a


cuplajului:
P1  [ y1 , y 2 , xC , y3 , y 4 , y5 ] ,

P2  [ y1 , y2 , xC , y6 , y7 , y8 ] ,

şi
P3  [ y1 , y 2 , xC , y9 , y10 , y11 ] .

Acestor lanţuri le corespund în graful iniţial G lanţurile de


majorare:
82
P1*  [ y1 , y 2 , x0 , x 2 k , x 2 k 1 , ..., x 2 j 1 , y 3 , y 4 , y 5 ] ,

P2*  [ y1 , y 2 , x 0 , x1 , x 2 , ..., x 2 j  2 , y 6 , y 7 , y8 ] ,

P3*  [ y1 , y 2 , x0 , x1 , x 2 , x3 , y 9 , y10 , y11 ] .

y3 y4 y5
G: x2k x2k–2
x2j
x2k–1 x2j+1
x0
y1 y7
x2j–2 x2j–1
x10 x2 x3

y11 y10 y9 y6 y7 y8

y3 y4 y5
G/C:

xC
y1 y7

y6 y7 y8
y11 y10 y9

Fig.17

Din cele examinate, rezultă că dacă în graful G există un ciclu


M-saturat C1 , atunci construim graful G / C1 . Dacă şi acest graf
conţine cicluri M-saturate, atunci continuăm procedura de construire
83
a grafurilor noi, expusă mai sus, până nu obţinem un graf G / C care
nu conţine astfel de cicluri. Găsim în graful G / C un lanţ de
majorare a cuplajului (dacă astfel de lanţ există) şi în baza lui
restabilim lanţul de majorare în G.
Verificarea, dacă în graf există cicluri M-saturate, ar putea fi
făcută prin aplicarea metodei de căutare în lăţime, pornind dintr-un
vârf liber al grafului.

Descrierea algoritmului

Pasul 1. Considerăm cuplajul iniţial M=. Notăm prin G0


graful G pentru care se caută cuplajul maxim. Introducem un indice
i  0.

Pasul 2. Dacă în graf există un ciclu M-saturat, atunci realizăm


pasul 6. În caz contrar, realizăm pasul 3.

Pasul 3. Construim graful orientat Gi* ( M ) pentru Gi în


conformitate cu regulile de construire descrise anterior.

Pasul 4. Cu ajutorul algoritmului de căutare în lăţime, pornind


dintr-un vârf al grafului Gi* ( M ) , care este vârf liber în Gi , căutăm
un lanţ de majorare al cuplajului în Gi .
a) Dacă un astfel de lanţ nu există în Gi , atunci cuplajul curent
M, cunoscut în G0 , este cuplaj maxim. STOP.
*
b) Dacă în Gi ( M ) există drumul ce duce la obţinerea lanţului
de majorare în Gi , atunci analizând succesiv grafurile Gi ,
Gi 1 , ..., G1 , G0  G obţinem un lanţ de majorare P în G0 .
Trecem la pasul 5.

Pasul 5. Construim cuplajul nou în G0

84
M  (M \P) (P \ M) .

Considerăm i  0 şi trecem la pasul 2.

Pasul 6. Considerăm i  i  1 . Construim graful Gi  Gi 1 / C .


Trecem la pasul 2.

2.4. Probleme

1) Să se determine mulţimea de vârfuri stabilă interior maximă


pentru graful Petersen (fig. 18).

Fig. 18
2) Să se demonstreze că pentru orice arbore T are loc
inegalitatea  0 (T )  n , unde n este numărul de vârfuri ale
2
arborelui. Să se aducă exemple de arbori cu n vârfuri, pentru care

n n n


 0 (T )    ,    1,    2, ...
2
   2 2

Există oare arbore T cu n vârfuri pentru care  0 (T )  n ?

3) Să se determine nucleul grafului Petersen (fig. 18).


85
4) Să se construiască un graf neorientat în care orice mulţime
de vârfuri stabilă exterior minimă nu este şi stabilă interior.

5) Fie G  ( X ;U ) un graf neorientat, care nu conţine vârfuri


izolate. Să se demonstreze că în G există mulţime stabilă exterior A,
astfel încât X \ A de asemenea este mulţime stabilă exterior.
6) Să se demonstreze că dacă graful neorientat G  ( X ;U ) nu
conţine vârfuri izolate, atunci  0 (G )  X / 2 . Să se construiască un
graf conex cu un număr par de vârfuri pentru care  0 (G )  X / 2 .

7) În cazul unui graf neorientat G  ( X ;U ) , să se verifice


inegalitatea
 0 (G )   0 (G )

8) Fie GC (n) familia tuturor grafurilor neorientate şi conexe


cu n vârfuri. Să se construiască graful G0 GC (n) pentru care este
adevărată egalitatea
1 (G0 )  max 1 (G ) : G GC (n) .

9) Să se verifice afirmaţia: orice acoperire de vârfuri a unui graf


conţine o acoperite de vârfuri minimă. Răspunsul să se argumenteze.

10) Să se verifice afirmaţia: orice mulţime de vârfuri stabilă


interior a unui graf neorientat se conţine într-o mulţime stabilă
interior maximă. Răspunsul să se argumenteze.

11) Pentru un graf neorientat G  ( X ;U ) , să se verifice dacă


sunt adevărate inegalităţile:
 0 (G )   1 (G ) ,
 1 (G )   0 (G ) .

86
12) Să se formuleze condiţia necesară şi suficientă pentru
egalitatea
 1 (G )  1 (G ) .
13) Să se verifice inegalitatea
1 (G )   (G ) .
În cazul unui răspuns afirmativ, inegalitatea să se demonstreze.
În caz contrar, răspunsul să se argumenteze printr-un exemplu
concret.

14) Să se demonstreze sau să se respingă printr-un exemplu


concret afirmaţia: orice cuplaj al grafului se conţine într-un cuplaj
maxim.

15) Fie M şi N două cuplajuri ale grafului G, care satisfac


condiţiile
M N   ,

M  N .

Să se demonstreze că în graful G există alte două cuplajuri


M ' şi N ' , care satisfac condiţiile:
M 'N '   ,

M '  M 1 ,

N '  N 1,

M 'N '  M  N .

16) Fie v un vârf arbitrar al grafului T. Notăm prin  0 (v )


numărul de componente conexe cu un număr impar de vârfuri ale
grafului T  v . ( T  v este graful ce se obţine din arborele T după
eliminarea vârfului v). Să se demonstreze că în T există un cuplaj
87
perfect, dacă şi numai dacă  0 (v )  1 pentru toate vârfurile
arborelui.

17) Să se demonstreze că într-un graf bipartit cu m muchii are


loc inegalitatea
m   0 (G )   0 (G ) ,
care se transformă într-o egalitate, dacă şi numai dacă G este un graf
bipartit complet.

18) Să se demonstreze că într-un graf bipartit G are loc


egalitatea
 1 (G )   0 (G ) .

19) Să se demonstreze că într-un graf bipartit G  ( X 1 , X 2 ;U ) ,


X 1  X 2  n există cuplaj format din n muchii, dacă şi numai dacă

pentru orice submulţime de vârfuri S  X 1 se respectă condiţia:

x  X 2
: y  X 1 astfel încât x  y  S .

20) Să se construiască un graf neorientat cu 6 vârfuri, diferit de


K 6 , în care orice mulţime stabilă interior se conţine într-o mulţime
stabilă interior maximă. Există oare grafuri cu proprietatea indicată
pentru orice număr de vârfuri n?

21) Să se afle cardinalul mulţimii de vârfuri stabile exterior


minime pentru ciclurile simple de lungimea n, notate prin C n , şi
pentru lanţurile elementare de lungimea n, notate prin Pn .

22) Fie G un graf neorientat, ale cărui mulţimi de vârfuri X G


şi muchii U G reprezintă mulţimile de vârfuri şi muchii ale unui
poliedru regulat din R 3 . Graful G se mai numeşte schelet al
poliedrului respectiv. Să se determine:

88
a) numărul maxim de vârfuri din G, care formează o mulţime
stabilă interior;
b) numărul minim de vârfuri din G, care formează o mulţime
stabilă exterior;
c) numărul maxim de muchii din G, care formează un cuplaj.

23) Să se construiască toate grafurile neorientate G cu 6 vârfuri


şi un număr minim de muchii, pentru care se respectă inegalitatea
 0 (G )  k ,
unde k  3, 4, 5, 6 .

24) Să se estimeze printr-un interval de pe axa reală numărul de


mulţimi stabile interior ale unui graf neorientat cu n vârfuri şi m
muchii. Ce se întâmplă cu acest interval odată cu creşterea numărului
de muchii din graf.

25) Să se descrie grafurile G ce posedă proprietatea: la


eliminarea oricărei muchii u  U G obţinem un graf nou G – u pentru
care se respectă inegalitatea
 0 (G  u )   0 (G ) .

26) Să se demonstreze că printre şase persoane luate la


întâmplare numaidecât se vor găsi trei care se cunosc între ele, sau
invers – nu se cunosc.

27) Să se demonstreze că printre n  9 punctre luate în plan


numaidecât se vor găsi cinci puncte, care pot fi considerate vârfuri
ale unui poligon convex.

28) Să se verifice dacă este adevărată afirmaţia: pe o tablă de


şah se pot aşeza opt dame astfel, încât nici una să nu fie atacată de
altă damă. Care ar fi răspunsul în cazul a mai mult decât opt dame?
Răspunsul să se argumenteze în termenii mulţimilor stabile interior.

89
29) Să se determine numărul minim de dame (sau alte figuri –
cai, nebuni, turnuri) care pot fi plasate pe tabla de şah astfel, încât
fiecare pătrat al tablei să fie atacat de cel puţin una dintre piesele
plasate. Argumentaţi răspunsul în termenii mulţimilor stabile
exterior.

30) Să se construiască cuplajuri perfecte în grafuri 3-regulate


cu n  6 vârfuri, care nu conţin puncte de articulaţie. Să se
demonstreze că orice graf 3-regulat fără puncte de articulaţie conţine
cuplaj perfect.

31) Să se verifice corectitudinea următoarei afirmaţii: orice


cuplaj maxim într-un arbore T conţine cel puţin o muchie suspendată
din T (muchie suspendată este muchia incidentă unui vârf de grad
unu). Răspunsul să se argumenteze.

32) Să se caracterizeze arborii T pentru care are loc egalitatea


 0 (T )   0 (T )  1 (T )  1 (T ) .

Să se dea exemple de astfel de arbori.

33) Să se demonstreze că în orice graf G cu n vârfuri are loc


inegalitatea
n
1 (G )  .
2
Să se dea exemple de grafuri în care

n n
1 (G )   ,    1, ...
2 2

Există oare grafuri cu 1 (G )  n ?

34) Fie C k puterea de gradul k  1 a unui ciclu simplu C cu n


vârfuri. Să se exprime în funcţie de  0 (C ) numărul de stabilitate
internă a grafului C k . Este oare adevărată egalitatea
90
 0 (C k )   0 (C k 1 )  1 ?

Răspunsul să se completeze cu unele exemple concrete.


35) Să se demonstreze că pentru orice arbore T şi orice număr
k   (T ) există k cuplajuri M 1 , M 2 , ..., M k , ce formează o
divizare a mulţimii de muchii U T , adică

U T  M 1  M 2 ...  M k ,

M i  M j   , pentru i, j  1, k , i  j,

iar cuplajurile Mi, i  1, k satisfac condiţia

m m
 k   M i   k  , unde m  U T .
   

36) Să se dea exemple de grafuri pentru care mulţimea de


muchii U formează un cuplaj. În ce condiţii acest cuplaj va fi
perfect?

37) Să se determine toate grafurile pentru care există cuplaj


maximal format dintr-o singură muchie.

91
III. COLORAREA GRAFURILOR

Problemele de colorare ocupă un loc important în teoria


grafurilor atât prin rezultatele teoretice impunătoare, cât şi prin
utilizarea acestora la soluţionarea problemelor practice. Printre
problemele practice, la soluţionarea cărora se folosesc rezultatele ce
ţin de colorarea elementelor grafului, pot fi menţionate problemele ce
apar în procesul de planificare a procesului de producere, problemele
de stocare şi transportare a mărfurilor, problema orarului etc.

3.1. Colorarea vârfurilor

Fie G  ( X ;U ) un graf arbitrar şi k un număr natural.


Aplicaţia f : X  1,2,..., k  se numeşte k-colorare a vârfurilor
grafului G . Numărul f (x ) asociat vârfului x se numeşte culoare a
acestui vârf.

Definiţia 3.1.1. O k-colorare, determinată de aplicaţia


f : X  {1,2,..., k } , se numeşte corectă, dacă pentru oricare două
vârfuri adiacente x şi y ale grafului G are loc relaţia

f ( x)  f ( y ) .

Graful pentru care există o k-colorare corectă se numeşte k-


colorabil. Ţinând cont de definiţia 3.1.1, s-ar putea de spus că o
colorare corectă a vârfurilor grafului G determină o partiţie a
mulţimii de vârfuri X în l  k submulţimi, adică

X  X 1 U X 2 U ... X l , l  k ,

X i I X j   , pentru i  j , i  1, l , j  1, l .
Fiecare clasă X i , i  1,2,..., l este o mulţime stabilă interior,
numită clasa culorii i.

92
Definiţia 3.1.2. Numărul minim k pentru care graful G este k-
colorabil se numeşte număr cromatic al grafului şi se notează prin
 (G ) .

În cazul  (G )  k , se mai spune că graful G este k-cromatic.


O k-colorare corectă a grafului G se numeşte minimală, dacă
k   (G ) .

Fig.19

În cazul  (G )  k , se mai spune că graful G este k-cromatic.


O k-colorare corectă a grafului G se numeşte minimală dacă
k   (G ) .
Pentru graful G din fig.19, este indicată o colorare corectă a
vârfurilor acestuia în 4 culori. Totodată, menţionăm că acest graf nu
poate fi colorat corect într-un număr mai mic de culori. Într-adevăr,
observăm că G conţine un ciclu de lungime impară
[ x1 , x 2 , x 3 , x 4 , x 5 , x1 ] şi prin urmare vârfurile lui pot fi colorate în
cel puţin 3 culori. Deoarece x 6  x i , i  1,5 , pentru colorarea
acestui vârf se va folosi neapărat o a patra culoare. Astfel obţinem
 (G )  4 .

I) Crearea unui orar. Este necesar să se ţină un anumit număr de


lecţii într-o perioadă cât mai scurtă de timp. Se cunoaşte că fiecare

93
lecţie durează o oră academică şi unele lecţii nu pot fi ţinute simultan
(de exemplu, dacă sunt ţinute de acelaşi profesor).
Vom examina graful G vârfurile căruia corespund bijectiv
lecţiilor şi orice două vârfuri sunt adiacente, dacă şi numai dacă
lecţiile corespunzătoare nu pot fi ţinute în acelaşi timp. Uşor se
observă că orice colorare corectă a acestui graf determină un orar
posibil (lecţiile ce corespund vârfurilor din clasa cu aceeaşi culoare
pot fi predate concomitent) şi invers, orice orar posibil determină o
colorare corectă a grafului G . Orarele optimale corespund
colorărilor corecte minimale, iar numărul  (G ) indică timpul minim
în care pot fi ţinute toate lecţiile.

II) Problema repartizării utilajului. Fie date mulţimile


V  {v1 , v 2 ,..., v n } de lucrări şi S  {s1 , s 2 ,..., s m } de dispozitive.
Pentru efectuarea fiecărei lucrări, sunt necesare anumite dispozitive
şi o perioada de timp, aceeaşi pentru toate lucrările. În plus, fiecare
dispozitiv nu poate fi utilizat simultan la câteva lucrări. Să se
distribuie dispozitivele astfel ca timpul necesar pentru efectuarea
tuturor lucrărilor să fie minim.
În cazul acestei probleme, construim graful G cu mulţimea de
vârfuri V (vârfurile corespund bijectiv lucrărilor) în care două
vârfuri vi , v j ( i  j ) sunt adiacente, dacă şi numai dacă pentru
efectuarea lucrărilor vi , v j este necesar cel puţin un dispozitiv
comun. La o colorare corectă a grafului G , lucrările ce corespund
vârfurilor clasei cu aceleaşi culori pot fi efectuate concomitent, iar
timpul minim de realizare a tuturor lucrărilor este determinat de
numărul  (G ) .

Pentru unele grafuri numărul cromatic se determină destul de


simplu. De exemplu,  ( K n )  n ,  ( K n  e)  n  1 ,  ( K n ,m )  2 şi
 (C 2 n 1 )  3 .
În caz general, determinarea numărului cromatic al unui graf şi
construirea unei  -colorări este o problemă complicată. De aceea,
un interes deosebit prezintă estimările numărului cromatic exprimate
94
prin diverşi parametri ai grafului, care se calculează relativ uşor. Vom
menţiona unele estimări ale numărului cromatic:

a) Dacă G este un graf conex necomplet şi  (G )  3 , atunci


 (G )   (G ) (aici  (G ) este gradul maxim al vârfurilor grafului
G);
b) Să notăm prin G(G ) familia subgrafurilor, generate de toate
submulţimile de vârfuri ale grafului G, iar prin  (H ) gradul minim
al vârfurilor grafului H G(G ) . Este adevărată inegalitatea:
 (G )  1  max { ( H )} ;
H G( G )

c) Dacă cunoaştem numărul de stabilitate internă  0 (G ) al


grafului G cu n vârfuri, atunci se verifică următoarea estimare dublă
a numărului cromatic  (G ) :
n /  0 (G )   (G )  n   0 (G )  1 ;

d)  (G )   (G ) , unde  (G ) reprezintă densitatea grafului;


e)  (G )  n 2 (n 2  2m) , unde n este numărul de vârfuri ale
grafului G, iar m – numărul de muchii;
1
f)  (G )  1  (2m(n  1) n) 2 .
Vom examina în continuare anumiţi algoritmi folosiţi la
determinarea numărului cromatic şi a colorării optimale a vârfurilor
unui graf arbitrar. Expunem mai întâi principiile metodei programării
dinamice, folosite la elaborarea algoritmilor respectivi.

3.2. Metoda programării dinamice

Subgraful r-cromatic G S r al grafului G   X ;U  generat de


mulţimea S r  X se numeşte r -subgraf. Vom spune că G S r este
r -subgraf maximal, dacă pentru orice H  S r subgraful G H nu
este r-cromatic. Uşor se observă că subgraful a cărui mulţime de
95
vârfuri coincide cu una din mulţimile stabile interior maxime ale
grafului G este 1-subgraf maximal al lui G.
Ţinând cont de noţiunile introduse, putem spune că numărul
cromatic al grafului G este cel mai mic număr r pentru care există cel
puţin un 1-subgraf maximal al lui G cu mulţimea de vârfuri S r  X .
Vom analiza relaţiile recurente ce stabilesc legătura dintre r-
subgrafurile şi (r-1)-subgrafurile maximale ale grafului G .
Să notăm prin Qr 1 familia tuturor (r-1)-subgrafurilor
maximale din G, iar prin S rj1 mulţimea de vârfuri a subgrafului cu
numărul de ordine j din familia Qr 1 . Atunci S1k (G j ) este
mulţimea de vârfuri a 1-subgrafului maximal cu numărul de ordine k
al grafului G j generat de mulţimea de vârfuri X  S rj1 , adică de
vârfurile grafului G ce nu aparţin (r-1)-subgrafului G S rj1 . Vom
construi familia r-subgrafurilor maximale ale grafului G:

Mai întâi se construiesc mulţimile

H i  S rj1  S1k , (1)


j  1,2,  , q r 1 , k  1,2,  , q1 , unde qr 1 şi q1 sunt respectiv
j j

numărul (r-1)-subgrafurilor şi q1j – numărul 1-subgrafurilor.


Notăm prin  familia tuturor mulţimilor
H , i  1,2,  , q1  q r 1 . Atunci familia r-subgrafurilor
i j
 r poate fi

descrisă astfel:


 r (G )  H i | H i   şi H i  H j pentru orice H j  , i  j  . (2)

Relaţiile recurente (1) şi (2) se aplică la generarea succesivă a


1-subgrafurilor maximale, 2-subgrafurilor maximale, etc. şi
determinarea numărului cromatic al grafului G.

Vom expune acum un algoritm ce determină numărul cromatic


al grafului G şi colorarea care corespunde acestui număr.

96
Pasul 1. Considerăm r=1. Determinăm mulţimile de vârfuri
S , j  1,2,  , q r , ale r-subgrafurilor maximale ale grafului G. (Se
r
j

consideră că numărul acestor mulţimi este q r .)



Definim mulţimea Q  S rj | j  1,2, , q r  şi luăm j  1 .

Pasul 2. Determinăm o mulţime nouă stabilă interior S1 a


grafului G j generat de mulţimea de vârfuri X  S rj .
Dacă mulţimea S1 există, atunci trecem la pasul 3.
Dacă toate mulţimile stabile interior ale grafului G j au fost
deja determinate, atunci trecem la pasul 6.

Pasul 3. Se construieşte mulţimea S  S rj  S1 .

Pasul 4. Dacă S  X , atunci r  1 este numărul cromatic al


grafului G, iar submulţimile mulţimii S determină colorarea grafului
G. (Submulţimile respective se marchează şi se păstrează separat.)
STOP.
Dacă S  X , atunci trecem la pasul 5.

Pasul 5.
(i) Dacă există o mulţime S ' Q cu proprietatea S  S ' ,
atunci trecem la pasul 2.
(ii) Dacă există o mulţime S ' Q pentru care S  S ' , atunci
efectuăm transformarea:
Q  Q   S ' .
Procedăm în aşa mod cu toate mulţimile S ' Q ce posedă
proprietatea indicată.
Considerăm Q  Q  S  şi trecem la pasul 2.
(iii) În caz câ nici una dintre condiţiile (i) şi (ii) nu se
îndeplineşte, considerăm Q  Q  S  şi trecem la pasul 2.

97
Pasul 6. Dacă j  q r , atunci considerăm j=j+1 şi trecem la
pasul 2. Dacă j  q r , atunci fixăm j  1 , r  r  1 , q r | Q | şi
trecem la pasul 2.

Vom menţiona că algoritmul expus nu determină toate


colorările posibile cu r+1 culori ale grafului, dar asigură generarea
colorărilor optimale ale grafului.

Exemplu. Să examinăm acum algoritmul propus mai sus în


cazul grafului G, reprezentat în fig.20.

2 4

1 5

7 6

Fig.20

Pasul 1. Mulţimile de vârfuri ale 1-subgrafurilor maximale


sunt:
S11  1,4,6 ; S12   2,3,5 ; S13   2,5,7 ; S14   2,6 .
 
Deci q  4 şi Q  S11 , S12 , S13 , S14 .
Aplicăm (de un număr necesar de ori) paşii 2-5 ai algoritmului:
Pentru S11 :
98
Pasul 2. Mulţimea stabilă interior a grafului G 1 generat de
mulţimea de vârfuri  2,3,5,7 este S1   2,3,5 .
Pasul 3. S  1,4,6  2,3,5 .
Pasul 5. Q  1,4,6, 2,3,5  .
Pasul 2. S1   2,5,7 .
Pasul 3. S  1,4,6  2,5,7 .
Pasul 5. Q  1,4,6, 2,3,5 ,1,4,6  2,5,7  .

Pentru S12 :
Pasul 2. Pentru graful G 2 generat de mulţimea de vârfuri
1,4,6,7 mulţimea stabilă interior este S1  1,4,6 .
Pasul 3. S  2,3,5  1,4,6 este exclusă conform pasului 5 (i).
Pasul 2. S1   7 .
Pasul 3. S  2,3,5  7 .
*Pasul 5. Q  1,4,6, 2,3,5 ,1,4,6  2,5,7 ,2,3,5  7 .

Pentru S13 :
Pasul 2. Mulţimea stabilă interior a grafului G 3 generat de
mulţimea de vârfuri 1,3,4,6 este S1  1,4,6 .
Pasul 3. S  2,5,7  1,4,6 este exclusă conform pasului 5 (i).
Pasul 2. S1   3 .
Pasul 3. S  2,5,7  3 este exclusă conform pasului 5 (i).

Pentru S14 :
Pasul 2. Pentru graful G 4 generat de mulţimea de vârfuri
1,3,4,5,7 mulţimea stabilă interior este S1  1,4 .
Pasul 3. S  2,6  1,4 este exclusă conform pasului 5 (i).
Pasul 2. S1   3,5 .
Pasul 3. S  2,6  3,5 este exclusă conform pasului 5 (i).
Pasul 2. S1   5,7 .
Pasul 3. S  2,6  5,7 este exclusă conform pasului 5 (i).

99
Astfel, la finele primei iteraţii, care aplică paşii 2-5 ai
algoritmului, se obţine familia Q (pasul marcat cu asterisc) de
j
mulţimi S 2 ce corespund 2-subgrafurilor maximale. Acţionând în
mod analogic, pot fi construite 3-subgrafurile maximale etc.
În cazul grafului G din fig. 20, continuând realizarea pas cu pas
a algoritmului, printre mulţimile ce corespund 3-subgrafurilor
maximale se va obţine şi mulţimea S 31  1,4,6  2,5,3  7 care
1
satisface condiţia pasului 4: S 3  X . Deci numărul cromatic al
grafului G este egal cu 3, iar colorarea optimală este definită de
partiţia (a mulţimii X): 1,4,6 ,  2,5,3 ,  7 . Dacă vom continua
aplicarea algoritmului, atunci vom obţine încă o colorare a vârfurilor
grafului: 1,4,6  2,5,7  3 .

Remarcă. Menţionăm, că colorarea  5,3 , 1,4,6 ,  2,7 şi


alte colorări de acest tip, deşi sunt corecte, nu se generează de
algoritmul expus mai sus.

3.3. Algoritmul de triere implicită

Pentru a determina numărul cromatic al grafului poate fi aplicat


un algoritm simplu dar destul de efectiv, algoritmul de triere
implicită, ce foloseşte arborele de căutare.

Pasul 1. Ordonăm mulţimea de vârfuri a grafului G într-un mod


arbitrar şi vârfului x1 îi aplicăm culoarea cu numărul1.

Pasul 2. Dacă toate vârfurile grafului au fost colorate, atunci


scopul este atins. STOP.
În caz contrar, trecem la pasul 3.

100
Pasul 3. Primului vârf necolorat x i i se atribuie „cea mai mică”
culoare, care nu a fost folosită la colorarea vârfurilor adiacente cu xi
. Trecem la pasul 2.

Eficienţa algoritmului expus creşte considerabil, dacă se ţine


cont de următoarele sugestii:
1) Pentru o ordonare arbitrară a vârfurilor orice culoare j , care
poate fi atribuită vârfului xi , satisface relaţia j  i .
2) Mulţimea de vârfuri a grafului se ordonează astfel ca primele
vârfuri în această ordonare să genereze o clică maximă. În
acest caz, vârfurile ce formează clica maximă vor fi colorate
în culori distincte, iar viteza de realizare a algoritmului creşte.

3.4. Metode euristice de colorare

Există un şir de proceduri euristice de colorare a grafurilor care,


în cazul grafurilor de dimensiuni mari, asigură determinarea
numărului cromatic cu o aproximare bună.

3.4.1. Metoda succesivă

Aranjăm vârfurile grafului într-o ordine necrescătoare a


gradelor şi atribuim primului vârf din lista ordonată culoarea 1.
Parcurgem lista şi atribuim culoarea 1 fiecărui vârf neadiacent cu nici
unul din vârfurile deja colorate cu această culoare. Apoi revenim la
primul vârf necolorat. Atribuim acestui vârf culoarea 2 şi din nou
parcurgem lista ordonată a gradelor vârfurilor, colorând cu culoarea 2
fiecare vârf încă necolorat şi neadiacent cu nici unul din vârfurile
deja colorate cu această culoare. Procedeul se repetă până vor fi
colorate toate vârfurile grafului. Numărul de culori utilizate la
această colorare este o aproximare a numărului cromatic al grafului.
Algoritmul expus poate fi modificat. Una din modificările
simple constă în reordonarea vârfurilor necolorate după fiecare etapă
101
de colorare. Vârfurile necolorate se rearanjează în ordinea
necrescătoare a gradelor sale relative. Prin grade relative vom
înţelege gradele vârfurilor în subgraful obţinut din graful iniţial după
eliminarea vârfurilor deja colorate. Dacă două vârfuri vor avea grade
egale, atunci ordinea apariţiei acestora în lista ordonată este aleatorie.
2
Notăm prin d i gradul vârfului x i . Gradul d i este numărul
de lanţuri distincte de lungimea 2 ce pornesc din vârful x i .
Reordonarea vârfurilor x i , i=1,...n poate fi făcută şi în baza gradelor
d i2 , dacă gradele d i ale acestora coincid. În caz câ atât gradele d i ,
cât şi gradele d i2 ale vârfurilor coincid, ordonarea poate fi făcută
3
după gradele d i etc.

3.4.2. Metoda dihotomiei

Fie x1 şi x2 două vârfuri neadiacente ale grafului G   X ;U  ,


| X | n , care urmează a fi colorate. Vom considera două clase de
colorări ale grafului G. O clasă conţine toate colorările în care
vârfurile x1 şi x2 au aceeaşi culoare, iar cealaltă clasă constă din
colorările în care x1 şi x2 sunt colorate diferit. Uşor se observă că
aceste două clase de colorări se exclud reciproc. Orice colorare
fezabilă a grafului G aparţine uneia din cele două clase distincte. În
primul caz (dacă colorarea grafului aparţine primei clase), graful G
~
se colorează la fel ca şi graful G cu n  1 vârfuri, care se obţine în
urma contopirii vârfurilor 1 şi 2 într-un vârf nou ~
x x x1 , adiacent
cu toate vârfurile din N ( x1 )  N ( x2 ) (prin N ( xi ) se notează
vecinătatea vârfului xi ). În al doilea caz, deoarece x1 şi x2 obţin
culori distincte, independent de faptul sunt sau nu adiacente aceste
vârfuri, graful G este colorat la fel ca şi graful G   ( X ,U  ) , care se
obţine după adăugarea muchiei ( x1 , x2 ) în G. Grafurile G şi G 
le vom numi grafuri reduse ale grafului G.

102
x1

y1

x6
x2

y2 y3
x4 x5 x6

y5 y6
y4
x7

y7

Fig.21

Deoarece cele două clase conţin toate colorările posibile ale


grafului, rezultă că  (G )  min(  (G ),  (G  )) . Menţionăm că
ambele grafuri reduse G şi G  sunt mai „aproape” de graful
complet decât graful G, dat fiind faptul că N ( ~
x1 )  N ( xi ), i  1,2 , şi
 
N ( x1 )  N ( x1 ) , N ( x2 )  N ( x2 ) .

Cercetăm în continuare grafurile G şi G  . Pentru fiecare din


aceste grafuri, alegem două vârfuri arbitrare neadiacente şi aplicăm
procedura descrisă mai sus, obţinând astfel
103

 (G )  min(  (G ),  (G ),  (G  ),  (G   )) .

Procedeul se repetă până când orice graf redus nou nu va mai


conţine nici o pereche de vârfuri neadiacente. Un exemplu este
prezentat în fig.21. Astfel,  (G ) va fi numărul minim dintre
numerele cromatice ale grafurilor complete ce nu mai pot fi reduse.
Colorarea optimală a grafului G este determinată de colorarea
grafului complet cu un număr minim de vârfuri, obţinut ca rezultat al
aplicării metodei dihotomiei, la fiece pas al căreia, perechea de
vârfuri contopite obţine aceeaşi culoare.

3.5. Colorarea muchiilor

Fie G  ( X ;U ) un graf arbitrar, iar k un număr natural.

Definiţia 3.5.1. Funcţia g, care pune în corespondenţă fiecărei


muchii e din graful G un număr g(e) din mulţimea 1,2,  , k  se
numeşte k-colorare a muchiilor grafului.

Dacă g este o colorare a muchiilor grafului şi g (e)  c , vom


spune că muchia e are culoarea c. Mulţimea tuturor muchiilor
colorate cu aceeaşi culoare c formează clasa culorii c. Colorarea
muchiilor grafului este corectă, dacă muchiile adiacente au culori
distincte. Graful G se numeşte k-colorabil, dacă acesta posedă o k-
colorare corectă a muchiilor.

Definiţia 3.5.2. Numărul minim k, pentru care există o k-


colorare corectă a muchiilor grafului G, se numeşte indice cromatic
al grafului şi se notează prin  ' (G ) . În cazul  ' (G )  k , se mai
spune că graful G este k-cromatic.

Vom menţiona nişte estimări destul de exacte ale indicelui


cromatic:

104
a) Deoarece în orice colorare corectă a muchiilor grafului G
muchiile incidente unui vârf au culori distincte, este adevărată
relaţia:  ' (G )   (G ) , unde  (G ) este gradul maximal al
vârfurilor grafului G.
b) Pentru orice graf G, este adevărată următoarea estimare dublă
a indicelui cromatic
 (G )   ' (G )   (G )  1 .

c) Pentru unele clase de grafuri, valoarea indicelui cromatic se


determină exact:
 ' ( K 2 n 1 )  ( K 2 n 1 )  1  2n  1 ,
 ' (G )   ( K 2 n )  2n  1 ,
unde K r este un graf complet cu r vârfuri.

d) Pentru orice graf bipartit G, are loc egalitatea


 ' (G )   (G ) .

Pentru a determina o colorare corectă a muchiilor şi indicele


cromatic al unui graf, putem aplica algoritmul de triere implicită
expus în § 3.3, ţinând cont că obiectul colorării sunt muchiile
grafului.

3.6. Probleme

1. Să se determine numerele cromatice şi indicii cromatici ai


grafurilor K n şi K n , n .
2. Să se determine numerele cromatice ale grafurilor:

105
3. Să se demonstreze că vârfurile unui graf plan pot fi colorate cu 6
culori.
4. Să se demonstreze prin inducţie că pentru orice graf plan G se
verifică inegalitatea  (G )  5 .
5. Să se construiască un graf G1 cu numărul cromatic  (G1 )  3
şi un graf G2 cu numărul cromatic  (G2 )  4 , care nu conţin
triunghiuri.
6. Vârfurile grafului G sunt numerotate în ordinea crescătoare a
gradelor. Să se demonstreze că dacă q este cel mai mare număr
pentru care este adevărată inegalitatea q  d (v k )  1 , atunci
 (G )  q .
7. Să se demonstreze că  (G )  l  1 , unde l este lungimea celui
mai lung lanţ elementar în graful G.
8. Să se determine indicii cromatici pentru grafurile:

9. Fie d gradul maxim al vârfurilor grafului G. Să se demonstreze


inegalităţile:
a)  (G )  d  1 ,
b)  ' (G )  d  1 .
10. Să se demonstreze că indicele cromatic al grafului complet K n
este
n, pentru n impar ,
 ' (G )  
 n  1, pentru n par.

106
11. Fie G complementarul grafului G cu n vârfuri. Să se
demonstreze următoarele inegalităţi pe care le verifică numărul
cromatic:
2 n   (G )   (G )  n  1 ,

n   (G )   (G )  ( n  1) 2 / 4 .

12. Se desenează un număr arbitrar de linii unicursive în plan,


astfel încât oricare trei din ele să nu aibă un punct comun.
Definim graful planar G considerând punctele de intersecţie ale
liniilor drept vârfuri ale grafului, iar segmentele dintre punctele
de intersecţie vecine drept muchii ale acestui graf. Să se arate
că  (G )  3 .
13. Să se demonstreze că pentru orice graf nevid G, există o partiţie
a mulţimii de vârfuri, X  X 1  X 2 , astfel încât se verifică
egalitatea  (G1 ( X 1 ))   (G 2 ( X 2 ))   (G ) .
14. Fie G   ;U  un graf planar hamiltonian. Să se demonstreze
că faţetele oricărei reprezentări corecte în plan a grafului G se
colorează cu 4 culori astfel încât oricare două faţete ce au
muchii comune sunt colorate în mod diferit.
15. Graful G se numeşte critic, dacă după eliminarea unui vârf
arbitrar se obţine un graf al cărui număr cromatic este mai mic
decât cel al grafului G. Să se demonstreze afirmaţia: K n este
graf critic pentru n>1, iar Cn este critic, dacă şi numai dacă
numărul n este impar.
16. Să se demonstreze că dacă G   X ;U  este un graf critic, iar
S  X este o mulţime intern stabilă în G, atunci
 (G ' )   (G )  1 ,
unde G ' se obţine din G la eliminarea submulţimii de vârfuri
S.
17. Să se demonstreze că orice graf critic k-cromatic:
a) este conex;
107
b) nu conţine vârfuri de articulaţie;
c) gradul fiecărui vârf nu este mai mic decât k-1.
18. Să se dea un exemplu de graf, colorarea succesivă a vârfurilor
căruia nu este minimală.
19. Fie G(G ) mulţimea tuturor subgrafurilor generate de
submulţimile de vârfuri ale grafului G. Să se demonstreze că la
colorarea consecutivă a grafului G se utilizează nu mai mult de
1  max H G( G ) { ( H )} culori.

20. Să se demonstreze că, pentru orice arbore cu n  2 vârfuri,


numărul cromatic este egal cu 2.
21. Să se demonstreze că un graf este bicromatic, dacă şi numai
dacă nu conţine cicluri de lungime impară.
22. Să se demonstreze că pentru graful Petersen este adevărată
egalitatea    4 .
23. Un număr finit de drepte divizează planul într-un număr finit
de domenii conexe. Să se demonstreze că sunt suficiente două
culori pentru a colora aceste domenii astfel, încât oricare două
domenii adiacente să fie colorate în culori distincte. Domeniile
ce au un singur punct comun (punctul de intersecţie a dreptelor)
nu se consideră adiacente.
24. Fie G1 , G2 , , Gk blocuri ale grafului G. Să se demonstreze că
 (G )  max  (Gi ) .
i

25. Să se construiască graful G  K1,3  P3 , ca produs cartezian al


grafurilor K1, 3 şi P3 , şi să se găsească o colorare optimală a
vârfurilor acestui graf.
26. Să se verifice următoarea afirmaţie: pentru orice graf G cu n
vârfuri şi m muchii, este adevărată inegalitatea
 (G )  1  a (G ) ,
unde a (G )  2m / n este gradul mediu al vârfurilor din G.

108
27. Să se dea un exemplu de două grafuri care au aceeaşi
succesiune a gradelor vârfurilor, iar numerele cromatice ale
acestora sunt diferite.
28. Să se propună un algoritm de colorare a muchiilor garfului K n
cu  ( K n ) culori.
29. La un turneu de şah participă n şahişti. Ştiind că fiecare şahist
trebuie să joace câte o partidă cu fiecare din ceilalţi n-1
participanţi la turneu şi nu poate juca mai mult de o partidă pe
zi, să se afle numărul minim de zile în care se poate termina
turneul.
30. Să se dea un exemplu de graf, colorarea succesivă a vârfurilor
căruia nu este minimală.
31. Fie G un graf neorientat cu mulţimea de vârfuri X de cardinal n
şi mulţimea muchiilor U. Orice  -colorare a acestui graf este
o funcţie f : X  1,2, , cu proprietatea că dacă ( x , y ) U ,
atunci f ( x)  f (y) .
Să se demonstreze că numărul  -colorărilor grafului G se
exprimă sub forma unui polinom de gradul n, numit polinomul
cromatic al grafului G şi notat PG ( ) în modul următor:
PG ( )   ( 1)|V| c (V ) , unde c (V ) este numărul
V U
componentelor conexe ale grafului parţial G '   X ;V  al
grafului G.
32. Să notăm prin G-e graful obţinut din graful neorientat G prin
suprimarea muchiei sale e  ( x, y ) , iar prin G | e graful obţinut
prin substituirea vârfurilor x, y cu un vârf nou z, adiacent cu
toate vârfurile grafului G care la rândul său erau adiacente fie
cu x, fie cu y. Să se demonstreze că:
PG ( )  PG  e ( )  PG |e ( ) .

109
33. Dacă notăm prin K n graful complet cu n vârfuri, prin Tn – un
arbore cu n vârfuri şi prin C n – ciclul elementar cu n vârfuri,
atunci să se demonstreze că au loc relaţiile:
1. PK n ( )   (  1)  (  n  1) ;
n 1
2. PT ( )   (  1) ;
n

n n
3. PC ( )  (  1)  (1) (  1) .
n

34. Să se demonstreze că dacă G este un graf cu n vârfuri, atunci


polinomul său cromatic are forma:
PG ( x)  x n  a n 1 x n 1  a n  2 x n  2    ( 1) n 1 a1 x ,

unde ai  0 pentru orice i  1,2, , n  1 .


35. Amintim că o k-colorare a vârfurilor unui graf G este o partiţie
a mulţimii vârfurilor cu k clase, astfel încât fiecare clasă a
partiţiei să conţină numai vârfuri neadiacente două câte două.
Să se demonstreze că numărul maxim de k-colorări ale
vârfurilor grafului G cu n vârfuri, având numărul cromatic
 (G )  k , este egal cu k n  k , iar graful care admite acest
număr maxim de colorări este format dintr-un subgraf complet
cu k vârfuri şi din n-k vârfuri izolate.
36) Un graf planar G   X ;U  se numeşte exterior planar, dacă
poate fi desenat în plan astfel, încât toate vârfurile sale să
aparţină frontierei unei feţe. Să se demonstreze că pentru orice
graf planar exterior G  ( X , U ) , X  3 , cu un maxim de
muchii, numărul cromatic este egal cu trei.

110
IV. DRUMURI MINIME

Fie G  ( X ;U ) un graf orientat. Fiecărui arc ( x, y ) al


grafului G îi punem în corespondenţă un număr real arbitrar
a ( x, y ) . Dacă în G arcul ( x, y ) lipseşte, atunci considerăm
a ( x, y )   . Numărul a ( x, y ) se numeşte pondere a arcului.
Suma ponderilor tuturor arcelor ce formează un drum se numeşte
pondere a acestui drum.
Pentru oricare două vârfuri s şi t ale grafului G , pot exista
mai multe drumuri cu extremităţi în aceste vârfuri. Drumul de
pondere minimă ce uneşte vârfurile s şi t se numeşte drum minim.
Problema drumului minim constă în determinarea în graful
orientat G al drumului de cea mai mică pondere cu extremităţile în
două vârfuri fixate s şi t astfel, încât s este extremitate iniţială, iar t
– extremitate finală. Graful nu trebuie să conţină circuite de lungime
negativă. Dacă în graf există circuit  de pondere negativă, atunci
problema drumului minim nu are soluţii, deoarece în acest caz,
parcurgând circuitul respectiv de un număr nelimitat de ori, obţinem
drumuri de pondere oricât de mică. Ţinând cont de această situaţie,
vom considera că în graful orientat nu sunt circuite de pondere
negativă.
Să analizăm un exemplu cu aspect practic care se reduce la
soluţionarea problemei drumului minim.

Curierul unei firme trebuie să ajungă din Boston în Los Angeles


folosind doar drumurile magistrale ce unesc diferite state. Cum poate
fi ales traseul optimal?
Pentru soluţionarea acestei probleme, construim un graf,
vârfurile căruia corespund punctelor de intersecţie a drumurilor
magistrale, iar fiecare arc reprezintă partea drumului magistral care
uneşte punctele corespunzătoare vârfurilor. Ponderea arcului este
definită de lungimea părţii respective a drumului. Astfel problema
determinării traseului optimal de la Boston la Los Angeles se reduce
la determinarea în graful construit a drumului minim dintre vârfurile
ce corespund oraşelor Boston şi Los Angeles.

111
Vom analiza un algoritm ce determină drumul minim dintre
două vârfuri fixate s şi t ale grafului orientat G cu ponderi
nenegative ale arcelor. Algoritmul respectiv a fost propus în 1959 de
către E.W. Dijkstra şi este considerat cel mai efectiv pentru
soluţionarea problemei formulate.
În acest algoritm, fiecărui vârf x al grafului G i se atribuie
două etichete. Prima etichetă d (x ) poate fi sau permanentă, sau
temporară. Dacă d (x ) este permanentă, atunci ea reprezintă
ponderea drumului minim ce uneşte vârfurile s şi x. În caz contrar,
d (x ) este lungimea drumului minim cu extremităţile s şi x care
trece numai prin vârfurile cu etichete permanente. A doua etichetă
 (x ) este asociată oricărui vârf x al grafului G cu excepţia vârfului
s. La fiecare iteraţie eticheta  (x ) indică vârful precedent vârfului x
în drumul minim ce uneşte extremitatea iniţială s cu cea finală x, şi
care trece prin vârfurile cu etichete permanente. Când eticheta d (t )
devine permanentă, atunci drumul minim cu extremităţile s şi t se
restabileşte uşor folosind etichetele  (x ) .
Iniţial considerăm că vârful s are eticheta permanentă d ( s )  0
iar toate celelalte vârfuri au etichete temporare egale cu  .
Iteraţia generală a algoritmului constă în următoarele:

Fie y vârful, eticheta d ( y ) a căruia la iteraţia precedentă a


devenit permanentă. Examinăm toate vârfurile x    ( y ) cu
etichetele temporare. Dacă d ( x)  d ( y )  a ( y, x) , atunci modificăm
etichetele d ( x )  d ( y )  a ( y, x) şi considerăm  ( x)  y . În caz
contrar, etichetele  şi d ale vârfului x la această iteraţie nu se
schimbă. Algoritmul îşi termină misiunea când eticheta d(t) devine
permanentă. Ponderea drumului minim P * cu extremităţile s şi t,
coincide cu valoarea d(t). Acest drum este determinat de etichetele
 în modul următor:
P *  ( s,  ,  3 (t ), 2 (t ), (t ), t ) ,
unde  2 (t )   ( (t )),  3 (t )   ( ( (t ))), ...

Vom prezenta o descriere formală a algoritmului Dijkstra.

112
4.1. Algoritmul Dijkstra

Pasul 1. Considerăm eticheta permanentă d ( s )  0 şi


etichetele temporare d (x)   pentru celelalte vârfuri ale grafului.
Notăm y  s .

Pasul 2. Analizăm fiecare vârf x    ( y ) cu etichetă


temporară.
Dacă d ( x )  d ( y )  a ( y , x) , atunci considerăm
d ( x )  d ( y )  a ( y , x) şi  ( x )  y .
În caz contrar, etichetele d(x) şi  (x ) nu se modifică.

Pasul 3. Fie Y mulţimea vârfurilor cu etichete d temporare.


Găsim vârful x * pentru care d ( x )  min
*
d ( x) . Eticheta d ( x * ) a
xY

vârfului x * se declară permanentă.

Pasul 4. Notăm y  x * . Dacă y=t, atunci trecem la pasul 5. În


acest caz, d (t ) reprezintă ponderea drumului minim.
În caz contrar, trecem la pasul 2.

Pasul 5. P *  ( s,  ,  3 (t ), 2 (t ), (t ), t ) este drumul minim


de la s la t (unde  2 (t )   ( (t )) , etc.). STOP.

Exemplu. Aplicând algoritmul Dijkstra, să se determine în


graful din fig. 22 drumul minim dintre vârfurile s şi t.

3
4
a b 2
s 7
3
2 t
2
3
c d

113
Fig.22

Pasul 1. Atribuim d (s)  0 şi d (x)   pentru orice alt vârf x


al grafului.

Pasul 2. (y=s).
d (a)  min d (a), d ( s)  a( s ,a)    , 0  4  4 ,  (a )  s ,
d (b)  min d (b), d ( s )  a( s ,b)    , 0  7  7 ,  (b)  s ,
d (c)  min d (c), d ( s )  a( s ,c)    , 0  3  3 ,  (c)  s ,
d (d )  min d (d ), d ( s )  a( s ,d )    , 0     ,  (d )  s ,
d (t )  min d (t ), d ( s )  a( s ,t )    , 0     ,  (t )  s .

Pasul 3. Deoarece
d ( x* )  min  d ( a ), d (b), d (c), d ( d ), d (t )  d (c )  3 ,

eticheta d(c) a vârfului c devine permanentă.

Pasul 4. Atribuim y  c . Deoarece y  t, trecem la pasul 2.

Pasul 2. ( y  c ) .
d ( a)  min d (a), d (c)  a(c ,a)   4, 3    4 ,  (a )  s ,
d (b)  min d (b), d (c)  a (c ,b)   7 , 3    7 ,  (b)  s ,
d (d )  min d (d ), d (c)  a(c ,d )    , 3  3  6 ,  (d )  c ,
d (t )  min d (t ), d (c)  a(c ,t )    , 3     ,  (t )  s .

Pasul 3. Eticheta d(a) a vârfului a devine permanentă, deoarece


d ( x )  min  d ( a ), d (b), d ( d ), d (t )  d ( a )  4 .
*

Pasul 4. Atribuim y  a . Deoarece y  t, trecem la pasul 2.

Pasul 2. ( y  a ) .
d (b)  min d (b), d (a)  a(a ,b)   7, 4  3  7 ,  (b)  s ,

114
d (d )  min d (d ), d (a)  a(a ,d )   6, 3  3  6 ,  ( d )  c ,
d (t )  min d (t ), d (a)  a(a ,t )   , 4     ,  (t )  s .

Pasul 3. Deoarece min  d (b), d ( d ), d (t )  d ( d )  6 , eticheta


d(d) a vârfului d devine permanentă.

Pasul 4. Atribuim y  d . Deoarece y  t, trecem la pasul 2.

Pasul 2. ( y  d ) .
d (b)  min d (b), d (d )  a(d ,b)   7, 6    7 ,  (b)  s ,
d (t )  min d (t ), d (d )  a ( d ,t )    , 6  2  8 ,  (t )  d .

Pasul 3. Eticheta d(b) a vârfului b devine permanentă, deoarece


min  d (b), d (t )  d (b)  7 .

Pasul 2. ( y  b ) .
d (t )  min d (t ), d (b)  a (b ,t )  8, 7  2  8 ,  (t )  d .

Pasul 4. y  t şi drumul minim căutat este ( s ,c , d ,t ) .

Uşor se observă că acesta nu este unicul drum minim în graful


examinat. Ponderea drumului ( s ,a , d ,t ) este 8 şi deci acesta, de
asemenea, este un drum minim.

Nota 1. Algoritmul expus poate fi aplicat şi în cazul grafurilor


neorientate, dacă fiecare muchie (u,v) a grafului neorientat cu
lungimea w se înlocuieşte cu perechea de arce (u, v) şi (v,u) de
aceeaşi lungime w.

Nota 2. Modificând pasul 4 astfel, încât algoritmul să-şi


termine misiunea după ce toate vârfurile grafului vor căpăta etichete
permanente, vom determina toate drumurile minime dintre s şi
celelalte vârfuri. În plus, dacă după transformarea lui d ( x * ) în
115
etichetă permanentă arcul ( ( x * ), x * ) se introduce într-o listă A* ,
atunci după finisarea algoritmului se obţine un arbore orientat
D  ( X ; A* ) cu rădăcina în vârful s. Acest arbore se numeşte arbore
al drumurilor minime ale grafului G cu extremitatea iniţială s.

Precum s-a menţionat, algoritmul Dijkstra a fost propus pentru


determinarea drumurilor minime în grafuri cu ponderi nenegative ale
arcelor. În cazul ponderilor negative ale arcelor, acest algoritm nu
asigură soluţionarea problemei formulate.
a

Fig.23
Să ilustrăm aceasta printr-un exemplu. Fie graful G
reprezentat în fig. 23. În acest graf, drumul minim din s în t este
P *  ( s, a, t ) . Lungimea acestui drum este egală cu 2-2=0. Aplicând
algoritmul lui Dijkstra, vom obţine însă un alt rezultat, şi anume
drumul P *  ( s, t ) de lungimea 1.

4.2. Algoritmul Ford

În cazul când unele ponderi ale arcelor grafului sunt negative,


se aplică o modificare a algoritmului Dijkstra, propusă de L.R. Ford,
E.F. Moor şi R. Bellman. Să căutăm drumurile minime ce pornesc
din s în toate celelalte vârfuri ale grafului. Aceasta metodă este o
metodă iterativă şi, de asemenea, se bazează pe etichetarea vârfurilor
grafului. La iteraţia k etichetele asociate vârfurilor indică ponderile
drumurilor minime (de la s la celelalte vârfuri) care conţin cel mult

116
k  1 arce. Spre deosebire de algoritmul Dijkstra, în această metodă
nici una dintre etichetele vârfurilor nu este permanentă.
Vom prezenta o expunere formală a acestui algoritm.

Fie d ( xi ) şi  ( xi ) etichetele vârfului x i la sfârşitul iteraţiei


k k

k  1 , | X | n .

Pasul 1. Considerăm:
S    ( s ), k  1, d 1 ( s )  0,
d 1 ( xi )  a ( s, xi ),
 1 ( xi )  s , pentru orice xi    (s )
şi d 1 ( xi )  ,  1 ( xi )  0 , pentru toate celelalte vârfuri.


Pasul 2. Pentru fiecare vârf xi   (S ) ( xi  s ) modificăm
eticheta d k 1 :

k1
d (xi )  min[d (xi ),min{d (xj )  a(x j,xi )}]
k k
,
xjTi

unde Ti   ( xi )  S .
Dacă d k 1 ( xi )  d k ( xi ) , atunci  ( xi )  x j . (La acest
k 1

moment mulţimea S conţine toate vârfurile x p pentru care drumurile


minime din s în x p conţin cel mult k arce.)
Mulţimea Ti conţine vârfurile x p pentru care drumurile
minime curente din s în x p conţin cel mult k arce şi există arce de
tipul ( x p , x i ).
Remarcă. Dacă xi    (S ) , atunci nu există drum minim de
la s la xi din k+1 arce şi deci eticheta vârfului x i nu se modifică,
adică d k 1 ( xi )  d k ( xi ) .

117
Pasul 3.
k 1
a) Dacă k  n  1 şi d ( xi )  d ( xi ) pentru toate vârfurile
k

xi , atunci rezultatul obţinut este optimal şi etichetele indică


ponderile drumurilor minime căutate. STOP.

b) Dacă cel puţin pentru un vârf x i au loc inegalităţile


k  n  1 şi d k 1 ( xi )  d k ( xi ) , atunci trecem la pasul 4.

c) Dacă există un vârf xi pentru care k  n  1 şi


k 1
d ( xi )  d k ( xi ) , atunci graful conţine circuit cu pondere negativă
şi, prin urmare, problema nu are soluţii. STOP.

Pasul 4. Redefinim mulţimea S:


S  {xi | d k 1 ( xi )  d k ( xi )} .

(Mulţimea S conţine toate vârfurile x p pentru care drumurile


minime din s în x p conţin k+1 arce.)

Pasul 5. Considerăm k  k  1 şi trecem la pasul 2.

Drumurile minime pot fi restabilite cu ajutorul etichetelor  .


Astfel, drumul minim de la s la vârful xi este
s,  ,  3 ( xi ), 2 ( xi ), 1 ( xi ), x i .
x2 -5 x3 24 x8

-3 15 8 -10 16

6 x4 4 22
x1 x7
12
9
2 -7 18
11

x5 20 x6 -13 x9

118
Fig.24

Exemplu. Vom analiza graful din fig. 24. În acest graf,


muchiile definesc două arce de aceeaşi pondere orientate în direcţii
opuse. Aplicând algoritmul Ford, vom afla toate drumurile minime
din x1 în celelalte vârfuri ale grafului.

Pasul 1. Atribuim s  x1 , S   x 2 , x5  , d ( s )  0, d ( x 2 )  -3,


1 1

d 1 ( x5 )  2,  1 ( x 2 )  s , 1 ( x5 )  s , iar pentru celelalte vârfuri ale


1 1
grafului considerăm d ( xi )   şi  ( xi )  0 .
Atribuim k  1 .

Prima iteraţie
Pasul 2.  ( S )   x 2 , x3 , x 4 , x5 , x 6  . Pentru vârful x 2 avem :

T2   x1 , x5   x 2 , x5    x5 
şi
 
 
d 2 ( x 2 )  min - 3,  d 1 ( x 5 )  a ( x5 , x 2 )   min  3,  2  12   3;
 144444444244444443
 x j  x5

 
pentru x3 : T3  x 2 , x 4 , x7 , x  x 2 , x5    x5  şi
   

d 2 ( x3 )  min  ,    5  8 ,
 3  2 ( x3 )  x 2 ;
  
  x j  x2 

pentru x 4 : T4   x 2 , x3 , x5 , x7 , x9   x 2 , x5    x 2 , x5  ,
 
 

d 2 ( x 4 )  min  ,min    7   5 ,
 315, 2  2 ( x 4 )  x5 ;
 
 x j  x2 x j  x5 


pentru x5 : T5   x1 , x2 , x6   x 2 , x5    x2  şi
   

d 2 ( x5 )  min 2,  312  2 ;
  
  x j  x2 

119
pentru x 6 : T6   x 4 , x5 , x7 , x9   x 2 , x5    x5  ,
 
d 2 ( x6 )  min  ,2
 20  22 ,  2 ( x 6 )  x5 .

 x j  x5 

Etichetele d ( xi ) pentru x  x1 , x 2 , x3 , , x9 sunt


2

 0, - 3,  8, - 5, 2, 22, , ,   .

Pasul 3(b). Trecem la pasul 4.


Pasul 4. S   x3 , x 4 , x 6  .
Pasul 5. Considerăm k=2 şi trecem la pasul 2.

A doua iteraţie
Pasul 2.  ( S )   x 1 , x3 , x 4 , x5 , x 6 , x 7 , x8 , x9  .

Atunci obţinem
pentru x3 : T3   x 2 , x 4 , x7 , x8   x3 , x 4 , x5    x 4  şi
 
d 3 ( x3 )  min - 8, (-5  8)   8 ;
    

 x  x4
j 

pentru x 4 : T4   x 2 , x3 , x5 , x7 , x9   x3 , x 4 , x6    x3  ,
 
d 3 ( x 4 )  min   5,  
 8  8  5 ;

 x j  x3 

pentru x5 : T5   x1 , x2 , x6   x3 , x4 , x6    x6  şi
   

d 3 ( x5 )  min  2,22
  20  2 ;
  
  x j  x6 

pentru x 6 : T6   x4 , x5 , x7 , x9   x3 , x4 , x6    x4  ,
 
d 3 ( x6 )  min 22,
 518  13 ,  3 ( x6 )  x4 ;

 x j  x4 

pentru x7 : T7   x4 , x6 , x8   x3 , x4 , x6    x4 , x6  ,
120
 
 

d 3 ( x7 )  min  ,min    4,22
5    9  1 ,  3 ( x7 )  x4 ;
  
 x j  x 4 x j  x6 

pentru x8 : T8   x3 , x7   x3 , x4 , x6    x3 ,
 
d 3 ( x8 )  min  ,
 824  16 ,  3 ( x8 )  x3 ;

 x j  x3 

pentru x9 : T9   x4 , x8   x3 , x4 , x6    x4  ,
 
d 3 ( x9 )  min  ,
 5 11  6 ,  3 ( x9 )  x4 .

 x j  x4 

Etichetele d ( xi ) pentru x  x1 , x 2 , x3 , , x9 sunt


3

 0, - 3,  8, - 5, 2, 13, -1, 16,6

Pasul 3(b). Trecem la pasul 4.


Pasul 4. S   x6 , x7 , x8 , x9  .
Pasul 5. Considerăm k=3 şi trecem la pasul 2.

A treia iteraţie (în continuare procesul se descrie în mod simplificat)


Pasul 2. ( S )   x3 , x4 , x5 , x6 , x7 , x8 , x9  .
T3   x7 , x8  , d 4 ( x3 )  11 şi  4 ( x3 )  x7 ;
T4   x7 , x9  şi d 4 ( x4 )  5 ;
T5   x6  şi d 4 ( x5 )  2 ;
T6   x7 , x9  , d 4 ( x6 )  7 şi  4 ( x6 )  x9 ;
T7   x6 , x8 şi d 4 ( x7 )  1 ;
T8   x7  , d 4 ( x8 )  15 şi  4 ( x8 )  x7 ;
T9   x8  şi d 4 ( x9 )  6 .
Vectorul etichetelor d 4 ( xi ) este  0, - 3,  11, - 5, 2, - 7, - 1, 15,6 .
Pasul 4. S   x3 , x6 , x8  .

121
A patra iteraţie
Pasul 2. ( S )   x3 , x4 , x5 , x6 , x7 , x8 , x9  .
T3   x8  , d 5 ( x3 )  11 ;
T4   x3 şi d 5 ( x4 )  5 ;
T5   x6  şi d 5 ( x5 )  2 ;
T7   x6 , x8  şi d 5 ( x7 )  1 ;
T8   x3  , d 5 ( x8 )  13 şi  5 ( x8 )  x3
T9   x8  şi d 5 ( x9 )  6 .
Vectorul etichetelor d ( xi ) este  0, - 3,  11, - 5, 2, - 7, - 1, 13,6 .
5

Pasul 4. S   x8  .

A cincea iteraţie
Pasul 2. ( S )   x3 , x7 , x9  .
T3   x8  , d 6 ( x3 )  11 ;
T7   x8  şi d 6 ( x7 )  1 ;
T9   x9  şi d 6 ( x9 )  6 .

6 5
Vectorul etichetelor d ( xi ) coincide cu d ( xi ) şi determină
ponderile drumurilor minime căutate. Drumurile minime respective
se restabililesc conform etichetelor i j vârfurilor grafului.

4.3. Algoritmul Floyd

Vom examina în continuare problema de determinare a


drumurilor minime dintre toate perechile de vârfuri ale grafului, care
la rândul său poate fi privită drept o generalizare a problemei
examinate anterior. În acest caz, cea mai simplă metodă de
soluţionare ar consta în aplicarea de n ori a algoritmului lui Ford,
alegând de fiecare dată în calitate de vârf s un alt vârf al grafului.

122
Dar această metodă devine inutilă în cazul grafurilor de dimensiuni
mari.
Vom analiza o metodă de rezolvare a problemei formulate
pentru un graf arbitrar (ponderile arcelor grafului pot fi atât pozitive,
cât şi negative), propusă de R.W. Floyd şi perfecţionată mai târziu de
J.D. Murchland. Metoda constă în transformarea de n ori a matricei
iniţiale D a ponderilor arcelor grafului. La iteraţia k elementul d ij al
matricei respective este egal cu ponderea drumului minim ce
porneşte din vârful xi spre vârful x j , cu condiţia că vârfurile
intermediare ale acestui drum aparţin mulţimii  x1 , x 2 ,  , x k  .
Pentru a restabili drumurile minime aflate, se defineşte matricea
  [ ij ] cu dimensiunea n  n . Elementul  ij al matricei indică
predecesorul vârfului x j în drumul minim de la xi la x j .
Construim matricea ponderilor grafului G considerând:
a) d ii  0 pentru orice i  1,2 , , n ;
b) d ij (i  j) egal cu lungimea arcului minim care uneşte vârful
xi cu vârful x j ;
c) d ij   (i  j) dacă în graf arcul ( xi , x j ) lipseşte.
Fie  ij  xi valorile iniţiale ale matricei  pentru orice xi şi
xj .

Pasul 1. Considerăm k  0 .

Pasul 2. Trecem la iteraţia următoare k  k  1 .

Pasul 3. Pentru toţi i, j  k astfel, încât d ik   şi d kj   se


defineşte
 
d ij  min d ij , (d ik  d kj (*).
Matricea  se modifică astfel:

123
 kj , dacă (d ik  d kj )  d ij ,
 ij  
 ij , dacă d ij  (d ik  d kj ).
Pasul 4. a) Dacă pe diagonala principală a matricei D există cel
puţin un element d ii  0 , atunci graful G conţine un circuit cu
pondere negativă ce trece prin vârful x i . Prin urmare, problema nu
are soluţii. STOP.
b) Dacă d ii  0 pentru orice i  1,2,..., n şi k  n , atunci
matricea D conţine ponderile tuturor drumurilor minime. STOP.
c) Dacă d ii  0 , pentru orice i  1,2,..., n şi k  n , atunci
trecem la pasul 2.

Drumurile minime se obţin direct din matricea finală  .


Astfel, drumul minim de la xi la x j este expus prin următoarea
succesiune de vârfuri ale grafului: xi , x ,  , x , x  , x , x j , unde
x   ij , x    i , x   i , , xi   i .

4.4. Algoritmul Dantzig

Un alt algoritm ce determină drumurile minime dintre toate


perechile de vârfuri ale grafului a fost propus de G.B. Dantzig. Acest
algoritm, în mare măsură, seamănă cu algoritmul Floyd, deosebirea
m
fiind în ordinea executării operaţiilor respective. Prin d ij se notează
ponderea drumului minim care uneşte vârful xi cu vârful x j şi care
conţine în calitate de vârfuri intermediare primele m vârfuri ale
m
grafului. Matricea D m constă din valorile d ij şi pentru fiecare
m  1,2, ,n are dimensiunea m  m . Problema constă în
construirea matricei D n , elementele d ij ale căreia determină

124
lungimea drumului minim din vârful xi în vârful x j . Vom menţiona
că matricea D1 se obţine din matricea D 0 , matricea D 2 – din D1
, ş. a. m. d.
Deosebirea esenţială a algoritmului Dantzig de algoritmul
Floyd constă în faptul că la fiecare iteraţie matricea nou-construită
D m are dimensiunea m  m , şi nu n  n .

Pasul 1. Numerotăm vârfurile grafului cu 1,2. ,n . Definim


matricea D 0 de dimensiunea n  n considerând d ij egal cu
0

ponderea arcului minim ce duce din vârful xi în vârful x j ,


i , j  1,2, , n , i  j . În caz că arcul ( xi , x j ) lipseşte, atribuim
d ij0   , iar d ii0  0 .

Construim matricea  , atribuind

 ij  xi , i , j  1,2, , n .

Pasul 2. În baza matricei D m 1 , definim succesiv elementele


matricei D m , pentru m  1,2, ,n :

m
d mj  0
min d mi 
i 1,2 ,,m 1

 d ijm1 , j  1,2, ,m  1 ,
(4.1)

m
d im 
j 1,2 ,,m 1
 
min d ijm1  d 0jm , i  1,2, ,m  1 ,
(4.2)

m 1
d ijm  mind im m 1
 d mj 
,d ijm1 , i , j  1,2, ,m  1 , (4.3)

d iim  0 - pentru orice i şi m. (4.4)

Modificăm matricea  :
125
 mj , dacă (d imm  d mjm )  d ijm1 ,
 ij   m1
 ij , dacă d ij  (d im  d mj ).
m m

Ca şi în cazul algoritmului Floyd, drumurile minime se obţin


din matricea finală  care corespunde matricei D n , iar elementele
matricei D n indică ponderile acestor drumuri.

4.5. Algoritmul de căutare dublă

În paragrafele precedente, am examinat algoritmii ce


determină un singur drum minim între două vârfuri ale grafului. Însă
în unele cazuri, este necesar să se cunoască nu doar primul drum
minim, ci şi al doilea, al treilea etc., în ordinea nedescrescătoare a
ponderilor. În continuare vom examina algoritmul de căutare dublă
(double – sweep) care determină primele k drumuri minime de la un
vârf fixat către toate celelalte vârfuri ale grafului.
Considerăm cortegiul din k numere (d1 , d 2 ,  , d k ) care
reprezintă ponderile arcelor sau ale drumurilor. Prin M k notăm
mulţimea cortegiilor (d1 , d 2 ,  , d k ) , unde d1  d 2    d k . Deci
componentele oricărui cortegiu din M k sunt aranjate în ordine
crescătoare. Definim două operaţii asupra elementelor mulţimii M k .
Fie A  ( a1 , a 2 , , a k ) şi B  (b1 ,b2 , ,bk ) două cortegii
din M . Operaţia generalizată de comparare a cortegiilor A şi B se
k

notează prin + şi se defineşte:


A  B  mink  a1 ,a 2 , ,a k ,b1 ,b2 , ,bk  ,
unde mink  X  este cortegiul ce constă din primele k elemente
minime distincte ale mulţimii X.
Operaţia generalizată de adunare a vectorilor A şi B se
notează prin  şi se defineşte:

126
A  B  min k  ai  b j : i, j  1,2, K , k  .
De exemplu, dacă A=(1, 3, 4, 8) şi B=(3, 5, 7, 17), atunci
A  B  min 4 (1, 3, 4, 8, 3, 5, 7, 17)  (1, 3, 4, 5) , iar
A  B  min 4 (1  3, 1  5, 1  7, 1  17, 3  3, 3  5, K )  (4, 6, 7, 8)
.

Utilizând notaţiile folosite în algoritmii precedenţi, vom


0 0 0 0
defini pentru M k cortegiile d ij  (d ij ,d ij , ,d ij ) , elementele
1 2 k

cărora determină ponderile a k arce ( xi , x j ) minime.


Dacă în graf există două arce ( xi , x j ) cu aceeaşi pondere,
atunci valoarea corespunzătoare ponderii acestor arce determină doar
0
un singur element al cortegiului d ij . Dacă din mulţimea tuturor
arcelor ( xi , x j ) ale grafului nu pot fi alese k arce cu ponderi
0
distincte, atunci elementele nedeterminate ale cortegiului d ij se
consideră egale cu  . De exemplu, dacă vârful xi se uneşte cu
vârful x j prin trei arce cu ponderile 9, 13 şi 9 respectiv, atunci
pentru k = 4 avem d ij  (9, 13, ,  ) . Menţionăm că pentru
0

0
cortegiul d ii toate componentele, cu excepţia primului ( d ii1  0 ),
0

sunt egale cu  . Pentru i = j considerăm că există un arc (buclă) cu


ponderea 0. Prin D 0 notăm matricea, fiecare element (i, j ) al
0
căreia este cortegiul d ij .
Definim cortegiile d ij  (d ij1 , , d ijk )  M , componentele
m m m k

cărora determină ponderile a k drumuri minime ce duc din vârful xi


în vârful x j şi conţin în calitate de vârfuri intermediare primele m
vârfuri ale grafului. Notăm prin D m matricea, fiecare element
(i, j ) al căreia coincide cu d ijm .
Să construim două matrice L şi U. Matricea L se obţine din
matricea D 0 , substituind prin  toate elementele d ij , pentru care
0

i  j . Substituind prin  toate elementele d ij0 din D 0 , pentru


  
care i  j , obţinem matricea U. Notam prin d ij  (d ij , , d ij )  M
k
1 k

127
cortegiul ale cărui componente reprezintă ponderile primelor k

drumuri minime din xi în x j . Fie D  matricea cu elementele d ij .
Dacă este necesar de determinat ponderile a k drumuri
minime ce duc dintr-un vârf fixat p (p=1,2,...,n) în celelalte vârfuri
ale grafului, este suficient de aflat doar elementele liniei p a matricei
D .
Menţionăm că algoritmul de căutare dublă poate fi aplicat
numai în grafuri ce nu conţin circuite cu ponderi negative.

4.5.1. Expunerea algoritmului de căutare dublă

Pasul 1. Construim matricea D 0 conform regulilor


menţionate mai sus. În baza matricei D 0 construim matricele L şi U.

Pasul 2. Pentru r  0,1, 2, se efectuează succesiv:

a) Căutarea inversă:


d pj2 r 1  l1 j  d p21r 1  l 2 j  d 2p r21    l nj  d pn
2 r 1
 d pj2 r ,
pentru j  n,n  1, ,2,1 .

b) Căutarea directă:
2r 2
d pj 
 u1 j  d p21r 2  u 2 j  d 2p r2 2    u nj  d pn
2r 2

 d pj2 r 1 ,
pentru j  1,2, ,n .

Dacă rezultatele obţinute după două iteraţii succesive vor


coincide, atunci algoritmul îşi termină misiunea, iar cortegiile
determinate reprezintă ponderile drumurilor minime respective.

Procedeul expus determină ponderile drumurilor minime în


graful iniţial. Dar cum ar putea fi găsite aceste drumuri?

128
După aplicarea algoritmului de căutare dublă, drumul care
  
corespunde cortegiului d ij  (d ij , , d ij )  M poate fi restabilit în
k
1 k

felul următor:
Fie că este necesar să determinăm al m-lea drum minim din
vârful i în x j ( drumul minim cu numărul de ordine m care duce
x

din xi în x j ) ce corespunde elementului d ij . Acest drum conţine
m

drumul minim cu numărul de ordine l ( l  m ), care duce din vârful


xi într-un vârf x s , şi arcul ( x s , x j ) . Suma ponderilor drumului şi

arcului indicat trebuie să fie egală cu d ij . Vârful x s este
m

penultimul vârf în drumul minim cu numărul de ordine m, ce duce


din xi în x j . Acest vârf se determină examinând elementele

matricei D 0 şi componentele cortegiului d ij . După ce a fost
determinat vârful x s , procedeul expus se aplică la căutarea
penultimului vârf în drumul minim cu numărul de ordine l care duce
din xi în x s . Repetând acest procedeu, se parcurge în întregime în
direcţia inversă drumul minim cu numărul de ordine m care duce din
xi în x j .
În cazul când penultimul vârf în drumul minim cu numărul de
ordine m care duce din xi în x s nu este unic, se recomandă să se
fixeze toate penultimele vârfuri pe acest drum şi să se parcurgă în
direcţie inversă toate drumurile cu aceeaşi pondere, ce corespund

elementului d is . Amintim că între două vârfuri ale grafului pot
m

exista mai multe drumuri minime.

Vom examina acum o problemă mai generală: Să se


determine primele k drumuri minime dintre orice două vârfuri ale
grafului. Pentru a soluţiona această problemă, se aplică algoritmii
generalizaţi Floyd şi Dantzig.

Ca şi în cazul algoritmului de căutare dublă, obţinem


cortegiul d ij  (d ij1 , , d ijk )  M , componentele căruia determină
m m m k

ponderile primelor k drumuri minime ce duc din vârful xi în vârful


129
x j , şi care conţin în calitate de vârfuri intermediare primele m
vârfuri ale grafului. Prin d ii  M k notăm cortegiul ale cărui
componente indică ponderile primelor k drumuri minime ce pornesc
şi se termină în vârful xi . Prima componentă a acestui cortegiu este
egală cu 0 şi corespunde ponderii drumului ce nu conţine nici un arc.
Pentru d ii se defineşte cortegiul d iiC  M k , elementele căruia indică
ponderile a k circuite minime ce conţin vârful xi . Cu alte cuvinte,
d iiC  d ii  d ii  K d ii  M k .

Algoritmul generalizat Floyd coincide în esenţă cu algoritmul


Floyd expus în paragraful 4.3, dar relaţia (*) este substituită cu
următorul sistem de ecuaţii:

 
d m  d m 1 C ;
 mm mm
dimm  dimm 1dmm
m
, pentru orice i  m ;
 m m m 1
dmi  d mm d mi , pentru orice i  m ;
d m  d m d m  d m 1, pentru orice i, j  m .
 ij im mj ij
Algoritmul generalizat Dantzig la fel se obţine din algoritmul
iniţial expus în paragraful 4.4, dar relaţiile (4.1), (4.2), (4.3) şi (4.4)
se substituie cu următoarele:
C
 0 m 1 m 1 
d m
mm   d mm  d 0
mi d m 1
ij d 0
jm
 ;

 i 1 j 1 

m 1
m
d mi   d mm
m 0
d mj d mji 1 , i  1, 2, K , m  1 ;
j 1

130
m 1
m
d im   d ijm 1 d 0jm d mm
m
, i  1, 2, K , m  1 ;
j 1

d ijm  d im
m m
d mj  d ijm 1 , i, j  1, 2, K , m  1 .

4.6. Probleme

1. Aplicând algoritmul Dijkstra, să se găsească drumurile minime ce


duc din vârful 1 în fiecare din celelalte vârfuri ale grafului
reprezentat în fig.25.

Fig.25

2. Ce se întâmplă cu soluţia problemei precedente, dacă din graf se


elimină arcul (4,2)? Este oare necesar să se efectueze din nou
toate calculele conform algoritmului Dijkstra?

3. Aplicând algoritmul Floyd, să se afle drumurile minime dintre


toate perechile de vârfuri ale grafului reprezentat în fig. 25.
131
4. Cu ajutorul algoritmului Dantzig să se determine drumurile
minime dintre toate perechile de vârfuri ale grafului reprezentat
în fig. 25. Să se compare aceste rezultate cu rezultatele obţinute
la soluţionarea problemei precedente.

5. Utilizând algoritmul generalizat Floyd să se construiască primele


trei drumuri minime pentru fiecare pereche de vârfuri distincte
ale grafului reprezentat în fig. 25. Să se rezolve aceeaşi problemă
aplicând algoritmul generalizat Dantzig.

6. În graful din fig. 25 să se construiască primele trei drumuri de


lungime minimă ce duc din vârful 1 în toate celelalte vârfuri.

7. Să se verifice dacă alegerea modului de numerotare a vârfurilor


grafului afectează eficienţa algoritmului Floyd, a algoritmului
Dantzig şi a algoritmului de căutare dublă. Dacă da, atunci să se
explice de ce.

8. Managerul unui hotel trebuie să rezerveze camere pentru tinerii


însurăţei. El dispune de o listă a rezervărilor, făcute în virtutea
informaţiei despre data sosirii şi data plecării clienţilor. Fiecare
rezervare aduce hotelului un anumit venit care depinde de faptul
cine sunt clienţii (studenţi, funcţionari, personalul unei companii,
etc.). În ce mod poate fi utilizat algoritmul Dijkstra pentru a crea
un orar de rezervare a camerelor care ar garanta un venit maxim?
(Indicaţii. Să se reprezinte fiecare comandă de rezervare a
camerelor printr-un arc ce uneşte vârfurile corespunzătoare
datelor de sosire şi de plecare. În graful construit nu există
circuite şi, prin urmare, algoritmul Dijkstra poate fi aplicat.)

9. La o uzină de prelucrare a petrolului sunt 4 tipuri de rezervoare


care se folosesc pentru păstrarea combustibilului: A, B, C şi D.
Timpul în care petrolul poate fi pompat în mod direct dintr-un
rezervor în altul este indicat în tabelul I. Să se afle două dintre
cele mai bune modalităţi de pompare a petrolului din rezervorul
A în rezervorul D.

132
Tabelul I
Rezervorul A B C D
A 0,00 0,13 0,14 0,15
B 0,08 0,00 0,13 0,08
C 0,17 0,12 0,00 0,18
D 0,01 0,06 0,13 0,00

10. O firmă farmaceutică planifică în decurs de 12 luni să elaboreze


un preparat nou care ar putea concura cu preparatul produs de o
firmă concurentă şi recent lansat pe piaţă. Elaborarea preparatului
nou constă din 4 etape care pot decurge într-un tempou lent,
normal sau rapid. Tempourilor diferite le corespund cheltuieli
distincte de timp şi financiare reprezentate în tabelul B (prima
cifră din fiecare celulă indică durata în luni, a doua cifră
cheltuielile în mii dolari). Să se afle cea mai bună metodă de
elaborare a preparatului în decurs de 12 luni, cu condiţia că
cheltuielile firmei nu vor depăşi 25 mii dolari. Să se determine şi
a doua dintre cele mai bune metode de realizare a scopului
propus.

Tabelul II
Aprobarea de către guvern

Etapa
Realizarea pe piaţă
Evaluări teoretice

Experimente în laboratoare

Tempoul

Lent 5;5 3;6 6;1 5;8


133
Normal 4;7 2;8 4;1 4 ; 10

Rapid 2 ; 10 1 ; 12 2;3 3 ; 15

11. Să se afle toate drumurile minime de la vârful 1 la toate celelalte


vârfuri ale grafului reprezentat în fig 26.
2 3 6 8 8

5 19 5 9 3 2

1 14 3 8 7 14 10

10 6 6 10 8 3

4 11 5 7 9

Fig. 26

12. Aplicând algoritmul lui Ford, să se afle drumurile minime de la


vârful 1 la toate celelalte vârfuri ale grafului din fig 27.

134
2 3

7 10 19
6
8 4 8 5 -7
1 6
13 12
6 4

7 10 8

Fig. 27

13. Să se rezolve problema precedentă pentru cazul când lungimea


arcului (4,5) este egală cu -8. Să se afle toate circuitele de
lungime negativă ale acestui graf.

14. Să se demonstreze că într-un graf orientat şi conex orice două


drumuri de lungime maximă au cel puţin un vârf comun.

15. Pentru graful din fig. 26 să se găsească primele patru drumuri


elementare minime de la vârful 1 la vârful 10. Care este drumul
elementar minim ce uneşte vârful 1 cu vârful 10 şi este format
din 5 arce.

135
(1, 2)
1 2

(1, 2)
(1 0
, 3)

,9)

(6, 9
(20

)
, 9)

( 4, 9
(15

)
)
(3, 2
(8, 6)
5 3
(8
,8 )
,4)
(15 ( 14
,8)

Fig. 28

16. Graful din fig. 28 reprezintă totalitatea tuturor traseelor posibile


ale unei nave maritime. Fiecărui arc îi corespunde eticheta
(a,b),unde a indică profitul obţinut la alegerea acestui traseu, iar
b timpul necesar pentru deservirea lui. Să se afle cel mai
profitabil (în termenii mişcării capitalului) traseu al navei.

BIBLIOGRAFIE

1. Cataranciuc Sergiu. Teoria grafurilor în probleme şi aplicaţii. –


Chişinău: USM, 2001. – 102 p.
136
2. Cataranciuc Sergiu. Modelul matematic al problemei de
determinare a mulţimii stabile interior maxime// Anale ştiinţifice.
Facultatea de Matematică şi Informatică. Universitatea de Stat
din Moldova. Vol. 5 - Chişinău: CEP, 2003, p.69-75.
3. Cataranciuc Sergiu, Toadere Teodor, Iacob Eugenia-Maria.
Probleme de teoria grafelor. – Cluj-Napoca: Univ. Babeş-Bolyai,
1994. – 77 p.
4. Ciurea Eleonor. Algoritmi. Introducere în algoritmica grafurilor.
– Bucureşti: Editura Tehnică, 2001. – 200 p.
5. Croitoru C. Tehnici de bază în optimizarea combinatorie. – Iaşi:
Univ. „Al. I. Cuza”, 1992.
6. Tomescu Ioan. Combinatorica şi teoria grafurilor. – Bucureşti:
Tipografia Univ. din Bucureşti, 1978. – 267 p.
7. Tomescu Ioan. Probleme de combinatorică şi teoria grafurilor. –
Bucureşti: Editura Didactică şi Pedagogică, 1981. – 270 p.
8. Tomescu Ioan. Teoria grafurilor. // Matematici clasice şi
moderne. Vol.I. – Bucureşti: Ed. Tehnică, 1978, p. 193-308.
9. Toadere Teodor. Elemente de teoria grafelor. Cluj-Napoca, Univ.
Babeş-Bolyai, 1992, 133 pag.
10. Toadere Teodor, Kasa Zoltan. Combinatorică şi teoria grafelor.
Partea I. – Cluj-Napoca: Univ. Babeş-Bolyai, 1998. – 70 p.
11. Toadere Teodor, Kasa Zoltan. Combinatorică şi teoria grafelor.
Partea II. – Cluj-Napoca: Univ. Babeş-Bolyai, 1998. – 81 p.

12. Aigner M. Combinatorial theory. – New-York: Springer, 2004 .-


500 p.
13. Bertesekas D.P. A simple and fast label correcting algorithm for
shortest parths. 1993. Networks 23, p. 703-709.
14. Beth T., Jungnickel D., Lenz H. Design Tehory. 2nd edition. –
Cambridge: Cambridge University Press, 1998. – 513 p.
15. Biggs N.L. Algebraic Graph Theory 2nd edition. – Cambridge:
Cambridge University Press, 1993. – 213 p.
16. Gross I., Jellen J. Graph Theory and its Applications. – New
York: CRC Press, 1999. – 592 p.

137
17. Jensen T.R., Toft B. Graph Coloring Problems. – New York,
1995.
18. Jungnickel D. Graphs, Networks and Algorithms. – Berlin:
Springer, 1999.

19. Ахо Х., Хопкрофт Дж., Ульман Дж. Построение и анализ


вычислительных алгоритмов.– Москва: «Мир», 1979. – 536 с.
20. Басакер Р., Саати Т. Конечные графы и сети. – Москва:
«Наука», 1974. – 366 с.
21. Белов В.В., Воробьёв Е.М., Шаталов В.Е. Теория графов.
Москва: «Высшая школа», 1976. – 392 с.
22. Березина Л.Ю. Графы и их применение. – Москва:
«Просвещение», 1979. – 143 с.
23. Берж К. Теория графов и ее применения. – Москва: «ИЛ»,
1962. – 319 с.
24. Гаврилов Г.П., Сапоженко А.А. Сборник задач по дискретной
математике.
25. Евстигнеев В.А. Применение теориии графов в
программировании. – Москва: «Наука», 1985. – 352 с.
26. Емеличев В.А., Мельников О.И., Сарванов В.И., Тышкевич
Р.И.. Лекции по теории графов. – Москва: «Наука», 1990. –
383 с.
27. Ермольев Ю.М., Мельник И.М. Экстремальные задачи на
графах. – Киев: «Наукова Думка», 1968. – 176 с.
28. Землянухина Л.Н.. Алгоритм решения задачи o внутренне
устойчивом множестве. Теория оптим. решений. – Киев:
1973.
29. Зыков А.А. Основы теории графов. – Москва: «Наука», 1987.
– 381 с.
30. Исследования по прикладной теории графов. Под ред. А
Алексеева.С. – Новосибирск: «Наука», 1986. – 169 с.
31. Камерон П., Дж. ван Линт. Теория графов, теория
кодирования и блок-схемы. – Москва: «Наука», 1980. – 139 с.
32. Кристофидес Н. Теория графов. Алгоритмический подход. –
Москва: «Мир», 1978. – 432 с.
138
33. Липский В. Комбинаторика для программистов. – Москва:
«Мир», 1988. – 213 с.
34. Майника Э. Алгоритмы оптимизации на сетях. – Москва:
Мир, 1981.
35. Мелихов А.Н., Берштейн Л.С., Курейчик В.М. Применение
теории графов для проектирования дискретных устройств. –
Москва: «Наука», 1974. – 303 с.
36. Нечепуренко и др. Алгоритмы и программы решения задач
на графах и сетях. – Новосибирск: «Наука», 1990. – 514 с.
37. Оре О. Графы и их применение. – Москва: «Мир», 1965, –
174 с.
38. Оре О. Теория графов. – Москва: «Наука», 1980. – 336 с.
39. Пападимитриу Х., Стаиглиц К. Комбинаторная оптимизация:
Алгоритмы и сложность. – Москва: «Мир», 1985. – 510 с.
40. Свали М., Тхуласираман К. Графы, сети и алгоритмы. –
Москва: «Мир», 1984. – 454 с.
41. Скоробогатов В.А. Алгоритмический анализ молекулярных
графов. – Новосибирск: НГУ, 1988. – 84 с.
42. Солтан П.С., Замбицкий Д.К., Присакару К.Ф.
Экстремальные задачи на графах и алгоритмы их решения. –
Кишинев: «Штиинца», 1973. – 90 с.
43. Татт У. Теория графов. – Москва: «Мир», 1988.
44. Теория графов. Под ред. В.Б.Алексеева. – Москва: «Мир»,
1974. – 223 с.
45. Уилсон Р. Введение в теорию графов. – Москва: «Мир»,
1977. – 207 с.
46. Харари Ф., Палмер Э. Перечисление графов. – Москва:
«Мир», 1977. – 324 с.
47. Харари Ф. Теория графов. – Москва: «Мир», 1973. – 300 с.
48. Химические приложения топологии и теории графов. Под
ред. Р.Кинга. – Москва: «Мир», 1987. – 560 с.

139
Sergiu CATARANCIUC
Angela NICULIŢĂ

Aspecte algoritmice
ale teoriei grafurilor

Partea I

Redactor Antonina Dembiţchi


Machetare computerizată Tatiana Moroz
Realizare grafică a copertei Irina Andros

Bun de tipar 15. 06. 2006


Formatul 60  84 1/16
Coli de tipar 9,0
Coli editoriale 7,5
Comanda 61
Tirajul 50

Centrul editorial-poligrafic al USM


Str. Al. Mateevici, 60, Chişinău, MD 2009

140

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