Vous êtes sur la page 1sur 64

ALGORITMICA GRAFURILOR

Conf. univ. dr. COSTEL B

ALC

AU
2010
Tematica
1 Aranjamente, combinari, permutari 4
1.1 Preliminarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Produs cartezian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Submult imi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Aranjamente cu repetit ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Aranjamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Permut ari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.7 Combin ari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.8 Combin ari cu repetit ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.9 Permut ari cu repetit ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 Partit ii 17
2.1 Compuneri ale unui num ar natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Partit ii ale unui num ar natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Partit ii ale unei mult imi nite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3 Grafuri 24
3.1 Denit ii generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Reprezentarea grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Grade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 Conexitate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5 Parcurgerea grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.6 Algoritmul Roy-Warshall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4 Arbori 42
4.1 Num arul ciclomatic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2 Teorema de caracterizare a arborilor . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3 Num ararea arborilor part iali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4 Arbori part iali de cost minim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5 Arborescent e 53
5.1 Teorema de caracterizare a arborescent elor . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2 Arborescent e part iale de cost minim . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6 Clase particulare de grafuri 61
6.1 Grafuri euleriene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.2 Grafuri hamiltoniene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3 Grafuri bipartite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
1
TEMATICA 2
7 Distant e si drumuri minime n grafuri ponderate 62
7.1 Algoritmul Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.2 Algoritmul Roy-Floyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8 Fluxuri n ret ele de transport 63
8.1 Problema uxului maxim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.2 Algoritmul Ford-Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Bibliograe
[1] Gh. Barbu, I. V aduva, M. Bolosteanu, Bazele informaticii, Editura Tehnic a, Bucuresti, 1997.
[2] Gh. Barbu, V. P aun, Calculatoare personale si programare n C/C++, Editura Didactic a si Pedagogic a, Bu-
curesti, 2005.
[3] C. B alcau, Combinatoric a si teoria grafurilor, Editura Universit at ii din Pitesti, Pitesti, 2007.
[4] E. Ciurea, Algoritmi. Introducere n algoritmica grafurilor, Editura Tehnic a, Bucuresti, 2001.
[5] E. Ciurea, L. Ciupal a, Algoritmi. Introducere n algoritmica uxurilor n ret ele, Editura Matrix Rom, Bucuresti,
2006.
[6] C. Croitoru, Tehnici de baz a n optimizarea combinatorie, Editura Universit at ii Al. I. Cuza, Iasi, 1992.
[7] L. Livovschi, H. Georgescu, Sinteza si analiza algoritmilor, Editura Stiint ica si Enciclopedic a, Bucuresti, 1986.
[8] D.R. Popescu, Combinatoric a si teoria grafurilor, Societatea de Stiint e Matematice din Romania, Bucuresti,
2005.
[9] C.P. Popovici, H. Georgescu, L. State, Bazele informaticii. Vol. I si II, Editura Universit at ii din Bucuresti,
Bucuresti, 1990-1991.
[10] L. State, Elemente de logic a matematic a si demonstrarea automat a a teoremelor, Tipograa Universit at ii din
Bucuresti, Bucuresti, 1989.
[11] T. Toadere, Grafe. Teorie, algoritmi si aplicat ii, Editura Albastr a, Cluj-Napoca, 2002.
[12] I. Tomescu, Combinatoric a si teoria grafurilor, Tipograa Universit at ii din Bucuresti, Bucuresti, 1978.
[13] I. Tomescu, Probleme de combinatoric a si teoria grafurilor, Editura Didactic a si Pedagogic a, Bucuresti, 1981.
[14] I. Tomescu, Data structures, Editura Universit at ii din Bucuresti, Bucuresti, 2004.
3
Tema 1
Aranjamente, combinari, permutari
1.1 Preliminarii

In aceast a lect ie vom prezenta formule de num arare si algoritmi de generare (enumerare) pentru
cele mai cunoscute familii de obiecte combinatoriale: produs cartezian, submult imi, aranjamente
(far a repetit ie, cu repetit ie sau ordonate), combin ari (f ar a repetit ie sau cu repetit ie), permutari (f ar a
repetit ie sau cu repetit ie). Reamintim n continuare c ateva not iuni uzuale.
Denit ia 1.1.1. Fie A o mult ime nit a. Num arul de elemente ale lui A, notat cu card (A), se
numeste cardinalul mult imii A.
Denit ia 1.1.2. Fie A un alfabet (adic a o mult ime nit a) si n N

. O secvent a de forma
a = a
1
a
2
. . . a
n
, cu a
1
, a
2
, . . . , a
n
A,
se numeste cuvant de lungime n peste alfabetul A. Lungimea cuvantului a se noteaza cu [a[.
Observat ia 1.1.1. Evident, cuvantul a
1
a
2
. . . a
n
poate identicat cu vectorul (a
1
, a
2
, . . . , a
n
).
Denit ia 1.1.3. Fie A o mult ime (alfabet) total ordonat a si x = (x
1
, . . . , x
n
), y = (y
1
, . . . , y
m
)
doi vectori (cuvinte) cu elemente (litere) din A. Spunem c a x este mai mic dec at y n ordine
lexicograc a si notam x y dac a
(x
1
, . . . , x
n
) = (y
1
, . . . , y
n
) si m > n
sau daca exista un indice i, i minm, n, astfel nc at
(x
1
, . . . , x
i1
) = (y
1
, . . . , y
i1
) si x
i
< y
i
.
Denit ia 1.1.4. Fie x R si n N. Not am
[x]
n
=

1, dac a n = 0,
x(x 1) . . . (x n + 1)
. .
n factori
, dac a n 1,
[x]
n
=

1, dac a n = 0,
x(x + 1) . . . (x + n 1)
. .
n factori
, dac a n 1.
[x]
n
se numeste polinomul factorial descresc ator de gradul n, iar [x]
n
se numeste polinomul
factorial cresc ator de gradul n.
4
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 5
1.2 Produs cartezian
Denit ia 1.2.1. Produsul cartezian al mult imilor A
1
, A
2
, . . . , A
n
(n N

) este mult imea


A
1
A
2
. . . A
n
= (a
1
, a
2
, . . . , a
n
)[a
1
A
1
, a
2
A
2
, . . . , a
n
A
n
.
Exemplul 1.2.1. a, b +, c = (a, +, c), (a, , c), (b, +, c), (b, , c).
Propozit ia 1.2.1 (de numarare a produsului cartezian). Fie n N

si A
1
, A
2
, . . . , A
n
mult imi
nite. Atunci card (A
1
A
2
. . . A
n
) = card (A
1
) card (A
2
) . . . card (A
n
).
Demonstrat ie. Se utilizeaz a metoda induct iei matematice dup a n.
Algoritmul 1.2.1 (de generare a produsului cartezian). Fie mult imile standard
A
1
= 1, 2, . . . , m
1
, A
2
= 1, 2, . . . , m
2
, . . . , A
n
= 1, 2, . . . , m
n
.
Vom utiliza regula urmatorului.
Primul element al produsului cartezian A
1
A
2
. . . A
n
, n ordine lexicograc a, este
(c
1
, c
2
, . . . , c
n
) = (1, 1, . . . , 1).
Un element arbitrar (curent)
(c
1
, . . . , c
k1
, c
k
, c
k+1
, . . . , c
n
)
are un element urm ator dac a si numai dac a exist a un indice k n, . . . , 1 astfel ncat c
k
< m
k
.

In acest caz, luand cel mai mare indice k cu aceast a proprietate, elementul urm ator, n ordine
lexicograc a, este
(c
1
, . . . , c
k1
, c
k
+ 1, 1, . . . , 1).

In pseudocod, algoritmul poate descris sub forma


produs cartezian(n, m) :
pentru i = 1, n c
i
1;
asare(c, n);
repeta
k n;
cat timp (c
k
= m
k
) si (k > 0) k k 1;
daca (k > 0)
c
k
c
k
+ 1;
pentru i = k + 1, n c
i
1;
asare(c, n);

cat timp (k > 0);


,
unde funct ia de asare este
asare(c, n) :
pentru i = 1, n aseaza c
i
;
.
Programul C++ corespunz ator este:
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 6
#include<iostream.h> // Generarea ITERATIVA - ordine LEXICOGRAFICA -
#include<conio.h> // a PRODUSULUI CARTEZIAN
int n,m[50],nr=0; // nr=variabila pt. numerotare
void afisare(int x[50],int nx)
{ int i;
cout<<++nr<<") ";
for(i=1;i<=nx;i++) cout<<x[i]<< ;
cout<<endl;
if(wherey()==25)
{ cout<<" <enter> pt. continuare";
getch();clrscr();
}
}
void produs_cartezian(int n,int m[50])
{ int c[50],i,k;
for(i=1;i<=n;i++) c[i]=1;
afisare(c,n);
do
{ k=n;
while ((c[k]==m[k]) && (k>0)) k--;
if (k>0)
{ c[k]++;
for(i=k+1;i<=n;i++) c[i]=1;
afisare(c,n);
}
}
while (k>0);
}
void main(void)
{ int i;
clrscr();
cout<<"Dati numarul de multimi: n=";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Dati numarul de elemente ale multimii A"<<i<<": m["<<i<<"]=";
cin>>m[i];
}
cout<<"Elementele produsului cartezian sunt:\n";
produs_cartezian(n,m);
getch();
}
Observat ia 1.2.1. Pentru generarea produsului cartezian A
1
A
2
. . . A
n
al unor mult imi nite
arbitrare
A
1
= a
11
, a
12
, . . . , a
1m
1
, A
2
= a
21
, a
22
, . . . , a
2m
2
, . . . , A
n
= a
n1
, a
n2
, . . . , a
nm
n

se poate folosi algoritmul anterior, bazat pe generarea indicilor, nlocuind asarea indicilor c
i
cu
asarea elementelor corespunzatoare a
ic
i
din mult imile A
i
, adic a nlocuind funct ia asare(c, n) cu
funct ia
asare(c, a, n) :
pentru i = 1, n aseaza a
ic
i
;
.
1.3 Submult imi
Propozit ia 1.3.1 (de numarare a submult imilor). Fie A o mult ime nit a si T(A) mult imea
tuturor submult imilor (p art ilor) lui A. Atunci card (T(A)) = 2
card (A)
.
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 7
Demonstrat ie. Fie A = a
1
, a
2
, . . . , a
n
, n N

. Not am 1, 2
n
= 1, 2 . . . 1, 2
. .
de n ori
.
Denim funct iile : T(A) 1, 2
n
si : 1, 2
n
T(A) prin:
B T(A), (B) = (c
1
, c
2
, . . . , c
n
), unde c
i
=
_
1, daca a
i
B,
2, daca a
i
, B;
(c
1
, c
2
, . . . , c
n
) 1, 2
n
, (c
1
, c
2
, . . . , c
n
) = a
i
[c
i
= 1, i 1, . . . , n.
Funct iile si sunt inverse una celeilalte, deci sunt bijective si card (T(A)) = card (1, 2
n
) = 2
n
.
Exemplul 1.3.1. Pentru A = a, b, c, corespondent a submult imi produs cartezian din demonstrat ia
anterioar a este redat a n urmatorul tabel:
(c
1
, c
2
, c
3
) 1, 2
3
B T(A)
(1,1,1) a, b, c
(1,1,2) a, b
(1,2,1) a, c
(1,2,2) a
(2,1,1) b, c
(2,1,2) b
(2,2,1) c
(2,2,2)
Deci A are 2
3
= 8 submult imi.
Algoritmul 1.3.1 (de generare a submult imilor). Fie mult imea A = a
1
, a
2
, . . . , a
n
. Conform
demonstrat iei anterioare, putem genera produsul cartezian 1, 2
n
cu Algoritmul 1.2.1 nlocuind
asarea elementelor (c
1
, . . . , c
n
) cu asarea submult imilor corespunz atoare
B = a
i
[c
i
= 1, i 1, . . . , n.
Obt inem urmatorul algoritm descris n pseudocod.
submult imi(a, n) :
pentru i = 1, n c
i
1;
asare(c, a, n);
repeta
k n;
cat timp (c
k
= 2) si (k > 0) k k 1;
daca (k > 0)
c
k
2;
pentru i = k + 1, n c
i
1;
asare(c, a, n);

cat timp (k > 0);


,
unde funct ia de asare este
asare(c, a, n) :
pentru i = 1, n daca (c
i
= 1) aseaza a
i
;
.
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 8
1.4 Aranjamente cu repetit ie
Propozit ia 1.4.1 (de numarare a aranjamentelor cu repetit ie). Fie m, n N. Atunci num arul
de cuvinte de lungime n peste un alfabet cu m litere este egal cu m
n
.
Demonstrat ie. Fie B = 1, 2, . . . , m si ( = (c
1
, c
2
, . . . , c
n
)[c
i
B i. Cum ( = B
n
, conform
Propozit iei 1.2.1 avem card (() = m
n
.
Denit ia 1.4.1. Cuvintele num arate n propozit ia anterioar a se numesc aranjamente cu repetit ie
de m luate cate n. Prin abuz de limbaj, si numarul lor, adic a m
n
, se numeste tot aranjamente cu
repetit ie de m luate c ate n.
Exemplul 1.4.1. Pentru m = 2 si n = 3, aranjamente cu repetit ie sunt, n ordine lexicograc a:
(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2).
Deci avem 2
3
= 8 aranjamente cu repetit ie.
Algoritmul 1.4.1 (de generare a aranjamentelor cu repetit ie, sub forma de cuvinte). Pentru
mult imea standard B = 1, 2, . . . , m, conform demonstrat iei anterioare putem genera produsul
cartezian B
n
, cu Algoritmul 1.2.1, lu and m
1
= m
2
= = m
n
= m.
Observat ia 1.4.1. Pentru o mult ime A = a
1
, a
2
, . . . , a
n
oarecare putem genera indicii (c
1
, . . . , c
n
)
cu algoritmul anterior si asa elementele corespunzatoare acestor indici (a
c
1
, . . . , a
c
n
).
1.5 Aranjamente
Propozit ia 1.5.1 (de num arare a aranjamentelor). Fie m, n N. Atunci num arul de cuvinte de
lungime n cu litere distincte peste un alfabet cu m litere este egal cu [m]
n
.
Demonstrat ie. Fie B = 1, 2, . . . , m si (
1
= (c
1
, c
2
, . . . , c
n
)[c
i
B i, c
i
,= c
j
i ,= j. Avem
(
1
= (c
1
, c
2
, . . . , c
n
)[c
1
1, . . . , m, c
2
1, . . . , m c
1
, c
3
1, . . . , m c
1
, c
2
, . . . , c
n

1, . . . , m c
1
, . . . , c
n1
, deci card ((
1
) = m(m1)(m2) . . . (mn + 1) = [m]
n
.
Denit ia 1.5.1. Cuvintele num arate n propozit ia anterioar a se numesc aranjamente (far a repetit ie)
de m luate cate n. De asemenea si num arul lor, adic a [m]
n
, se numeste tot aranjamente (f ar a
repetit ie) de m luate c ate n si se mai noteaza cu A
n
m
.
Observat ia 1.5.1. Pentru n > m avem [m]
n
= m. . . (mm) . . . (mn + 1) = 0.
Exemplul 1.5.1. Pentru m = 4 si n = 2, aranjamentele sunt, n ordine lexicograc a:
(1, 2), (1, 3), (1, 4), (2, 1), (2, 3)(2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3).
Deci avem [4]
2
= 4 3 = 12 aranjamente.
Un algoritm pentru generarea aranjamentelor va prezentat n Sect iunea 1.7.
1.6 Permutari
Propozit ia 1.6.1 (de numarare a permutarilor). Fie n N. Atunci num arul de cuvinte ce
cont in exact o dat a ecare liter a a unui alfabet cu n litere este egal cu n!, unde
n! = 1 2 3 n (n factorial), 0! = 1.
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 9
Demonstrat ie. Lu am m = n n Propozit ia 1.5.1 si folosim egalitatea [n]
n
= n(n 1) . . . 1 = n!.
Denit ia 1.6.1. Cuvintele num arate n propozit ia anterioar a se numesc permutari (far a repetit ie)
de ordinul n. De asemenea si num arul lor, adic a n!, se numeste tot permutari (far a repetit ie)
de n.
Exemplul 1.6.1. Pentru n = 3, permut arile mult imii standard 1, 2, 3 sunt, n ordine lexicograc a:
(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1).
Deci avem 3! = 1 2 3 = 6 permut ari.
Algoritmul 1.6.1 (de generare a permutarilor). Fie mult imea standard A = 1, 2, . . . , n. Vom
utiliza din nou regula urm atorului.
Prima permutare, n ordine lexicograc a, este
(p
1
, p
2
, . . . , p
n
) = (1, 2, . . . , n).
O permutare arbitrar a (curent a)
(p
1
, p
2
, . . . , p
k1
, p
k
, p
k+1
, . . . , p
n
)
are o permutare urm atoare dac a si numai dac a exist a un indice k n 1, . . . , 1 astfel ncat
p
k
< p
k+1
.

In acest caz, luand cel mai mare indice k cu aceast a proprietate si cel mai mare indice
j din n, . . . , k + 1 astfel ncat p
j
> p
k
(exist a, deoarece p
k+1
> p
k
), permutarea urm atoare,
n ordine lexicograc a, este
(p
1
, p
2
, . . . , p
k1
, p
j
, p

k+1
, . . . , p

j
, . . . , p

n
),
unde vectorul (p

k+1
, . . . , p

j
, . . . , p

n
) este obt inut prin ordonarea cresc atoare a elementelor r amase
(p
k
, p
k+1
, . . . , p
j1
, p
j+1
, . . . , p
n
). Cum aceste elemente formeaz a vectorul ordonat descresc ator
(p
k+1
, . . . , p
j1
, p
k
, p
j+1
, . . . , p
n
),
rezulta c a vectorul (p

k+1
, . . . , p

j
, . . . , p

n
) este r asturnatul acestuia si deci poate obt inut din
acesta, de exemplu, prin interschimb ari ntre termenii situat i la egal a distant a fat a de mijloc.
De exemplu, pentru permutarea curent a
(2, 7, 4, 8, 6, 5, 3, 1)
avem k = 3 (p
3
= 4 < p
4
= 8), j = 6 (p
j
= 5 > p
k
= 4), deci permutarea urm atoare se obt ine
interschimb and nt ai p
k
= p
3
= 4 cu p
j
= p
6
= 5, apoi r asturn and subvectorul (8, 6, 4, 3, 1) dintre
pozit iile k + 1 si n (de exemplu prin interschimbarile 8 1, 6 3), adic a aceast a permutare
urm atoare este
(2, 7, 5, 1, 3, 4, 6, 8).

In pseudocod, algoritmul poate descris sub forma


permutari(n) :
pentru i = 1, n p
i
i;
asare(p, n);
repeta
k n 1;
cat timp (p
k
p
k+1
) si (k > 0) k k 1;
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 10
daca (k > 0)
j n;
cat timp (p
j
p
k
) j j 1;
p
k
p
j
;
pentru i = 1,
nk
2
| p
k+i
p
ni+1
;
asare(p, n);

cat timp (k > 0);


,
unde reprezinta instruct iunea de interschimbare, iar x| reprezint a partea ntreag a (inferioar a) a
num arului x R.
Observat ia 1.6.1. Pentru generarea permut arilor unei mult imi arbitrare A = a
1
, a
2
, . . . , a
n
nlocuim
asarea indicilor (p
1
, . . . , p
n
) cu asarea elementelor corespunzatoare (a
p
1
, . . . , a
p
n
).
1.7 Combinari
Propozit ia 1.7.1 (de numarare a combinarilor). Fie m, n N. Atunci
num arul de cuvinte strict cresc atoare de lungime n peste un alfabet (ordonat) cu m litere
= num arul de submult imi cu n elemente ale unei mult imi cu m elemente
=
[m]
n
n!
def
=
_
m
n
_
.
Demonstrat ie. Fie B = 1, 2, . . . , m. Not am mult imile din enunt astfel:
(
3
= (c
1
, c
2
, . . . , c
n
)[c
i
B i, c
i
< c
i+1
i, o
3
= S[S B, card (S) = n.

Intre aceste mult imi denim funct iile : (


3
o
3
, : o
3
(
3
prin:
(c
1
, c
2
, . . . , c
n
) (
3
, (c
1
, c
2
, . . . , c
n
) = c
1
, c
2
, . . . , c
n
;
c
1
, c
2
, . . . , c
n
o
3
cu c
1
< c
2
< . . . < c
n
, (c
1
, c
2
, . . . , c
n
) = (c
1
, c
2
, . . . , c
n
).
Aceste funct ii sunt inverse una celeilalte, deci sunt bijective si astfel card ((
3
) = card (o
3
).
Permutand ecare combinare (c
1
, c
2
, . . . , c
n
) (
3
n toate cele n! moduri posibile, obt inem far a
repetare toate aranjamentele din mult imea (
1
= (a
1
, a
2
, . . . , a
n
)[a
i
B i, a
i
,= a
j
i ,= j.
Deci card ((
3
)n! = card ((
1
). Conform Propozit iei 1.5.1, card ((
1
) = [m]
n
, deci card ((
3
) =
[m]
n
n!
.
Denit ia 1.7.1. Oricare obiecte din cele 2 tipuri num arate n propozit ia anterioar a se numesc com-
bin ari (far a repetit ie) de m luate cate n. De asemenea si numarul lor, adic a
_
m
n
_
, se numeste
tot combinari (far a repetit ie) de m luate c ate n si se mai noteaza cu C
n
m
.
Observat ia 1.7.1. Pentru n > m avem
_
m
n
_
= 0, deoarece [m]
n
= 0.
Pentru n m, deoarece [m]
n
= m(m1) . . . (mn + 1) =
m!
(mn)!
avem
_
m
n
_
=
m!
n!(mn)!
.
Exemplul 1.7.1. Pentru m = 5 si n = 3, corespondent ele din demonstrat ia anterioar a sunt redate n
urm atorul tabel:
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 11
(c
1
, c
2
, c
3
) (
3
S o
3
(1,2,3) 1, 2, 3
(1,2,4) 1, 2, 4
(1,2,5) 1, 2, 5
(1,3,4) 1, 3, 4
(1,3,5) 1, 3, 5
(1,4,5) 1, 4, 5
(2,3,4) 2, 3, 4
(2,3,5) 2, 3, 5
(2,4,5) 2, 4, 5
(3,4,5) 3, 4, 5.
Deci avem
_
5
3
_
=
[5]
3
3!
=
5 4 3
1 2 3
= 10 combin ari.
Algoritmul 1.7.1 (de generare a combinarilor). Fie mult imea standard B = 1, 2, . . . , m si
n m. Vom utiliza din nou regula urm atorului.
Prima combinare (de m luate c ate n), n ordine lexicograc a, este
(c
1
, c
2
, . . . , c
n
) = (1, 2, . . . , n).
O combinare arbitrar a (curent a)
(c
1
, c
2
, . . . , c
k1
, c
k
, c
k+1
, . . . , c
n
)
are o combinare urm atoare dac a si numai dac a exist a un indice k n, . . . , 1 astfel ncat
c
k
< mn + k.

In acest caz, luand cel mai mare indice k cu aceast a proprietate, combinarea
urm atoare, n ordine lexicograc a, este
(c
1
, c
2
, . . . , c
k1
, c
k
+ 1, c
k
+ 2, . . . , c
k
+ 1 +n k).
De exemplu, pentru m = 8, n = 6 si combinarea curent a (1, 2, 5, 6, 7, 8) avem k = 2 (c
2
= 2 <
mn + k = 8 6 + 2), deci combinarea urm atoare este (1, 3, 4, 5, 6, 7).

In pseudocod, algoritmul poate descris sub forma


combinari(m, n) :
pentru i = 1, n c
i
i;
asare(c, n);
repeta
k n;
cat timp (c
k
= mn + k) si (k > 0) k k 1;
daca (k > 0)
c
k
c
k
+ 1;
pentru i = k + 1, n c
i
c
i1
+ 1;
asare(c, n);

cat timp (k > 0);


.
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 12
Algoritmul 1.7.2 (de generare a aranjamentelor). Fie mult imea standard B = 1, 2, . . . , m si
n m. Conform demonstrat iei anterioare, putem genera aranjamentele de m luate c ate n prin
generarea combin arilor si permutarea ec arei combin ari. Folosind Algoritmii 1.7.1 si 1.6.1 obt inem
urm atoarea descriere n pseudocod.
aranjamente(m, n) :
pentru i = 1, n c
i
i;
permutari(n);
repeta
k n;
cat timp (c
k
= mn + k) si (k > 0) k k 1;
daca (k > 0)
c
k
c
k
+ 1;
pentru i = k + 1, n c
i
c
i1
+ 1;
permutari(n);

cat timp (k > 0);


, unde permutari(n) este funct ia din Algoritmul 1.6.1 nlocuind funct ia de asare cu
asare(c, p, n) :
pentru i = 1, n aseaza c
p
i
;
.
Exemplul 1.7.2. Pentru m = 4 si n = 3, corespondent a aranjamente permut arile combin arilor din
demonstrat ia anterioar a si din algoritmul anterior este redat a n urmatorul tabel:
Combinare Permutare Aranjament
(1,2,3) (1,2,3) (1,2,3)
(1,3,2) (1,3,2)
(2,1,3) (2,1,3)
(2,3,1) (2,3,1)
(3,1,2) (3,1,2)
(3,2,1) (3,2,1)
(1,2,4) (1,2,3) (1,2,4)
(1,3,2) (1,4,2)
(2,1,3) (2,1,4)
(2,3,1) (2,4,1)
(3,1,2) (4,1,2)
(3,2,1) (4,2,1)
Combinare Permutare Aranjament
(1,3,4) (1,2,3) (1,3,4)
(1,3,2) (1,4,3)
(2,1,3) (3,1,4)
(2,3,1) (3,4,1)
(3,1,2) (4,1,3)
(3,2,1) (4,3,1)
(2,3,4) (1,2,3) (2,3,4)
(1,3,2) (2,4,3)
(2,1,3) (3,2,4)
(2,3,1) (3,4,2)
(3,1,2) (4,2,3)
(3,2,1) (4,3,2)
Deci avem
_
4
3
_
3! = [4]
3
= 4 3 2 = 24 aranjamente.
Observat ia 1.7.2. Analog Observat iei 1.6.1, algoritmii anteriori pot adaptat i pentru generarea
combin arilor si aranjamentelor pentru mult imi oarecare.
1.8 Combinari cu repetit ie
Propozit ia 1.8.1 (de numarare a combinarilor cu repetit ie). Fie m, n N. Atunci num arul de
cuvinte cresc atoare de lungime n peste un alfabet (ordonat) cu m litere este egal cu
[m]
n
n!
def
=
__
m
n
__
.
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 13
Demonstrat ie. Fie B = 1, 2, . . . , m, A = 1, 2, . . . , m + n 1,
(
4
= (c
1
, c
2
, . . . , c
n
)[c
i
B i, c
i
c
i+1
i, (
3
= (d
1
, d
2
, . . . , d
n
)[d
i
A i, d
i
< d
i+1
i.
Denim corespondent ele : (
4
(
3
, : (
3
(
4
astfel:
(c
1
, c
2
, c
3
, . . . , c
n
) = (c
1
, c
2
+ 1, c
3
+ 2, . . . , c
n
+ n 1);
(d
1
, d
2
, d
3
, . . . , d
n
) = (d
1
, d
2
1, d
3
2, . . . , d
n
n + 1).
Acestea sunt funct ii inverse, deci utilizand Propozitia 1.7.1 avem
card ((
4
) = card ((
3
) =
_
m + n 1
n
_
=
[m + n 1]
n
n!
=
[m]
n
n!
=
__
m
n
__
.
Denit ia 1.8.1. Cuvintele num arate n propozit ia anterioar a se numesc combinari cu repetit ie
de m luate cate n. De asemenea si num arul lor, adic a
__
m
n
__
, se numeste tot combinari cu
repetit ie de m luate c ate n.
Exemplul 1.8.1. Pentru m = 3 si n = 4, combin arile cu repetit ie sunt, n ordine lexicograc a:
(1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 1, 3), (1, 1, 2, 2), (1, 1, 2, 3), (1, 1, 3, 3), (1, 2, 2, 2), (1, 2, 2, 3),
(1, 2, 3, 3), (1, 3, 3, 3), (2, 2, 2, 2), (2, 2, 2, 3), (2, 2, 3, 3), (2, 3, 3, 3), (3, 3, 3, 3).
Deci avem
__
3
4
__
=
[3]
4
4!
=
3 4 5 6
1 2 3 4
= 15 combin ari cu repetit ie.
Algoritmul 1.8.1 (de generare a combinarilor cu repetit ie). Fie mult imea standard B = 1, 2, . . . , m.
Vom utiliza din nou regula urm atorului.
Prima combinare cu repetit ie (de m luate c ate n), n ordine lexicograc a, este
(c
1
, c
2
, . . . , c
n
) = (1, 1, . . . , 1).
O combinare cu repetit ie arbitrar a (curent a)
(c
1
, c
2
, . . . , c
k1
, c
k
, c
k+1
, . . . , c
n
)
are o combinare cu repetit ie urmatoare dac a si numai dac a exist a un indice k n, . . . , 1 astfel
ncat c
k
< m.

In acest caz, luand cel mai mare indice k cu aceast a proprietate, combinarea cu
repetit ie urmatoare, n ordine lexicograc a, este
(c
1
, c
2
, . . . , c
k1
, c
k
+ 1, c
k
+ 1, . . . , c
k
+ 1).
De exemplu, pentru m = 8, n = 6 si combinarea cu repetit ie curenta (2, 4, 5, 8, 8, 8) avem k = 3
(c
3
= 5 < m = 8) deci combinarea cu repetit ie urm atoare este (2, 4, 6, 6, 6, 6).

In pseudocod, algoritmul poate descris sub forma


combinari cu repetit ie(m, n) :
pentru i = 1, n c
i
1;
asare(c, n);
repeta
k n;
cat timp (c
k
= m) si (k > 0) k k 1;
daca (k > 0)
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 14
c
k
c
k
+ 1;
pentru i = k + 1, n c
i
c
k
;
asare(c, n);

cat timp (k > 0);


.
Observat ia 1.8.1. Analog Observat iei 1.6.1, algoritmul anterior poate adaptat pentru generarea
combin arilor cu repetit ie pentru mult imi oarecare.
1.9 Permutari cu repetit ie
Propozit ia 1.9.1 (de numarare a permutarilor cu repetit ie). Fie
m, n
1
, n
2
, . . . , n
m
N si n = n
1
+ n
2
+ + n
m
. Atunci num arul de cuvinte de lungime n ce pot
formate peste un alfabet cu m litere astfel nc at litera num arul i sa apar a de exact n
i
ori pentru
orice i 1, . . . , m este egal cu
n!
n
1
!n
2
! . . . n
m
!
def
=
_
n
n
1
, n
2
, . . . , n
m
_
.
Demonstrat ie. Fie B = 1, 2, . . . , m si
(
5
= (c
1
, c
2
, . . . , c
n
)[c
i
B i, card (i[c
i
= j) = n
j
j.
Numar am cuvintele din (
5
astfel:
alegem cei n
1
indici (din totalul de n) ai literelor egale cu 1, rezult a
_
n
n
1
_
moduri posibile;
pentru ecare alegere de mai sus, alegem cei n
2
indici (din restul de nn
1
) ai literelor egale cu
2, rezulta
_
n n
1
n
2
_
moduri posibile, deci obt inem
_
n
n
1
__
n n
1
n
2
_
moduri posibile de alegere
a indicilor literelor 1 si 2;
. . .
pentru ecare alegere de mai sus, alegem cei n
m
indici (din restul de n n
1
. . . n
m1
) ai
literelor egale cu m; rezulta
_
n n
1
. . . n
m1
n
m
_
moduri posibile, deci obt inem
_
n
n
1
__
n n
1
n
2
_
. . .
_
n n
1
. . . n
m1
n
m
_
moduri posibile de alegere a tuturor indicilor literelor 1, 2, . . . , m. Astfel
card ((
5
) =
_
n
n
1
__
n n
1
n
2
_
. . .
_
n n
1
. . . n
m1
n
m
_
=
n!
n
1
!(n n
1
)!

(n n
1
)!
n
2
!(n n
1
n
2
)!
. . .

(n n
1
. . . n
m1
)!
n
m
!(n n
1
. . . n
m
)!
=
n!
n
1
!n
2
! . . . n
m
!
(deoarece (n n
1
. . . n
m
)! = 0! = 1).
Denit ia 1.9.1. Cuvintele num arate n propozit ia anterioar a se numesc permutari cu repetit ie
(anagrame) de n luate cate n
1
, n
2
, . . . , n
m
. De asemenea si num arul lor, adic a
_
n
n
1
, n
2
, . . . , n
m
_
,
se numeste tot permut ari cu repetit ie de n luate c ate n
1
, n
2
, . . . , n
m
.
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 15
Observat ia 1.9.1. Lu and n
1
= n
2
= = n
m
= 1 obt inem n = m si
_
n
1, 1, . . . , 1
_
= n!, deci
permut arile (f ar a repetit ie) sunt un caz particular al permut arilor cu repetit ie. Pe de alta parte,
lu and m = 2 obt inem
_
n
n
1
, n
2
_
=
n!
n
1
!n
2
!
, deci si combinarile (f ar a repetit ie) sunt un caz particular
al permut arilor cu repetit ie.
Exemplul 1.9.1. Pentru m = 3 si n
1
= 2, n
2
= n
3
= 1, deci n = 4, permut arile cu repetit ie sunt, n
ordine lexicograc a:
(1, 1, 2, 3), (1, 1, 3, 2), (1, 2, 1, 3), (1, 2, 3, 1), (1, 3, 1, 2), (1, 3, 2, 1),
(2, 1, 1, 3), (2, 1, 3, 1), (2, 3, 1, 1), (3, 1, 1, 2), (3, 1, 2, 1), (3, 2, 1, 1).
Deci avem
_
4
2, 1, 1
_
=
4!
2!1!1!
= 12 permut ari cu repetit ie.
Algoritmul 1.9.1 (de generare a permutarilor cu repetit ie). Fie mult imea standard B =
1, 2, . . . , m si n
1
, n
2
, . . . , n
m
N, n = n
1
+n
2
+ +n
m
. Vom utiliza din nou regula urm atorului.
Prima permutare cu repetit ie (de n luate c ate n
1
, n
2
, . . . , n
m
), n ordine lexicograc a, este
(p
1
, p
2
, . . . , p
n
) = (1, 1, . . . , 1
. .
de n
1
ori
, 2, 2, . . . , 2
. .
de n
2
ori
, . . . , m, m, . . . , m
. .
de n
m
ori
).
Existent a si forma permut arii cu repetit ie urmatoare n ordine lexicograc a pentru o permutare
cu repetit ie curenta arbitrar a se determin a exact ca la permut arile f ar a repetit ie (Algoritmul
1.6.1).
De exemplu, pentru permutarea cu repetit ie curenta
(4, 4, 1, 3, 6, 5, 5, 3, 2, 1)
avem k = 4 (p
4
= 3 < p
5
= 6), j = 7 (p
j
= 5 > p
k
= 3), deci permutarea cu repetit ie urmatoare se
obt ine interschimband nt ai p
k
= p
4
= 3 cu p
j
= p
7
= 5, apoi r asturn and subvectorul (6, 5, 3, 3, 2, 1)
dintre pozit iile k + 1 si n (de exemplu prin interschimbarile 6 1, 5 2, 3 3), adic a aceat a
permutare cu repetit ie urmatoare este
(4, 4, 1, 5, 1, 2, 3, 3, 5, 6).

In pseudocod, algoritmul poate descris sub forma


permutari cu repetit ie(m, n) :
n 0; pentru i = 1, m n n + n
i
;
i 0;
pentru j = 1, m
pentru k = 1, n
j
i i + 1; p
i
j;

asare(p, n);
repeta
k n 1;
cat timp (p
k
p
k+1
) si (k > 0) k k 1;
daca (k > 0)
j n;
TEMA 1. ARANJAMENTE, COMBIN

ARI, PERMUT

ARI 16
cat timp (p
j
p
k
) j j 1;
p
k
p
j
;
pentru i = 1,
nk
2
| p
k+i
p
ni+1
;
asare(p, n);

cat timp (k > 0);


,
unde funct ia de asare este cea din Algoritmul 1.6.1.
Observat ia 1.9.2. Analog Observat iei 1.6.1, algoritmul anterior poate usor adaptat pentru generarea
permut arilor cu repetit ie pentru mult imi arbitrare.
Tema 2
Partit ii
2.1 Compuneri ale unui numar natural
Denit ia 2.1.1. Fie n, m N. O compunere a lui n este o scriere de forma
n = n
1
+ n
2
+ + n
m
,
unde n
1
, n
2
, . . . , n
m
N si conteaza ordinea dintre termenii n
1
, n
2
, . . . , n
m
.
Propozit ia 2.1.1 (de numarare a compunerilor unui numar natural). Fie n, m N. Atunci:
a) numarul de compuneri ale lui n cu m termeni este egal cu
__
m
n
__
;
b) num arul de compuneri ale lui n cu m termeni nenuli este egal cu
_
n 1
m1
_
.
Demonstrat ie. a) Fie mult imile
^ = (n
1
, n
2
, . . . , n
m
)[n
i
N i, n
1
+ n
2
+ + n
m
= n,
(
4
= (c
1
, c
2
, . . . , c
n
)[c
i
1, 2, . . . , m i, c
i
c
i+1
i.
Denim corespondent ele : ^ (
4
, : (
4
^ prin:
(n
1
, . . . , n
m
) = (c
1
, . . . , c
n
), unde

c
1
= = c
n
1
= 1 (n
1
litere),
c
n
1
+1
= = c
n
1
+n
2
= 2 (n
2
litere),
. . .
c
n
1
++n
m1
+1
= = c
n
1
++n
m1
+n
m
= m (n
m
litere);
(c
1
, . . . , c
n
) = (n
1
, . . . , n
m
), unde n
i
= num arul de litere i ale cuv antului (c
1
, . . . , c
n
), i.
Acestea sunt funct ii inverse, deci conform Propozit iei 1.8.1 avem card (^) = card ((
4
) =
__
m
n
__
.
b) Fie mult imile ^
1
= (n
1
, n
2
, . . . , n
m
)[n
i
N

i, n
1
+ n
2
+ + n
m
= n,
^
2
= (t
1
, t
2
, . . . , t
m
)[t
i
N i, t
1
+ t
2
+ + t
m
= n m.
Denim corespondent ele : ^
1
^
2
, : ^
2
^
1
prin:
(n
1
, . . . , n
m
) ^
1
, (n
1
, . . . , n
m
) = (n
1
1, . . . , n
m
1);
(t
1
, . . . , t
m
) ^
2
, (t
1
, . . . , t
m
) = (t
1
+ 1, . . . , t
m
+ 1).
17
TEMA 2. PARTIT II 18
Acestea sunt funct ii inverse, deci conform punctului a) avem card (^
1
) = card (^
2
) =
__
m
n m
__
=
[m]
nm
(n m)!
=
m(m+ 1) . . . (n 1)
(n m)!
=
(n 1)!
(m1)!(n m)!
=
_
n 1
m1
_
.
Exemplul 2.1.1. Pentru n = 4 si m = 3 compunerile sunt
4 = 0 + 0 + 4 = 0 + 1 + 3 = 0 + 2 + 2 = 0 + 3 + 1 = 0 + 4 + 0
= 1 + 0 + 3 = 1 + 1 + 2 = 1 + 2 + 1 = 1 + 3 + 0 = 2 + 0 + 2
= 2 + 1 + 1 = 2 + 2 + 0 = 3 + 0 + 1 = 3 + 1 + 0 = 4 + 0 + 0.
Deci avem
__
3
4
__
=
3 4 5 6
1 2 3 4
= 15 compuneri, dintre care
_
4 1
3 1
_
=
_
3
2
_
= 3 compuneri cu
termenii nenuli.
Algoritmul 2.1.1 (de generare a compunerilor unui numar natural). Fie n, m N

. Vom
utiliza din nou regula urm atorului.
Prima compunere a lui n cu m termeni, n ordine lexicograc a, este
n = 0 + 0 + + 0 + n.
O compunere curent a arbitrar a
n = t
1
+ t
2
+ + t
k1
+ t
k
+ t
k+1
+ + t
m
are o compunere urm atoare dac a si numai dac a exist a un indice k m, . . . , 2 astfel ncat
t
k
> 0.

In acest caz, luand cel mai mare indice k cu aceast a proprietate, compunerea urm atoare,
n ordine lexicograc a, este
n = t
1
+ t
2
+ + t
k2
+ (t
k1
+ 1) + 0 + + 0 + (t
k
1).
De exemplu, urm atoarea compunere dup a
10 = 2 + 0 + 5 + 3 + 0 + 0
este 10 = 2 + 0 + 6 + 0 + 0 + 2 (deoarece t
k
= t
4
= 3).

In pseudocod, algoritmul poate descris sub forma


compuneri(n, m) :
pentru i = 1, m1 t
i
0;
t
m
n;
asare(t, m);
repeta
k m;
cat timp (t
k
= 0) si (k > 1) k k 1;
daca (k > 1)
t
k1
t
k1
+ 1; t
m
t
k
1;
daca (k < m) t
k
0;
asare(t, m);

cat timp (k > 1);


,
unde funct ia de asare este
asare(t, m) :
pentru i = 1, m aseaza t
i
;
.
TEMA 2. PARTIT II 19
Algoritmul 2.1.2 (de generare a compunerilor cu termeni nenuli). Analog algoritmului anterior
se obt ine urmatorul algoritm pentru generarea compunerilor lui n cu m termeni nenuli, m n.
compuneri termeni nenuli(n, m) :
pentru i = 1, m1 t
i
1;
t
m
n m + 1;
asare(t, m);
repeta
k m;
cat timp (t
k
= 1) si (k > 1) k k 1;
daca (k > 1)
t
k1
t
k1
+ 1; t
m
t
k
1;
daca (k < m) t
k
1;
asare(t, m);

cat timp (k > 1);


.
2.2 Partit ii ale unui numar natural
Denit ia 2.2.1. O partit ie (descompunere) a numarului n N

este o scriere de forma


n = n
1
+ n
2
+ + n
k
,
unde n
1
, n
2
, . . . , n
k
N

(k N

) si nu conteaza ordinea dintre termenii n


1
, n
2
, . . . , n
k
.
Observat ia 2.2.1. Deoarece ntr-o partit ie ca mai sus nu conteaz a ordinea dintre termeni, putem
presupune ca acestia sunt scrisi n ordine cresc atoare.
Denit ia 2.2.2. Fie n, k N

. Not am cu P(n, k) num arul de partit ii ale lui n cu k termeni, iar cu


P(n) num arul tuturor partit iilor lui n.
Exemplul 2.2.1. Numarul n = 6 are partit iile
6 = 6 = 1 + 5 = 2 + 4 = 3 + 3 = 1 + 1 + 4 = 1 + 2 + 3 = 2 + 2 + 2
= 1 + 1 + 1 + 3 = 1 + 1 + 2 + 2 = 1 + 1 + 1 + 1 + 2 = 1 + 1 + 1 + 1 + 1 + 1,
deci P(6, 1) = 1, P(6, 2) = 3, P(6, 3) = 3, P(6, 4) = 2, P(6, 5) = 1, P(6, 6) = 1 si P(6) = 11.
Observat ia 2.2.2. Avem P(n) = P(n, 1) + P(n, 2) + + P(n, n), n N

.
Propozit ia 2.2.1 (relat ia de recurent a a numerelor P(n, k)). Pentru orice n N

si orice k
1, . . . , n 1 avem
P(n, k) = P(n k, 1) + P(n k, 2) + + P(n k, k).
Demonstrat ie. Pentru orice n N

si orice k 1, . . . , n 1 not am
T(n, k) = (n
1
, . . . , n
k
)[n
i
N

i, n
1
n
k
, n
1
+ + n
k
= n.
Denim corespondent ele : T(n, k)
k

i=1
T(n k, i) si :
k

i=1
T(n k, i) T(n, k) prin:
TEMA 2. PARTIT II 20
(n
1
, . . . , n
k
) T(n, k), (n
1
, . . . , n
k
) = (n
j
1, . . . , n
k
1), unde j = mini[n
i
2, i
1, . . . , k (exist a j, deoarece k n 1);
i 1, . . . , k, (n
1
, . . . , n
i
) T(n k, i), (n
1
, . . . , n
i
) = (1, . . . , 1
. .
de ki ori
, n
1
+ 1, . . . , n
i
+ 1).
Interpretarea acestor funct ii este urmatoarea: aplicarea funct iei unei partit ii a lui n cu k termeni
const a n micsorarea cu 1 a ec arui termen si eliminarea termenilor care astfel devin egali cu zero,
obt inandu-se o partit ie a lui n k cu cel mult k termeni. Reciproc, aplicarea funct iei unei partit ii
a lui n k cu cel mult k termeni const a n marirea cu 1 a ec arui termen si ad augarea de termeni
egali cu 1 pentru a obt ine k termeni, astfel obt inandu-se o partit ie a lui n cu k termeni.
Funct iile si sunt bine denite si inverse una celeilalte, deci card (T(n, k)) = card
_
k

i=1
T(n k, i)
_
.
Cum mult imile T(n k, 1), . . . , T(n k, k) sunt evident disjuncte dou a c ate dou a, rezulta c a
P(n, k) =
k

i=1
P(n k, i).
Observat ia 2.2.3. Relat ia de recurent a din Propozit ia 2.2.1, mpreun a cu condit iile init iale evidente
P(n, 1) = P(n, n) = 1, P(n, k) = 0 k > n permit calculul tuturor numerelor P(n, k), deci si al
numerelor P(n), conform Corolarului 2.2.2. De exemplu, tabelul numerelor P(n, k) si P(n) pentru
n 7 (si k 7) este:
P(n, k) k = 1 k = 2 k = 3 k = 4 k = 5 k = 6 k = 7 P(n)
n = 1 1 0 0 0 0 0 0 1
n = 2 1 1 0 0 0 0 0 2
n = 3 1 1 1 0 0 0 0 3
n = 4 1 2 1 1 0 0 0 5
n = 5 1 2 2 1 1 0 0 7
n = 6 1 3 3 2 1 1 0 11
n = 7 1 3 4 3 2 1 1 15
Numerele P(n, k) nenule, aate doar pe diagonala principal a si sub aceast a diagonal a (adic a 1 k
n) formeaz a triunghiul numerelor P(n, k).
Algoritmul 2.2.1 (de generare a partit iilor lui n cu k termeni). Fie n, k N

, k n. Pentru
generarea n ordine lexicograc a a celor P(n, k) partit ii ale lui n cu k termeni
(t
1
, t
2
, . . . , t
k
), n = t
1
+ t
2
+ + t
k
, t
i
N

i, t
1
t
2
t
k
folosim din nou regula urm atorului.
Prima partit ie este (1, . . . , 1
. .
de k1 ori
, n k + 1).
O partit ie curenta arbitrar a
(t
1
, t
2
, . . . , t
j1
, t
j
, t
j+1
, . . . , t
k
)
are o partit ie urmatoare dac a si numai dac a exist a un indice j k 1, . . . , 1 astfel ncat
t
j
t
k
2.

In acest caz, luand cel mai mare indice j cu aceast a proprietate, urm atoarea
partit ie este
(t
1
, t
2
, . . . , t
j1
, t
j
+ 1, t
j
+ 1, . . . , t
j
+ 1, n r),
unde r = t
1
+ t
2
+ + t
j1
+ (t
j
+ 1) + (t
j
+ 1) + + (t
j
+ 1).
TEMA 2. PARTIT II 21
De exemplu, urm atoarea partit ie dupa
22 = 1 + 1 + 2 + 4 + 4 + 5 + 5
este
22 = 1 + 1 + 3 + 3 + 3 + 3 + 8
(deoarece t
j
= t
3
= 2 t
k
2 = 5 2).
Descrierea n pseudocod a algoritmului are forma
generare P(n, k) :
pentru i = 1, k 1 t
i
1; t
k
n k + 1;
asare(t, k);
repeta
j k 1;
cat timp (t
j
> t
k
2) si (j > 0) j j 1;
daca (j > 0)
t
j
t
j
+ 1;
pentru i = j + 1, k 1 t
i
t
j
;
r 0;
pentru i = 1, k 1 r r + t
i
;
t
k
n r;
asare(t, k);

cat timp (j > 0);


,
unde funct ia de asare este aceeasi ca n Algoritmul 2.1.1.
2.3 Partit ii ale unei mult imi nite
Denit ia 2.3.1. O partit ie a unei mult imi nevide A este o scriere de forma
A = A
1
A
2
A
k
,
unde submult imile (p art ile, clasele) A
1
, A
2
, . . . , A
k
(k N

) sunt nevide si disjuncte dou a c ate doua,


si nu conteaza ordinea dintre aceste submult imi. Consider am c a singura partit ie a mult imii vide este
partit ia cu zero submult imi.
Denit ia 2.3.2. Fie n, k N.
a) Num arul lui Stirling de spet a a doua, notat cu S(n, k), reprezint a numarul de partit ii ale
unei mult imi cu n elemente n k part i.
b) Num arul lui Bell, notat cu B
n
, reprezint a numarul tuturor partit iilor unei mult imi cu n ele-
mente.
Exemplul 2.3.1. Mult imea A = a, b, c are partit iile
A = a, b, c = a, b c = a, c b = a b, c = a b c,
deci S(3, 1) = 1, S(3, 2) = 3, S(3, 3) = 1 si B
3
= 5.
Observat ia 2.3.1. Evident, avem B
0
= 1 si B
n
= S(n, 1) + S(n, 2) + + S(n, n), n N

.
TEMA 2. PARTIT II 22
Propozit ia 2.3.1 (relat ia de recurent a a numerelor S(n, k)).
S(n, k) = S(n 1, k 1) + kS(n 1, k), n, k N

.
Demonstrat ie. Not am
o(n, k) = A
1
, . . . , A
k
[A
i
,= i, A
i
A
j
= i ,= j, A = A
1
A
k
,
pentru orice n, k N

. Denim corespondent ele


: o(n, k) o(n 1, k 1) 1, . . . , k o(n 1, k),
: o(n 1, k 1) 1, . . . , k o(n 1, k) o(n, k),
prin:
A
1
, . . . , A
k
o(n, k), (A
1
, . . . , A
k
) =
=
_
A
1
, . . . , A
k
A
i
, daca n A
i
si A
i
= n,
(i, A
1
, . . . , A
i
n, . . . , A
k
), daca n A
i
si A
i
,= n;
A
1
, . . . , A
k1
o(n 1, k 1), (A
1
, . . . , A
k1
) = A
1
, . . . , A
k1
, n,
(i, A
1
, . . . , A
k
) 1, . . . , k o(n 1, k), (i, A
1
, . . . , A
k
) = A
1
, . . . , A
i
n, . . . , A
k
.
Interpretarea acestor denit ii este urmatoarea: aplicarea funct iei unei partit ii a mult imii 1, . . . , n
n k part i const a n eliminarea elementului n, astfel obt inandu-se o partit ie a mult imii 1, . . . , n1
n k 1 sau n k part i, dup a cum n este sau nu singur ntr-o parte. Reciproc, aplicarea funct iei
const a n ad augarea elementului n, e singur ntr-o parte, e la oricare din cele k part i.
Funct iile si sunt bine denite si inverse una celeilalte, deci
card (o(n, k)) = card (o(n 1, k 1) 1, . . . , k o(n 1, k)) ,
adic a S(n, k) = S(n 1, k 1) + kS(n 1, k).
Observat ia 2.3.2. Relat ia de recurent a de mai sus mpreun a cu condit iile init iale evidente S(0, 0) = 1,
S(0, k) = 0 k 1, S(n, 0) = 0 n 1 permit calculul tuturor numerelor S(n, k), deci si al numerelor
B
n
, conform Corolarului 2.3.1. De exemplu, tabelul numerelor S(n, k) si B
n
pentru n 6 (si k 6)
este:
S(n, k) k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 k = 6 B
n
n = 0 1 0 0 0 0 0 0 1
n = 1 0 1 0 0 0 0 0 1
n = 2 0 1 1 0 0 0 0 2
n = 3 0 1 3 1 0 0 0 5
n = 4 0 1 7 6 1 0 0 15
n = 5 0 1 15 25 10 1 0 52
n = 6 0 1 31 90 65 15 1 203
Numerele S(n, k) nenule, aate doar pe diagonala principal a si sub aceast a diagonal a (1 k n)
formeaz a triunghiul numerelor lui Stirling de spet a a doua.
TEMA 2. PARTIT II 23
Algoritmul 2.3.1 (de generare a partit iilor unei mult imi ntr-un numar xat de part i). Fie
A = 1, 2, . . . , n si 1 k n. Pentru scrierea unei partit ii
A = A
1
A
k
vom folosi convent ia c a n ecare parte A
i
elementele sunt ordonate cresc ator, iar ordinea dintre
part ile A
1
, . . . , A
k
este dat a de ordinea dintre cele mai mici elemente ale acestor mult imi.
De exemplu, partit ia
1, 2, 3, 4, 5 = 3, 2 5 4, 1
va scris a sub forma
1, 2, 3, 4, 5 = 1, 4 2, 3 5. (2.3.1)
Pentru reprezentarea unei partit ii A = A
1
A
k
scrise conform convent iei de mai sus, vom folosi
vectorul caracteristic v = (v
1
, . . . , v
n
), unde
v
i
= j daca i A
j
, i 1, 2, . . . , n, j 1, 2, . . . , k.
De exemplu, vectorul caracteristic al partit iei (2.3.1) este v = (1, 2, 2, 1, 3).
Cu aceasta reprezentare, conform demonstrat iei relat iei de recurent a a numerelor S(n, k) (Propozit ia
2.3.1) obt inem un algoritm recursiv de generare a partit iilor mult imii 1, 2, . . . , nn k part i.

In pseu-
docod, acest algoritm poate descris sub forma
generare S(n, k) :
daca (k = 1) //condit ie init ial a
pentru i = 1, n v
i
1; //partit ia cu o parte
asare(v);

altfel
daca (k = n) //condit ie init ial a
pentru i = 1, n v
i
i; //partit ia cu n part i
asare(v);

altfel //relat ia de recurent a


v
n
k; generare S(n 1, k 1); //n singur n parte
pentru i = 1, k //n nesingur n parte
v
n
i; generare S(n 1, k);

,
unde funct ia de asare, ce transform a vectorul caracteristic v n partit ia corespunz atoare, este
asare(v) :
pentru j = 1, k //asam partea A
j
aseaza ;
pentru i = 1, n daca (v
i
= j) aseaza i;
aseaza ;

.
Tema 3
Grafuri
Grafurile sunt modele matematice cu o gam a larg a de aplicat ii. Aceasta aplicabilitate a condus
la dezvoltarea accelerat a a teoriei grafurilor, at at din punct de vedere al rezultatelor teoretice c at
si al algoritmicii, grafurile impun andu-se drept modele de baz a n informatic a, n special n teoria
structurilor de date si a analizei algoritmilor.
3.1 Denit ii generale
Denit ia 3.1.1. Un graf neorientat (graf, pseudograf, graf general) este o pereche G = (V, E)
unde:
V este o mult ime nit a si nevida, elementele sale numindu-se nodurile (varfurile, punctele)
grafului G;
E este o colect ie (mult ime multipl a, multiset) nita de perechi neordonate, posibil egale, de
noduri, elementele sale numindu-se muchiile (legaturile directe, liniile) grafului G.
Observat ia 3.1.1.

Intr-o pereche neordonat a, notat a [x, y], nu conteaz a ordinea dintre elemente, adic a
[x, y] = [y, x].
Denit ia 3.1.2. Un graf orientat (digraf, pseudodigraf) este o pereche G = (V, E) unde:
V este o mult ime nit a si nevida, elementele sale numindu-se varfurile (nodurile, punctele)
grafului G;
E este o colect ie (mult ime multipl a, multiset) nita de perechi ordonate de v arfuri, elementele
sale numindu-se arcele (legaturile directe ale) grafului G.
Observat ia 3.1.2.

Intr-o pereche ordonat a, notat a (x, y), conteaz a ordinea dintre elemente, adic a
(x, y) ,= (y, x) pentru x ,= y.
Denit ia 3.1.3. Num arul de noduri ale unui graf (neorientat sau orientat) se numeste ordinul
grafului, iar num arul de muchii sau arce se numeste dimensiunea grafului.
Denit ia 3.1.4. a) Daca e = [x, y] este o muchie a unui graf neorientat, atunci nodurile x si y
se numesc extremitat ile muchiei e si spunem c a muchia e este incident a cu nodurile x si
y.
b) Daca e = (x, y) este un arc al unui graf orientat, atunci nodul x se numeste extremitatea
init ial a iar nodul y se numeste extremitatea nala a arcului e si spunem c a arcul e este
incident cu x spre exterior si cu y spre interior.
24
TEMA 3. GRAFURI 25
c) O bucl a a unui graf (neorientat sau orientat) este o muchie sau un arc av and extremit at ile
egale (adic a o muchie de forma [x, x], respectiv un arc de forma (x, x)).
d) Doua noduri x si y ale unui graf (neorientat sau orientat) se numesc adiacente (vecine) dac a
exista o muchie sau un arc incident cu x si cu y (adic a o muchie de forma [x, y], respectiv un
arc de forma (x, y) sau de forma (y, x)).
Denit ia 3.1.5. Daca n colect ia (mult imea multipla) de muchii sau arce a unui graf (neorientat
sau orientat) exist a dou a sau mai multe elemente egale (si aate pe pozit ii diferite), atunci acestea
se numesc muchii sau arce multiple.
Denit ia 3.1.6. Un graf (neorientat sau orientat) f ar a bucle se numeste multigraf (neorientat,
respectiv orientat).
Denit ia 3.1.7. Un graf (neorientat sau orientat) se numeste simplu (sau strict) dac a nu cont ine
nici bucle si nici muchii sau arce multiple.
Observat ia 3.1.3. a) Un graf neorientat simplu este o pereche G = (V, E), unde V este o mult ime
nit a si nevida (de elemente numite noduri) iar E T
2
(V ) este o mult ime nita (de elemente numite
muchii), unde
T
2
(V ) = x, y[x, y V, x ,= y
(mult imea tuturor submult imilor cu dou a elemente ale lui V ).
b) Un graf orientat simplu este o pereche G = (V, E), unde V este o mult ime nita si nevida (de
elemente numite noduri) iar E V V (x, x)[x V este o mult ime nita (de elemente numite
arce).
Denit ia 3.1.8. Fie G = (V, E) un graf (orientat sau neorientat). O reprezentare graca a lui
G se obt ine reprezent and nodurile sale prin puncte distincte (n plan sau pe o alt a suprafat a dat a),
iar muchiile [x, y] sau arcele (x, y) prin segmente (de curb a continu a) distincte neorientate, respectiv
orientate, de la punctul ce reprezint a nodul x pan a la punctul ce reprezint a nodul y.
Exemplul 3.1.1. Graful neorientat G = (V, E), cu V = 1, 2, 3, 4, 5, 6 si E = e
1
, e
2
, e
3
, e
4
, e
5
, e
6
, e
7
, e
8
, e
9
,
unde e
1
= [1, 2], e
2
= [1, 4], e
3
= [2, 2], e
4
= [2, 5], e
5
= [3, 6], e
6
= [3, 6], e
7
= [4, 5], e
8
= [4, 5], e
9
=
[4, 5] (E este o mult ime multipl a!) are reprezentarea grac a din Figura 3.1.1.
9
e
1
4
2
5
1
e
4
e
3
e
8
e
7
e
5
e
6
e 2
e
3
6
Figura 3.1.1:
1
2
3
4
5
Figura 3.1.2:
Acest graf are ordinul 6 si dimensiunea 9. El cont ine bucla e
3
, muchiile multiple e
5
, e
6
si muchiile
multiple e
7
, e
8
, e
9
, deci nu este nici multigraf, nici simplu. Nodurile 1 si 2 sunt adiacente, iar nodurile
1 si 5 nu sunt adiacente.
Exemplul 3.1.2. Graful orientat G = (V, E), cu V = 1, 2, 3, 4, 5 si
E = (1, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (5, 4)
este un graf simplu av and reprezentarea grac a din Figura 3.1.2. Arcul (3, 1) are extremitatea init ial a
3 si extremitatea nal a 1.
TEMA 3. GRAFURI 26
Denit ia 3.1.9. Fie G
1
= (V
1
, E
1
) si G
2
= (V
2
, E
2
) doua grafuri (ambele orientate sau ambele
neorientate).
a) Spunem c a G
1
este un subgraf al lui G
2
si notam G
1
G
2
dac a V
1
V
2
si E
1
E
2
.
b) Spunem c a G
1
este un graf part ial al lui G
2
dac a V
1
= V
2
si E
1
E
2
.
Denit ia 3.1.10. Fie G = (V, E) un graf (neorientat sau orientat) si U V o submult ime nevid a
de noduri. Subgraful indus (generat) de U n G este subgraful G[U] = (U, F), unde F este
colect ia tuturor muchiilor sau arcelor din E ce au ambele extremit at i n U.
Denit ia 3.1.11. Fie G = (V, E) un graf (orientat sau neorientat) si F E o colect ie de muchii
sau de arce.
a) Subgraful indus (generat) de F n G este subgraful G[F] = (U, F), unde U este mult imea
tuturor nodurilor din V ce sunt extremit at i pentru cel put in o muchie sau un arc din F.
b) Graful part ial indus (generat) de F n G este graful part ial (V, F).
Exemplul 3.1.3. Pentru graful neorientat din Exemplul 3.1.1, subgraful generat de submult imea de
noduri 1, 3, 4, 5 are reprezentarea din Figura 3.1.3.
1
4
5
3
Figura 3.1.3:
Pentru graful orientat din Exemplul 3.1.2, subgraful generat de submult imea de arce (2, 3), (5, 4)
are reprezentarea din Figura 3.1.4, iar graful part ial generat de aceeasi submult ime de arce are
reprezentarea din Figura 3.1.5.
5
4
2
3
Figura 3.1.4:
1
5
4
2
3
Figura 3.1.5:
3.2 Reprezentarea grafurilor

In continuare descriem cateva forme de reprezentare (memorare) a grafurilor n informatic a. Dintre


aceste forme, cea mai utilizat a este matricea de adiacent a.
Denit ia 3.2.1. Fie G = (V, E) un graf (neorientat sau orientat) unde V = v
1
, . . . , v
n
si E =
e
1
, . . . , e
m
. Matricea de adiacent a asociat a grafului G este matricea A = (a
ij
)
i,j=1,n
denita
prin
a
ij
= num arul de muchii sau de arce e
k
E de la nodul v
i
la nodul v
j
(adic a muchii de forma
e
k
= [v
i
, v
j
], respectiv arce de forma e
k
= (v
i
, v
j
)), i, j 1, . . . , n.
TEMA 3. GRAFURI 27
Observat ia 3.2.1. a) Dac a graful neorientat G = (V, E) este simplu, atunci
a
ij
=
_
1, daca v
i
si v
j
sunt adiacente (adic a [v
i
, v
j
] E),
0, n caz contrar.
b) Dac a graful orientat G = (V, E) este simplu, atunci
a
ij
=
_
1, daca (v
i
, v
j
) E,
0, n caz contrar.
Exemplul 3.2.1. Matricea de adiacent a asociat a grafului neorientat din Exemplul 3.1.1 este
A =

0 1 0 1 0 0
1 1 0 0 1 0
0 0 0 0 0 2
1 0 0 0 3 0
0 1 0 3 0 0
0 0 2 0 0 0

,
iar matricea de adiacent a asociat a grafului orientat din Exemplul 3.1.2 este
A =

0 1 0 0 0
0 0 1 1 1
1 1 0 0 0
0 0 0 0 0
0 0 0 1 0

.
Observat ia 3.2.2. Evident, orice graf neorientat are matricea de adiacent a simetrica (a
ij
= a
ji
i, j).
Denit ia 3.2.2. Fie G = (V, E) un graf, unde V = v
1
, . . . , v
n
si E = e
1
, . . . , e
m
, E ,= .
a) Daca G este neorientat, atunci matricea de incident a asociat a grafului G este matricea
B = (b
ij
)
i = 1, n
j = 1, m
denita prin
b
ij
=

0, dac a e
j
nu este incident a cu v
i
,
1, dac a e
j
nu este bucl a si este incidenta cu v
i
,
2, dac a e
j
este o bucl a incidenta cu v
i
,
i 1, . . . , n, j 1, . . . , m.
b) Daca G este orientat si f ar a bucle, atunci matricea de incident a asociat a grafului G este
matricea B = (b
ij
)
i = 1, n
j = 1, m
denita prin
b
ij
=

0, dac a e
j
nu este incident a cu v
i
,
1, dac a e
j
este incident a cu v
i
spre exterior,
1, dac a e
j
este incident a cu v
i
spre interior,
i 1, . . . , n, j 1, . . . , m.
TEMA 3. GRAFURI 28
Exemplul 3.2.2. Matricea de incident a a grafului neorientat din Exemplul 3.1.1 este
B =

1 1 0 0 0 0 0 0 0
1 0 2 1 0 0 0 0 0
0 0 0 0 1 1 0 0 0
0 1 0 0 0 0 1 1 1
0 0 0 1 0 0 1 1 1
0 0 0 0 1 1 0 0 0

,
iar matricea de incident a a grafului orientat din Exemplul 3.1.2 este
B =

1 0 0 0 1 0 0
1 1 1 1 0 1 0
0 1 0 0 1 1 0
0 0 1 0 0 0 1
0 0 0 1 0 0 1

.
Observat ia 3.2.3. Fie G = (V, E) un graf (neorientat sau orientat), unde V = v
1
, . . . , v
n
si E =
e
1
, . . . , e
m
, E ,= . O alt a reprezentare a grafului G este matricea T ce ret ine n ecare coloan a
extremit at ile unei muchii sau arc, adic a T = (t
kj
)
k = 1, 2
j = 1, m
denita prin t
1j
= x, t
2j
= y, unde
e
j
= [x, y] (pentru muchii) sau e
j
= (x, y) (pentru arce), j 1, . . . , m. Pentru graful din
Exemplul 3.1.1 matricea T este
T =
_
1 1 2 2 3 3 4 4 4
2 4 2 5 6 6 5 5 5
_
,
iar pentru graful din Exemplul 3.1.2 matricea T este
T =
_
1 2 2 2 3 3 5
2 3 4 5 1 2 4
_
.
Observat ia 3.2.4. O alt a form a frecvent utilizat a n reprezentarea grafurilor simple este dat a de
listele de adiacent a (memorate static sau dinamic). Lista de adiacent a a unui nod x este format a
din toate nodurile y pentru care exist a muchie sau arc de la x la y (y se numeste succesor direct
al lui x). Pentru graful orientat din Exemplul 3.1.2, listele de adiacent a sunt
L(1) = 2, L(2) = 3, 4, 5, L(3) = 1, 2, L(4) = , L(5) = 4,
unde L(i) reprezint a lista de adiacent a a nodului i. Pentru grafurile orientate simple, deseori se
memoreaz a si listele de predecesori direct i. Lista de predecesori direct i a unui nod x este format a
din toate nodurile y pentru care exist a arc de la y la x (y se numeste predecesor direct al lui x).
Pentru graful din Exemplul 3.1.2, aceste liste sunt

L(1) = 3,

L(2) = 1, 3,

L(3) = 2,

L(4) = 2, 5,

L(5) = 2.
Evident, pentru grafurile neorientate not iunile de succesor direct si predecesor direct coincid, ind si
sinonime cu not iunile de vecin sau adiacent.
Observat ia 3.2.5. Alegerea uneia sau alteia dintre formele de reprezentare a grafurilor descrise mai
sus depinde de ecient a si de usurint a implement arii operat iilor necesare de prelucrare a acestor
forme, deci de tipul problemei modelate prin grafuri si de algoritmul de rezolvare utilizat.
TEMA 3. GRAFURI 29
3.3 Grade
Denit ia 3.3.1. Fie G = (V, E) un graf si x V un nod arbitrar xat.
a) Daca G este neorientat, atunci gradul lui x, notat d
G
(x) = d(x), este denit prin
d(x) = a(x) + 2 b(x),
unde a(x) reprezint a numarul de muchii e E ce nu sunt bucle si sunt incidente cu x, iar b(x)
este num arul de bucle e E ce sunt incidente cu x.
b) Daca G este orientat, atunci:
gradul de iesire (semigradul exterior) al lui x, notat d
+
G
(x) = d
+
(x), reprezint a
num arul de arce e E incidente cu x spre exterior;
gradul de intrare (semigradul interior) al lui x, notat d

G
(x) = d

(x), reprezint a
num arul de arce e E incidente cu x spre interior;
gradul (total al) lui x, notat d
G
(x) = d(x), este
d(x) = d
+
(x) + d

(x).
Exemplul 3.3.1. Pentru graful neorientat din Exemplul 3.1.1, gradele nodurilor sunt: d(1) = 2,
d(2) = 4, d(3) = 2, d(4) = 4, d(5) = 4, d(6) = 2.
Pentru graful orientat din Exemplul 3.1.2, gradele nodurilor sunt:
d
+
(1) = 1, d

(1) = 1, d(1) = 2,
d
+
(2) = 3, d

(2) = 2, d(2) = 5,
d
+
(3) = 2, d

(3) = 1, d(3) = 3,
d
+
(4) = 0, d

(4) = 2, d(4) = 2,
d
+
(5) = 1, d

(5) = 1, d(5) = 2.
Propozit ia 3.3.1. Fie G = (V, E) un graf, V = v
1
, . . . , v
n
, si e A = (a
ij
)
i,j=1,n
matricea de
adiacent a a grafului G.
a) Daca G este neorientat, atunci d(v
i
) = a
ii
+
n

j=1
a
ij
, i 1, . . . , n.
b) Daca G este orientat, atunci d
+
(v
i
) =
n

j=1
a
ij
, d

(v
i
) =
n

j=1
a
ji
, i 1, . . . , n.
Observat ia 3.3.1. Dac a graful G este simplu, atunci a
ii
= 0 i si egalitatea de la punctul a) al
propozit iei anterioare devine d(v
i
) =
n

j=1
a
ij
.
Propozit ia 3.3.2. Fie G = (V, E) un graf av and dimensiunea m. Atunci

xV
d(x) = 2m.

In plus, daca G este orientat atunci

xV
d
+
(x) =

xV
d

(x) = m.
Denit ia 3.3.2. Fie G = (V, E) un graf. Un nod x V cu d
G
(x) = 0 se numeste nod izolat, iar
un nod y V cu d
G
(y) = 1 se numeste nod terminal.
TEMA 3. GRAFURI 30
3.4 Conexitate
Denit ia 3.4.1. Fie G = (V, E) un graf.
a) Un lant n graful G este o succesiune alternanta
[v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
],
unde v
1
, v
2
, . . . , v
k+1
V (noduri), e
1
, e
2
, . . . , e
k
E (muchii sau arce), k N, cu proprietatea
c a pentru orice i 1, . . . , k e
i
este o muchie sau un arc av and extremit at ile v
i
si v
i+1
(adic a
e
i
= [v
i
, v
i+1
] pentru un graf neorientat, respectiv e
i
= (v
i
, v
i+1
) sau e
i
= (v
i+1
, v
i
) pentru un
graf orientat). Nodurile v
1
si v
k+1
se numesc extremitat ile lant ului, iar nodurile v
2
, . . . , v
k
se numesc noduri intermediare. Num arul k de muchii sau arce (nu neap arat distincte) ale
lant ului se numeste lungimea lant ului.
b) Un lant se numeste nchis dac a are extremit at ile egale, respectiv deschis n caz contrar.
c) Un lant se numeste simplu dac a muchiile sau arcele sale sunt diferite dou a c ate doua (con-
sider and diferite si muchiile sau arcele multiple aate pe pozit ii diferite n E).
d) Un lant deschis se numeste elementar dac a nodurile sale sunt diferite dou a c ate doua. Un
lant nchis se numeste elementar dac a este simplu si, cu except ia extremit at ilor, nodurile
sale sunt diferite dou a c ate dou a.
e) Un ciclu este un lant nchis si simplu de lungime nenula (adic a cu cel put in o muchie sau un
arc).
f ) Un drum este un lant [v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
] cu proprietatea c a pentru orice i 1, . . . , k
muchia sau arcul e
i
are extremitatea init iala v
i
si extremitatea nal a v
i+1
(adic a e
i
= (v
i
, v
i+1
)
pentru graf orientat).
Un astfel de drum se noteaz a si cu
(v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
),
nodurile v
1
si v
k+1
numindu-se extremitatea init ial a, respectiv extremitatea nala a dru-
mului.
g) Un circuit este un drum nchis si simplu de lungime nenula (adic a un drum ce este si ciclu).
Observat ia 3.4.1. Pentru grafurile neorientate not iunile de lant si de drum coincid; deci si not iunile
de ciclu si de circuit coincid.
Observat ia 3.4.2. Orice lant elementar este si simplu.
Observat ia 3.4.3. Pentru grafurile neorientate sau orientate simple orice lant [v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
]
sau drum (v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
) este bine determinat de nodurile sale (deoarece muchia sau
arcul e
i
nu poate dec at singura muchie sau singurul arc de la v
i
la v
i+1
, i), deci poate notat,
pe scurt, doar prin nodurile succesive
[v
1
, v
2
, . . . , v
k
, v
k+1
], respectiv (v
1
, v
2
, . . . , v
k
, v
k+1
).
Exemplul 3.4.1. Pentru graful neorientat din Exemplul 3.1.1,
[1, e
2
, 4, e
9
, 5, e
4
, 2, e
1
, 1, e
2
, 4]
TEMA 3. GRAFURI 31
este un lant (drum) deschis, nesimplu (cont ine de dou a ori e
2
), neelementar (cont ine de dou a ori 1),
de lungime 5.

In acelasi graf, [1, e


1
, 2, e
3
, 2, e
4
, 5, e
7
, 4, e
9
, 5, e
8
, 4, e
2
, 1] este un ciclu (circuit) simplu si neelementar
(cont ine de dou a ori 2), de lungime 7.
Pentru graful orientat simplu din Exemplul 3.1.2, [3, 1, 2, 4, 5] este un lant ce nu este drum
(deoarece (4, 5) nu este arc, ci (5, 4)), iar (3, 1, 2, 5, 4) este un drum (si lant ) deschis elementar
(si simplu) de lungime 4.

In acelasi graf, (1, 2, 3, 1) este un circuit (si ciclu) elementar, iar [2, 5, 4, 2]
este un ciclu elementar ce nu este circuit (deoarece (4, 2) nu este arc, ci (2, 4)).
Denit ia 3.4.2. a) Un graf (neorientat sau orientat) se numeste conex dac a pentru orice dou a
noduri distincte x, y exista cel put in un lant de la x la y.
b) Un graf orientat se numeste tare-conex dac a pentru orice dou a noduri distincte x, y exista cel
put in un drum de la x la y (deci, schimb and ordinea lui x si y, exista cel put in un drum si de
la y la x).
Observat ia 3.4.4. Orice graf tare-conex este si conex (deoarece orice drum este si lant ). Orice graf
cu un singur nod veric a denit ia anterioar a, deci este si conex si tare-conex.
Observat ia 3.4.5. Deoarece pentru orice nod x exist a lant ul [x] si drumul (x) de lungimi zero, rezult a
ca n denit ia anterioar a putem renunt a la condit iile ca nodurile x si y sa e distincte.
De asemenea, deoarece prin eliminarea tuturor port iunilor dintre noduri egale dintr-un lant sau
drum se obt ine un lant sau un drum elementar av and aceleasi extremit at i, rezulta c a n denit ia
anterioar a putemnlocui termenii de lant si drum cu lant elementar, respectiv drum elemen-
tar.
Exemplul 3.4.2. Graful neorientat din Exemplul 3.1.1 nu este conex, deoarece nu exist a lant uri ntre
nodurile 1 si 3. Graful orientat din Exemplul 3.1.2 este conex, dar nu este tare-conex, deoarece nu
exist a drum de la nodul 4 la nodul 1 (desi exista drum de la nodul 1 la nodul 4!).
Denit ia 3.4.3. a) O componenta conexa a unui graf (orientat sau neorientat) G = (V, E)
este un subgraf G[U] generat de o submult ime U V de noduri cu proprietatea c a G[U] este
conex si maximal cu aceasta proprietate (n raport cu incluziunea), adic a pentru orice nod
x V U subgraful G[U x] nu mai este conex.
b) O componenta tare-conexa a unui graf orientat G = (V, E) este un subgraf G[U] generat
de o mult ime U V de noduri cu proprietatea c a G[U] este tare-conex si maximal cu aceasta
proprietate (n raport cu incluziunea), adic a pentru orice noduri x
1
, x
2
, . . . , x
p
V U subgraful
G[U x
1
, x
2
, . . . , x
p
] nu mai este tare-conex.
Observat ia 3.4.6. Un graf este conex dac a si numai dac a are o singur a component a conex a. Un graf
orientat este tare-conex dac a si numai dac a are o singur a component a tare-conex a. Num arul de
componente tare-conexe ale unui graf orientat este mai mare sau egal dec at num arul de componente
conexe ale acelui graf, deoarece orice component a tare-conex a este inclus a ntr-o component a conex a
(conform denit iei anterioare si Observat iei 3.4.4).
Observat ia 3.4.7. Orice nod izolat x genereaza o component a conex a si o component a tare-conex a,
ambele av and forma G[x] = (x, ).
Propozit ia 3.4.1. a) Fie G[V
1
], . . . , G[V
k
] componentele conexe (diferite) ale unui graf G = (V, E).
Atunci V
1
, . . . , V
k
este o partit ie a mult imii V (adic a V
i
,= i, V
i
V
j
= i ,= j,
V
1
V
k
= V ).
b) Fie G[V

1
], . . . , G[V

r
] componentele tare-conexe (diferite) ale unui graf orientat G = (V, E).
Atunci V

1
, . . . , V

r
este de asemenea o partit ie a mult imii V .
TEMA 3. GRAFURI 32
Exemplul 3.4.3. Componentele conexe ale grafului neorientat din Exemplul 3.1.1 sunt generate de
submult imile de noduri V
1
= 1, 2, 4, 5 si V
2
= 3, 6, deci acel graf are 2 componente conexe.
Componentele tare-conexe ale grafului orientat din Exemplul 3.1.2 sunt generate de submult imile de
noduri V
1
= 1, 2, 3, V
2
= 4 si V
3
= 5, deci acel graf are 3 componente tare-conexe.
Observat ia 3.4.8. Submult imile de muchii sau arce ale componentelor conexe ale unui graf formeaz a de
asemenea o partit ie a mult imii de muchii sau arce a grafului (deoarece pentru orice muchie e = [x, y]
sau arc e = (x, y) nodurile x si y se a a ntr-o aceeasi component a conex a si aceast a component a
va cont ine si pe e). Armat ia nu mai este valabil a pentru componentele tare-conexe. De exemplu,
pentru graful din Exemplul 3.1.2 arcul (5, 4) nu apart ine nici-unei componente tare-conexe.
Algoritmi pentru testarea conexit at ii si tare-conexit at ii unui graf, precum si pentru determinarea
componentelor conexe si tare-conexe ale unui graf, vor prezentat i n sect iunile urm atoare.
Denit ia 3.4.4. a) Un arbore este un graf conex si f ar a cicluri.
b) O padure este un graf f ar a cicluri.
c) Un arbore part ial al unui graf G = (V, E) este un graf part ial al lui G ce este arbore (adic a
un arbore T = (V, F) cu F E).
Observat ia 3.4.9. Arborii si padurile sunt grafuri simple (deoarece orice bucl a este un ciclu si orice
dou a muchii sau arce multiple formeaz a un ciclu).
Observat ia 3.4.10. Componentele conexe ale unei paduri sunt arbori.
Exemplul 3.4.4. Graful neorientat din Exemplul 3.1.1 nu este p adure (deoarece are cicluri), deci nici
arbore. Graful s au part ial reprezentat n Figura 3.4.1 este o p adure (av and dou a componente conexe
arbori). Graful orientat din Exemplul 3.1.2 nu este arbore (deoarece are cicluri). Doi arbori part iali
ai s ai sunt reprezentat i n Figura 3.4.2.
2
e
1
4
2
5
1
e
4
e
5
e
3
6
Figura 3.4.1:
1
1
2
2
3
3
4
4
5
5
Figura 3.4.2:
Propriet at ile teoretice si algoritmice de baz a ale arborilor vor evident iate n capitolul urm ator.
3.5 Parcurgerea grafurilor
Prin parcurgerea unui graf se nt elege o metod a sistematic a de vizitare succesiv a a nodurilor sale (n
vederea prelucrarii informat iilor atasate n structura de date modelat a prin graful dat).
TEMA 3. GRAFURI 33
Denit ia 3.5.1. Fie G = (V, E) un graf si x V un nod arbitrar xat. Parcurgerea n ad ancime
(DF, depth first) a grafului G pornind din nodul x, numit si r adacina a acestei parcurgeri, const a
n:
se viziteza nodul x, acesta devine nod curent;
dac a nodul curent v
i
are succesori direct i (adic a noduri v
j
pentru care exist a muchie sau arc de
la v
i
la v
j
) nevizitat i, atunci se viziteaz a primul astfel de nod v
j
; nodul v
j
devine nod curent si
se continua procedeul de parcurgere pornind din acest nod;
dac a nodul curent v
j
nu mai are succesori direct i nevizitat i, atunci se revine la nodul predecesor
direct v
i
(cel din care a fost vizitat); nodul v
i
redevine nod curent si se continua procedeul de
parcurgere pornind din acest nod;
dac a nodul curent nu mai are nici succesori direct i nevizitat i, nici predecesor direct (deci este
chiar rad acina x), atunci parcurgerea se ncheie.
Observat ia 3.5.1. Pentru parcurgerea DF, consider and c ate o muchie sau un arc de la ecare nod
curent v
i
la primul s au succesor direct nevizitat v
j
(care va deveni urm atorul nod curent) se obt ine
un arbore, numit arbore DF.
Exemplul 3.5.1. Pentru graful din Exemplul 3.1.2, parcurgerea n ad ancime pornind din nodul 2 este
DF(2) : 2, 3, 1, 4, 5
(consider and c a ordinea dintre succesorii direct i ai ecarui nod este ordinea cresc atoare). Arborele
DF corespunzator acestei parcurgeri este reprezentat n Figura 3.5.1. Pentru acelasi graf, parcurgerea
1
3
2
4 5
Figura 3.5.1:
1
3
2
4 5
Figura 3.5.2:
DF pornind din nodul 3 este
DF(3) : 3, 1, 2, 4, 5,
iar arborele DF corespunz ator este reprezentat n Figura 3.5.2.
Prezentam n continuare doi algoritmi, unul recursiv si altul nerecursiv, pentru implementarea
parcurgerii n ad ancime.
TEMA 3. GRAFURI 34
Algoritmul 3.5.1 (parcurgerea DF, recursiv). Fie graful G = (V, E) av and mult imea de noduri
V = 1, . . . , n si matricea de adiacent a A = (a
ij
)
i,j=1,n
. Fie x V un nod arbitrar xat. Pentru
implementarea parcurgerii DF(x) vom utiliza un vector V IZ av and semnicat ia
V IZ[i] =
_
1, daca nodul i a fost vizitat,
0, n caz contrar,
i 1, . . . , n.
Pentru memorarea arborelui DF(x) vom utiliza un vector TATA av and semnicat ia
TATA[i] =
_
0, daca i = x (r ad acina),
predecesorul direct al lui i, daca i ,= x,
pentru orice nod i din parcurgerea DF. Descrierean pseudocod a algoritmului recursiv de parcurgere
n ad ancime pornind din nodul x are forma
DF recursiv(x) :
viziteaza(x); //se viziteaz a x, de exemplu se aseaza x
V IZ[x] 1; //x a fost vizitat
pentru y = 1, n
daca (a
xy
1) si (V IZ[y] = 0) //y este primul succesor direct
// nevizitat al lui x
TATA[y] x;
DF recursiv(y);//se continu a parcurgerea DF din nodul y

.
Programul C++ corespunz ator, cu citirea grafului dintr-un sier (av and pe prima linie numerele
n de noduri si m de muchii sau arce ale grafului si pe liniile urm atoare perechile de noduri ce formeaz a
aceste muchii sau arce) si asarea parcurgerii DF(x) si a vectorului TATA (ce memoreaza arborele
DF(x)) este:
#include<iostream.h> //parcurgerea DF a unui graf, recursiv
#include<conio.h>
#include<fstream.h>
#define nmax 50 // nr. maxim de noduri
int n,m,A[nmax][nmax],VIZ[nmax],TATA[nmax];
void citire_graf() // citirea grafului din fisierul "graf2.dat"
{ int i,j,k;
ifstream f("graf2.dat");
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) A[i][j]=0;
for(k=1;k<=m;k++)
{ f>>i>>j;
A[i][j]++;
// if (j!=i) A[j][i]++; // doar pt. grafuri NEORIENTATE
}
f.close();
}
void viziteaza(int x) // vizitarea nodului x
{ cout<<x<<" ";
}
void DF_recursiv(int x) // parcurgerea DF pornind din nodul x
{ int y;
viziteaza(x);
VIZ[x]=1;
for(y=1;y<=n;y++)
TEMA 3. GRAFURI 35
if ((A[x][y]>=1)&&(VIZ[y]==0))
{ TATA[y]=x;
DF_recursiv(y);
}
}
void main()
{ int x,i;
clrscr();
citire_graf();
for(i=1;i<=n;i++)
{ VIZ[i]=0; TATA[i]=0;
}
cout<<"Nodul de pornire: x=";cin>>x;
cout<<"Parcurgerea DF: ";
DF_recursiv(x);
cout<<"\nArborele DF este dat de vectorul TATA: ";
for (i=1;i<=n;i++) cout<<TATA[i]<<" ";
getch();
}
Exemplul 3.5.2. Pentru graful din Exemplul 3.1.2, sierul de intrare graf2.dat folosit la citirea
grafului n programul anterior cont ine datele:
5 7 //5 noduri si 7 arce
1 2 //arcul (1, 2)
2 3 //arcul (2, 3)
2 4 //arcul (2, 4)
2 5 //arcul (2, 5)
3 1 //arcul (3, 1)
3 2 //arcul (3, 2)
5 4 //arcul (5, 4).
Algoritmul 3.5.2 (parcurgerea DF, nerecursiv). Fie din nou G = (V, E) un graf av and mult imea
de noduri V = 1, . . . , n si matricea de adiacent a A = (a
ij
)
i,j=1,n
. Fie x V un nod arbitrar
xat. Pentru implementarea nerecursiv a a parcurgerii DF(x) vom utiliza vectorii V IZ si TATA cu
aceleasi semnicat ii ca n algoritmul anterior, un vector URM cu semnicat ia
URM[i] = urm atorul succesor direct al nodului i,
si o structur a de tip stiva S, memorat a ca un vector, ce cont ine nodurile vizitate si n curs de
prelucrare, adic a de vizitare a tuturor succesorilor.
Descrierea n pseudocod a algoritmului are forma
DF(x) :
viziteaza(x);//se viziteaza x, de exemplu se aseaza x
V IZ[x] 1;//x a fost vizitat
TATA[x] 0;
varf 1; S[varf] x;//nodul x se introduce n v arful stivei
cat timp (varf > 0)//stiva este nevida
i S[varf];//i este nodul din v arful stivei
j URM[i] + 1;//j va urm atorul succesor direct nevizitat
//al lui i, dac a exista
cat timp (a
ij
= 0) si (j n) j j + 1;
daca (j > n) //nodul i nu mai are succesori direct i nevizitat i
varf varf 1; //s-a ncheiat prelucrarea lui i si
//l elimin am din stiv a

TEMA 3. GRAFURI 36
altfel
URM[i] j;//j este urmatorul succesor direct al lui i
daca (V IZ[j] = 0) //j nu a fost vizitat
viziteaza(j);//se viziteaza j
V IZ[j] 1;//j a fost vizitat
TATA[j] i;
varf varf + 1;
S[varf] j; //se introduce j n v arful stivei

//stiva este vida, nu mai exist a noduri neprelucrate,


//parcurgerea este ncheiat a.
.
Observat ia 3.5.2. Dac a G = (V, E) este un graf neorientat, atunci pentru orice nod x V componenta
conexa a nodului x este (indusa de) chiar mult imea nodurilor vizitate prin parcurgerea DF(x).
Pe baza acestei observat ii obt inem urmatorul algoritm.
Algoritmul 3.5.3 (determinarea componentelor conexe). Fie din nou G = (V, E) un graf neori-
entat, V = 1, . . . , n si e A = (a
ij
)
i,j=1,n
matricea de adiacent a a grafului G. Pentru determinarea
componentelor conexe ale grafului G vom utiliza un vector CC cu semnicat ia
CC[i] = num arul componentei conexe n care se a a nodul i,
i 1, . . . , n si o variabil a nrc ce reprezinta num arul de componente conexe. Evident, graful G
este conex daca si numai dac a valoarea nal a a variabilei nrc este egal a cu 1.
Descrierea n pseudocod a algoritmului are forma
componente conexe :
nrc 0;
pentru i = 1, n CC[i] 0;
pentru i = 1, n
daca (CC[i] = 0) //nodul i nu a fost vizitat
nrc nrc + 1; //nodurile din parcurgerea DF(i)
// vor forma o nou a componenta conexa
DF(i);

,
unde funct ia DF(i) este cea din Algoritmul 3.5.1 sau cea din Algoritmul 3.5.2, ad aug and instruct iunea
CC[i] nrc n funct ia viziteaza(i).
Observat ia 3.5.3. Algoritmul anterior poate utilizat si pentru determinarea componentelor conexe
ale unui graf orientat, nlocuind condit ia a
xy
1 din funct ia DF recursiv(x) cu a
xy
1 sau
a
yx
1, respectiv condit ia a
ij
= 0 din funct ia DF(x) cu a
ij
= 0 si a
ji
= 0 (deoarece n
determinarea componentelor conexe nu se t ine cont de orientarea arcelor).
Observat ia 3.5.4. Dac a G = (V, E) este un graf orientat, atunci pentru orice nod x V componenta
tare-conexa a nodului x este (indusa de) mult imea nodurilor y vizitate prin parcurgerea DF(x) a
grafului G cu proprietatea c a y este vizitat si n parcurgerea DF(x) a grafului
G = (V, E), unde E = (j, i)[(i, j) E,
numit transpusul (simetricul) lui G. Evident, orice drum (y, v
1
, . . . , v
k
, x) n graful G corespunde
drumului (x, v
k
, . . . , v
1
, y) n graful G, deci x si y sunt n aceeasi component a tare-conex a a lui G
TEMA 3. GRAFURI 37
daca si numai dac a exist a un drum de la x la y n G si un drum de la x la y n G, adic a y este vizitat
prin parcurgerea DF(x) at at n G cat si n G.
Matricea de adiacent a a grafului G este transpusa matricei de adiacent a a grafului G, deci pentru
parcurgerea DF(x) a grafului G putem utiliza tot matricea de adiacent a A a grafului dat G, nlocuind
condit ia a
ij
= 0 cu a
ji
= 0, iar condit ia a
xy
1 cu a
yx
1 n funct iile DF(x), respectiv
DF recursiv(x). Astfel, algoritmul DF poate utilizat si pentru determinarea componentelor
tare-conexe, deci si pentru vericarea tare-conexit at ii grafului.
Denit ia 3.5.2. Fie G = (V, E) un graf si x V un nod arbitrar xat. Parcurgerea n l at ime
(BF,breadth first, parcurgerea pe nivele) a grafului G pornind din nodul x, numit si r adacina
a acestei parcurgeri, const a n:
se viziteza nodul x, considerat nod de nivelul zero;
se viziteaza apoi succesorii direct i nevizitat i ai acestuia (diferit i de x), considerat i noduri de
nivelul 1;
se viziteaza apoi, pe r and, succesorii direct i nevizitat i ai acestora, considerat i noduri de nivelul
2;
s.a.m.d.;
parcurgerea se ncheie cand nici-un nod de pe un nivel nu mai are succesori direct i nevizitat i.
Observat ia 3.5.5. Analog parcurgerii DF, consider and c ate o muchie sau un arc de la ecare nod
curent v al parcurgerii BF la ecare din nodurile nevizitate (de pe urm atorul nivel) pentru care v
este predecesorul direct, se obt ine un arbore, numit arbore BF.
Exemplul 3.5.3. Pentru graful din Exemplul 3.1.2, parcurgerea n l at ime pornind din nodul 2 este
BF(2) : 2, 3, 4, 5, 1
(consider and din nou ordinea dintre succesorii direct i ai ecarui nod ca ind ordinea cresc atoare).
Arborele BF corespunzator acestei parcurgeri este reprezentat n Figura 3.5.3. Pentru acelasi graf,
1
3
2
4 5
Figura 3.5.3:
1
3
2
4 5
Figura 3.5.4:
parcurgerea BF pornind din nodul 3 este
BF(3) : 3, 1, 2, 4, 5,
iar arborele BF corespunz ator este reprezentat n Figura 3.5.4.
TEMA 3. GRAFURI 38
Algoritmul 3.5.4 (parcurgerea BF). Fie graful G = (V, E) av and mult imea de noduri V =
1, . . . , n si matricea de adiacent a A = (a
ij
)
i,j=1,n
. Fie x V un nod arbitrar xat. Pentru imple-
mentarea parcurgerii BF(x) vom utiliza vectorii V IZ, TATA, URM si S av and aceleasi semnicat ii
ca la parcurgerea DF(x) (Algoritmul 3.5.2), cu deosebirea c a vectorul S al nodurilor vizitate si n
curs de prelucrare este organizat si utilizat acum ca o structur a de tip coada.
Aceasta ind singura modicare fat a de Algoritmul 3.5.2, obt inem urm atoarea descriere n pseu-
docod a algoritmului de parcurgere n l at ime
BF(x) :
viziteaza(x);
V IZ[x] 1; TATA[x] 0;
varf 1; coada 1;//nodurile se adaug a la S pe pozit ia coada
//si se elimina de pe pozit ia varf
S[coada] x;
cat timp (varf coada)
i S[varf];
j URM[i] + 1;
cat timp (a
ij
= 0) si (j n) j j + 1;
daca (j > n)
varf varf + 1;

altfel
URM[i] j;
daca (V IZ[j] = 0)
viziteaza (j);
V IZ[j] 1; TATA[j] i;
coada coada + 1; S[coada] j;

.
Observat ia 3.5.6. Observat iile 3.5.2, 3.5.3 si 3.5.4 si algoritmii corespunz atori r am an valabile dac a
nlocuim parcurgerea DF cu parcurgerea BF.
3.6 Algoritmul Roy-Warshall
Denit ia 3.6.1. Fie G = (V, E) un graf (neorientat sau orientat), unde V = v
1
, . . . , v
n
. Ma-
tricea drumurilor asociat a grafului G este matricea D = (d
ij
)
i,j=1,n
denit a prin
d
ij
=
_
1, dac a = (v
i
, . . . , v
j
) drum cu l() > 0,
0, n caz contrar,
unde l() reprezint a lungimea drumului .
Exemplul 3.6.1. Matricea drumurilor asociat a grafului neorientat din Exemplul 3.1.1 este
D =

1 1 0 1 1 0
1 1 0 1 1 0
0 0 1 0 0 1
1 1 0 1 1 0
1 1 0 1 1 0
0 0 1 0 0 1

,
TEMA 3. GRAFURI 39
iar matricea drumurilor asociat a grafului orientat din Exemplul 3.1.2 este
D =

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0

.
Observat ia 3.6.1. Evident, orice graf neorientat are matricea drumurilor simetric a.
Observat ia 3.6.2. Conform Observat iei 3.4.5, pentru i ,= j putem nlocui termenul de drum cu
drum elementar n denit ia matricei drumurilor.
Urm atorul algoritm determin a matricea drumurilor unui graf pornind de la matricea de adiacent a.
Algoritmul 3.6.1 (Roy-Warshall). Fie G = (V, E) un graf simplu cu V = v
1
, . . . , v
n
si e A =
(a
ij
)
i,j=1,n
matricea sa de adiacent a (av and toate elementele 0 sau 1). Se calculeaz a matricele
D
(k)
= (d
(k)
ij
)
i,j=1,n
, k 0, 1, . . . , n,
denite prin
D
(0)
= A, (3.6.1)
d
(k)
ij
= d
(k1)
ij
d
(k1)
ik
d
(k1)
kj
, k, i, j 1, . . . , n, (3.6.2)
unde 0 0 = 0, 0 1 = 1 0 = 1 1 = 1 (operat ia de disjunct ie, sau).
Teorema 3.6.1 (de corectitudine a Algoritmului Roy-Warshall).

In contextul Algoritmului
Roy-Warshall, ultima matrice calculat a este chiar matricea drumurilor asociat a grafului G, adic a
D
(n)
= D.
Demonstrat ie. Vom demonstra prin induct ie dupa k 0, 1, . . . , n ca pentru orice i, j 1, . . . , n
avem
d
(k)
ij
=
_
1, daca = (v
i
, . . . , v
j
) drum cu l() > 0 si I() v
1
, . . . , v
k
,
0, n caz contrar,
(3.6.3)
unde l() reprezint a lungimea drumului , I() reprezint a mult imea nodurilor intermediare ale dru-
mului , iar v
1
, . . . , v
k
reprezinta mult imea v
i
[, 1 i k, deci pentru k = 0 aceast a mult ime
este .
Pentru k = 0 avem
d
(0)
ij
= a
ij
(conform (3.6.1)) si a
ij
=
_
1, daca (v
i
, v
j
) E,
0, n caz contrar
(din denit ia matricei de adiacent a), iar (v
i
, v
j
) E daca si numai dac a = (v
i
, . . . , v
j
) drum cu
l() > 0 si I() = , deci obt inem egalitatea (3.6.3).
Presupunem acum egalitatea (3.6.3) adev arat a pentru k 1 (1 k n) si o demonstr am pentru
k. Folosind (3.6.2), denit ia operat iilor si si ipoteza de induct ie avem echivalent ele:
d
(k)
ij
= 1 d
(k1)
ij
= 1 sau d
(k1)
ik
= d
(k1)
kj
= 1 = (v
i
, . . . , v
j
) drum cu
l() > 0, I() v
1
, . . . , v
k1
sau
1
= (v
i
, . . . , v
k
),
2
= (v
k
, . . . , v
j
)
drumuri cu l(
1
), l(
2
) > 0, I(
1
), I(
2
) v
1
, . . . , v
k1

= (v
i
, . . . , v
j
) cu l() > 0, I() v
1
, . . . , v
k
, v
k
, I() sau

= (v
i
, . . . , v
k
, . . . , v
j
) cu l(

) > 0, I(

) v
1
, . . . , v
k
, v
k
I(

)
TEMA 3. GRAFURI 40
(

se obt ine parcurg and nt ai


1
apoi
2
si, reciproc,
1
,
2
sunt port iunile din

dintre v
i
si prima
aparit ie a lui v
k
n I(

), respectiv dintre ultima aparit ie a lui v


k
n I(

) si v
j
)
= (v
i
, . . . , v
j
) drum cu l() > 0 si I() v
1
, . . . , v
k
.
Demonstrat ia prin induct ie a egalit at ii (3.6.3) este astfel ncheiat a.
Pentru k = n condit ia I() v
1
, . . . , v
n
poate eliminat a, ind ntotdeauna adev arat a, deci
din (3.6.3) si Denit ia 3.6.1 obt inem ca
d
(n)
ij
= d
ij
, i, j 1, . . . , n,
adic a egalitatea din enunt .
Observat ia 3.6.3. Pentru n xat, Algoritmul Roy-Warshall necesit a 2n
3
operat ii (cate o operat ie si
pentru ecare (k, i, j) 1, . . . , n1, . . . , n1, . . . , n), deci acest algoritm are complexitatea
O(n
3
). Reamintim notat ia utilizat a, pentru orice funct ie f : N N,
O(f) = g[g : N N, r > 0, n
0
N a.. g(n) rf(n) n n
0
.
Observat ia 3.6.4. Algoritmul Roy-Warshall r am ane evident valabil si pentru grafuri nesimple, cu
modicarea
d
(0)
ij
=
_
1, daca a
ij
> 0,
0, daca a
ij
= 0,
i, j 1, . . . , n.
Exemplul 3.6.2. Pentru graful din Exemplul 3.1.2, prin aplicarea Algoritmului Roy-Warshall obt inem
matricele:
D
(0)
= A =

0 1 0 0 0
0 0 1 1 1
1 1 0 0 0
0 0 0 0 0
0 0 0 1 0

(matricea de adiacent a);


D
(1)
=

0 1 0 0 0
0 0 1 1 1
1 1 0 0 0
0 0 0 0 0
0 0 0 1 0

; D
(2)
=

0 1 1 1 1
0 0 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0

(deoarece, de exemplu, d
(2)
13
= d
(1)
13
d
(1)
12
d
(1)
23
= 0 1 1 = 0 1 = 1);
D
(3)
=

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0

; D
(4)
=

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0

;
D
(5)
=

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0

= D (matricea drumurilor).
TEMA 3. GRAFURI 41
Observat ia 3.6.5. Conform ecuat iilor (3.6.3), Algoritmul Roy-Warshall este un algoritm specic
metodei programarii dinamice.
Conform ecuat iilor (3.6.2) si denit iei operat iei avem d
(k)
ik
= d
(k1)
ik
si d
(k)
kj
= d
(k1)
kj
, k, i, j
1, . . . , n, deci pentru implementarea algoritmului putem utiliza o singur a matrice D. Astfel obt inem
urm atoarea descriere n pseudocod a algoritmului
Roy Warshall :
pentru i = 1, n
pentru j = 1, n d
ij
a
ij
;//init ializare
pentru k = 1, n
pentru i = 1, n
pentru j = 1, n d
ij
d
ij
d
ik
d
kj
;
,
iar pentru grafuri oarecare (simple sau nesimple) init ializarea are forma
pentru i = 1, n
pentru j = 1, n
daca (a
ij
> 0) d
ij
1;
altfel d
ij
0.
Observat ia 3.6.6. Dac a G = (V, E) este un graf neorientat si V = 1, . . . , n, atunci pentru orice nod
x V componenta conex a a nodului x este (indusa de) mult imea
x y[y V x, d
xy
= 1.
Astfel Algoritmul Roy-Warshall poate utilizat pentru determinarea componentelor conexe si
pentru vericarea conexit at ii grafului.
Algoritmul 3.6.2 (determinarea componentelor tare-conexe). Dac a G = (V, E) este un graf
orientat si V = 1, . . . , n, atunci pentru orice nod x V componenta tare-conex a a nodului x este
(indusa de) mult imea
x y[y V x, d
xy
= d
yx
= 1,
deci Algoritmul Roy-Warshall poate utilizat pentru determinarea componentelor tare-conexe si
pentru vericarea tare-conexit at ii grafului.
Descrierea n pseudocod a algoritmului are forma
componente tare conexe :
nrc 0;//num arul de componente tare-conexe
pentru i = 1, n CC[i] 0;//vectorul componentelor tare-conexe
Roy Warshall;
pentru i = 1, n
daca (CC[i] = 0)
nrc nrc + 1; CC[i] nrc;
pentru j = i + 1, n
daca (CC[j] = 0) si (d
ij
= 1) si (d
ji
= 1)
CC[j] nrc;

,
unde CC[i] reprezint a num arul componentei tare-conexe n care se a a nodul i, i 1, . . . , n.
Tema 4
Arbori
4.1 Numarul ciclomatic
Propozit ia 4.1.1 (Dirac). Fie G = (V, E) un graf neorientat simplu si
(G) = min
xV
d(x)
gradul minim al nodurilor din G.
a) G cont ine un lant deschis elementar astfel nc at
l() (G),
unde l() reprezint a lungimea lant ului .
b) Daca (G) 2, atunci G cont ine un ciclu elementar C astfel nc at
l(C) (G) + 1.
Denit ia 4.1.1. Un graf se numeste par dac a toate nodurile sale au gradele pare.
Propozit ia 4.1.2 (Veblen). Fie G = (V, E) un graf cu E ,= . Atunci graful G este par dac a si
numai daca exista C
1
, . . . , C
k
cicluri elementare muchie-disjuncte (dou a c ate doua) astfel nc at
E = E(C
1
) E(C
k
) (k N

), (4.1.1)
unde E(C
i
) reprezint a mult imea muchiilor ciclului C
i
, i 1, . . . , k.
Propozit ia 4.1.3. Fie G = (V, E) un graf. Atunci (T(E), , ) este un spat iu vectorial peste corpul
nit cu dou a elemente (Z
2
, +, ), unde
T(E) = F[F E, AB = (A B) (B A) (diferent a simetric a),

0 A = ,

1 A = A, A T(E).
Denit ia 4.1.2. Spat iul vectorial (T(E), , ) din propozit ia anterioar a se numeste spat iul muchi-
ilor grafului G.
Propozit ia 4.1.4. Fie G = (V, E) un graf si
((E) = F E[(V, F) = graf par.
Atunci ((E) este un subspat iu vectorial al spat iului muchiilor grafului G.
42
TEMA 4. ARBORI 43
Propozit ia 4.1.5. Fie G = (V, E) un graf si
(
0
(E) = F E[ C = ciclu elementar n G a.. F = E(C),
unde E(C) este mult imea muchiilor ciclului C. Atunci subspat iul vectorial al spat iului muchiilor lui
G generat de (
0
(E) este subspat iul ((E) din propozit ia anterioar a.
Demonstrat ie. Evident, (
0
(E) ((E). Conform Propozit iei 4.1.2, pentru orice F ((E), F ,= ,
exist a F
1
, . . . , F
k
(
0
(E) disjuncte dou a c ate dou a a.. F = F
1
F
k
, deci F = F
1
. . . F
k
=

1 F
1
. . .

1 F
k
.
Denit ia 4.1.3. Subspat iul ((E) din Propozit ia 4.1.4 se numeste spat iul ciclurilor grafului G.
Dimensiunea acestui subspat iu se numeste num arul ciclomatic al grafului G si se noteaza cu (G).
Propozit ia 4.1.6 (Listing). Fie G = (V, E) o padure cu n noduri, m muchii si k componente
conexe. Atunci
mn + k = 0.
Demonstrat ie. Demonstr am egalitatea din enunt prin induct ie dupa m.
Pentru m = 0 rezult a c a toate nodurile sunt izolate, deci ecare nod formeaz a o component a
conexa, adic a k = n si egalitatea mn + k = 0 este vericat a.
Presupunem adevarat a egalitatea din enunt pentru orice p adure cu m 1 muchii (m 1) si o
demonstr am pentru p adurea G cu m muchii. Fie
G

= (V, E

), unde E

= E e, cu e E, e = [x, y].
Evident G

este o p adure cu n noduri, m 1 muchii si k + 1 componente conexe (deoarece


componentele conexe din G ce nu cont in x si y r am an componente conexe si n G

, iar componenta
conexa din G ce cont ine x si y se partit ioneaz a n dou a componente conexe n G

, una cont inand pe


x si cealalt a pe y). Aplic and ipoteza de induct ie pentru graful G

avem
(m1) n + (k + 1) = 0, deci mn + k = 0.
Corolarul 4.1.1. Orice arbore cu n noduri are m = n 1 muchii.
Demonstrat ie. Se aplic a propozit ia anterioar a, cu k = 1.
Propozit ia 4.1.7. Un graf este conex dac a si numai daca are arbori part iali.
Demonstrat ie. Dac a graful G = (V, E) are un arbore part ial T, atunci pentru orice x, y V , x ,= y,
exist a un lant [x, . . . , y] n T (ind conex), deci si n G, si astfel G este conex.
Reciproc, demonstr am c a orice graf conex G = (V, E) are arbori part iali prin induct ie dupa
num arul p de cicluri elementare ale lui G.
Pentru p = 0 rezult a c a nsusi G este un arbore, deci arbore part ial n G.
Presupunem adevarat a armat ia pentru orice graf conex cu cel mult p 1 cicluri elementare
(p 1) si o demonstr am pentru graful conex G = (V, E) cu p cicluri elementare. Fie e = [x, y] o
muchie a lui G aat a pe un ciclu elementar C si e G

= (V, E e). Graful G

r am ane conex (ntre


x si y exist a lant ul [x, v
1
, . . . , v
k
, y], unde [x, v
1
, . . . , v
k
, y, x] este ciclul C) si are cel mult p 1 cicluri
elementare. Conform ipotezei de induct ie, exista un arbore part ial T n G

, deci si n G.
Propozit ia 4.1.8. Fie G = (V, E) un graf, T = (V, F) un arbore part ial al lui G si e E F.
Atunci graful part ial
T + e = (V, F e)
are un unic ciclu elementar si acest ciclu cont ine muchia e.
TEMA 4. ARBORI 44
Demonstrat ie. Fie e = [x, y]. T ind arbore part ial, exist a un lant elementar = [x, v
1
, . . . , v
k
, y] n
T, deci + e = [x, v
1
, . . . , v
k
, y, x] este un ciclu elementar n T + e.
Unicitatea acestui ciclu rezult a din unicitatea lant ului elementar (dac a ar exista dou a lant uri
elementare distincte
1
= [x, . . . , y] si
2
= [x, . . . , y] n T, port iunile lor muchie-disjuncte ar produce
un ciclu, contradict ie cu T = arbore).
Teorema 4.1.1 (Teorema numarului ciclomatic). Orice graf G = (V, E) cu n noduri, m muchii
si k componente conexe are num arul ciclomatic
(G) = mn + k.
Demonstrat ie. Demonstr am egalitatea din enunt n dou a etape.
Etapa 1) Presupunem c a graful G este conex, deci k = 1. Fie T = (V, F) un arbore part ial al lui
G (exist a, conform Propozit iei 4.1.7). Conform Corolarului 4.1.1, card (F) = n 1. Fie
E F = e
1
, . . . , e
mn+1
.
Pentru orice i 1, . . . , mn + 1, e C
i
mult imea muchiilor ciclului elementar unic din T +e
i
(conform Propozit iei 4.1.8). Atunci
B = C
1
, . . . , C
mn+1

este o baz a a spat iului ciclurilor ((E) (numit a baza de cicluri a grafului G). Rezult a c a
(G) = card (B) = mn + 1 = mn + k.
Etapa 2) Fie acum G un graf oarecare si G
1
, . . . , G
k
componentele sale conexe. Fie n
i
si m
i
numerele de noduri, respectiv muchii ale componentei G
i
. Evident, n = n
1
+ + n
k
si m =
m
1
+ + m
k
.
Deoarece subspat iile ciclurilor componentelor G
1
, . . . , G
k
sunt liniar independente, avem
(G) = (G
1
) + + (G
k
).
Dar, conform etapei 1), (G
i
) = m
i
n
i
+ 1 i 1, . . . , k, si astfel prin adunare rezult a c a
(G) = mn + k.
Observat ia 4.1.1. Demonstrat ia teoremei anterioare este constructiv a, indic and urm atorul algoritm
de determinare a unei baze de cicluri pentru graful G:
se determin a componentele conexe G
1
, . . . , G
k
;
pentru ecare component a G
i
, se determin a un arbore part ial T (de exemplu arborele DF sau
BF) si ciclurile elementare C
1
, . . . , C
m
i
n
i
+1
din grafurile T + e
i
, pentru ecare muchie e
i
din
G
i
ce nu apart ine lui T;
ciclurile astfel determinate formeaza mpreuna o baz a de cicluri pentru graful G.
Exemplul 4.1.1. Fie graful G reprezentat n Figura 4.1.1.
Numarul s au ciclomatic este (G) = mn + k = 9 7 + 1 = 3.
Consider and arborele part ial T reprezentat n Figura 4.1.2 si aplic and algoritmul din observat ia
anterioar a se obt ine baza de cicluri C
1
, C
2
, C
3
unde C
1
= [1, 4], [4, 2], [2, 1], C
2
= [4, 5], [5, 2], [2, 4]
si C
3
= [5, 6], [6, 3], [3, 2], [2, 5].
TEMA 4. ARBORI 45
1 2 3
7
4 5 6
Figura 4.1.1:
1 2 3
7
4 5 6
Figura 4.1.2:
4.2 Teorema de caracterizare a arborilor
Teorema 4.2.1 (de caracterizare a arborilor). Fie G = (V, E) un graf cu n noduri. Urm atoarele
armat ii sunt echivalente:
1) G este un arbore (adic a este conex si f ar a cicluri);
2) G este f ar a cicluri si are m = n 1 muchii;
3) G este conex si are m = n 1 muchii;
4) G este f ar a cicluri si maximal cu aceasta proprietate, adic a dac a se adaug a o muchie ntre
oricare dou a noduri graful obt inut cont ine cicluri;
5) G este conex si minimal cu aceast a proprietate, adic a dac a se elimin a o muchie oarecare graful
obt inut devine neconex;
6) ntre oricare dou a noduri ale lui G exista un unic lant elementar.
Demonstrat ie. 1) 2) Fie G un arbore, adic a si conex si far a cicluri. Deci 0 = (G) = mn +1 si
astfel m = n 1.
2) 3) Fie G far a cicluri si cu m = n 1 muchii. Avem 0 = (G) = n 1 n + k, unde k
reprezinta num arul de componente conexe ale lui G, deci k = 1, adic a G este conex.
3) 4) Fie G conex si cu m = n 1 muchii. Avem (G) = n 1 n + 1 = 0, deci G este far a
cicluri. Fie G + e = (V, E e), e , E.
Graful G+e r am ane conex si are n noduri si m+1 = n muchii. Astfel (G+e) = nn+1 = 1,
adic a G + e cont ine un ciclu (elementar).
4) 5) Fie G far a cicluri maximal. Dac a G nu ar conex, atunci ad aug and o muchie ntre dou a
noduri x si y din componente conexe diferite ale lui G s-ar obt ine un graf f ar a cicluri (deoarece nu
exist a lant ntre x si y n G), contradict ie cu ipoteza. Deci G este conex.
Fie G e = (V, E e), e E, e = [x, y]. Dac a graful G e ar conex, atunci ar exista un
lant elementar [x, v
1
, . . . , v
k
, y] n Ge si astfel [x, v
1
, . . . , v
k
, y, x] ar un ciclu n G, contradict ie cu
ipoteza. Deci Ge este neconex.
TEMA 4. ARBORI 46
5) 6) Fie G conex minimal. Fie x, y V .
Dac a x ,= y, rezulta c a exist a un lant elementar [x, . . . , y].
Dac a x = y exist a de asemenea lant ul elementar [x] de lungime zero.
Dac a ntre nodurile x si y ar exista dou a lant uri elementare distincte
1
= [x, v
1
, . . . , v
i
, y] si

2
= [x, w
1
, . . . , w
j
, y], atunci not and cu e muchia [x, v
1
] a lant ului
1
, graful Ge = (V, E e) ar
r am ane conex (deoarece ntre x si v
1
avem lant ul [x, w
1
, . . . , w
j
, y, v
i
, . . . , v
1
]), contradict ie cu ipoteza.
Deci ntre x si y exist a un unic lant elementar.
6) 1) Fie G cu proprietatea c a ntre orice dou a noduri exist a un unic lant elementar. Evident,
G este conex. Dac a G ar avea un ciclu elementar C = [x, v
1
, . . . , v
k
, x] atunci [x, v
1
] si [v
1
, . . . , v
k
, x]
ar dou a lant uri elementare ntre x si v
1
, contradict ie cu ipoteza. Deci G nu are cicluri elementare,
si nici neelementare (deoarece orice ciclu neelementar s-ar descompune n cicluri elementare muchie-
disjuncte).
4.3 Numararea arborilor part iali
Denit ia 4.3.1. Fie G = (V, E) un graf f ar a bucle, unde V = v
1
, . . . , v
n
. Matricea de
admitant a asociat a grafului G este matricea M = (m
ij
)
i,j=1,n
denit a prin:
m
ii
= d
G
(v
i
), i 1, . . . , n;
m
ij
= num arul de muchii sau arce dintre v
i
si v
j
, i, j 1, . . . , n, i ,= j.
Exemplul 4.3.1. Fie G graful reprezentat n Figura 4.3.1.
1 2
5
3 4
Figura 4.3.1:
Matricea de admitant a a acestui graf este
M =

2 1 1 0 0
1 5 2 1 1
1 2 4 1 0
0 1 1 2 0
0 1 0 0 1

.
Observat ia 4.3.1. Matricea de admitant a este o matrice simetric a (si pentru grafuri orientate!) si are
toate sumele pe linii si pe coloane egale cu zero.
Observat ia 4.3.2. Denit ia 4.3.1 se poate extinde si pentru grafuri cu bucle, consider and drept matrice
de admitant a a unui astfel de graf matricea de admitant a a grafului obt inut prin eliminarea tuturor
buclelor.
Teorema 4.3.1 (Kircho-Trent). Fie G = (V, E) un graf f ar a bucle av and matricea de admitant a
M = (m
ij
)
i,j=1,n
, n 2. Atunci num arul t(G) de arbori part iali ai grafului G veric a egalitatea
t(G) = (1)
i+j
det[M]
ij
, i, j 1, . . . , n,
unde [M]
ij
reprezint a matricea obt inut a din M prin eliminarea liniei i si coloanei j.
TEMA 4. ARBORI 47
Observat ia 4.3.3. Teorema anterioar a este valabil a si pentru grafuri cu bucle, folosind Observat ia
4.3.2.
Exemplul 4.3.2. Aplic and teorema anterioar a rezult a c a num arul arborilor part iali ai grafului G din
Exemplul 4.3.1 este
t(G) = det[M]
22
=

2 1 0 0
1 4 1 0
0 1 2 0
0 0 0 1

= 12.
Denit ia 4.3.2. a) Graful neorientat simplu K
n
= (V, E) denit prin
V = v
1
, . . . , v
n
, E = [v
i
, v
j
][i, j 1, . . . , n, i ,= j
se numeste graf complet de ordinul n, unde n N

.
b) Graful neorientat simplu K
p,q
= (V, E) denit prin
V = x
1
, . . . , x
p
, y
1
, . . . , y
q
, E = [x
i
, y
j
][i 1, . . . , p, j 1, . . . , q
se numeste graf bipartit complet, unde p, q N

.
Corolarul 4.3.1. Graful complet K
n
are n
n2
arbori part iali.
Demonstrat ie. Matricea de admitant a a grafului K
n
este
M =

n 1 1 . . . 1
1 n 1 . . . 1
. . . . . . . . . . . .
1 1 . . . n 1

( de tipul n n),
deci conform teoremei anterioare avem
t(K
n
) = det[M]
11
=

n 1 1 . . . 1
1 n 1 . . . 1
. . . . . . . . . . . .
1 1 . . . n 1

(determinant de ordinul n 1). Adun and toate liniile la prima linie, apoi adun and linia obt inuta la
celalalte linii obt inem
t(K
n
) =

1 1 . . . 1
1 n 1 . . . 1
. . . . . . . . . . . .
1 1 . . . n 1

1 1 . . . 1
0 n . . . 0
. . . . . . . . . . . .
0 0 . . . n

= n
n2
.
Observat ia 4.3.4. Corolarul anterior poate reformulat astfel: num arul arborilor ce pot construit i
cu n noduri date (numit i si arbori etichetat i) este egal cu n
n2
.
Corolarul 4.3.2. Graful bipartit complet K
p,q
are p
q1
q
p1
arbori part iali.
TEMA 4. ARBORI 48
4.4 Arbori part iali de cost minim
Denit ia 4.4.1. Un graf ponderat este o pereche (G, c), unde G = (V, E) este un graf iar c : E
R este o funct ie numita pondere (cost). Pentru orice e E, c(e) se numeste ponderea (costul)
muchiei sau arcului e.
Denit ia 4.4.2. Fie (G, c) un graf ponderat, G = (V, E).
a) Daca H = (U, F) este un subgraf al lui G, atunci costul (ponderea) lui H este
c(H) =

eF
c(e)
(adic a suma costurilor muchiilor sau arcelor sale).
b) Un arbore part ial T

= (V, F) al lui G cu proprietatea c a


c(T

) = minc(T)[T = arbore part ial al lui G


se numeste arbore part ial de cost minim (APM) al grafului ponderat (G, c).
Observat ia 4.4.1. Conform Propozit iei 4.1.7, un graf ponderat are arbori part iali de cost minim dac a
si numai dac a este conex.
Problema determin arii arborilor part iali de cost minim are numeroase aplicat ii practice. Prezentam
n continuare doi algoritmi fundamentali pentru rezolvarea acestei probleme.
Algoritmul 4.4.1 (Kruskal). Fie (G, c) un graf ponderat conex cu G = (V, E), V = v
1
, . . . , v
n
.
Algoritmul are n 1 pasi.
La pasul i, i = 1, n 1, dintre muchiile neselectate la pasii anteriori se selecteaza o muchie
e
i
E de cost minim cu proprietatea c a nu formeaz a cicluri cu muchiile e
1
, . . . , e
i1
selectate
la pasii anteriori.
Algoritmul 4.4.2 (Prim). Fie (G, c) un graf ponderat conex cu G = (V, E), V = v
1
, . . . , v
n
.
Algoritmul are n pasi.
La pasul 0 se selecteaz a un nod arbitrar x
0
V .
La pasul i, i = 1, n 1, se selecteaza o muchie e
i
= [x
j
, x
i
] E de cost minim cu proprietatea
ca are ca extremit at i un nod x
j
V selectat la un pas anterior si celalalt nod x
i
V neselectat
la pasii anteriori; se selecteaz a si nodul x
i
.
Teorema 4.4.1 (de corectitudine a algoritmilor Kruskal si Prim).

In contextul Algoritmilor
Kruskal sau Prim, e F = e
1
, . . . , e
n1
mult imea muchiilor selectate. Atunci T = (V, F) este un
arbore part ial de cost minim al grafului ponderat (G, c).
Demonstrat ie. Vom prezenta o demonstrat ie comun a a corectitudinii celor doi algoritmi. Fie T
0
=
(V, ) si T
i
= (V, e
1
, . . . , e
i
), i 1, 2, . . . , n 1, unde e
1
, e
2
, . . . , e
n1
sunt muchiile selectate, n
aceast a ordine, de Algoritmul Kruskal sau de Algoritmul Prim.
Graful G ind conex, selectarea muchiei e
i
este posibil a la ecare pas i, iar T
i
este o p adure
part ial a a lui G (armat ie evidenta pentru Algoritmul Kruskal, iar pentru Algoritmul Prim este o
consecint a a faptului c a nodurile neselectate la pasul i sunt izolate n T
i
).
Demonstr am prin induct ie dupa i 0, 1, . . . , n 1 ca exist a un APM T

= (V, F

) astfel ncat
T
i
T

(adic a e
1
, . . . , e
i
F

). (4.4.1)
TEMA 4. ARBORI 49
Pentru i = 0 armat ia este evidenta, lu and T

orice APM (exista, deoarece G este conex).


Presupunem (4.4.1) adev arat a pentru i 1, adic a exist a T

= (V, F

) APM cu T
i1
T

si o
demonstr am pentru i (i 1, 2, . . . , n 1).
Fie e
i
= [x
j
, x
i
] muchia selectat a de Algoritmul Kruskal sau de Algoritmul Prim la pasul i.

In
cazul Algoritmului Prim, x
j
este nodul selectat la un pas anterior (j i 1). Avem dou a cazuri.
Cazul 1) e
i
F

. Atunci e
1
, . . . , e
i
F

, deci T
i
T

.
Cazul 2) e
i
, F

. Conform Teoremei num arului ciclomatic, graful H = T

+ e
i
= (V, F

e
i
)
obt inut din T

prin ad augarea muchiei e


i
cont ine un ciclu elementar unic
C
i
= [x
j
, w
0
, . . . , w
k
, x
i
, x
j
]
av and ultima muchie chiar muchia e
i
. Cum T
i
= T
i1
+e
i
este o p adure, rezult a c a x
j
si x
i
sunt n com-
ponente conexe diferite ale lui T
i1
(n caz contrar T
i
ar cont ine un ciclu de forma [x
j
, y
0
, . . . , y
r
, x
i
, x
j
]
av and ultima muchie e
i
). Rezult a c a lant ul elementar

i
= [x
j
, w
0
, . . . , w
k
, x
i
]
(obt inut din ciclul C
i
prin eliminarea muchiei e
i
) cont ine o muchie e

i
= [x

, y

] astfel ncat x

este
n aceeasi component a conex a cu x
j
n p adurea T
i1
, iar y

nu este n aceast a component a conex a.


Evident, rezult a c a e

i
nu este muchie a lui T
i1
, adic a e

i
, e
1
, . . . , e
i1
, iar graful T

i
= T
i1
+ e

i
nu cont ine cicluri. De asemenea, e

i
,= e
i
, deci e

i
F

.
Pe de o parte, din descrierea Algoritmului Kruskal deducem c a
c(e
i
) c(e

i
)
(deoarece muchia e

i
nu formeaz a cicluri cu e
1
, . . . , e
i1
, deci e
i
ind muchia selectat a la pasul i
veric a aceast a inegalitate).
Pe de alta parte, din descrierea Algoritmului Prim deducem c a la pasul i nodul x

era deja selectat


la un pas anterior (ind n aceeasi component a conex a cu x
j
n T
i1
), iar nodul y

nu era selectat la
un pas anterior (neind n acea component a conex a), deci din nou avem
c(e
i
) c(e

i
)
(e
i
ind muchia selectat a la pasul i verica aceast a inegalitate).
Continu am demonstrat ia comun a pentru cei doi algoritmi. Fie
T

= (T

+ e
i
) e

i
graful part ial al lui G obt inut din T

prin ad augarea muchiei e


i
si eliminarea muchiei e

i
, adic a
T

= (V, F

), unde F

= F

e
i
e

i
.
Evident, T

este conex (T

este conex iar ntre nodurile x

si y

dup a eliminarea muchiei e

i
r am ane lant ul obt inut din ciclul C
i
prin eliminarea acestei muchii) si are n 1 muchii (deoarece T

are n 1 muchii). Conform Teoremei num arului ciclomatic rezult a c a T

este un arbore part ial al


grafului G.
Deoarece c(e
i
) c(e

i
) obt inem
c(T

) c(T

)
si cum T

este un APM rezulta c a si T

este un APM (si, n plus, c(T

) = c(T

)). Cum T
i
T

,
demonstrat ia prin induct ie a relat iei (4.4.1) este complet a.
Lu and i = n1n aceast a relat ie obt inem ca T T

, unde T = T
n1
= (V, F), F = e
1
, . . . , e
n1

(mult imea muchiilor selectate de algoritm) iar T

este un APM. Dar T si T

au ecare cate n 1
muchii, deci T = T

si astfel T este un APM al grafului dat.


TEMA 4. ARBORI 50
120
150
130
90
80
40
70
20 60
30 50 100
70
110
100 30
10
1 2 3 4
5
6
7 8 9 10
Figura 4.4.1:
Exemplul 4.4.1. Fie graful ponderat (G, c) reprezentat n Figura 4.4.1, unde costul ec arei muchii
este scris lang a segmentul corespunzator acesteia.
Aplicarea Algoritmului Kruskal este evident iat a n urmatorul tabel:
Pas Muchia selectata Costul ei
1 [5, 8] 10
2 [3, 6] 20
3 [1, 2] 30
4 [8, 9] 30
5 [2, 3] 50
6 [2, 5] 60
7 [4, 6] 90
8 [7, 8] 100
9 [4, 10] 120
Arborele part ial de cost minim obt inut este reprezentat n Figura 4.4.2. Costul acestui APM este de
510.
Aplicarea Algoritmului Prim pentru acelasi graf este evident iat a n urmatorul tabel:
Pas Muchia selectata Costul ei Nodul selectat
0 - - 1
1 [1, 2] 30 2
2 [2, 3] 50 3
3 [3, 6] 20 6
4 [2, 5] 60 5
5 [5, 8] 10 8
6 [8, 9] 30 9
7 [6, 4] 90 4
8 [8, 7] 100 7
9 [4, 10] 120 10
Arborele part ial de cost minim obt inut este deci acelasi cu cel obt inut prin aplicarea Algoritmului
Kruskal.
Observat ia 4.4.2. Algoritmii Kruskal si Prim sunt specici metodei de programare Greedy.
Algoritmul Kruskal selecteaz a muchii, n ordinea cresc atoare a costurilor, subgrafurile induse pe
parcurs de acestea neind neap arat conexe. Algoritmul Prim selecteaz a muchii si noduri, nu neap arat
n ordinea cresc atoare a costurilor muchiilor, iar subgrafurile induse pe parcurs de muchiile selectate
sunt conexe.

In implementari optime, se poate ar ata c a Algoritmul Kruskal are complexitatea O(mln n) (ind
necesara sortarea muchiilor dup a cost), iar Algoritmul Prim are complexitatea O(n
2
) (o astfel de
TEMA 4. ARBORI 51
120
90
20 60
30 50
100 30
10
1 2 3 4
5
6
7 8 9 10
Figura 4.4.2:
implementare va prezentat a n continuare), unde n si m reprezint a numerele de noduri, respectiv
de muchii ale grafului dat. Graful ind conex, m n 1.
Pentru grafuri simple, m
n(n1)
2
. Folosind si inegalitatea ln n n 1, obt inem ca Algoritmul
Kruskal este mai ecient pentru grafuri s arace n muchii, iar Algoritmul Prim este mai ecient
pentru grafuri bogate n muchii.
Observat ia 4.4.3. Pentru implementarea Algoritmului Kruskal, memor am graful ponderat conex
(G, c), unde G = (V, E), V = 1, . . . , n, E = e
1
, . . . , e
m
, ntr-o matrice cu 3 linii si m coloane
P = (p
ik
)
i = 1, 3
k = 1, m
av and semnicat ia:
daca e
k
= [x
k
, y
k
] E, atunci p
1k
= x
k
, p
2k
= y
k
si p
3k
= c(e
k
).
Utiliz am un vector S cu semnicat ia
S[k] =
_
1, dac a e
k
a fost selectat a,
0, n caz contrar,
k 1, . . . , m si un vector CC cu semnicat ia
CC[i] = num arul componentei conexen care se a a nodul i n graful indus de muchiile selectate,
i 1, . . . , n.
Astfel o muchie [x, y] nu formeaz a cicluri cu muchiile selectate daca si numai dac a
CC[x] ,= CC[y].
Descrierea n pseudocod a algoritmului are forma
Kruskal :
sortare(P);//se sorteaza coloanele matricei P
//crescator dup a costurile muchiilor
pentru i = 1, m S[i] 0;
pentru i = 1, n CC[i] i;
cost 0;//costul APM
poz 0;//cautarea urm atoarei muchii e
k
ce
//va selectata ncepe de pe pozit ia poz + 1
pentru l = 1, n 1 //pasul l
k poz;
repeta
k k + 1; x p
1k
; y p
2k
; c p
3k
;

cat timp (CC[x] = CC[y]);


TEMA 4. ARBORI 52
S[k] 1;//selectam e
k
= [x, y]
cost cost + c; poz k;
aux CC[y];//actualizam vectorul CC prin
//unicarea componentelor conexe ale lui x si y
pentru i = 1, n
daca (CC[i] = aux) CC[i] CC[x];

.
Observat ia 4.4.4. Pentru implementarea Algoritmului Prim, memor am graful ponderat conex si
simplu (G, c), unde G = (V, E), V = 1, . . . , n, E = e
1
, . . . , e
m
, cu ajutorul unei matrice
C = (c
ij
)
i,j=1,n
a costurilor (directe) av and semnicat ia
c
ij
=

c([i, j]), daca [i, j] E,


0, daca i = j,
, n rest,
(4.4.2)
i, j 1, . . . , n. Pentru grafuri neorientate, matricea C este simetrica.

In cazul grafurilor nesimple
putem lua
c
ij
= minc(e)[e = [i, j] E.
Utiliz am un vector S cu semnicat ia
S[i] =
_
1, daca nodul i a fost selectat,
0, n caz contrar
si doi vectori t si TATA av and semnicat ia
t[i] = costul minim al unei muchii [i, j] de la nodul i la un nod selectat j,
TATA[i] = nodul j ce atinge minimul n t[i], i 1, . . . , n.
Descrierea n pseudocod a algoritmului are forma
Prim :
S[1] 1;//selectam nodul 1
cost 0;//costul APM
pentru i = 2, n
S[i] 0; t[i] c
i1
; TATA[i] 1;

pentru l = 1, n 1 //caut am nodul y si muchia [x, y]


//ce vor selectate la pasul l
min ;
pentru i = 2, n
daca (S[i] = 0) si (t[i] < min)
min t[i]; y i;

S[y] 1;// selectam nodul y


x TATA[y];// si muchia [x, y]
cost cost + c
xy
;
pentru i = 2, n// actualizam vectorii t si TATA
daca (S[i] = 0) si (t[i] > c
iy
)
t[i] c
iy
; TATA[i] y;

.
Tema 5
Arborescent e
5.1 Teorema de caracterizare a arborescent elor
Denit ia 5.1.1. Fie G = (V, E) un graf orientat. Un nod x V se numeste r adacin a a grafului
G dac a pentru orice nod y V x exista cel put in un drum de la x la y.
Exemplul 5.1.1.

In graful din Exemplul 3.1.2 nodurile 1, 2 si 3 sunt r ad acini, iar nodurile 4 si 5 nu
sunt r ad acini.
Denit ia 5.1.2. a) O arborescent a este un arbore care are o r ad acin a.
b) O arborescent a part ial a a unui graf orientat G = (V, E) este un graf part ial al lui G ce este
arborescent a (adic a o arborescent a T = (V, F) cu F E).
Exemplul 5.1.2. Graful din Exemplul 3.1.2 nu este arborescent a (are cicluri, deci nu este arbore).
Dou a arborescent e part iale ale sale sunt reprezentate n Figurile 5.1.1 si 5.1.2.
1 2
5
4
3
Figura 5.1.1:
1 2
5
4
3
Figura 5.1.2:
Denit ia 5.1.3. Un graf orientat G = (V, E) se numeste quasi-tare conex dac a pentru orice dou a
noduri x, y V exista un nod z V si drumuri de la z la x si de la z la y.
Observat ia 5.1.1. Ca si n denit iile conexit at ii si tare-conexit at ii, si n Denit iile 5.1.1 si 5.1.3 putem
nlocui termenul de drum cu drum elementar (conform Observat iei 3.4.5).
Observat ia 5.1.2. Evident, orice graf quasi-tare conex este conex. Reciproca nu este adevarat a. De
exemplu, graful reprezentat n Figura 5.1.3 este conex, dar nu este quasi-tare conex (pentru nodurile
x = 1 si y = 4 nu exist a noduri z din care s a avem drumuri la x si la y).
Observat ia 5.1.3. Orice graf tare-conex este quasi-tare conex (deoarece pentru orice noduri x, y lu and
z = x exist a drumuri (z, . . . , x) si (z, . . . , y)). Reciproca nu este adev arat a. De exemplu, graful din
Exemplul 3.1.2 este quasi-tare conex, dar nu este tare-conex.
Propozit ia 5.1.1. Un graf orientat este quasi-tare conex dac a si numai daca are (cel put in) o
r ad acin a.
53
TEMA 5. ARBORESCENT E 54
1 2
4 3
Figura 5.1.3:
Demonstrat ie. Fie G = (V, E) un graf quasi-tare conex, V = v
1
, . . . , v
n
. Demonstr am prin
induct ie dupa k 1, . . . , n ca exist a un nod x
k
V cu drumuri (x
k
, . . . , v
1
), (x
k
, . . . , v
2
), . . . , (x
k
, . . . , v
k
).
Pentru k = 1 lu am x
1
= v
1
.
Presupunem adevarat a armat ia pentru k 1 si o demonstr am pentru k. Deoarece graful este
quasi-tare conex, rezulta c a exist a un nod x
k
V cu drumuri (x
k
, . . . , x
k1
) si (x
k
, . . . , v
k
). Conform
ipotezei de induct ie, exista drumuri (x
k1
, . . . , v
1
), . . . , (x
k1
, . . . , v
k1
), deci exist a drumuri
(x
k
, . . . , x
k1
, . . . , v
1
), . . . , (x
k
, . . . , x
k1
, . . . , v
k1
), (x
k
, . . . , v
k
).
Demonstrat ia prin induct ie este ncheiat a.
Lu and k = n, nodul x
n
este o r ad acin a a grafului G.
Fie G = (V, E) si z V o r ad acin a a lui G. Pentru orice noduri x, y V exist a drumuri
(z, . . . , x) si (z, . . . , y), deci G este quasi-tare conex.
Teorema 5.1.1 (de caracterizare a arborescent elor). Fie G = (V, E) un graf orientat cu n
noduri. Urm atoarele armat ii sunt echivalente:
1) G este quasi-tare conex si f ar a cicluri;
2) G este quasi-tare conex si are m = n 1 arce;
3) G este o arborescent a (adic a arbore cu r ad acin a);
4) exist a un nod x V astfel nc at pentru orice nod v V exista un unic drum de la x la v;
5) G este quasi-tare conex si minimal cu aceast a proprietate, adic a dac a se elimin a un arc oarecare
graful obt inut nu mai este quasi-tare conex;
6) G este conex si exista un nod x V astfel nc at d

(x) = 0 si d

(v) = 1 v V x;
7) G este f ar a cicluri si exista un nod x V astfel nc at d

(x) = 0 si d

(v) = 1 v V x.
Demonstrat ie. 1) 2) Fie G quasi-tare conex si far a cicluri. Fiind quasi-tare conex, G este conex.
Deci G este un arbore si astfel are m = n 1 arce (conform Teoremei de caracterizare a arborilor).
2) 3) Fie G quasi-tare conex si cu m = n 1 arce. Fiind quasi-tare conex, G este conex si are
r ad acin a (conform propozit iei anterioare). Fiind conex cu m = n 1 arce, G este arbore (conform
teoremei amintite mai sus).
3) 4) Fie G arborescent a si x o r ad acin a a lui G. Deci pentru orice nod v V exist a un drum
de la x la v. Graful G ind un arbore, acest drum, ind si lant , este unic.
4) 5) Fie G cu proprietatea 4). Deci x este o r ad acin a a lui G si astfel G este quasi-tare
conex (conform propozit iei anterioare). Fie e = (y, z) E un arc arbitrar xat. Demonstr am c a
G e = (V, E e) nu este quasi-tare conex prin reducere la absurd. Dac a G e ar quasi-tare
conex, atunci ar exista un nod v V si drumuri (v, . . . , y) si (v, . . . , z) n G e. x ind r ad acin a
n G, s-ar obt ine dou a drumuri distincte (x, . . . , v, . . . , y, z) si (x, . . . , v, . . . , z) de la x la z n G,
contradict ie cu ipoteza.
TEMA 5. ARBORESCENT E 55
5) 6) Fie G quasi-tare conex minimal. Fiind quasi-tare conex, G este conex. Conform
propozit iei anterioare, G are o r ad acin a x. Demonstr am c a d

(x) = 0 prin reducere la absurd.


Dac a am avea d

(x) > 0, atunci ar exista un arc e = (y, x) E, iar G e ar avea n continuare


r ad acina x (deoarece exista drum elementar (x, . . . , y) n G, deci si n Ge) si astfel Ge ar r am ane
quasi-tare conex (conform propozit iei anterioare), contradict ie cu ipoteza.
Fie acum v V x un nod arbitrar xat. x ind r ad acin a, exist a un drum (x, . . . , y, v) de
lungime nenul a (v ,= x), deci d

(v) 1 ((y, v) E). Demonstr am c a d

(v) = 1 prin reducere la


absurd. Dac a am avea d

(v) > 1, atunci ar exista dou a arce diferite e


1
= (y
1
, v),e
2
= (y
2
, v) E, iar
G e
1
ar avea n continuare r ad acina x (deoarece exista un drum (x, . . . , y
2
, v) n G e
1
) si astfel
Ge
1
ar r am ane quasi-tare conex (conform propozit iei anterioare), contradict ie cu ipoteza.
6) 7) Fie G cu proprietatea 6). Conform Propozit iei 3.3.2, m =

tV
d

(t) = n 1, deci G este


un arbore (conform Teoremei de caracterizare a arborilor) si astfel nu are cicluri.
7) 1) Fie G cu proprietatea 7). Din nou, m =

tV
d

(t) = n1, deci G este un arbore si astfel


este conex. Rezulta c a pentru orice nod y V exist a un lant elementar unic [x, v
1
, . . . , v
k
, y].
Deoarece d

(x) = 0 nu putem avea (v


1
, x) E, deci (x, v
1
) E. Cum (x, v
1
) E si d

(v
1
) = 1,
nu putem avea (v
2
, v
1
) E, deci (v
1
, v
2
) E.
Continu andn acest mod (induct ie!) obt inem (v
2
, v
3
) E, . . . , (v
k
, y) E, deci lant ul [x, v
1
, . . . , v
k
, y]
este un drum de la x la y.
Rezult a c a x este o r ad acin a n G si astfel, conform propozit iei anterioare, G este quasi-tare
conex.
Corolarul 5.1.1. Orice arborescent a G = (V, E) are o unic a r ad acin a x si aceasta veric a pro-
priet at ile 4), 6) si 7) din teorema anterioar a.
Demonstrat ie. Concluzia rezult a imediat din demonstrat ia teoremei anterioare.
5.2 Arborescent e part iale de cost minim
Denit ia 5.2.1. Fie (G, c) un graf orientat ponderat, G = (V, E). O arborescent a part iala T

=
(V, F) a lui G cu proprietatea c a
c(T

) = minc(T)[T = arborescent a part iala a lui G


se numeste arborescent a part ial a de cost minim a grafului ponderat (G, c).
Pezentam n continuare un algoritm fundamental pentru rezolvarea acestei probleme. Avem
nevoie de cateva not iuni si rezultate pregatitoare.
Lema 5.2.1. Un graf orientat are arborescent e part iale daca si numai daca este quasi-tare conex,
adic a dac a si numai daca are (cel put in) o r ad acin a.
Denit ia 5.2.2. Fie (G, c) un graf orientat ponderat si quasi-tare conex, G = (V, E), V = v
1
, . . . , v
n
.
Fie x = v
s
o r ad acin a n G.
Denim graful part ial (G, c) = (V, F) astfel:
pentru ecare nod v
i
V x, e e
i
E un arc de cost minim av and forma e
i
= (y, v
i
), y V
(exist a un astfel de arc, conform propriet at ii 6) din Teorema 5.1.1, Corolarului 5.1.1 si Lemei
5.2.1);
dac a d

(x) = 0, atunci F = e
i
[i 1, . . . , n s;
TEMA 5. ARBORESCENT E 56
dac a d

(x) > 0, e e
s
E un arc de cost minim av and forma e
s
= (y, x), y V . Fie e
i
un
arc de cost maxim din mult imea e
i
[i 1, . . . , n. Atunci F = e
i
[i 1, . . . , n i

.
Observat ia 5.2.1.

In contextul denit iei anterioare, dac a d

(x) = 0 atunci x este unica rad acin a a lui


G, iar dac a d

(x) > 0 atunci mult imea F nu depinde de alegerea lui x; deci n ambele cazuri graful
(G, c) nu depinde de alegerea r ad acinii x.
Exemplul 5.2.1. Fie (G, c) graful ponderat reprezentat n Figura 5.2.1.
20
15
5
40
30
25
20
10 15
10
20
5
10
23
1
2
3
4
5
6
7
8
Figura 5.2.1:
Arcele de cost minim la intrarea n noduri ind (5, 1), (3, 2), (5, 3), (2, 4), (4, 5), (4, 6), (1, 7),
(7, 8) iar cel mai mare cost dintre aceste arce av and arcul (5, 1), obt inem ca graful (G, c) este cel
reprezentat n Figura 5.2.2.
15
5
20
15
10
5
10
1
2
3
4
5
6
7
8
Figura 5.2.2:
TEMA 5. ARBORESCENT E 57
Lema 5.2.2. Fie (G, c) un graf orientat ponderat si quasi-tare conex, si e (G, c) graful part ial al
lui G dat de denit ia anterioar a. Daca (G, c) nu are circuite, atunci (G, c) este o arborescent a
part ial a de cost minim a grafului (G, c).
Denit ia 5.2.3. Fie (G, c) un graf orientat ponderat, G = (V, E), si e C un circuit elementar al
lui G. Denim graful ponderat (G
|C
, c
|C
), G
|C
= (V

, E

) astfel:
V

= V V (C) x
C
, unde V (C) este mult imea nodurilor circuitului C, iar x
C
, V este un
nod nou; spunem c a nodul x
C
este obt inut prin contract ia circuitului C;
E

= E
1
E
2
E
3
, unde
E
1
= e E[e = (x, y), x, y , V (C),
E
2
= (x
C
, y)[y , V (C), x V (C) astfel nc at (x, y) E,
E
3
= (y, x
C
)[y , V (C), x V (C) astfel nc at (y, x) E;
pentru orice e = (x, y) E
1
, c
|C
(e) = c(e);
pentru orice e = (x
C
, y) E
2
,
c
|C
(e) = minc(x, y)[x V (C), (x, y) E;
spunem c a arcul e provine din arcul (x, y) E ce atinge acest minim;
pentru orice e = (y, x
C
) E
3
,
c
|C
(e) = minc(y, x) c(z, x)[x V (C), (y, x) E, (z, x) E(C)
(unde E(C) reprezint a mult imea arcelor circuitului C); spunem din nou c a arcul e provine
din arcul (y, x) E ce atinge acest minim.
Spunem c a graful ponderat (G
|C
, c
|C
) se obt ine din graful (G, c) prin contract ia circuitului C.
Exemplul 5.2.2. Pentru graful ponderat (G, c) din Exemplul 5.2.1 si circuitul elementar C = (2, 4, 5, 3, 2),
graful (G
|C
, c
|C
) este reprezentat n Figura 5.2.3.
15
20
5
40
20
8
30
1
6
7
8
9
C
x =
Figura 5.2.3:
De exemplu, arcul (x
C
, 6) provine din arcul de cost minim dintre (4, 6) si (5, 6), adic a din (4, 6), si
are costul 20; arcul (1, x
C
) provine din acel arc dintre (1, 2) si (1, 3) ce are diferent a de cost minim a
dintre c(1, 2) c(3, 2) = 2010 = 10 si c(1, 3) c(5, 3) = 2315 = 8, adic a din (1, 3) si are costul 8.
TEMA 5. ARBORESCENT E 58
Denit ia 5.2.4. Fie (G, c) un graf orientat ponderat, G = (V, E), V = v
1
, . . . , v
n
, C un circuit
elementar al lui G si (G
|C
, c
|C
) graful ponderat obt inut din G prin contract ia circuitului C, G
|C
=
(V

, E

). Fie T = (V

, F

) o arborescent a part ial a n graful G


|C
si x
T
r ad acina sa. Denim graful
part ial (T) = (V, F) al lui G prin:
dac a x
T
= x
C
(x
C
ind nodul obt inut prin contract ia circuitului C n graful G), atunci F =
F
1
F
2
[E(C) e

], unde
F
1
= e F

[e = (x, y), x, y V

x
C
,
F
2
= (x, y)[(x, y) E este arcul din care provine un arc (x
C
, y) F

(luand un singur arc (x, y) E pentru ecare arc e = (x


C
, y) F

),
E(C) este mult imea arcelor circuitului C, iar e

este un arc de cost maxim din E(C);


dac a x
T
,= x
C
, atunci F = F
1
F
2
(y, x) [E(C) (z, x)], unde F
1
si F
2
sunt denite
mai sus, (y, x) E este arcul din care provine unicul arc (y, x
C
) F

, iar (z, x) E(C) (arcul


unic de pe circuitul C incident cu x spre interior).
Lema 5.2.3.

In contextul denit iei anterioare, (T) este o arborescent a part iala n graful G.
Denit ia 5.2.5.

In contextul denit iei anterioare, spunem c a arborescent a part ial a (T) se obt ine
din arborescent a part ial a T prin decontract ia circuitului C.
Exemplul 5.2.3. Fie graful (G, c) din Exemplul 5.2.1, circuitul elementar C = (2, 4, 5, 3, 2) si graful
(G
1
, c
1
) calculat si reprezentat n Exemplul 5.2.2.
Graful part ial T = (G
1
, c
1
) construit conform Denit iei 5.2.2 este reprezentat n Figura 5.2.4.
Deci T este o arborescent a part ial a (de cost minim, conform Lemei 5.2.2) n graful (G
1
, c
1
), av and
15
5
20
8
1
6
7
8
9
C
x =
Figura 5.2.4:
r ad acina 1, 1 ,= x
C
. Arborescent a part ial a (T) a grafului init ial G obt inut a din T prin decontract ia
circuitului C este reprezentata n Figura 5.2.5. Arcul (x
C
, 6) din T s-a nlocuit n (T) cu arcul (4, 6)
din care a provenit; arcul (1, x
C
) din T s-a nlocuit n (T) cu arcul (1, 3) din care a provenit si a
condus si la eliminarea arcului (5, 3) (arcul unic de pe circuitul C incident cu 3 spre interior).
Lema 5.2.4. Fie (G, c) un graf orientat ponderat, C un circuit elementar al lui G si (G
1
, c
1
) =
(G
|C
, c
|C
) graful ponderat obt inut din G prin contract ia circuitului C. Atunci G are arborescent e
part iale daca si numai daca G
1
are arborescent e part iale.
TEMA 5. ARBORESCENT E 59
15
5
20
10
5
10
23
1
2
3
4
5
6
7
8
Figura 5.2.5:
Lema 5.2.5. Fie (G, c) un graf orientat ponderat si quasi-tare conex, C un circuit elementar al
lui G si (G
1
, c
1
) = (G
|C
, c
|C
) graful ponderat obt inut din G prin contract ia circuitului C. Fie T
o arborescent a part ial a n graful (G
1
, c
1
) si (T) arborescent a part ial a n graful (G, c) construit a
conform Denit iei 5.2.4. Atunci, cu notat iile din acea denit ie, avem
c((T)) =
_
c
1
(T) + c(C), dac a x
C
,= x
T
,
c
1
(T) + c(C) c(e

), dac a x
C
= x
T
.
Lema 5.2.6. Fie (G, c) un graf orientat ponderat si quasi-tare conex si e (G, c) graful part ial al
lui G dat de Denit ia 5.2.2. Fie C un circuit elementar n graful (G, c), deci si n graful G. Fie
(G
1
, c
1
) = (G
|C
, c
|C
) graful ponderat obt inut din G prin contract ia circuitului C si e T o arborescent a
part ial a de cost minim n acest graf. Atunci graful (T) construit conform Denit iei 5.2.4 este o
arborescent a part ial a de cost minim n graful (G, c).
Exemplul 5.2.4. Revenind la exemplul anterior, cum T = (G
1
, c
1
) este o arborescent a part ial a de
cost minim n graful (G
1
, c
1
) (conform Lemei 5.2.2), rezult a c a (T) este o arborescent a part ial a de
cost minim n graful init ial (G, c).
Conform Lemelor 5.2.2 si 5.2.6 obt inem urm atorul algoritm pentru determinarea unei arborescent e
part iale de cost minim.
Algoritmul 5.2.1 (Edmonds). Fie (G, c) un graf orientat ponderat si quasi-tare conex (vericarea
quasi-tare conexit at ii poate efectuat a pe baza Propozit iei 5.1.1). Fie G = (V, E), V = 1, . . . , n.
Algoritmul descris n pseudocod are forma
Edmonds :
repeta
k 1; nv n;//k = pasul; nv = num arul de noduri la pasul curent
greedy;//se determina graful part ial (G, c) pentru graful curent
daca (exista circuit) //acesta cont ine circuite
determina circuit;// se determina un circuit elementar C
nv nv + 1;//nv reprezint a nodul x
C
contract ie;// se efectueaza contract ia circuitului C
k k + 1;//se reia algoritmul pentru noul graf

TEMA 5. ARBORESCENT E 60

cat timp (exista circuit);


//nu mai exist a circuite, structura (G, c) din graful curent este
//arborescent a part ial a de cost minim n acest graf; trecem la
//decontract iile succesive ale arborescent elor part iale de cost minim,
//n ordinea invers a a pasilor
k k 1;
cat timp (k > 0)
decontract ie;//decontract ia arborescent ei part iale din graful curent
nv nv 1;
k k 1;//se reia algoritmul pentru noul graf

asare;//se aseaza arborescent a part ial a de cost minim


.
Graful part ial (structura de tip greedy) (G, c) poate usor memorat ntr-un vector TATA av and
semnicat ia
TATA[i] =
_
j, daca (j, i) este un arc al grafului (G, c),
0, n caz contrar,
iar circuitul elementar C din acest graf poate determinat si memorat folosind un vector PAS av and
semnicat ia
PAS[i] =
_
k, daca nodul i face parte din circuitul C de la un pas k,
0, n caz contrar.
Observat ia 5.2.2. Algoritmul Edmonds este specic metodei de programare Greedy.

In imple-
mentarea optim a, se poate ar ata c a acest algoritm are complexitatea O(mn), unde n si m reprezint a
numerele de noduri, respectiv de arce ale grafului dat.
Tema 6
Clase particulare de grafuri
6.1 Grafuri euleriene
6.2 Grafuri hamiltoniene
6.3 Grafuri bipartite
61
Tema 7
Distant e si drumuri minime n grafuri
ponderate
7.1 Algoritmul Dijkstra
7.2 Algoritmul Roy-Floyd
62
Tema 8
Fluxuri n ret ele de transport
8.1 Problema uxului maxim
8.2 Algoritmul Ford-Fulkerson
63

Vous aimerez peut-être aussi