Sunteți pe pagina 1din 26

Tema 1

Elemente de complexitatea
algoritmilor si teoria grafurilor
1.1

Notatii asimptotice

Vom defini un tip de functii care reprezinta un bun model pentru descrierea
complexitatii temporale a unui algoritm, adica a dependentei timpului de
executie fata de dimensiunea datelor de intrare.
Definitia 1.1.1. O functie asimptotic pozitiv
a (prescurtat a.p.) este o
functie f : N \ A R a..
A N este o multime finita;
n0 N \ A astfel ncat f (n) > 0, n n0 .
Observatia 1.1.1. De cele mai multe ori, multimea A este de forma
A=

{0, 1, 2, . . . , k} , unde k N.
{z
}
|

primele numere naturale

(3n4 + n + 3) n 5
Exemplul 1.1.1. Functia f : D R, f (n) =
, unde
(5n + 1)(n 8)
D = {n N | n 5, n 6= 8}, este asimptotic pozitiva, deoarece D = N \ A
cu A = {0, 1, 2, 3, 4, 8} (multime finita) si f (n) > 0, n 9.
ln(n5 + 1) n
, nu este
(n 1)(n 6)
asimptotic pozitiva, deoarece (n 1)(n 6) > 0, n 7, dar lim [ln(n5 +
Exemplul 1.1.2. Functia g : N \ {1, 6} R, g(n) =

1) n] = , deci n0 N, n0 7 a.. g(n) < 0, n n0 .


6

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

Lema 1.1.1. O functie polinomiala f : N R, de grad p,


f (n) = ap np + ap1 np1 + + a1 n + a0 , a0 , a1 , . . . , ap R, ap 6= 0,
este asimptotic pozitiva daca si numai daca ap > 0.
Definitia 1.1.2. Fie g o functie a.p. (asimptotic pozitiva). Definim multimea
de functii O (g) (sau O (g(n))) ca fiind

O (g) = f f = functie a.p., c > 0, n0 N a..

f (n) c g(n), n n0 .
Daca f O (g) spunem ca f este asimptotic m
arginit
a superior
de g.
Pentru f O (g) se mai utilizeaza (n mod abuziv!) si scrierea f (n) =
O (g(n)).
Se citeste:
f este de ordinul O mare de g sau

f (n) este de ordinul O mare de g(n) (cand n ).

Observatia 1.1.2. Ilustrarea grafica a notatiei f O (g), si anume ca pentru


n n0 graficul functiei c g se afla deasupra graficului functiei f , este data
n Figura 1.1.1.

Figura 1.1.1:

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

Definitia 1.1.3. Fie g o functie a.p. (asimptotic pozitiva). Definim multimea


de functii (g) (sau (g(n))) ca fiind

(g) = f f = functie a.p., c > 0, n0 N a..

c g(n) f (n), n n0 .
Daca f (g) spunem ca f este asimptotic m
arginit
a inferior
de g.
Pentru f (g) se mai utilizeaza (n mod abuziv!) si scrierea f (n) =
(g(n)).
Se citeste:
f este de ordinul Omega mare de g sau
f (n) este de ordinul Omega mare de g(n) (cand n ).
Observatia 1.1.3. Ilustrarea grafica a notatiei f (g), si anume ca pentru
n n0 graficul functiei c g se afla sub graficul functiei f , este data n Figura
1.1.2.

Figura 1.1.2:

Definitia 1.1.4. Fie g o functie a.p. (asimptotic pozitiva). Definim multimea


de functii (g) (sau (g(n))) ca fiind

(g) = f f = functie a.p., c1 , c2 > 0, n0 N a..

c1 g(n) f (n) c2 g(n), n n0 .

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

Daca f (g) spunem ca f este asimptotic m


arginit
a inferior

si superior de g (sau ca f este asimptotic echivalent


a cu g, sau
ca f si g au acela
si ordin de cre
stere).
Pentru f (g) se mai utilizeaza (n mod abuziv!) si scrierea f (n) =
(g(n)).
Se citeste:
f este de ordinul Theta (mare) de g sau
f (n) este de ordinul Theta (mare) de g(n) (cand n ).
Observatia 1.1.4. Ilustrarea grafica a notatiei f (g), si anume ca pentru
n n0 graficul functiei f este cuprins ntre graficele functiilor c1 g si c2 g,
este data n Figura 1.1.3.

Figura 1.1.3:

Observatia 1.1.5. Notatia O se foloseste pentru a exprima complexitatea unui


algoritm corespunzatoare timpului de executie n cazul cel mai defavorabil,
fiind astfel cea mai adecvata analizei algoritmilor.
Notatia se foloseste pentru a exprima complexitatea unui algoritm corespunzatoare timpului de executie n cazul cel mai favorabil.
Notatia se foloseste atunci cand se poate determina exact timpul de
executie al unui algoritm sau atunci cand timpii de executie corespunzatori
cazurilor extreme sunt exprimati prin functii care au acelasi ordin de crestere.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

10

Propozitia 1.1.1. Fie f si g doua functii asimptotic pozitive.


a) f (n) = O(g(n)) daca si numai daca g(n) = (f (n)).
b) f (n) = (g(n)) daca si numai daca f (n) = O (g(n)) si f (n) = (g(n)).
Propozitia 1.1.2. Fie f si g doua functii asimptotic pozitive astfel ncat
exista
f (n)
= .
lim
n g(n)
a) f (n) = O (g(n)) daca si numai daca [0, +).
b) f (n) = (g(n)) daca si numai daca (0, +].
c) f (n) = (g(n)) daca si numai daca (0, +).
Exemplul 1.1.3. Vom aplica propozitia anterioar
a pentru functia asimptotic
(3n4 + n + 3) n 5
, unde D = {n N | n
pozitiva f : D R, f (n) =
(5n + 1)(n 8)
5, n 6= 8}, considerata n Exemplul 1.1.1.
Deoarece

f (n)
(3n4 + n + 3) n 5
lim
= lim
n n3
n n3 (5n + 1)(n 8)
q

1 n5
n4 n 3 + n13 + n34
= 0,
= lim
n
n5 (5 + n1 )(1 n8 )
rezulta ca f (n) = O (n3 ), dar f (n) 6= (n3 ) si f (n) 6= (n3 ).
Deoarece

f (n)
(3n4 + n + 3) n 5
lim
= lim
n n2
n n2 (5n + 1)(n 8)
q

3
1
4
1 n5
n n 3 + n3 + n4
= lim
= ,
n
n4 (5 + n1 )(1 n8 )
rezulta ca f (n) = (n2 ), dar f (n) 6= O (n2 ) si f (n) 6= (n2 ).
Deoarece

f (n)
(3n4 + n + 3) n 5
lim
= lim 2
n n2 n
n n
n(5n + 1)(n 8)
q

n4 n 3 + n13 + n34
1 n5
3

,
= lim
=
8
1
n
5
n4 n(5 + n )(1 n )

rezulta ca f (n) = (n2 n), deci f (n) = O (n2 n) si f (n) = (n2 n).

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

11

Propozitia 1.1.3. Daca f : N R este o functie polinomiala de grad p,


f (n) = ap np + ap1 np1 + + a1 n + a0 , a0 , a1 , . . . , ap R, ap > 0,
atunci
a) f (n) = O (nk ), k p;
b) f (n) = (nk ), k p;
c) f (n) = (np ).
Definitia 1.1.5. Fie A un algoritm, n dimensiunea datelor de intrare si
T (n) timpul de executie estimat pentru algoritmul A. Se spune ca algoritmul
A are comportare polinomial
a (sau ca este polinomial sau ca apartine
clasei P ) daca p > 0 astfel ncat T (n) = O (np ).
Observatia 1.1.6. Algoritmii polinomiali sunt, n general, acceptabili n practica. Algoritmii care necesita un timp de calcul exponential sunt utilizati
numai n cazuri exceptionale si doar pentru date de intrare de dimensiuni
relativ mici.

1.2

Definitii generale privind grafurile

Grafurile sunt modele matematice cu o gama larga de aplicatii. Aceasta


aplicabilitate a condus la dezvoltarea accelerata a teoriei grafurilor, atat din
punct de vedere al rezultatelor teoretice cat si al algoritmicii, grafurile impunandu-se drept modele de baza n informatica, n special n teoria structurilor de date, a proiectarii si analizei algoritmilor.
Definitia 1.2.1. Un graf neorientat (graf, pseudograf, graf general)
este o pereche G = (V, E) unde:
V este o multime finita si nevida, elementele sale numindu-se nodurile
(v
arfurile, punctele) grafului G;
E este o colectie (multime multipla, multiset) finita de perechi neordonate, posibil egale, de noduri, elementele sale numindu-se muchiile
(leg
aturile directe, liniile) grafului G.
Observatia 1.2.1. Intr-o pereche neordonata, notata [x, y], nu conteaza ordinea dintre elemente, adica [x, y] = [y, x].
Definitia 1.2.2. Un graf orientat (digraf, pseudodigraf) este o pereche
G = (V, E) unde:

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

12

V este o multime finita si nevida, elementele sale numindu-se v


arfurile
(nodurile, punctele) grafului G;
E este o colectie (multime multipla, multiset) finita de perechi ordonate
de varfuri, elementele sale numindu-se arcele (leg
aturile directe ale)
grafului G.
Observatia 1.2.2. Intr-o pereche ordonata, notata (x, y), conteaza ordinea
dintre elemente, adica (x, y) 6= (y, x) pentru x 6= y.
Definitia 1.2.3. Numarul de noduri ale unui graf (neorientat sau orientat)
se numeste ordinul grafului, iar numarul de muchii sau arce se numeste
dimensiunea grafului.
Definitia 1.2.4. a) Daca e = [x, y] este o muchie a unui graf neorientat,
atunci nodurile x si y se numesc extremit
atile muchiei e si spunem
ca 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 initial
a iar nodul y se numeste extremitatea
final
a a arcului e si spunem ca arcul e este incident cu x spre exterior si cu y spre interior.
c) O bucl
a a unui graf (neorientat sau orientat) este o muchie sau un arc
avand extremitatile egale (adica 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) daca exista o muchie sau un arc incident cu x si
cu y (adica o muchie de forma [x, y], respectiv un arc de forma (x, y)
sau de forma (y, x)).
Definitia 1.2.5. Daca n colectia (multimea multipla) de muchii sau arce a
unui graf (neorientat sau orientat) exista doua sau mai multe elemente egale
(si aflate pe pozitii diferite), atunci acestea se numesc muchii sau arce
multiple.
Definitia 1.2.6. Un graf (neorientat sau orientat) fara bucle se numeste
multigraf (neorientat, respectiv orientat).
Definitia 1.2.7. Un graf (neorientat sau orientat) se numeste simplu (sau
strict) daca nu contine nici bucle si nici muchii sau arce multiple.

13

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

Observatia 1.2.3. a) Un graf neorientat simplu este o pereche G = (V, E),


unde V este o multime finita si nevida (de elemente numite noduri) iar E
P2 (V ) este o multime finita (de elemente numite muchii), unde
P2 (V ) = {{x, y}|x, y V, x 6= y}
(multimea tuturor submultimilor cu doua elemente ale lui V ).
b) Un graf orientat simplu este o pereche G = (V, E), unde V este o
multime finita si nevida (de elemente numite noduri) iar E V V \
{(x, x)|x V } este o multime finita (de elemente numite arce).
Definitia 1.2.8. Fie G = (V, E) un graf (orientat sau neorientat). O
reprezentare grafic
a a lui G se obtine reprezentand nodurile sale prin
puncte distincte (n plan sau pe o alta suprafata data), iar muchiile [x, y] sau
arcele (x, y) prin segmente (de curba continua) distincte neorientate, respectiv orientate, de la punctul ce reprezinta nodul x pana la punctul ce reprezinta
nodul y.
Exemplul 1.2.1. Graful neorientat G = (V, E), cu V = {1, 2, 3, 4, 5, 6} si E =
{e1 , e2 , e3 , e4 , e5 , e6 , e7 , e8 , e9 }, unde e1 = [1, 2], e2 = [1, 4], e3 = [2, 2], e4 =
[2, 5], e5 = [3, 6], e6 = [3, 6], e7 = [4, 5], e8 = [4, 5], e9 = [4, 5] (E este o
multime multipla!) are reprezentarea grafica din Figura 1.2.1.

e3
1

e1

e2
4

e4
e7
e8
e9

e5

e6

Figura 1.2.1:

Figura 1.2.2:

Acest graf are ordinul 6 si dimensiunea 9. El contine bucla e3 , muchiile


multiple e5 , e6 si muchiile multiple e7 , e8 , e9 , deci nu este nici multigraf, nici
simplu. Nodurile 1 si 2 sunt adiacente, iar nodurile 1 si 5 nu sunt adiacente.
Exemplul 1.2.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 avand reprezentarea grafica din Figura 1.2.2. Arcul (3, 1)
are extremitatea initiala 3 si extremitatea finala 1.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

14

Definitia 1.2.9. Fie G1 = (V1 , E1 ) si G2 = (V2 , E2 ) doua grafuri (ambele


orientate sau ambele neorientate).
a) Spunem ca G1 este un subgraf al lui G2 si notam G1 G2 daca
V1 V2 si E1 E2 .
b) Spunem ca G1 este un graf partial al lui G2 daca V1 = V2 si E1 E2 .
Definitia 1.2.10. Fie G = (V, E) un graf (neorientat sau orientat) si U V
o submultime nevida de noduri. Subgraful indus (generat) de U n G este
subgraful G[U] = (U, F ), unde F este colectia tuturor muchiilor sau arcelor
din E ce au ambele extremitati n U.
Definitia 1.2.11. Fie G = (V, E) un graf (orientat sau neorientat) si F E
o colectie de muchii sau de arce.
a) Subgraful indus (generat) de F n G este subgraful G[F ] = (U, F ),
unde U este multimea tuturor nodurilor din V ce sunt extremitati pentru
cel putin o muchie sau un arc din F .
b) Graful partial indus (generat) de F n G este graful partial (V, F ).
Exemplul 1.2.3. Pentru graful neorientat din Exemplul 1.2.1, subgraful generat de submultimea de noduri {1, 3, 4, 5} are reprezentarea din Figura 1.2.3.
1

Figura 1.2.3:

Pentru graful orientat din Exemplul 1.2.2, subgraful generat de submultimea de arce {(2, 3), (5, 4)} are reprezentarea din Figura 1.2.4, iar graful
partial generat de aceeasi submultime de arce are reprezentarea din Figura
1.2.5.
Definitia 1.2.12. Fie G = (V, E) un graf (neorientat sau orientat) si U V
o submultime de noduri a.. U 6= V . Subgraful obtinut din G prin
eliminarea nodurilor multimii U este subgraful G \ U = (V \ U, F ),
unde F este colectia tuturor muchiilor sau arcelor din E ce nu sunt incidente
cu niciun nod din U.

15

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

Figura 1.2.4:

Figura 1.2.5:

Observatia 1.2.4. Fie G = (V, E) un graf (neorientat sau orientat) si U V .


a) Daca U 6= , atunci G[U] = G \ (V \ U).
b) Daca U 6= V , atunci G \ U = G[V \ U].
Definitia 1.2.13. Fie G = (V, E) un graf (neorientat sau orientat) si F
E o colectie de muchii sau arce. Graful partial obtinut din G prin
eliminarea muchiilor sau arcelor din F este G \ F = (V, E \ F ) (adica
subgraful ce contine toate nodurile lui G si muchiile sau arcele lui G care nu
apartin lui F ).
Observatia 1.2.5. Fie G = (V, E) un graf (neorientat sau orientat) si F E.
a) Graful partial indus de F n G este G \ (E \ F ).
b) Graful partial G \ F este chiar graful partial indus de E \ F n G.

1.3

Reprezentarea grafurilor

In continuare descriem cateva forme de reprezentare (memorare) a grafurilor n informatica. Dintre aceste forme, cea mai utilizata este matricea de
adiacenta.
Definitia 1.3.1. Fie G = (V, E) un graf (neorientat sau orientat) unde
V = {v1 , . . . , vn } si E = {e1 , . . . , em }. Matricea de adiacenta
asociata
grafului G este matricea A = (aij )i,j=1,n definita prin
aij = numarul de muchii sau de arce ek E de la nodul vi la nodul vj (adica
muchii de forma ek = [vi , vj ], respectiv arce de forma ek = (vi , vj )),
i, j {1, . . . , n}.
Observatia 1.3.1. a) Daca graful neorientat G = (V, E) este simplu, atunci

1, daca vi si vj sunt adiacente (adica [vi , vj ] E),
aij =
0, n caz contrar.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

16

b) Daca graful orientat G = (V, E) este simplu, atunci



1, daca (vi , vj ) E,
aij =
0, n caz contrar.
Exemplul 1.3.1. Matricea de adiacenta asociata grafului neorientat din Exemplul 1.2.1 este

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

0 0 0 0 0 2

A=
1 0 0 0 3 0 ,

0 1 0 3 0 0
0 0 2 0 0 0
iar matricea de adiacenta asociata

0
0

A=
1
0
0

grafului orientat din Exemplul 1.2.2 este

1 0 0 0
0 1 1 1

1 0 0 0
.
0 0 0 0
0 0 1 0

Observatia 1.3.2. Evident, orice graf neorientat are matricea de adiacenta


simetrica (aij = aji i, j).
Propozitia 1.3.1. Fie V = {v1 , . . . , vn }, n N .
a) Numarul de grafuri neorientate simple avand multimea de noduri V
n(n1)
este egal cu 2 2 .
b) Numarul de grafuri orientate simple avand multimea de noduri V este
2
egal cu 2n n .

Observatia 1.3.3. Fie G = (V, E) un graf (neorientat sau orientat), unde


V = {v1 , . . . , vn } si E = {e1 , . . . , em }, E 6= . O alta reprezentare a grafului
G este matricea T ce retine n fiecare coloana extremitatile unei muchii sau
arc, adica T = (tkj ) k = 1, 2 definita prin t1j = x, t2j = y, unde ej = [x, y]
j = 1, m

(pentru muchii) sau ej = (x, y) (pentru arce), j {1, . . . , m}. Pentru


graful din Exemplul 1.2.1 matricea T este


1 1 2 2 3 3 4 4 4
,
T =
2 4 2 5 6 6 5 5 5

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

17

iar pentru graful din Exemplul 1.2.2 matricea T este




1 2 2 2 3 3 5
T =
.
2 3 4 5 1 2 4
Observatia 1.3.4. O alta forma frecvent utilizata n reprezentarea grafurilor
simple este data de listele de adiacent
a (memorate static sau dinamic).
Lista de adiacenta a unui nod x este formata din toate nodurile y pentru
care exista muchie sau arc de la x la y (y se numeste succesor direct al lui
x). Pentru graful orientat din Exemplul 1.2.2, listele de adiacenta sunt
L(1) = {2}, L(2) = {3, 4, 5}, L(3) = {1, 2}, L(4) = , L(5) = {4},
unde L(i) reprezinta lista de adiacenta a nodului i. Pentru grafurile orientate
simple, deseori se memoreaza si listele de predecesori directi. Lista de
predecesori directi a unui nod x este formata din toate nodurile y pentru
care exista arc de la y la x (y se numeste predecesor direct al lui x).
Pentru graful din Exemplul 1.2.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 notiunile de succesor direct si predecesor
direct coincid, fiind si sinonime cu notiunile de vecin sau adiacent.
Observatia 1.3.5. Alegerea uneia sau alteia dintre formele de reprezentare a
grafurilor descrise mai sus depinde de eficienta si de usurinta implementarii
operatiilor necesare de prelucrare a acestor forme, deci de tipul problemei
modelate prin grafuri si de algoritmul de rezolvare utilizat.

1.4

Grade

Definitia 1.4.1. Fie G = (V, E) un graf si x V un nod arbitrar fixat.


a) Daca G este neorientat, atunci gradul lui x, notat dG (x) = d(x), este
definit prin
d(x) = a(x) + 2 b(x),
unde a(x) reprezinta numarul de muchii e E ce nu sunt bucle si sunt
incidente cu x, iar b(x) este numarul de bucle e E ce sunt incidente
cu x.
b) Daca G este orientat, atunci:

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

18

gradul de ie
sire (semigradul exterior) al lui x, notat d+
G (x) =
d+ (x), reprezinta numarul de arce e E incidente cu x spre exterior;
gradul de intrare (semigradul interior) al lui x, notat d
G (x) =
d (x), reprezinta numarul de arce e E incidente cu x spre interior;
gradul (total al) lui x, notat dG (x) = d(x), este
d(x) = d+ (x) + d (x).
Exemplul 1.4.1. Pentru graful neorientat din Exemplul 1.2.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 1.2.2, gradele nodurilor sunt:
d+ (1) = 1,
d+ (2) = 3,
d+ (3) = 2,
d+ (4) = 0,
d+ (5) = 1,

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

d(1) = 2,
d(2) = 5,
d(3) = 3,
d(4) = 2,
d(5) = 2.

Propozitia 1.4.1. Fie G = (V, E) un graf, V = {v1 , . . . , vn }, si fie A =


(aij )i,j=1,n matricea de adiacenta a grafului G.
a) Daca G este neorientat, atunci d(vi ) = aii +

n
P

j=1

b) Daca G este orientat, atunci d+ (vi ) =

n
P

aij , i {1, . . . , n}.

aij , d (vi ) =

j=1

{1, . . . , n}.

n
P

j=1

aji , i

Observatia 1.4.1. Daca graful G este simplu, atunci aii = 0 i si egalitatea


n
P
aij .
de la punctul a) al propozitiei anterioare devine d(vi ) =
j=1

Propozitia 1.4.2. Fie G = (V, E) un graf avand dimensiunea m. Atunci


P
d(x) = 2m.
xV
In plus, daca G este orientat atunci P d+ (x) = P d (x) = m.
xV

xV

Definitia 1.4.2. Fie G = (V, E) un graf. Un nod x V cu dG (x) = 0


se numeste nod izolat, iar un nod y V cu dG (y) = 1 se numeste nod
terminal.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

1.5

19

Conexitate

Definitia 1.5.1. Fie G = (V, E) un graf.


a) Un lant n graful G este o succesiune alternanta
[v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1],
unde v1 , v2 , . . . , vk+1 V (noduri), e1 , e2 , . . . , ek E (muchii sau arce),
k N, cu proprietatea ca pentru orice i {1, . . . , k} ei este o muchie
sau un arc avand extremitatile vi si vi+1 (adica ei = [vi , vi+1 ] pentru
un graf neorientat, respectiv ei = (vi , vi+1 ) sau ei = (vi+1 , vi ) pentru un
graf orientat). Nodurile v1 si vk+1 se numesc extremit
atile lantului,
iar nodurile v2 , . . . , vk se numesc noduri intermediare. Numarul
k de muchii sau arce (nu neaparat distincte) ale lantului se numeste
lungimea lantului.
b) Un lant se numeste nchis daca are extremitatile egale, respectiv deschis n caz contrar.
c) Un lant se numeste simplu daca muchiile sau arcele sale sunt diferite
doua cate doua (considerand diferite si muchiile sau arcele multiple
aflate pe pozitii diferite n E).
d) Un lant deschis se numeste elementar daca nodurile sale sunt diferite
doua cate doua. Un lant nchis se numeste elementar daca este simplu si, cu exceptia extremitatilor, nodurile sale sunt diferite doua cate
doua.
e) Un ciclu este un lant nchis si simplu de lungime nenula (adica cu cel
putin o muchie sau un arc).
f ) Un drum este un lant [v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ] cu proprietatea ca
pentru orice i {1, . . . , k} muchia sau arcul ei are extremitatea initiala
vi si extremitatea finala vi+1 (adica ei = (vi , vi+1 ) pentru graf orientat).
Un astfel de drum se noteaza si cu
(v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1),
nodurile v1 si vk+1 numindu-se extremitatea initial
a, respectiv extremitatea final
a a drumului.
g) Un circuit este un drum nchis si simplu de lungime nenula (adica un
drum ce este si ciclu).

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

20

Observatia 1.5.1. Pentru grafurile neorientate notiunile de lant si de drum


coincid; deci si notiunile de ciclu si de circuit coincid.
Observatia 1.5.2. Orice lant elementar este si simplu.
Observatia 1.5.3. Pentru grafurile neorientate sau orientate simple orice lant
[v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ] sau drum (v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1) este bine
determinat de nodurile sale (deoarece muchia sau arcul ei nu poate fi decat
singura muchie sau singurul arc de la vi la vi+1 , i), deci poate fi notat, pe
scurt, doar prin nodurile succesive
[v1 , v2 , . . . , vk , vk+1], respectiv (v1 , v2 , . . . , vk , vk+1 ).
Exemplul 1.5.1. Pentru graful neorientat din Exemplul 1.2.1,
[1, e2 , 4, e9 , 5, e4 , 2, e1, 1, e2 , 4]
este un lant (drum) deschis, nesimplu (contine de doua ori e2 ), neelementar
(contine de doua ori 1), de lungime 5.
In acelasi graf, [1, e1 , 2, e3 , 2, e4 , 5, e7 , 4, e9, 5, e8 , 4, e2 , 1] este un ciclu (circuit) simplu si neelementar (contine de doua ori 2), de lungime 7.
Pentru graful orientat simplu din Exemplul 1.2.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)).
Definitia 1.5.2. a) Un graf (neorientat sau orientat) se numeste conex
daca pentru orice doua noduri distincte x, y exista cel putin un lant de
la x la y.
b) Un graf orientat se numeste tare-conex daca pentru orice doua noduri
distincte x, y exista cel putin un drum de la x la y (deci, schimband
ordinea lui x si y, exista cel putin un drum si de la y la x).
Observatia 1.5.4. Orice graf tare-conex este si conex (deoarece orice drum
este si lant). Orice graf cu un singur nod verifica definitia anterioara, deci
este si conex si tare-conex.
Observatia 1.5.5. Deoarece pentru orice nod x exista lantul [x] si drumul (x)
de lungimi zero, rezulta ca n definitia anterioara putem renunta la conditiile
ca nodurile x si y sa fie distincte.
De asemenea, deoarece prin eliminarea tuturor portiunilor dintre noduri
egale dintr-un lant sau drum se obtine un lant sau un drum elementar avand
aceleasi extremitati, rezulta ca n definitia anterioara putem nlocui termenii
de lant si drum cu lant elementar, respectiv drum elementar.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

21

Exemplul 1.5.2. Graful neorientat din Exemplul 1.2.1 nu este conex, deoarece
nu exista lanturi ntre nodurile 1 si 3. Graful orientat din Exemplul 1.2.2
este conex, dar nu este tare-conex, deoarece nu exista drum de la nodul 4 la
nodul 1 (desi exista drum de la nodul 1 la nodul 4!).
Definitia 1.5.3. a) O component
a conex
a a unui graf (orientat sau
neorientat) G = (V, E) este un subgraf G[U] generat de o submultime
U V de noduri cu proprietatea ca G[U] este conex si maximal cu
aceasta proprietate (n raport cu incluziunea), adica pentru orice nod
x V \ U subgraful G[U {x}] nu mai este conex.
b) O component
a tare-conex
a a unui graf orientat G = (V, E) este un
subgraf G[U] generat de o multime U V de noduri cu proprietatea
ca G[U] este tare-conex si maximal cu aceasta proprietate (n raport cu
incluziunea), adica pentru orice noduri x1 , x2 , . . . , xp V \ U subgraful
G[U {x1 , x2 , . . . , xp }] nu mai este tare-conex.
Observatia 1.5.6. Un graf este conex daca si numai daca are o singura componenta conexa. Un graf orientat este tare-conex daca si numai daca are o
singura componenta tare-conexa. Numarul de componente tare-conexe ale
unui graf orientat este mai mare sau egal decat numarul de componente
conexe ale acelui graf, deoarece orice componenta tare-conexa este inclusa
ntr-o componenta conexa (conform definitiei anterioare si Observatiei 1.5.4).
Observatia 1.5.7. Orice nod izolat x genereaza o componenta conexa si o
componenta tare-conexa, ambele avand forma G[{x}] = ({x}, ).
Propozitia 1.5.1. a) Fie G[V1 ], . . . , G[Vk ] componentele conexe (diferite)
ale unui graf G = (V, E). Atunci {V1 , . . . , Vk } este o partitie a multimii
V (adica Vi 6= i, Vi Vj = i 6= j, V1 Vk = V ).
b) Fie G[V1 ], . . . , G[Vr ] componentele tare-conexe (diferite) ale unui graf
orientat G = (V, E). Atunci {V1 , . . . , Vr } este de asemenea o partitie
a multimii V .
Exemplul 1.5.3. Componentele conexe ale grafului neorientat din Exemplul
1.2.1 sunt generate de submultimile de noduri V1 = {1, 2, 4, 5} si V2 = {3, 6},
deci acel graf are 2 componente conexe. Componentele tare-conexe ale grafului orientat din Exemplul 1.2.2 sunt generate de submultimile de noduri
V1 = {1, 2, 3}, V2 = {4} si V3 = {5}, deci acel graf are 3 componente tareconexe.
Observatia 1.5.8. Submultimile de muchii sau arce ale componentelor conexe
ale unui graf formeaza de asemenea o partitie a multimii de muchii sau arce

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

22

a grafului (deoarece pentru orice muchie e = [x, y] sau arc e = (x, y) nodurile
x si y se afla ntr-o aceeasi componenta conexa si aceasta componenta va
contine si pe e). Afirmatia nu mai este valabila pentru componentele tareconexe. De exemplu, pentru graful din Exemplul 1.2.2 arcul (5, 4) nu apartine
nici-unei componente tare-conexe.
Definitia 1.5.4.

a) Un arbore este un graf conex si fara cicluri.

b) O p
adure este un graf fara cicluri.
c) Un arbore partial al unui graf G = (V, E) este un graf partial al lui
G ce este arbore (adica un arbore T = (V, F ) cu F E).
Observatia 1.5.9. Arborii si padurile sunt grafuri simple (deoarece orice bucla
este un ciclu si orice doua muchii sau arce multiple formeaza un ciclu).
Observatia 1.5.10. Componentele conexe ale unei paduri sunt arbori.
Exemplul 1.5.4. Graful neorientat din Exemplul 1.2.1 nu este padure (deoarece are cicluri), deci nici arbore. Graful sau partial reprezentat n Figura
1.5.1 este o padure (avand doua componente conexe arbori). Graful orientat
din Exemplul 1.2.2 nu este arbore (deoarece are cicluri). Doi arbori partiali
ai sai sunt reprezentati n Figura 1.5.2.
1

e1

e2

e4

e5
6

Figura 1.5.1:
1
5

Figura 1.5.2:

2
5

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

1.6

23

Parcurgerea grafurilor

Prin parcurgerea unui graf se ntelege o metoda sistematica de vizitare succesiva a nodurilor sale (n vederea prelucrarii informatiilor atasate n structura
de date modelata prin graful dat).
Definitia 1.6.1. Fie G = (V, E) un graf si x V un nod arbitrar fixat.
Parcurgerea n ad
ancime (DF, depth first) a grafului G pornind din
nodul x, numit si r
ad
acin
a a acestei parcurgeri, consta n:
se vizitez
a nodul x, acesta devine nod curent;
daca nodul curent vi are succesori directi (adica noduri vj pentru care
exista muchie sau arc de la vi la vj ) nevizitati, atunci se viziteaza primul
astfel de nod vj ; nodul vj devine nod curent si se continua procedeul de
parcurgere pornind din acest nod;
daca nodul curent vj nu mai are succesori directi nevizitati, atunci se
revine la nodul predecesor direct vi (cel din care a fost vizitat); nodul vi
redevine nod curent si se continua procedeul de parcurgere pornind din
acest nod;
daca nodul curent nu mai are nici succesori directi nevizitati, nici predecesor direct (deci este chiar radacina x), atunci parcurgerea se ncheie.
Observatia 1.6.1. Pentru parcurgerea DF, considerand cate o muchie sau un
arc de la fiecare nod curent vi la primul sau succesor direct nevizitat vj (care
va deveni urmatorul nod curent) se obtine un arbore, numit arbore DF.
Exemplul 1.6.1. Pentru graful din Exemplul 1.2.2, parcurgerea n adancime
pornind din nodul 2 este
DF (2) : 2, 3, 1, 4, 5
(considerand ca ordinea dintre succesorii directi ai fiecarui nod este ordinea
crescatoare). Arborele DF corespunzator acestei parcurgeri este reprezentat
n Figura 1.6.1.
Pentru acelasi graf, parcurgerea DF pornind din nodul 3 este
DF (3) : 3, 1, 2, 4, 5,
iar arborele DF corespunzator este reprezentat n Figura 1.6.2.
Prezentam n continuare doi algoritmi, unul recursiv si altul nerecursiv,
pentru implementarea parcurgerii n adancime.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

24

Figura 1.6.1:
3

Figura 1.6.2:

Algoritmul 1.6.1 (parcurgerea DF, recursiv). Fie graful G = (V, E) avand


multimea de noduri V = {1, . . . , n} si matricea de adiacenta A = (aij )i,j=1,n .
Fie x V un nod arbitrar fixat. Pentru implementarea parcurgerii DF (x)
vom utiliza un vector V IZ avand semnificatia

1, daca nodul i a fost vizitat,
V IZ[i] =
i {1, . . . , n}.
0, n caz contrar,
Pentru memorarea arborelui DF (x) vom utiliza un vector T AT A avand
semnificatia

0, daca i = x (radacina),
T AT A[i] =
predecesorul direct al lui i, daca i 6= x,

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

25

pentru orice nod i din parcurgerea DF . Descrierea n pseudocod a algoritmului recursiv de parcurgere n adancime pornind din nodul x are urmatoarea
forma.
DF RECURSIV(x) :

VIZITEAZA(x);
// se viziteaz
a x, de exemplu se afi
seaz
a x
V IZ[x] 1;
// x a fost vizitat
for y = 1, n do
if (axy 1) and (V IZ[y] = 0) then
// y este primul succesor direct nevizitat al lui x
T AT A[y] x;
DF RECURSIV(y);
// se continu
a parcurgerea DF
// din nodul y

Programul C++ corespunzator, cu citirea grafului dintr-un fisier (avand


pe prima linie numerele n de noduri si m de muchii sau arce ale grafului si
pe liniile urmatoare perechile de noduri ce formeaza aceste muchii sau arce)
si afisarea parcurgerii DF (x) si a vectorului T AT A (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);

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

26

VIZ[x]=1;
for(y=1;y<=n;y++)
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 1.6.2. Pentru graful din Exemplul 1.2.2, fisierul de intrare graf2.dat
folosit la citirea grafului n programul anterior contine 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 1.6.2 (parcurgerea DF, nerecursiv). Fie din nou G = (V, E)
un graf avand multimea de noduri V = {1, . . . , n} si matricea de adiacenta
A = (aij )i,j=1,n . Fie x V un nod arbitrar fixat. Pentru implementarea nerecursiva a parcurgerii DF (x) vom utiliza vectorii V IZ si T AT A cu aceleasi
semnificatii ca n algoritmul anterior, un vector URM cu semnificatia
URM[i] = urmatorul succesor direct al nodului i,
si o structura de tip stiv
a S, memorata ca un vector, ce contine nodurile
vizitate si n curs de prelucrare, adica de vizitare a tuturor succesorilor.
Descrierea n pseudocod a algoritmului are urmatoarea forma.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

27

DF(x) :

VIZITEAZA(x);
// se viziteaz
a x, de exemplu se afi
seaz
a x
V IZ[x] 1;
// x a fost vizitat
T AT A[x] 0;
varf 1; S[varf ] x;
// x se introduce ^
n v^
arful stivei
while (varf > 0) do
// stiva este nevid
a
i S[varf ];
// i este nodul din v^
arful stivei
j URM[i] + 1;
// j va fi urm
atorul succesor direct
// nevizitat al lui i, dac
a exist
a
while (aij = 0) and (j n) do j j + 1;
if (j > n) then
// 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
else
URM[i] j;
// j este urm
atorul succesor direct
// al lui i
if (V IZ[j] = 0) then
// j nu a fost vizitat

VIZITEAZA(j);
// se viziteaz
a j
V IZ[j] 1;
// j a fost vizitat
T AT A[j] i;
varf varf + 1;
S[varf ] j;
// se introduce j ^
n v^
arful stivei
// stiva este vid
a, nu mai exist
a noduri neprelucrate,
// parcurgerea este
^ncheiat
a.
Observatia 1.6.2. Pentru un graf cu n noduri si m muchii sau arce, implementarea anterioara a parcurgerii DF are complexitatea O (n2 ), deoarece
oricare din cele n noduri este vizitat (deci introdus si extras din stiva) cel
mult cate o data, iar cautarea succesorilor directi j nevizitati ai fiecarui nod
i extras din stiva se efectueaza n cel mult n pasi, prin parcurgerea liniei i
din matricea de adiacenta.
Daca graful este memorat prin intermediul listelor de adiacenta, atunci
cautarea succesorilor directi j nevizitati ai fiecarui nod i extras din stiva se
efectueaza, prin parcurgerea lor succesiva, n exact d(i) (pentru graf neorientat) sau d+ (i) (pentru graf orientat) pasi. Cum, conform Propozitiei 1.4.2,
P
P +
d(x) = 2m si
d (x) = m, obtinem ca n acest caz parcurgerea DF
xV

xV

are complexitatea O (n + m).

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

28

Observatia 1.6.3. Daca G = (V, E) este un graf neorientat, atunci pentru


orice nod x V componenta conexa a nodului x este (indusa de) chiar
multimea nodurilor vizitate prin parcurgerea DF (x).
Pe baza acestei observatii obtinem urmatorul algoritm.
Algoritmul 1.6.3 (determinarea componentelor conexe). Fie din nou
G = (V, E) un graf neorientat, V = {1, . . . , n} si fie A = (aij )i,j=1,n matricea
de adiacenta a grafului G. Pentru determinarea componentelor conexe ale
grafului G vom utiliza un vector CC cu semnificatia
CC[i] = numarul componentei conexe n care se afla nodul i,
i {1, . . . , n} si o variabila nrc ce reprezinta numarul de componente
conexe. Evident, graful G este conex daca si numai daca valoarea finala a
variabilei nrc este egala cu 1.
Descrierea n pseudocod a algoritmului are forma urmatoare.
COMPONENTE CONEXE :
nrc 0;
for i = 1, n do CC[i] 0;
for i = 1, n do
if (CC[i] = 0) then
// nodul i nu a fost vizitat
nrc nrc + 1;
// nodurile din parcurgerea DF (i)
DF(i);
// vor forma o nou
a component
a conex
a

unde functia DF(i) este cea din Algoritmul 1.6.1 sau cea din Algoritmul

1.6.2, adaugand instructiunea CC[i] nrc n functia VIZITEAZA(i).

Observatia 1.6.4. Algoritmul anterior poate fi utilizat si pentru determinarea


componentelor conexe ale unui graf orientat, nlocuind conditia axy 1 din
functia DF RECURSIV(x) cu axy 1 sau ayx 1, respectiv conditia
aij = 0 din functia DF(x) cu aij = 0 si aji = 0 (deoarece n determinarea
componentelor conexe nu se tine cont de orientarea arcelor).
Observatia 1.6.5. Daca G = (V, E) este un graf orientat, atunci pentru orice
nod x V componenta tare-conexa a nodului x este (indusa de) multimea
nodurilor y vizitate prin parcurgerea DF (x) a grafului G cu proprietatea ca
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, v1 , . . . , vk , x)
n graful G corespunde drumului (x, vk , . . . , v1 , y) n graful G, deci x si y

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

29

sunt n aceeasi componenta tare-conexa a lui G daca si numai daca exista un


drum de la x la y n G si un drum de la x la y n G, adica y este vizitat prin
parcurgerea DF (x) atat n G cat si n G.
Matricea de adiacenta a grafului G este transpusa matricei de adiacenta
a grafului G, deci pentru parcurgerea DF (x) a grafului G putem utiliza
tot matricea de adiacenta A a grafului dat G, nlocuind conditia aij = 0
cu aji = 0, iar conditia axy 1 cu ayx 1 n functiile DF(x),
respectiv DF RECURSIV(x). Astfel, algoritmul DF poate fi utilizat si
pentru determinarea componentelor tare-conexe, deci si pentru verificarea
tare-conexitatii grafului.
Definitia 1.6.2. Fie G = (V, E) un graf si x V un nod arbitrar fixat.
Parcurgerea n l
atime (BF,breadth first, parcurgerea pe nivele) a
grafului G pornind din nodul x, numit si r
ad
acin
a a acestei parcurgeri,
consta n:
se vizitez
a nodul x, considerat nod de nivelul zero;
se viziteaza apoi succesorii directi nevizitati ai acestuia (diferiti de x),
considerati noduri de nivelul 1;
se viziteaza apoi, pe rand, succesorii directi nevizitati ai acestora, considerati noduri de nivelul 2;
s.a.m.d.;
parcurgerea se ncheie cand nici-un nod de pe un nivel nu mai are
succesori directi nevizitati.
Observatia 1.6.6. Analog parcurgerii DF, considerand cate o muchie sau un
arc de la fiecare nod curent v al parcurgerii BF la fiecare din nodurile nevizitate (de pe urmatorul nivel) pentru care v este predecesorul direct, se obtine
un arbore, numit arbore BF.
Exemplul 1.6.3. Pentru graful din Exemplul 1.2.2, parcurgerea n latime
pornind din nodul 2 este
BF (2) : 2, 3, 4, 5, 1
(considerand din nou ordinea dintre succesorii directi ai fiecarui nod ca fiind ordinea crescatoare). Arborele BF corespunzator acestei parcurgeri este
reprezentat n Figura 1.6.3. Pentru acelasi graf, parcurgerea BF pornind din
nodul 3 este
BF (3) : 3, 1, 2, 4, 5,
iar arborele BF corespunzator este reprezentat n Figura 1.6.4.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

30

Figura 1.6.3:
3

2
1

Figura 1.6.4:

Algoritmul 1.6.4 (parcurgerea BF). Fie graful G = (V, E) avand multimea


de noduri V = {1, . . . , n} si matricea de adiacenta A = (aij )i,j=1,n . Fie x V
un nod arbitrar fixat. Pentru implementarea parcurgerii BF (x) vom utiliza
vectorii V IZ, T AT A, URM si S avand aceleasi semnificatii ca la parcurgerea
DF (x) (Algoritmul 1.6.2), cu deosebirea ca vectorul S al nodurilor vizitate
si n curs de prelucrare este organizat si utilizat acum ca o structura de tip
coad
a.
Aceasta fiind singura modificare fata de Algoritmul 1.6.2, obtinem urmatoarea descriere n pseudocod a algoritmului de parcurgere n latime.

TEMA 1. ELEMENTE DE COMPLEX. ALG. SI TEOR. GRAF.

31

BF(x) :

VIZITEAZA(x);
V IZ[x] 1;
T AT A[x] 0;
coada 1;
// nodurile se adaug
a la S pe pozit
ia "coada "
varf 1;
//
si se elimin
a de pe pozit
ia "varf "
S[coada] x;
while (varf coada) do
// coada este nevid
a
i S[varf ];
j URM[i] + 1;
while (aij = 0) and (j n) do j j + 1;
if (j > n) then
varf varf + 1;
else
URM[i] j;
if (V IZ[j] = 0) then

VIZITEAZA(j);
V IZ[j] 1;
T AT A[j] i;
coada coada + 1;
S[coada] j;

Observatia 1.6.7. Analog parcurgerii DF, implementarea anterioara a parcurgerii BF are complexitatea O (n2 ), iar daca graful este memorat prin
intermediul listelor de adiacenta, atunci complexitatea este O (n + m).
Observatia 1.6.8. Observatiile 1.6.3, 1.6.4 si 1.6.5 si algoritmii corespunzatori
raman valabile daca nlocuim parcurgerea DF cu parcurgerea BF.

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