∑ d ( x ) = 2m .
x∈ X
1
DefiniŃie. Fie G = ( X , U ) un graf cu n vârfuri ( X = n ). Spunem că G
este un graf complet , dacă oricare ar fi x, y ∈ X , avem { x, y} ∈ U (orice două
vârfuri din G sunt conectate sau adiacente).
Graful complet cu n vârfuri se notează prin K n
PropoziŃia 3. Numărul muchiilor lui K n este Cn2 .
2
1.2. Grafuri orientate
3
b) Gradul exterior lui A este numărul arcelor ce ies din A şi au nodul
terminal în afara lui A, adică mărimea
d + ( A) = {( x, y ) ∈U x ∈ A, y ∉ A} .
c) Gradul total al lui A este d ( A ) = d − ( A ) + d + ( A ) .
ObservaŃii.
1) Evident, pentru orive A ⊂ X avem d − ( A ) ≤ ∑ d ( x) ,
x∈A
− deoarece s-ar
putea ca anumite arce care ies din A să aibă extremitatea finală tot în A ,
arce care nu se numără la determinarea valorii d + ( A ) .
2) Evident, pentru orive A ⊂ X avem d + ( A ) ≤ ∑ d ( x) ,
x∈A
+ deoarece s-ar
4
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim drum în G o
succesiune de vârfuri d = ( x0 , x1 ,..., xr ) astfel încât pentru orice i = 0,1,..., r − 1 ,
xi xi +1 ∈ U (sau o succesiune de arce care au acelaşi sens, d = ( u1 , u1 ,..., u p ) , cu
proprietatea că pentru orice i = 1, 2,..., p − 1 , ui şi ui +1 au o extremitate comună,
mai exact extremitatea finală a lui ui coincide cu extremitatea iniŃială a lui ui +1 .
Fie d = ( x0 , x1 ,..., xr ) un drum în graful G = ( X , U ) . x0 se numeşte
extremitatea iniŃială, iar xr extremitatea finală a drumului d .
DefiniŃie. Drumul d = ( x0 , x1 ,..., xr ) din graful G = ( X , U ) se numeşte
elementar dacă pentru orice i, j = 0,1,..., r , i ≠ j , avem xi ≠ x j (drumul trece
prin noduri distincte).
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim lanŃ în G , o secvenŃă
de noduri L = [ x0 , x1 ,..., xr ] cu proprietatea că pentru orice i = 0,1,..., r − 1 avem
( xi , xi +1 ) ∈U sau ( xi +1 , xi ) ∈U (sau o succesiune de arce
L = u1 , u2 ,..., u p astfel încât pentru orice i = 1, 2,..., p − 1 , arcele ui şi ui +1 au
o extremitate comună - nu se mai pune condiŃia ca arcele să aibă acelaşi sens, ca
la drumuri).
ObservaŃie. Din definiŃie rezultă imediat că orice drum este într-un graf
orientat este în acelaşi timp şi lanŃ în graful orientat respectiv.
DefiniŃie. Fie G = ( X , U ) un graf orientat. Pentru orice x, y ∈ X
spunem că y este accesibil din x sau y este atins din x dacă şi numai dacă
există d = ( x0 , x1 ,..., xr ) un drum de capete x şi y ..
5
Observăc că la toate grafurile de mai sus un folosit o numerotare a
vârfurilor. Numerele folosite pot fi considerate etichete pentru vârfuri şi astfel
grafurile pot fi considerate drept grafuri etichetate.
DefiniŃie. Fie G = ( X , U ) un graf orientat. G se numeşte graf orientat
marcat sau reŃea dacă fiecărui u ∈ U i se asociază o marcă mu . În acest caz,
U ⊂ X × M × X , M fiind mulŃimea mărcilor asociate arcelor. Dacă
( x, m, y ) ∈ X × M × X , atunci arcul x → y se marchează cu m şi se reprezint
prin x m
→y.
DefiniŃie. Numim reŃea etichetată un graf orientat marcat şi etichetat.
De fapt, graful din exemplul anterior, având vârfurile numerotate şi
muchiile marcate poate fi considerat şi un exemplu de reŃea etichetată.
2.1. Grafuri conexe
6
Dacă în definiŃia grafului conex pentru grafuri orientate înlocuim
condiŃia de existenŃă a unui lanŃ cu cea de existenŃă a unui drum se onŃine
următoarea noŃiune.
DefiniŃie. Graful orientat G = ( X , U ) se numeşte tare conex dacă şi
numai dacă oricare ar fi două noduri x, y ∈ X , x ≠ y , există cel puŃin un drum în
G , d = ( x = x0 , x1 ,..., xr = y ) de extremităŃi x şi y .
O posibilitate de a determina dacă un graf neorientat este conex, sau
determinarea efectivă a componentelor conexe (sau problemele similare
pentru grafurile orientate) constă în aplicarea unui algoritm de tip greede.
Să considerăm întâi problema determinării conexităŃii unui graf
neorientat G = ( X ,U ) .
Algoritm 1.
1. Se consideră Y = X , V = U şi se alege orice x ∈ X pentru care
considerăm B = { x} .
2. Dacă B = ∅ , atunci algoritmul se termină generând un răspuns
astfel:
a. Dacă V = ∅ , atunci graful este conex
b. Dacă V ≠ ∅ , atunci graful nu este conex (în plus se poate
spune că mulŃimea X \ Y reprezintă componenta conexă din
care face parte şi nodul x considerat la 1).
Altfel se continuă.
3. Se alege orice y ∈ B .
4. Pentru fiecare z ∈Y \ B astfel încât { y, z} ∈V considerăm
B = B ∪ { z} şi V = V \ {{ y, z}}
5. Considerăm B = B \ { y} şi reluăm de la 2.
Aşa cum se vede din pasul 2, algoritmul prezentat dă răspunsul la
întrebarea „Este G un graf conex?”. De asemenea, se poate determina
componenta conexă a grafului G din care face parte un anumit nod
specificat. Acest lucru crează premizele realizării algoritmului de
determinare a componentelor conexe, plecând de la algoritmul 1.
Algoritm 2.
1. Se consideră Y = X , V = U k = 0 .
2. Dacă V = ∅ , atunci algoritmul se termină şi componentele conexe
k
ale grafului G sunt A1 , A2 , ..., Ak . Vârfurile care nu sunt în ∪A k
i =1
sunt vârfuri izolate şi formează fiecare în parte câte o componentă
conexă a grafului G (în plus valoarea pentru k arată dacă graful
7
G este sau nu conex. Astfel pentru k = 1 şi A1 = X graful este
conex, altfel G nu este conex).
3. Alegem orice x ∈ Y . Fie k = k + 1 , Ak = ∅ , B = { x} .
4. Dacă B = ∅ se trece le 8, altfel se continuă.
5. Se alege orice y ∈ B .
6. Pentru fiecare z ∈Y \ B astfel încât { y, z} ∈V considerăm
B = B ∪ { z} şi V = V \ {{ y, z}} .
7. Considerăm B = B \ { y} , Ak = Ak ∪ { y} . Se trece la 4.
8. Se elimină din V orice muchie {a, b} pentru care a, b ∈ Ak . Se trece
la 2.
{ }
V = ( Ci , C j ) ∃x ∈ Ci , ∃y ∈ C j cu ( x, y ) ∈ U ⊂ Y × Y .
Graful H = (Y ,V ) se numeşte graful condensat al lui G .
ObservaŃie. Graful condensat al oricărui graf orientat este aciclic.
4. ARBORI
4.1. Definire şi proprietăŃi
10
Algoritm 1.
1. Fie V = U .
2. Dacă graful H = ( X , V ) nu conŃine cicluri, atunci algoritmul se termină şi
H este un arborele parŃial al lui G , altfel se conŃinuă.
3. Se consideră un ciclu C = e1 , e2 ,..., e p în H
{ }
4. Se alege e ∈ e1 , e2 ,..., e p . Considerăm V = V \ {e} şi mergem la 2.
PropoziŃia 2. Fie G = ( X , U ) un graf neorientat conex. Atunci numărul
ciclomatic al lui G este U − X + 1 .
PropoziŃia 3. Fie G = ( X , U ) un graf neorientat conex, A = ( X , V ) un
arbore parŃial al lui G şi e = { x, y} o coardă a lui A . Atunci graful
H = ( X , V ∪ {e}) conŃine exact un ciclu.
11
2. Dacă k ≥ n − 1 , atunci algoritmul se opreşte, muchiile din V determină
arborele parŃial de cost minim, altfel se continuă.
3. Considerăm { p, q} = M ( j ) .
4. Dacă L ( p ) = L ( q ) , atunci punem j = j + 1 şi mergem la 3, altfel se
continuă.
5. Punem k = k + 1 şi V = V ∪ {{ p, q}} .
6. Dacă L ( p ) < L ( q ) , atunci înlocuim în L toate valorile L ( q ) prin
L ( p ) , altfel înlocuim în L toate valorile L ( p ) prin L ( q ) .
7. Punem j = j + 1 şi mergem la 2.
4.4. ArborescenŃe
12
{x ∈ X d + ( x ) = 0} = n
(numărul vârfurilor terminale să fie egal cu n ).
PropoziŃia 4. Fie A = ( X , U ) o arborescenŃă binară completă în care
{x ∈ X d ( x ) = 0} = n . Atunci U = 2 ( n − 1) .
+
13
5.2. Grafuri euleriene
k > 0 . Atunci există Li = m1i , m2i ,..., mipi lanŃ deschis, mij ∈ U , j = 1, 2,..., p i ,
{
i = 1, 2,..., k , astfel încât notând U i = m1i , m2i ,..., mipi } avem U i ∩ U j = ∅
14
k
pentru orice 1 ≤ i, j ≤ k , i ≠ j şi ∪U i = U (mulŃimea muchiilor poate fi
i =1
partiŃionată în exact k lanŃuri deschise).
d ij = min L ( d )
(
d ∈D xi , x j )
. Folosind aceste notaŃii, pentru determinarea matricii DGmin a drumurilor
minine se poate face folosind Algoritmul Wharshal pentru drumuri minime,
adică:
16
Algoritmul 3.
1. Considerăm i = 1 (prelucrăm linia i ), D = P .
2. Dacă i > n , atunci algoritmul se termină şi DGmin = D , altfel se continuă.
3. Pentru fiecare j = 1, 2,..., n se aplică pasul 5.
4. Facem i = i + 1 (trecem la următoarea linie) şi trecem la pasul 2.
5. Dacă d ij = +∞ , atunci se continuă, altfel se înlocuieşte liniei i cu
minimul dintre liniei i şi linia obŃinută din linia j prin adăugarea valorii
dij la fiecare element.
Teorema 2. Dacă G = ( X , U ) este un graf orientat ponderat cu P
matricea ponderilor dată pe mulŃimea de ponderi M şi X = n . Algoritmul 3
producea matricea drumurilor minime din graful G şi are complexitatea O n3 ( )
exprimată ca număr de comparaŃii.
6.3. Algoritmul lui Dantzig pentru drumuri minime
de extremitate iniŃială dată
Construim un tabel în care liniile sunt liniile matricii , notat L = ( Li )1≤i ≤ n , unde Li
este linia i a tabelului La tabelul format se adaugă linia Ln +1 care este transpusa
coloanei n din matricea W .
Etapa 2
Se adaugă tabelului L , liniile suplimentare Li , i = n + 2, n + 3,... , astfel:
a) presupunând completată linia Lk se completează linia Lk +1 conform relaŃiei:
(
Lk +1, j = min Lk , j , min {wk +1,t + Lk ,t } .
t =1,..., n
)
b) se continuă aplicarea punctului (a) până la obŃinerea a două linii Lk şi Lk +1
identice.
Etapa 3
18
Se determină regresiv drumul minim de la xi la x n astfel:
- se adună linia „ i ” din L cu linia Lk +1 urmărindu-se rezultatul minim ce se
poate obŃine. Să presupunem că Lk +1,i = wij + Lk +1,i , atunci primul arc din
drumul minim de la xi la x n este arcul xi , x j ; ( )
- se adaugă linia „ j ” din L cu Lk +1 reŃinând valoare minimă, aflată de
exemplu pe coloana „ k ”, atunci al doilea arc va fi x j , x k ( ) ş.a.m.d. Ultimul
succesor determinat va fi x n .
■
PropoziŃia 1. Pentru orice k ∈ ℕ avem *
19
mij pentru i ≠ j si ( xi , mij , x j ) ∈ U
pij pentru i ≠ j
wij = = 0 pentru i = j .
0 pentru i = j
∞ pentru i ≠ j si ( xi , mij , x j ) ∉ U
Algoritmul 6.
Etapa 1
Se construieşte matricea estinsă a valorilor arcelor W = wij ( ) i , j =1, n
.
relaŃia vk
i+1
+ wki+1ki = vki
Algoritmul prezentat este un algoritm care conŃine o serie de complicaŃii
datorate faptului că s-a dorit să funcŃioneze pentru toate grafurile orientate. Pentru
cazul în care se cunoaşte faptul vă graful G nu conŃine circuite, acest algoritm
poate fi simplificat pentru a se ajunge la următoarea formă.
Algoritmul 7.
1. Se construieşte matricea estinsă a valorilor arcelor W = wij ( ) i , j =1, n
.,
4. Facem înlocuirile A = A ∪ C , B = B \ C .
5. Dacă xn ∉ A atunci se trece la pasul 2, altfel se continuă.
6. Se determină drumul de la x1 la xn plecându-se de la xn , procedând după
(
cum urmează: dacă presupunem că s-a determinat xk , xk ,..., xk = xn ,
i i −1 1 )
partea de la xki la x n a drumului minim. Luăm xk vârful pentru care
i+1
{
3. Considerăm mulŃimea C = x ∈ B ∃y ∈ A, ( y, x ) ∈ U . Pentru orice }
xi ∈ C , facem vi = min {v j + w ji } .
j
x j ∈A
21
6. Se determină drumul de la x1 la xn plecându-se de la xn , procedând după
(
cum urmează: dacă presupunem că s-a determinat xk , xk ,..., xk = xn ,
i i −1 1 )
partea de la xki la x n a drumului minim. Luăm xk vârful pentru care
i+1
( C , C ) ∈V
i j dacă şi numai dacă există x ∈ Ci şi există y ∈ C j astfel încât
22
Etapa 3
3.a) Se consideră x1 ∈ C1 şi x2 ∈ C2 pentru care există ( x1 , x2 ) ∈ U . Găsim în
C1 un drum hamiltonian d1 de extremitate iniŃială x1* şi extremitate finală x1
şi în C2 un drum hamiltonian d 2 de extremitate iniŃială x2 şi extremitate
(
finală x2* . Se foremază astfel drumul hamiltonian d1* = d1 , ( x1 , x2 ) , d 2 ) în
graful parŃial al lui G de vârfuri C1 ∪ C2 . Facem i = 3 .
3.b) Dacă i > r ne oprin, s-a obŃinut drumul hamiltonian, altfel se continuă.
3.c) ( )
Dacă există xi ∈ Ci astfel încât xi*−1 , xi ∈ U atunci se trece la pasul (3.d),
altfel se trece la pasul (3.e).
3.d) Se consideră în Ci un drum hamiltonian d i de extremitate iniŃială xi şi
notăm extremitatea sa finală prin xi* . Am format astfel drumul hamiltonian
(
d i* = d i*−1 , ( xi*−1 , xi ) , di ) în graful parŃial al lui G de vârfuri
C1 ∪ C2 ∪ ... ∪ Ci . Facem i = i + 1 şi mergem la pasul (3.b).
3.e) Fie ei partea din drumul d i*−1 care formează acest drum împreună cu d i −1 .
Fie xi′−1 ∈ Ci −1 şi xi ∈ Ci pentru care ( xi′−1 , xi ) ∈ U . ÎmpărŃim drumul d i −1 în
d i′−1 de extremitate finală xi′−1 şi drumul d i′′−1 de extremitate iniŃială xi′−1 şi
extremitate finală xi*−1 . Considerăm un drum d i′′′−1 care pleacă din xi′−1 , trece
xi*−1 şi apoi prin toate celelante vârfuri care apar în drumul d i′′−1 astfel încât
extremitatea finală a lui d i′′′−1 să fie xi′−1 . Se consideră în Ci un drum
hamiltonian d i de extremitate iniŃială xi şi notăm extremitatea sa finală prin
xi* . Considerăm drumul di* = ( di′−1 , di′′′−1 , ( xi′−1 , xi ) , di ) în graful parŃial al lui
G de vârfuri C1 ∪ C2 ∪ ... ∪ Ci . Facem i = i + 1 şi mergem la pasul (3.b).
■
7.2. Teorema lui Chen
23
Pentru fiecare nod xi notăm cu pi puterea de atingere a vârfului xi , adică
numărul de vârfuri x j pentru care există drum de extremitate iniŃială xi şi
extremitate finală x j .
PropoziŃia 1. Fie G = ( X , U ) un graf orientat şi fără circuite şi
( x , x ) ∈U . Atunci
i j pi ≥ p j , unde pi este gradul de atingere al vârfului xi .
Corolar. Fie G = ( X , U ) un graf orientat şi fără circuite şi care conŃine
un drum de la xi la x j . Atunci pi ≥ p j , unde pi este gradul de atingere al
vârfului xi .
Următoarele rezultate, dintre care primul este cunoscut drept teorema lui
Chen stau la baza algoritmului lui Chen,
Teorema 1. Fie G = ( X , U ) un graf orientat şi fără circuite cu X = n .
G conŃine un drum hamiltonian dacă şi numai dacă are loc relaŃia
n
n ( n − 1)
∑
i =1
pi =
2
unde pi este gradul de atingere al vârfului xi .
Teorema 2. Într-un graf orientat fără circuite, drumul hamiltonian, dacă
există este unic..
Rezultatele prezentate mai sus dau au proces imediat pentru determinarea
drumului hamiltonian într-un graf orientat fără circuite. Prentru acesta vom proceda
după cum urmează:
1. Scriem matricea de adiacenŃă A .
2. Calculăm, prin una din metodele descrise în capitolele anterioare, matricea
drumurilor D . Dacă în această matrice apare cel puŃin o valoare 1 pe
diagonala principală ne oprim pentru că graful G conŃine un circuit şi
teorema lui Chen nu se poate aplica.
3. Se determină puterile de atingere ale vârfurilor ( pi )i =1,2,...,n şi se verifică
n
n ( n − 1)
valoarea de adevăr pentru relaŃia ∑p
i =1
i =
2
. Dacă această relaŃie
25
7.4. Algoritmul lui Fleury pentru drumuri euleriene
{
4. Formăm ciclul Ci +1 = u1i +1 , u2i +1 ,..., uri +1
i +1
} pornin din xi , parcurgând
integral Ci până ajungen din nou la xi şi apoi parcurgând integral Ci*
până se ajunge la xi
5. Facem i = i + 1 şi trecem la pasul (2).
27
ω + (Y ) = {( x , x ) ∈U x ∈ Y , x ∉ Y } ⊂ U .
i j i j
( )
Cantitatea c ω − (Y ) = ∑p ij este capacitatea tăieturii ω − (Y ) .
( )
xi , x j ∈ω− (Y )
∑ ϕ(xk , x j ) = ∑ ϕ(x , xh ) .
n n
Pentru orice xi ∈ X , avem j
k =1 h =1
( )
xk , x j ∈Γ x , x ∈Γ
j h
ObservaŃii.
1. CondiŃia 2) afirmă că pentru orice vârf x cu x ≠ x1 şi x ≠ x n , suma
fluxurilor de pe arcele care intră în x este egală cu suma fluxurilor pe arcele
care ies din x .
2. FuncŃia ϕ nu este unică.
DefiniŃie. Fie G = ( X , U , p ) o reŃea de transport. Un arc xi , x j ∈ U se ( )
numeşte arc saturat, dacă în raport cu ϕ are loc relaŃia ϕ xi , x j = pij . ( )
Se pune problema determinării funcŃiei ϕ astfel încât suma fluxurilor pe
arcele ce intră în x n să fie maximă, aşa-numita problemă a fluxului maxim.
Adică, dintre toate fluxurile ϕ :U → ℝ + posibile în reŃeaua de transport
G = ( X ,U , p ) se urmăreşte să se determine fluxul ϕ̂ pentru care
n n
∑h =1
ϕˆ ( xh , xn ) ≥ ∑
h =1
ϕ ( xh , xn ) .
( xh , xn )∈U ( xh , xn )∈U
PropoziŃia 1. Fie G = ( X , U , p ) o reŃea de transport având sursa x1 ,
destinaŃia x n şi ϕ :U → ℝ + un flux oarecare în reŃeaua G , atunci:
n n
∑ ϕ ( x1 , xi ) = ∑ ϕ ( x j , xn )
i =1 j =1
( x1 , xi )∈U ( x j , xn )∈U
DefiniŃie. Fie G = ( X , U , p ) o reŃea de transport având sursa x1 ,
destinaŃia x n şi ϕ :U → ℝ + un flux oarecare în reŃeaua G . Valoarea
28
Φ= ∑ ϕ ( x j , xn ) = ∑ ϕ ( x1 , xi )
( x j , xn )∈ω − ( xn ) ( x1 , xi )∈ω + ( xi )
se numeşte valoarea totală a fluxului ϕ : Γ → ℝ + .
PropoziŃia 2. Fie G = ( X , U , p ) o reŃea de transport şi fie Y ⊂ X o
submulŃime cu proprietăŃile:
- pentru sursa x1 a lui G avem x1 ∉ Y ;
- pentru destinaŃia x n a lui G avem x n ∈ Y .
Atunci pentru orice flux ϕ :U → ℝ + avem
Φ= ∑ ϕ(xi , x j ) − ∑ (
ϕ(xi , x j ) ≤ c ω = (Y ) . )
( )
xi , x j ∈ω− (Y ) ( )
xi , x j ∈ω+ (Y )
Pasul II
Folosind operaŃiile de marcare ce vor fi prezentate mai jos, se cercetează
dacă fluxul iniŃial ϕ 0 este maxim; operaŃiunile de marcare constau în
următoarele:
a) se marchează sursa reŃelei x1 cu semnul „ + ”;
b) vârfurile x j ∈ ω + ( x1 ) vor fi marcate cu „ + x1 ” dacă arcul x1 , x j ( ) este
nesaturat;
c) dacă vârful x j este deja marcat şi dacă pentru un vârf x k ∈ ω + x j ( ) arcul
(x , x ) este nesaturat, atunci marcăm vârful x
j k k prin „ + x j ”;
d) dacă vârful x j este deja marcat şi dacă pentru un vârf x k ∈ ω − x j ( ) arcul
(x x ) are fluxul nenul, marcăm vârful x
k j k prin „ − x j ”.;
29
În urma terminării operaŃiei de marcare, putem întâlni următoarele
situaŃii:
1. Dacă destinaŃia x n a reŃelei nu s-a marcat, atunci fluxul este maxim şi
algoritmul se termină, altfel se aplică procesul (2) şi se reia pasul II.
2. Dacă destinaŃia x n s-a putut marca, atunci fluxul nu este maxim şi poate fi
măsurat astfel:
a) se alege un drum de la x1 la x n ;
b) pe arcele drumului marcat cu „ + ” fluxul se majorează cu o cantitate θ
de flux (de exemplu θ = 1 );
c) pe arcele drumului marcat cu „-“ fluxul se micşorează cu aceeaşi
cantitate θ ;
d) fluxul arcelor nemarcate nu se schimbă;
Algoritmul are un număr finit de paşi, iar fluxul maxim se atinge când nu mai
poate fi marcată destinaŃia x n a reŃelei.
ObservaŃie. Mărimea fluxului se poate face cu mai mult decât o unitate,
evitându-se astfel prea multe operaŃii de marcare, astfel: se consideră un drum V
format din drumuri marcate cu „+” sau „-“ ce uneşte x1 cu x n , uşor de găsit
urmărind vârfurile marcate în sensul de la x n către x1 . Notăm V + mulŃimea
arcelor ( x, y ) unde y este marcat cu „+” şi V − mulŃimea arcelor ( x, y ) unde y
este marcat cu „-“. Calculăm
θ1 = min+ {c(u ) − ϕ(u )}
u∈V
θ 2 = min− ϕ(u )
u∈V
BIBLIOGRAFIE Obligatorie
30
BIBLIOGRAFIE OpŃiomală
31