Sunteți pe pagina 1din 222

1

TEMA NR. 1
4 martie 2003

1. Un graf se numete rar dac numrul su de muchii m este mai mic dect
n
n
log
2
, unde n reprezint
numrul de vrfuri. O justificare este aceea c matricea de adiacen A a grafului, care ocup n
2

locaii de memorie, poate fi ntotdeauna reprezentat folosind O(
n
n
log
2
) locaii de memorie, astfel
nct rspunsul la o ntrebare A(i, j) = 1 ? s se fac n O(1). Descriei o astfel de schem de
reprezentare.

Soluie:
Avnd n vedere faptul c n matricea de adiacen A a unui graf fiecare element
A(i, j) poate lua doar valorile 0 i 1, este suficient un singur bit pentru a memora aceste informaii.
Pentru reducerea spaiului ocupat de matricea de adiacen se propune urmtoarea schem de
reprezentare:
- matricea A este mprit n matrice ptratice de dimensiune
(
n log X
(
n log ;
- numrul acestor matrice este
(
n
n
log
2
;
- se creeaz o nou matrice ptratic A de dimensiune
( (
n
n
n
n
log log
X ;
- fiecare element al matricei A este o codificare a unei matrice de dimensiune
(
n log X
(
n log
dup cum urmeaz:
o o astfel de matrice are log n elemente ce pot lua doar valorile 0 i 1;
o dac matricea este parcurs pe linii se obine o segven de log n biti;
o fiecare astfel de segven poate fi reprezentarea binar a unui numr ntre 0 i 2
log n
= n;
o fie B o matrice de dimensiune
(
n log X
(
n log obinut prin partiionarea lui A ca
mai sus, cu B(i,j) = A(k
1 (
n log +i, k
2 (
n log +j) i fie s secventa de biti obtinut prin
parcurgerea matricei B pe linii; atunci A(k
1
, k
2
) = m, unde m este numrul a crui
reprezentare binar este s;
o avnd n vedere c reprezentarea binar a numerelor naturale este unic, dac B
1
B
2
,
atunci s
1
s
2
i m
1
m
2
;
- obinerea rspunsului la ntrebarea: A(i, j) = 1 ?: valoarea lui A(i,j) se poate obine din matricea
A astfel:
2
o din modul de partiionare a lui A se constat c elementul A(i,j) se obine din procesarea
elementului A(
(
n
i
log
,
(
n
j
log
);
o reprezentarea binar a elementului A(
(
n
i
log
,
(
n
j
log
)este succesiunea liniilor
matricii B, unde B(p,q) = A(i,j), cu
p = i mod
(
n log i q = j mod
(
n log , adic bitul de pe poziia (i mod
(
n log )*
(
n log + j mod
(
n log din reprezentarea binar a lui A(
(
n
i
log
,
(
n
j
log
),
numrnd de la stnga la dreapta;

Observaie: Avnd n vedere faptul c numnul n nu se mparte ntotdeauna exact la
(
n log , este
posibil ca matricele de la extremitile dreapta, respectiv jos ale matricei A matricele
obinute prin patriionare s nu aib dimensiunile cerute, ci dimensiuni mai mici.
De exemplu, o matrice de dimendiune 5 X 5 trebuie patriionat n matrici de
dimensiune 2 X 2. Coloana a cincea va fi deci mprit n 3 matrice, dou de
dimensiune 2 X 1 i una de dimensiune 1 X 1. Aceste matrice vor fi extinse la matrice
de dimensiune 2 X 2 astfel:
Fie B
1
o matrice de dimensiune 2 X 1 (de exemplu, B
1
(0,0) = A(0,4) i B
1
(1,0) = A(1,4) i
B
2
matricea de dimensiune 2 X 2 la care va fi extins B
1
; atunci B
2
(0,0) = B
1
(0,0), B
2
(1,0)
= B
1
(1,0), iar B
2
(0,1) iB
2
(1,1) pot avea oricare din valorile 0 i 1. B
2
(0,0) B
2
(0,1), B
2
(1,0),
B
2
(1,1) este reprezentarea binar a valorii elementului A(2,0).
Am vzut mai sus cum se face extragerea dintr-un element al lui A a bitului care
reprezint valoarea lui A(i, j). De acolo ne dm seama c nu se va ncerca niciodat
extragerea unui bit care nu corespunde unui element din matricea A, deci valorile
elementelor adugate la extinderea matricelor B nu au importan.
- complexiti:
o matricea A are
(
n
n
log
2
elemente, deci complexitatea spaiu a reprezentrii sale este O(
n
n
log
2
);
o operaiile de calcul al elementului corespunztor lui A(i,j) din A se fac prin efectuarea
unor mpriri sau calcule de resturi, operaii ce necesit timp constant O(1);
o accesul la elementele matricei A se face n timp constant O(1);
o extragerea unui bit din reprezentarea binar a unui element din A se poate face n timp
constant O(1) prin operaii logice pe bii (utilizndu-se eventual o masc);
3
n concluzie,rspunsul la ntrebarea: A(i, j) = 1 ? se poate obine n timp constant
(independent de n) O(1).

2. Diametrul unui graf este lungimea maxim a unui drum de lungime minim ntre dou vrfuri ale
grafului. Dou vrfuri care sunt extremitile unui drum minim de lungime maxim n graf se numesc
diametral opuse. Demonstrai c urmtorul algoritm determin o pereche de vrfuri diametral opuse
ntr-un arbore T :
- Dintr-un vrf oarecare se execut o parcurgere BFS a arborelui; fie u ultimul vrf vizitat;
- Din vrful u se executa o parcurgere BFS a arborelui; fie v ultimul vrf vizitat;
- Return u, v.
Rmne valabil algoritmul pentru un graf conex arecare?

Soluie
1
:

Atunci cnd se aplic BFS unui graf se obine un arbore numit arbore de lime
( care nu parcurge ntotdeauna toate muchiile grafului iniial ). Prin noiunea de arbore de
lime ntelegem un arbore cu rdcina n nodul de start al BFS-ului i care are proprietatea c
drumul de la oricare nod la rdcin este cel mai mic drum dintre cele dou noduri, n graful
iniial. Aceasta nseamn c algoritmul descoper nodurile de la distana k fa de rdcin
nainte s descopere nodurile de la distana k+1. Ultimul nod descoperit de BFS este cel mai din
dreapta nod de pe frontier. n cazul n care graful iniial este arbore, arborele lime va conine
toate muchiile sale ( drumul ntre dou noduri din graful iniial este unic deci, automat, minim).
Primul BFS din algoritmul de mai sus, aplicat pentru un nod de start oarecare din arborele iniial,
se poziioneaz pe cel mai din dreapta nod de pe frontier, notat cu u, iar ultimul nod vizitat de al doilea
BFS este cel mai deprtat nod de u, i anume v. Trebuie s demonstrm c distana de la u la v este de
fapt diametrul arborelui iniial, i anume cel mai lung drum dintre dou noduri ale arborelui.
Pentru simplificare vom considera drumul de la u la v ca fiind de lungime 2L. (cazul cnd acest
drum are lungime impar se trateaz similar). Privim arborele sub alt form : aezm drumul de la u la v
n linie dreapt, ca o ax, iar ceilali subarbori i agm de nodurile de pe ax, n semiplanul superior
determinat de aceasta sau n cel inferior. Considerm w ca fiind un nod aflat la mijlocul drumului dintre u
i v, la distana l de cele 2 noduri.


1
BIBLIOGRAFIE: csce.unl.edu/~vimod/CSCE423/4Sol.pdf
4
Notm cu s nodul ales aleator ca nod de start pentru primul BFS. Observm c s trebuie s fie n
dreapta nodului w, deoarece, dac s ar fi n stnga, am obine drumul de la s la v mai mare dect drumul
de la s la u, ceea ce contrazice ipoteza, ntrucat u era cel mai neprtat nod de s.
Fie T un subarbore pendant dintr-un nod x aflat pe drumul de la u la v, la stnga lui w. Pentru
fiecare astfel de subarbore obinem urmatoarea relaie:
adncime(T) s d(u,x)
Dac aceast relaie nu ar fi adevarat, am obine urmtorul rezultat :
adncime (T) + d(x,s) > d(u,x) + d(x,s).
Deci ar exista un nod z de pe T astfel nct
d(z,x) + d(x,s) > d(u,s) => d(z,s) > d(u,s)
ceea ce contrazice ipoteza c u este cel mai departat nod de s, aa cum am obinut din primul BFS.
Fie T un subarbore pendant dintr-un nod y aflat pe drumul de la u la v, la dreapta lui
w. Pentru fiecare astfel de subarbore obinem urmtoarea relaie:
adncime (T) s d(y,v).
Dac aceast relaie nu ar fi adevrat, am obine urmtorul rezultat :
adncime (T) + d(y,u) > d(u,y) + d(y,v).
Deci ar exista z, un nod de pe T astfel nct d(u,z) > d(u,v) ceea ce contrazice ipoteza c
v este cel mai deprtat nod de u, aa cum am obinut din al doilea BFS, aplicat pentru nodul u .
Deci pentru fiecare x si y alei ca mai sus, i T respectiv T, obinem relaiile:
adncime (T) s d(u,x)
i
adncime (T) s d(y,v)
din care avem
adncime (T) + d(x,w) s d(u,x) + d(x, w) = d(u,w) =L
si
adncime (T) + d(w,y) s d(w,y) + d(y,v) = d(w,v ) = L.
Deci pentru oricare nod z de pe subarborele T obinem d(z,w) s L i pentru oricare nod z de pe
subarborele T obinem d(z,w) s L. Deci
d(z,w) + d(w, z) s 2L, de unde d(z,z) s 2L
oricare ar fi z si z dou noduri aflate pe doi astfel de subarbori ca cei alei mai sus.
5
Dac am alege 2 subarbori pendanti de aceeai parte a lui w am obtine acelai rezultat. De
asemenea este evident c orice dou noduri aflate pe drumul de la u la v au distanta ntre ele mai mic
dect d(u,v).
n concluzie, oricum am alege dou noduri din arbore, drumul dintre ele nu poate fi mai mic dect
drumul de la u la v. Deci distana de la u la v este diametrul arborelui initial (faptul c am impus lungimea
drumului de la u la v ca fiind egala cu 2L nu restrange rezultatul obinut, ntruct, dac acest drum ar
avea lungimea de forma
2L-1, am alege w la distanta L de u si L-1 de v sau invers i am urma aceiai pai ca pentru situaia
anterioar ).
q.e.d.

n cazul n care graful iniial este un graf conex oarecare, algoritmul de mai sus nu mai d
ntotdeauna rspunsul corect, ntruct ntre oricare dou noduri putem avea mai mult de un drum ( deci
putem avea cicluri ) iar arborele lime obinut va pstra numai primele drumuri gsite de la rdcina sa
la celelalte noduri. Pentru oricare dou noduri se va reine numai un drum i acesta difer pentru fiecare
arbore laime obtinut (n funcie de nodul de plecare).
Vom da un exemplu n care, pentru un graf oarecare, n funcie de nodul de pornire i de ordinea
de alegere a nodurilor adiacente, obinem drumuri distincte n arbori de lime diferii, ntre dou noduri,
iar dac vom calcula diametrul dup algoritmul de mai sus vom obine valori diferite.




6
3. Fie T un arbore binar cu rdcin. Un algoritm simplu de desenare a lui T poate fi descris recursiv
dup cum urmeaz.
- Folosim ca suport o grila (limiatura unui caiet de matematic); vrfurile se plaseaza in
punctele de intersecie ale grilei.
- Desenm subarborele stng.
- Desenm subarborele drept.
- Plasm cele dou desene unul lng altul la distana pe orizontala doi i cu rdcinile la aceeasi
nalime.
- Plasm rdcina cu un nivel mai sus la jumtatea distanei pe orizontal dintre cei doi
copii.
- Dac avem doar un copil plasm rdcina cu un nivel mai sus la distana 1 fa de copil.
(la stnga sau la dreapta dup cum este acesta).
Descriei cum se pot asocia pentru fiecare nod v al arborelui T (folosind algoritmul de mai sus )
coordonatele (x(v), y(v)) reprezentnd punctul de pe gril unde va fi desenat.

Soluie:
Fie T un arbore cu n noduri numerotate (pentru simplificare) de la 1 la n. Pentru fiecare nod din
acesta arbore vom memora valoarea sa, legtura ctre printe, catre fiul stang i catre fiul drept.
Dac unul dintre acetia nu exist, legtura va fi NIL.
Se vor mai utiliza de asemenea 4 vectori suplimentari:
- x, unde x*i+ este coordonata pe orizontal a nodului i;
- y, , unde y[i] este coordonata pe vertical a nodului i;
- lrgimeStnga, unde lrgimeStnga*i+ este distana pe x de la i la cel mai din stnga nod al
subarborelui cu rdcina i;
- lrgimeDreapta, unde lrgimeDreapta *i+ este distana pe x de la i la cel mai din dreapta nod al
subarborelui cu rdcina i;

Un algoritm mai detaliat pentru desenarea arborelui este:


procedure DeseneazArbore(T)
begin
/*se pleac din rdcin*/
p T
/*dac nodul curent este frunz*/
7
if (pstnga = NIL and pdreapta =NIL )
/*acesta este desenat iniial n colul din stnga jos, adic la
coordonatele 0, 0*/
x[pval] 0
y[pval] 0
/*largimea stnga/dreapta a unui arbore cu un singur nod este 0*/
lrgimeStnga[pval] 0
lrgimeDreapta[pval] 0
/*dac exist fiu stnga*/
if (pstnga NIL)
then
/*acesta este desenat*/
DeseneazArbore(pstnga)
/*dac fiul stnga este unicul fiu*/
if (p dreapta = NIL)
then
/*nodul este desenat la distan 1 pe orizontal de cel mai din
dreapta nod al subarborelui cu rdcina n fiul su stng (n
dreapta acestuia)*/
x[pval] x[pstngaval]+lrgimeDreapta[pstngaval]+1
/*pe nivelul imediat superior*/
y[pval] y[pstnga val] + 1
/*lrgime stnga este lrgimea totala a subarborelui stng + 1*/
lrgimeStnga[pval] lrgimeDreapta[pstnga val] +
lrgimeStnga[pstnga val] + 1
/*neexistnd subarbore drept, lrgimea dreapta este 0*/
lrgimeDreapta[pval] 0
return
if (p dreapta NIL)
8
/*dac exist fiu dreapta*/
then
/*acesta este desenat*/
DeseneazArbore(p dreapta)
/*dac fiul dreapta este unicul fiu*/
if (p stnga = NIL)
then
/*nodul este desenat la distan 1 pe orizontal de cel mai din
stnga nod al subarborelui cu rdcina n fiul su drept )n stnga
acestuia)*/
x[pval] x[pdreaptaval]-lrgimeStnga[pdreaptaval]-1
/*dac se obin coordonate negative se transleaz ntreg
subarborele astfel nct coordonata minim s fie 0*/
if (x[pval] < 0)
then
TranslOrizontala(p, -x[pval])
y[pval] y[pstnga val] + 1
/*lrgime dreapta este lrgimea totala a subarborelui drept + 1*/
lrgimeDreapta [pval] lrgimeDreapta[pstnga val] +
lrgimeStnga[pstnga val] + 1
/*neexistnd subarbore stng, lrgimea stnga este 0*/
lrgimeStnga [pval] 0
return

/*se aduc rdcinile pe acelai nivel*/
translY = y[p stngaval] - y[p dreaptaval]
/*subarborele cu adncimea mai mica este ridicat la nivelul celuilalt
subarbore*/
if (translY < 0)
then
9
TranslVertical(pstnga, -translY)
else
TranslVertical(pdreapta, translY)
/*rdcina se plaseaz pe nivelul superior*/
y[pval] y[p dreaptaval] + 1

/*subarborii trebuie aezai la distana 2 pe orizontal, deci rdcinile
lor trebuie plasate la distana
lrgimeDreapta[pstngaval] + 2 + lrgimeStnga[p dreaptaval] una de
cealalt*/
translX = x[p stngaval] - x[p dreaptaval] +
lrgimeDreapta[pstngaval] + 2 + lrgimeStnga[p dreaptaval]
TranslOrizontala(p dreapta, translX)
x[pval] (x[p dreaptaval] + x[p stangaval]) / 2
/*lrgime dreapta este lrgimea totala a subarborelui drept + 1*/
lrgimeDreapta [pval] lrgimeDreapta[pstnga val] +
lrgimeStnga[pstnga val] + 1
/*lrgime stnga este lrgimea totala a subarborelui stng + 1*/
lrgimeStnga[pval] lrgimeDreapta[pstnga val] +
lrgimeStnga[pstnga val] + 1
end

procedure TranslOrizontal(T, translX)
begin
if (T NIL)
then
/*translare rdcin*/
x[Tval] x[Tval] + translX
/*translare fii*/
10
TranslOrizontal(T stnga, translX)
TranslOrizontal(T dreapta, translX)
end

procedure TranslVertical(T, translY)
begin
if (T NIL)
then
/*translare rdcin*/
y[Tval] y[Tval] + translY
/*translare fii*/
TranslVertical (T stnga, translY)
TranslVertical(T dreapta, translY)
end


Funcionarea algoritmului:
Soluia prezentat mai sus este un algoritm Divide-et-Impera: pentru un arbore se deseneaz
nti subarborele stng, apoi subarborele drept, dup care se asambleaz cele dou desene.

Pasul de baz:
- fiecrei frunze i se vor atribui iniial coordonatele (0, 0);
- lrgimea unui arbore cu un singur nod este evident 0.

Dac nodul v are doar fiul stng, fie acesta w, el va fi desenat astfel:
- este desenat fiul stng w;
- v trebuie desenat pe nivelul imediat superior, deci y[v] =y[w] + 1;
- v trebuie desenat n dreapta fiului su, la distan 1 pe orizontal fa de acesta, adic la la
distan 1 pe orizontal fa de nodul cel mai din dreapta (dpdv al structurii desenului) din
subarborele cu rdcina w; dup cum am vzut mai sus, distana dintre acesta din urm i w este
11
lrgimeDreapta*w+, deci distana dintre v i w va fi lrgimeDreapta*w++1, iar x*v+ = x*w+ +
lrgimeDreapta*w++1;
- lrgimeDreapta*v+ = 0, deoarece v nu are fiu drept, i din construcie se observ c v este cel mai
din dreapta nod (dpdv al structurii desenului) din subarborele a crui rdcin este.
- , nodul cel mai din stnga al subarborelui cu rdcina v, care este i nodul cel mai din stnga al
subarborelui cu rdcina w se gsete la distana lrgimeStnga*w+ de w, aflndu-se n stnga
acestuia, iar w se afl la lrgimeDreapta*w+ + 1 n stnga lui v.

Dac nodul v are doar fiul drept, fie acesta w, el va fi desenat astfel:
- este desenat fiul drept w;
- v trebuie desenat pe nivelul imediat superior, deci y[v] =y[w] + 1;
- v trebuie desenat n stnga fiului su, la distan 1 pe orizontal fa de acesta, adic la la
distan 1 pe orizontal fa de nodul cel mai din stnga din subarborele cu rdcina w; dup
cum am vzut mai sus, distana dintre acesta din urm i w este lrgimeStnga*w+, deci distana
dintre v i w va fi lrgimeStnga *w++1, iar x*v] = x[w] - lrgimeStnga *w+-1.
- n cazul n care se admit doar coordonate numere naturale iar coordonata x*v+ obinut este
negativ, ntreg arborele va fi translat pe orizontal cu /x[v] /, astfel nct toate coordonatele s
rmn numere naturale; prin urmare, n cazul de fa, x [v]devine 0;
- lrgimeStnga *v+ = 0, deoarece v nu are fiu stng, i din construcie se observ c v este cel mai
din stnga nod (dpdv al structurii desenului) din subarborele a crui rdcin este.
- lrgimeDreapta*v+ = lrgimeDreapta*w+ + lrgimeStnga*w+ + 1, nodul cel mai din dreapta al
subarborelui cu rdcina v, care este i nodul cel mai din dreapta al subarborelui cu rdcina w
se gsete la distana lrgimeDreapta*w+ de w, aflndu-se n dreapta acestuia, iar w se afl la
lrgimeStnga[w] + 1 n dreapta lui v.

Dac nodul v are i fiu stng u, i fiu drept w, el va fi desenat astfel:
- este desenat fiul stng;
- este desenat fiul drept;
- dac y*u+ y[v], atunci unul dintre cei dou subarbori trebuie translat pe vertical pn cnd
rdcina lui are acelai nivel cu rdcina celuilalt. Cum am vyut mai sus, ntotdeauna frunzele
de pe ultimul nivel al unui subarbore terminat au y = 0. Neputnd avea coordonate cu valori
negative, vom transla subarborele mai scund pe vertical pentru a ajunge la nivelul celui mai
nalt. nalimea unui subarbore terminat este chiar y*r+, unde r este rdcina subarborelui;
- subarborii adui la acelai nivel trebuie aezai la distan 2 unul de cellalt. nti vom suprapune
rdcinile, adica translm subarborele drept cu x[u] x[w]. Distana dintre rdcini trebuie s fie
distana dintre u i cel mai din dreapta nod al subarborelui stng plus 2 plus distana dintre u i
cel mai din stnga nod al subarborelui drept, adic vom transla subarborele drept cu
lrgimeDreaptau+ + 2 + lrgimeStnga*w+.
- v trebuie plasat pe nivelul imediat superior lui u, respectiv w, adica y[v] = y[u] + 1 = y[w] + 1;
- v trebuie plasat la jumtatea distanei pe orizontal dintre u i w, adic
x*v+ = (x*u+ + x*w+) /2; dac x*u+ + x*w+ este impar, se va atribui lui x*v+ partea ntreag a
rezultatului mpririi, deoarece sunt acceptate doar coordonate cu valori numere naturale
(nodurile pot fi plasate doar n punctele de intersecie ale grilei;
12
- lrgimeDreapta*v+ = lrgimeDreapta*w+ + lrgimeStnga*w+ + 1 i lrgimeStnga*v+ =
lrgimeDreapta*u+ + lrgimeStnga*u+ + 1 (explicaii similare cu cazurile anterioare).

Exemplu:


4. ntr-o sesiune de examene s-au nscris n studeni care trebuie s susin examene dintr-o mulime de
m discipline. ntruct examenele se susin n scris, se dorete ca toi studenii care dau examen la o
disciplin s fac acest lucru simultan. De asemenea, regulamentul de desfurare a examenelor
interzice ca un student sa dea dou examene n aceeai zi. Pentru fiecare student se dispune de lista
disciplinelor la care dorete s fie examinat.
S se descrie construcia unui graf G care s ofere rspunsul la urmatoarele dou ntrebri prin
determinarea unor parametri asociai (care se vor preciza):
- care e numrul maxim de examene ce se pot organiza n aceeai zi?
- care e numarul minim de zile necesare organizrii tutror examenelor?

Soluie:
ncercarea de a memora ntr-un graf att informaii despre examene ct i despre toi studenii a dus
la concluzia c nu se justific utilizarea unui spaiu att de mare i nici nu au fost gsii algoritmi eficienti
n aceast formul pentru satisfacerea cerinelor.
Prin urmare, am ajuns la ideea s construim un graf n care reinem explicit doar informaii despre
disciplinele de examen i relaiile dintre acestea (relaii ce sunt definite mai jos).
Se construiete deci graful G cu m noduri astfel:
- fiecare nod i corespunde unei discipline de examen;
- ntre nodurile i i j exist muchie dac i numai dac exist un student care dorete s susin
att examenul i ct i examenul j.
Se observ c, dac dou noduri sunt vecine, atunci examenele corespunztoare nu pot fi date n
aceeai zi.
13
Obinerea grafului G definit mai sus din datele de intrare: se face o parcurgere a listei de
studeni i pentru fiecare student se parcurge lista de examene pe care dorete s le susin.
Oricare dou examene din aceast list sunt unite printr-o muchie (evident, dac aceast muchie
nu exist deja).
n continuare, intuitiv, pentru a gsi o posibil aranjare pe zile a examenelor este nevoie s le
mprim n mulimi n aa fel nct ntre oricare dou elemente dintr-o mulime s nu existe muchie n
graful G ( acest lucru ar nsemna c nu exist un elev care dorete s susin ambele examene ). Numrul
de mulimi reprezint numrul de zile n care au fost programate examenele, iar numrul de elemente ale
fiecrei mulimi este numrul de examene programate ntr-o anumit zi. Aceste mulimi trebuie s
formeze o partiie a mulimii de examene ( deci s fie disjuncte i reunite s dea mulimea iniial de
examene ). n general exist mai multe posibile aranjri ale examenelor .
Observm c, respectnd ipoteza (un student poate da cel mult un examen pe zi) i avnd n vedere
construcia grafului G, a mpri pe zile examenele este echivalent cu a colora graful G definit mai sus,
iar a gsi un grup de examene ce pot fi susinute n aceeai zi este echivalent cu a gsi n graful G un
sistem de puncte independente.
Pentru a afla aranjarea optim avem de fapt nevoie de numrul minim de astfel de mulimi, adic
numrul minim de zile i de maximul dintre cardinalele lor, adic de numrul maxim de examene ce pot fi
programate ntr-o zi. Numrul minim de mulimi reprezint numrul minim de culori cu care poate fi
colorat graful. Aadar, numrul cromatic _(G) este numrul minim de zile n care se pot desfura
examenele. Numrul maxim de examene ce pot fi programate ntr-o zi reprezint maximul dintre
cardinalele mulimilor stabile i prin urmare, este numrul de stabilitate al lui G, o(G).

Exemplu :
Lista de elevi i disciplinele la care dorete fiecare elev s susin examen:
elev 1: d1, d3; elev 2: d4; elev 3: d3, d4; elev 4: d2, d3; elev 5: d2, d4; elev 6: d1, d5.
Construim graful dup metoda de mai sus.





Observm c numrul cromatic _(G)=3 i
numrul de stabilitate al lui G, o(G)=2. Deci
avem minim 3 zile i maxim 2 examene pe zi.
O posibil aranjare a examenelor ar fi:
Ziua 1: d3, d5;
Ziua 2: d1, d2
Ziua 3: d4.

14
TEMA NR. 2
11 martie 2003


1. Fie G = (S, T; E) un graf bipartit i X e {S, T}.
Graful G se numete Xlan dac vrfurile mulimii X pot fi ordonate X = {x
1
, x
2
,.,x
p
} (unde p
=|X|) astfel nct N
G
(x
1
) _ N
G
(x
2
) _ .. _ N
G
(x
p
).
a) Demonstrai c G este X lan dac i numai dac este X lan, unde X = {S, T } {X}.
b) Dac G (bipartit) este reprezentat cu ajutorul listelor de adiacen, are ordinul n i dimensiunea
m descriei un algoritm cu timpul O (n + m ) care s testeze dac G este Slan.

Soluie:
a) Vom demonstra echivalena celor dou relaii demonstrnd c cele dou relaii sunt
echivalente cu o a treia, i anume c G este X-lan dac i numai dac G este 2K
2
-free( unde X este o
mulime dintre S i T).
Implicaia direct:
Dac G este X- lan, atunci este K
2
-free.
Reducere la absurd:
Presupunem c G nu este 2K
2
-free. Atunci 2K
2
este subgraf indus al grafului G. (n schema de
mai jos, de observ c graful G cu nodurile n1, n2, n3 i n4 este subgraf indus n G).
15

Aadar, nu exist muchie de la n2 la n3 sau de la n1 la n4 n graful G. Deci n3 nu este inclus n
mulimea vecinilor lui n2 i n4 nu este inclus n mulimea vecinilor lui n1 (analog n1 nu este inclus n
mulimea vecinilor lui n4 i n2 nu este inclus n mulimea vecinilor lui n3 ) . Deci:
N
G
(n1). N
G
(n2) i N
G
(n2). N
G
(n1)
respectiv
N
G
(n3) . N
G
(n4) i N
G
(n4) . N
G
(n3).
Prin urmare, dac 2K
2
este subgraf indus n G, exist dou noduri i i j din X pentru care N
G
(i) i
N
G
(j) sunt incomparabile dup relaia de incluziune ( indiferent dac X este S sau T ). n consecin, G nu
este X-lan, ceea ce contrazice ipoteza. nseamn c presupunerea de la care am plecat este fals, deci G
este 2K
2
-free.

Implicaia invers:
Dac G este 2K
2
-free, atunci G este X-lan ( unde X este S sau T ).
Din definiie rezult c G este X-lan dac i numai dac relaia de incluziune din enun este
relaie de ordine total pe mulimile de adiacen ale nodurilor din X, cu X e ,S, T- ( adic oricare dou
mulimi sunt comparabile ) .
Faptul c G este X-lan este deci echivalent cu faptul c relaia de incluziune este relaie de
ordine total peste mulimea ,N
G
(i)| i e X}.
16
Reducere la absurd:
Presupunem c relaia de incluziune nu este relaie de ordine total peste mulimea ,N
G
(i)| i e
X-, adic exist dou noduri x
1
i x
2
din X pentru care N
G
(x
1
) i N
G
(x
2
) nu sunt comparabile, adic
- y
1
e N
G
(x
1
) astfel nct y
1
e N
G
(x
2
)
i
- y
2
e N
G
(x
2
) astfel nct y
2
e N
G
(x
1
).

Graful de mai sus este un subgraf indus n G (deoarece, conform celor menionate mai sus, nu
exist n G muchiile (x
1
, y
2
) respectiv (x
2
, y
1
); de asemenea, G fiind bipartit, nu exist muchiile (x
1
, x
2
)
respectiv (x
2
, y
1
)). Totodat, este un graf 2K
2.
Cum n ipotez se specifica c graful este 2K
2
-free,
nseamn c am ajuns la un rezultat care contrazice ipoteza. Deci presupunerea iniial este fals i
putem spune c avem ordine total ntre mulimile de adiacen.
Conform implicaiei directe i cele inverse, am obinut c un graf este X-lan dac i numai dac
este 2K
2
-free, unde X este oricare dintre cele dou mulimi S i T.
Dac avem G S-lan, obinem conform rezultatului de mai sus c G este 2K
2
-free i conform
aceluiai rezultat avem G T-lan. Dac pornim cu G T-lan obinem la fel ca mai sus c G S-lan. Deci am
demonstrat c G este S-lan dac i numai dac este T-lan.
q.e.d.

b) Vom nota p
1
=|S| i p
2
=|T| astfel inct p
1
+ p
2
=n. Mulimea S este format din elemente x
i
,
unde i este un numr ntre 1 i p
1
iar mulimea T, din elemente x
j
, unde j este un numr ntre p
1
+1 i n.

I. Iniial, vom parcurge lista nodurilor din S (n cazul nostru, primele p
1
noduri din list ) i
pentru fiecare nod numrm nodurile aflate n lista sa de adiacen.
Vom reine rezultatele ntr-un vector V de dimensiune p
1
n urmtoarea form: fiecare element
al lui V este o structur format din dou cmpuri: unul n care reinem indicele nodului i altul care
memoreaz lungimea listei de adiacen a nodului respectiv.
.

17
Aceast etap are loc n O(m), ntruct se parcurg toate muchiile grafului G o singur dat (
avem muchii numai ntre nodurile din S i nodurile din T, nu i ntre nodurile aceleiai mulimi, deci nu
avem posibilitatea de a gasi alte muchii n partea cealalt a listei de noduri).

II. Vom ordona vectorul V dup valoarea celui de-al doilea cmp al fiecrui element, adic dup
lungimea listei de adiacen. ntruct ne aflm ntr-un caz particular (aceste valori sunt ntregi, cuprinse
ntre 0 i p
2
), putem folosi sortarea prin numrare, de complexitate O(p
1
+ p
2
) = O(n).

procedure SortarePrinNumrare(V)
begin
for i0 to p
2
-1 do
C*i+0
/* folosim vectorul C pentru stocarea temporar a datelor */
/*C are dimensiunea egal cu numrul de noduri din T, adic p
2
*/
for i0 to p
1
-1do
C*V*i+.dim_lista+C*V*i+.dim_lista++1
/*pentru fiecare element din V, dac V*i+.dim_lista = j, atunci C*j+ este incrementat; la
acest pas se marcheaz care elemente din C se gsesc n V i de cte ori*/
for i1 to p
1
-1 do
C*i+C*i++C*i-1]
/*n C[i] acum memorm cte elemente mai mici sau egale cu i se gsesc n V, deci pe
ce poziie trebuie s se gseasc i n vectorul final*/
for i p
1
-1 downto 0 do
/*elementul i din V se aeaz n B pe poziia indicat n vectorul C*/
B[C[V[i]. dim_lista] 1+ V*i+
/*o valoare deja procesat nu va mai fi luat n considerare:*/
C*V*i+. dim_lista+ C*V*i+. dim_lista+-1
end
18

n B am obinut rezultatul final, i anume, nodurile din S ordonate cresctor dup numrul
nodurilor din listele lor de adiacen. Totodat, ntruct ordonarea prin numrare este stabil, dac
dou noduri au cardinalele mulimilor de adiacen egale, atunci se afl n vectorul B n ordinea n care se
aflau n mulimea S.
III. n continuare, trebuie s verificm dac mulimea de adiacen a nodului de pe poziia i din B
este inclus n mulimea de adiacen a nodului de pe poziia i+1, cu i de la 0 la p
1
-1. Aceast verificare
se face ntr-o structur repetitiv n cadrul creia avem un fel de interclasare ntre listele de adiacen ale
nodurilor de pe poziiile B*i+ i B*i+1+ ( se presupune c n listele de adiacen nodurile au fost introduse n
ordine cresctoare ).
Algoritmul de verificare este:

function VerificareIncluziune(G, B)
begin
for i0 to p
1
- 2 do
L1 m*B*i++
L2 m*B*i+1++
/*m este vectorul de pointeri la listele de adiacen corespunzatoare nodurilor */
/*ct timp nu am epuizat nc lista mai mic*/
while L1 NULL do
/*verificm dac nodurile din L2 se gsesc n L1;
am pus condiia ca nodurile s fie n lista de adiacen n ordinea cresctoare a
indicelui*/
while L1indice > L2indice do
L2 L2leg
if L1 indice = L2 indice then
L1 L1leg
L2 L2leg
else
19
G nu este S-lan
return 0
return 1
end

De fiecare dat, n cazul cel mai nefavorabil, n cadrul for-ului se face o parcurgere a listei de
adiacen a nodului de pe poziia B*i+ ( n timp O(N
G
(B[i])) ) i a listei de adiacen a nodului de pe poziia
B[i+1] ( n timp O(N
G
(B[i+1])) ). Mai exact, n cazul cel mai nefavorabil, lista de adiacen a nodului din
B*0+ este parcurs o dat, listele de adiacen ale nodurilor din B*i+, cu i de la 1 la p-2 sunt parcurse de
dou ori, iar lista de adiacen a nodului din B*p-1+ este parcurs o dat. tim c lungimea total a
listelor de adiacen ntr-un graf este de ordinul numrului de muchii.
n total avem:
O(N
G
(B[0]))+ O(N
G
(B[1])) + O(N
G
(B*1+))+ + O(N
G
(B[p
1
-2]))+ O(N
G
(B[p
1
-1])) = O(N
G
(B[0])) + 2 (
O(N
G
(B*1+))++ O(N
G
(B[p
1
-2])) ) + O(N
G
(B[p
1
-1])) < O(2m).
Deci putem spune c aceast parte a algoritmului este de complexitate O(m).

Aadar:
- determinarea lungimii listelor de adiacen se execut n O(m);
- ordonarea mulimilor de adiacen n ordinea cresctoare a cardinalelor lor are complexitatea
O(n) ;
- verificarea relaiei de incluziune ntre oricare dou mulimi N
G
(i), N
G
(j), pentru care i i j sunt
vecine n vectorul B are complexitatea O(m).
Complexitatea algoritmului este n consecin O(n+ 2m) = O(n + m).





20
2. Un graf G se numete autocomplementar dac este izomorf cu complementul su: G G ~ .
a)Demonstrai c un graf autocomplementar este conex i c ordinul su este multiplu de 4 sau
multiplu de 4 plus 1.
b)Demonstrai c pentru orice graf G exist un graf autocomplementar H astfel nct G este subgraf
indus n H.
c)Determinai toate grafurile autocomplementare cu cel mult 7 vrfuri.

Soluie:
a)Ordinul lui G este multiplu de 4 sau multiplu de 4 plus 1:
Fie G: ( V(G), E(G)) i G : (V( G ), E( G )). Evident, V(G) = V( G ) = V.
G i G sunt izomorfe, deci, prin definiie, exist o funcie + : |E(G)| |E( G )| bijectiv; aadar
numrul de muchii din G este egal cu numrul de muchii din G , adic |E(G)| = |E( G )|.
Din definiia lui G ,
E( G ) = P
2
(V) E(G), P
2
(V) =
2
) 1 ( n n
,
deci
|E(G)| = |E( G )|= 2
1
|P
2
(V) |=
4
) 1 ( n n
,
unde n este ordinul lui G.
Cardinalul unei mulimi este numr natural, deci este necesar ca n(n-1) s fie divizibil cu 4. Cum n
i n-1 sunt numere consecutive i deci nu pot fi ambele pare, rezult c:
- n divizibil cu 4, deci n are forma 4k, k e N* (mulimea vrfurilor unui graf este prin definiie
nevid, deci nu vom lua n considerare cazul k = 0)
sau
- n-1 divizibil cu 4, deci n are forma 4k+1, k e N.

G este conex:
Reducere la absurd:
Presupunem c exist G
1
: (V(G
1
), E(G
1
)) i G
2
: (V(G
2
), E(G
2
)) dou subgrafuri ale lui G, cu V(G
1
)
V(G
2
) =u , i cu proprietatea c G este reuniunea disjunct a celor dou grafuri. Evident, un astfel de
graf nu este conex.
21
Presupunem c ordinul lui G
1
este t iar ordinul lui G
2
este n t (unde n este ordinul lui G).
Presupunem t n t.
Atunci, n graful complementar G , fiecare nod din G
1
va fi unit printr-o muchie cu fiecare nod din
G
2
. Deci vor exista t noduri cu gradul cel puin n - t i n - t noduri cu gradul cel puin t.
G G ~ deci exist o funcie : V(G) V( G ) bijectiv astfel nct
funcia + : |E(G)| |E( G )| definit prin :e = uv e E(G) , +(uv) = (u) (v) este bine definit i
bijectiv.
Aadar, dac n G exist k muchii incidente cu nodul u, atunci n G exist exact k muchii
incidente cu (u).
Prin urmare, + fiind bijectiv, este necesar ca i n G s existe t noduri distincte cu gradul cel
puin n - t i n - t noduri cu gradul cel puin t. Dar cel mai mare grad posibil pentru un nod n graful G este
t -1, deoarece:
- n graful G nu exist muchii ntre nodurile din G
1
i cele din G
2
;
- am convenit c t n t, cu t =|G
1
| i n - t =|G
2
|;
- pentru un nod dintr-un graf (nu multigraf) cu k noduri pot exista cel mult
k 1 muchii incidente, deoarece acesta poate avea cel mult k 1 vecini;
Dar t 1 < t, deci nu exist n G noduri cu gradul cel puin t. Aadar, G i G nu pot fi izomorfe.
n concluzie, orice graf autocomplementar este n mod necesar conex.

b)Fie G un graf cu |V(G) | = n i |E(G) |= m.
Vom arta c putem construi ntotdeauna un graf H astfel nct G s fie subgraf indus n H i H s
fie autocomplementar.
De la a) rezult c orice graf autocomplementar are multiplu de 4 sau multiplu de 4 plus 1 noduri.
Vom construi un graf H care conine N = 4n noduri astfel:
-fie G
1
= G, G
2
= G , G
3
=G , G
4
= G;
-H
1
= (G
1
+ G
2
) (G
3
+ G
4
);
-H
2
= G
1
(G
2
+ G
3
) G
4
;
-H = H
1
H
2
.
Paii construciei grafului H:
-se pornete de la cele 4 grafuri:
22

-se construiete H
1
adugndu-se toate muchiile posibile ntre G
1
i G
2
, respectiv ntre G
3
i
G
4
:

-se construiete H
2
adugndu-se toate muchiile posibile ntre G
2
i G
3
:

-se construiete H ca fiind reuniunea dintre H
1
i H
2
:

Vom demonstra acum c H respect condiiile din cerin.
23
Din construcie se observ c ntr-adevr G este subgraf indus n H, deoarece nu s-au adugat
muchii n interiorul grafurilor G
1
, G
2
, G
3
, G
4
, ci numai ntre aceste grafuri, iar G
1
i G
4
sunt copii izomorfe
ale lui G.
Numrul M de muchii ale lui H este:
M = |E(G
1
)|+ | E(G
2
)|+ |E(G
3
)|+ |E(G
4
)|+
=
+ e e e
3
1
1)} ( ), ( | ) ( } , {{
i
i i G V v G V u H E v u

adic M este suma dintre numrul de muchii al grafului G
i
, cu i de la 1 la 4, la care se adun muchiile
adugate ulterior ntre aceste grafuri.
tim c:
|E(G
1
)| = |E(G
4
)|= |E(G)|=m
|E(G
2
)| = |E(G
3
|= |E( G )|=
m
n n

2
) 1 (

Notm numrul de muchii adugate ntre G
i
i G
i+1
cu M
i,i+1
. Atunci:
M
1,2
= M
2,3
= M
3,4
= |V(G)|
2
= n
2
Deci:
M = m+(
m
n n

2
) 1 (
)+ m+(
m
n n

2
) 1 (
)+ n
2
+ n
2
+ n
2
=4n
2
n = n(4n-1)
M=
4
) 1 (
4
) 1 4 ( 4
=
N N n n

Noul graf H este conex, indiferent dac G este sau nu conex, fapt care reiese de asemenea din
construcie.
Aadar, graful H indeplinete dou condiii necesare (dar nu i suficiente) pentru
autocomplementaritate.
Pentru a demonstra c H este ntr-adevr autocomplementar, com construi complementarul su
H :
24

H se construiete astfel:
-V( H ) = V(H)
-E( H ) = P
2
(V(H)) E(H).
nlocuind muchiile din G
1
, respectiv din G
4
, cu toate celelalte muchii posibile ntre nodurile lui G
1
,
respectiv ale lui G
4
se obine 1 G , respectiv 4 G , adic dou copii izomorfe ale lui G . Analog, nlocuind
muchiile din G
2
, respectiv din G
3
, cu toate celelalte muchii posibile ntre nodurile lui G
2
, respectiv ale lui G
3

se obine 2 G , respectiv 3 G , adic dou copii izomorfe ale lui G.
ntre nodurile lui G
1
i cele ale lui G
2
nu vom avea nici o muchie, deoarece toate muchiile posibile
ntre aceste noduri apar n E(H). Analog pentru G
2
i G
3
, respectiv pentru G
3
i G
4
. Vor aprea n schimb n
E( H ) toate muchiile posibile dintre nodurile subgrafurilor 1 G i 4 G , 1 G i 3 G , respectiv 2 G i 4 G .
Studiind subgrafurile H i H vom constata c ele au aceeai structur:

deci sunt izomorfe. Ca o observaie, n schema de mai sus, H este o rotire cu 90 de grade a lui H.

Izomorfismul se poate constata i din studiul matricelor de adiacen ale grafurilor H i H .
25
Vom prezenta mai jos algoritmul de construcie a matricei de adiacen a grafului H.



procedure ConstruieteGrafAutocomplementar(G)
begin
/*dac graful G are n vrfuri, graful H va avea 4n vrfuri*/
n |V(G)|
V(H) = ,0, 1, , 4n - 1}
/*fie AG matricea de adiacen a grafului G i AH matricea de adiacen a grafului H*/

/*n V(H), nodurile de la 0 la n-1 corespund nodurilor din G
1
(= G)*/
/*nodurile de la n la 2n-1 corespund nodurilor din G
2
(= G)*/
/*nodurile de la 2n la 3n-1 corespund nodurilor din G
3
(= G)*/
/*nodurile de la 3n la 4n-1 corespund nodurilor din G
4
(= G)*/

/*prin urmare se va copia matricea de adiacen a grafului G pe poriunea corespunztoare
interseciei coloanelor 0, ... , n-1 cu liniile 0, ..., n-1, respectiv pe poriunea corespunztoare
interseciei coloanelor 3n, ... , 4n-1 cu liniile
3n, ..., 4n-1*/
for (i 0 to n-1) do
for (j 0 to n-1) do
AH(i, j) AG(i, j)
for (i 3n to 4n-1) do
for (j 3n to 4n-1) do
AH(i, j) AG(i mod n, j mod n)
26
/*analog, se va copia matricea de adiacen a grafului pe poriunea corespunztoare
interseciei coloanelor n, ... , 2n-1 cu liniile n, ..., 2n-1, respectiv pe poriunea corespunztoare
interseciei coloanelor 2n, ... , 3n-1 cu liniile 2n, ..., 3n-1*/
/*matricea de adiacen a grafului se obine din matricea lui G nlocuindu-se peste tot 0 cu
1 i 1 cu 0 (se inlocuiesc muchiile din G cu toate celelalte muchii din K
n
)*/
for (i n to 2n-1) do
for (j n to 2n-1) do
AH(i, j) 1 - AG(i mod n, j mod n)
for (i 2n to 3n-1) do
for (j 2n to 3n-1) do
AH(i, j) 1 - AG(i mod n, j mod n)
/*toate nodurile lui G
1
sunt legate de toate nodurile lui G
2
, deci pe poriunea corespunztoare
interseciei coloanelor n, ... , 2n-1 cu liniile 0, ..., n-1, respectiv pe poriunea corespunztoare
interseciei coloanelor 0, ... , n-1 cu liniile
n, ..., 2n-1 toate elementele matricei vor avea valoarea 1*/
for (i 0 to n-1) do
for (j n to 2n-1) do
AH(i, j) 1
AH (j, i) 1
/*toate nodurile lui G
2
sunt legate de toate nodurile lui G
3
, deci pe poriunea corespunztoare
interseciei coloanelor 2n, ... , 3n-1 cu liniile n, ..., 2n-1, respectiv pe poriunea corespunztoare
interseciei coloanelor n, ... , 2n-1 cu liniile 2n, ..., 3n-1 toate elementele matricei vor avea
valoarea 1*/
for (i n to 2n-1) do
for (j 2n to 3n-1) do
AH(i, j) 1
AH(j, i) 1
/*toate nodurile lui G
3
sunt legate de toate nodurile lui G
4
, deci pe poriunea corespunztoare
interseciei coloanelor 3n, ... , 4n-1 cu liniile 2n, ..., 3n-1, respectiv pe poriunea
27
corespunztoare interseciei coloanelor 2n, ... , 3n-1 cu liniile 3n, ..., 4n-1 toate elementele
matricei vor avea valoarea 1*/
for (i 2n to 3n-1) do
for (j 3n to 4n-1) do
AH(i, j) 1
AH(j, i) 1
/*n rest vom pune peste tot valoarea 0*/
for (i 0 to n-1) do
for (j 2n to 4n-1) do
AH(i, j) 1
AH(j, i) 1
for (i n to 2n-1) do
for (j 3n to 4n-1) do
AH(i, j) 1
AH(j, i) 1
end
Complexitatea algoritmului de mai sus este O(n
2
).
Schematic, matricea de adiacen a grafului H va avea forma:
28

Se observ c exist o bijecie de la V(H) la V( H ) astfel nct s existe o funcie +: E(H) E(
H ) bine definit i bijectiv. Aceast funcie poate fi:
(i) = i + n, pentru 0 i n 1;
i + 2n, pentru n i 2n 1;
i - 2n, pentru 2n i 3n 1;
i - n, pentru 3n i 4n 1.
q.e.d.
Observaii:
Pot exista grafuri care ndeplinesc cerinele i au ordinul mai mic dect 4n. Algoritmul de mai sus
nu construiete n mod obligatoriu cel mai mic graf H autocomplementar cu proprietatea c G este
subgraf indus n H.
Chiar graful G ar putea fi autocomplementar i ar respecta cerinele de mai sus, ns
complexitatea algoritmului de verificare este mult mai mare.

Exemplu:
Fie graful G = K
2
.
Cel mai mic graf autocomplementar n care G este subgraf indus este P
4
:
29

Algoritmul de mai sus nu va gsi acest graf, ci va construi graful H urmtor:


c)De la a) rezult c grafurile autocomplementare cu cel mult 7 vrfuri pot avea 1, 4 sau 5 vrfuri i
c trebuie s fie conexe.

Grafuri autocomplementare cu un vrf: - G
Grafuri autocomplementare cu 4 vrfuri (P
4
):

Grafuri autocomplementare cu 5 vrfuri:
30









3. O echip de doi programatori L(azy) i T(hinky) primete ca sarcin s determine un drum ntre
dou noduri care s satisfac anumite cerine, ntr-un graf G dat, despre care se tie c este rar: |E (G)|
= O (|G|). Programatorul L propune ca soluie generarea (cu backtracking) a tuturor drumurilor dintre
cele dou noduri i selectarea celui convenabil, aducnd ca argument faptul c ntr-un astfel de graf nu
pot exista prea drumuri ntre dou noduri fixate (sunt puine muchii i deci puine posibiliti de
ramificare ; de exemplu, ntrun arbore exist exact un drum ntre orice dou noduri fixate).
Programatorul T nu este de acord i d urmtorul contraexemplu:se consider graful H = K
2
X P
n-1
(n un
ntreg mare); o pereche de vrfuri de grad 2 adiacente din H se unete cu un vrf nou x, iar cealalt
pereche de vrfuri de grad 2 adiacente din H se unete cu un vrf nou y; graful obinut, G , are
proprietile din problema de rezolvat i totui numrul drumurilor de la x la y n G este prea mare.
Ajutai-l pe L s neleag contraexemplul, desenndu-i graful G artnd c este rar i estimnd numrul
drumurilor de la x la y.

31
Soluie:
Se consider graful H ca fiind produsul dintre graful K
2
i graful P
n-1
(H = K
2
X P
n-1
).

K
2
:
P
n-1
:

Graful H obinut este graful scar:

Pentru a obine graful G, o pereche de vrfuri de grad 2 adiacente din H se unesc cu un
nou vrf x iar o alt pereche de astfel de vrfuri se unete cu un nou vrf y. Graful nou obinut
este graful de mai jos ( dup renotarea nodurilor ) :

Observm c graful G are 2(n - 1) + 2 = 2n noduri. Vom calcula numrul de muchii din G (|E(G)|)
pentru a putea hotr dac este ntr-adevr graf rar aa cum susine programatorul Thinky. Facem
urmtoarele observaii:
- poriunea superioar a grafului G, alcatuit din nodurile de la 1 la n-1 cuprinde un total de n-
2 muchii ( acestea formnd de fapt chiar graful P
n-1
). Acelai lucru l putem spune i despre
poriunea inferioar a grafului, format din nodurile de la n la 2n-2.
32
- ntre nodurile de la 1 la n-1 i cele de la n la 2n-2 sunt exact n-1 muchii ( fiecare nod din
primul grup este legat de cte un nod din al doilea grup prin exact o muchie; mai exact,
avem exact cte o muchie ntre nodurile i i
2n 1 i, cu i de la 1 la n - 1 ).
- la aceste muchii se mai adaug i cele 4 muchii obinute prin adugarea la H a nodurilor x i
y ( muchiile de la 2n-2 i 1 la x, muchiile de la n-1 i n
la y ).
Aadar, n total se obin
2(n-2) + (n-1) + 4 =3n - 1 muchii.
ntruct 3n+1 este de ordinul lui n la fel ca i 2n ( numrul de noduri ) putem spune c numrul
de muchii este de ordinul numrului de vrfuri, deci graful G este ntr-adevr un graf rar.

Vom calcula acum numrul drumurilor dintre x i y. Vom demonstra prin inducie c pentru
graful de mai sus exist 2
n
astfel de drumuri.
33
Etapa I:
Pentru n = 2 graful G are forma urmtoare:



Pentru n = 3 graful G are forma:

Exist 8 (= 2
3
) drumuri n acest graf ntre x i y. Acestea sunt:
-x 1 2 y;
-x 1 2 3 y;
-x 1 4 3 y;
-x 1 4 3 2 y;
-x 4 3 y;
-x 4 3 2 y;
-x 4 1 2 y;
-x 4 1 2 3 y.

Etapa a II-a:
Presupunem afirmaia adevrat pentru k n i demonstrm c este adevrat pentru k = n+1.

Se consider un graf G
n
cu 2n noduri i un graf G
n+1
cu 2n+2 noduri.
Exist 4 (= 2
2
) drumuri n acest graf ntre x i y. Acestea sunt:
-x 1 y;
-x 1 2 y;
-x 2 1 y;
-x 2 y.

34




Fie n graful G
n
un drum arbitrar care ajunge pe unul din nodurile de pe muchia (n-1, n) (fr s fi
trecut prin cellalt nod al muchiei).

Se observ c exist dou posibiliti de a continua acest drum pentru a ajunge la y:

35




Din ipoteza inductiv rezult c n graful G
n
exist 2
n
drumuri de la x la y. Cum fiecare astfel de
drum, o dat ajuns ntr-o extremitate a muchiei (n-1, n) fr s fi trecut prin cealalt extremitate, are
dou posibiliti de a se continua, nseamn c exist 2
n-1
drumuri de la x la o extremitate a muchiei (n-
1, n) care nu parcurg aceast muchie.

Privind acum graful G
n+1
, observm c, plecnd dintr-o extremitate a muchiei
(n-1, n+2), exist 4 posibiliti de a continua drumul spre y:


36


Dar, aa cum am vzut mai sus, toate drumurile posibile de la x la o extremitate a muchiei (n-1,
n+2) sunt n numr de 2
n-1
, i pentru fiecare astfel de drum avem 4 posibiliti de a l continua pentru a
ajunge la y.

Aadar, numrul total de drumuri de la x la y n graful G
n+1
este 2
n-1
* 4 = 2
n+1
.
q.e.d.

Am artat deci c neN, ntr-un graf rar G de forma de mai sus cu 2n noduri exist dou noduri
x i y ntre care numrul de drumuri este 2
n
. Un algoritm backtracking de cutare a celui mai scurt drum
ntre x i y ar fi deci ineficient.







37
4. Presupunem c un turneu ( digraf cu proprietatea c orice dou vrfuri sunt unite printr-un arc ) are
un circuit C de lungime n>3. Artai c pentru orice vrf x al lui C se pot determina n timpul O(n), nc
dou vrfuri ale lui C, y i z, astfel inct (x, y, z) este un circuit de lungime 3.

Soluie:
Presupunem c avem un circuit de lungime n ntr-un graf G i separm aceste vrfuri i arcele
care le leag de restul grafului. Notm graful astfel obinut cu H.
Graful H este tot turneu, deoarece se pstreaz proprietatea oricare dou noduri din H sunt unite
prin exact un arc.
Notm vrfurile care alctuiesc circuitul cu x
k
, unde k este un numr ntre 1 i n. Considerm
aceste noduri ca fiind aezate ntr-o list circular, astfel nct pentru orice vrf x
k
putem gsi imediat
succesorul x
k
(unde k = (k + 1) mod n). n continuare vom desena acest circuit, fr a desena i toate
arcele care leag aceste noduri. Desenm un arc numai n momentul cnd acesta este important n
tratarea algoritmului.


Problema se rezolv astfel:
- se consider cele dou noduri de mai sus, succesoare ale nodului x
k
. tim c avem arc de la x
k
la
x
k+1
i de la x
k+1
la x
k+2.
. Dac am avea arc i de la x
k+2
la x
k
,

am obine un circuit ntre cele trei
noduri.
Din circuitul C se alege un

vrf x
k
(k ntre 1 i n) pentru care
trebuie s gsim alte dou vrfuri cu care s formeze un
circuit de dimensiune 3. Prin vrfurile
x
k+1
i x
k+2
inelegem vrfurile succesoare nodului x
k
, din
ciclul C.
38

- cnd nu exist acest arc, nseamn c avem arc de la x
k
la x
k+2.
(ntruct graful iniial este turneu,
deci ntre oricare dou noduri exist exact un arc; dac nu exist arc ntr-o direcie, cu siguran
exist arc n cealalt direcie) ceea ce duce la obinerea unui ciclu format din n-1 noduri ( se
exclude nodul x
k+1
iar succesorul lui x
k
n list devine x
k+2
). n continuare se aplic din nou pasul
anterior, de aceast dat avnd ca succesori ai lui x
k
pe x
k+2
i x
k+3
.


- algoritmul continu n aceasta manier, reducndu-se de fiecare data numrul de noduri din ciclul
iniial. n cel mai ru caz se reduc n-3 noduri i cu siguran cele 3 noduri obinute n final sunt
nodurile x, y i z.

De fapt, algoritmul se reduce la fiecare pas la verificarea existenei unui arc ntre dou noduri,
operatie care se face n O(1). Dac exist arcul convenabil ( arc de la nodul x la succesorul succesorului lui
x n ciclul de la pasul curent ) algoritmul se oprete. Altfel, algoritmul continu i n cel mai ru caz se fac
n-3 verificri de existen a arcelor, fiecare n O(1). Deci aceste operatii se fac n O(n).
Dup ultima verificare, n cazul cel mai nefavorabil, am ajuns la un triunghi format din x i primii
doi predecesori ai sai din ciclul iniial. Deoarece la pasul anterior, n aceasta situaie, am obinut c nu
exist arc s porneasc de la x
k-2
i s ajung n x
k
, acum avem arc ntre cele dou noduri n sens invers
care impreun cu cele dou arce care au mai rmas formeaz un ciclu.
Suntem n cazul n care obinem circuit ntre nodurile x
k ,
x
k+1.
i

x
k+2
. n aceast situaie algoritmul se oprete
ntruct am gsit cele dou noduri y i z care s formeze un
ciclu cu x (= x
k
).
n acest caz se lucreaz cu nodurile x
k
, x
k+2,
x
k+3
i cu
celelalte noduri din ciclul iniial, fr x
k+1.
39
Deci algoritmul verific orientarea arcului de la x
k
la x
k+i
cu i de la 2 la 2 ( vrfurile sunt aranjate
n ordine ciclic ) i la fiecare pas reduce problema de la un ciclu cu k noduri printre care trebuie s
cautm y-ul i z-ul la altul cu k-1 noduri, pn cnd obinem ciclul cu 3 noduri n cazul cel mai nefavorabil,
adic exact x, y, z.
n concluzie, se fac cel mult n-3 consultri ale matricei de adiacent, fiecare n timp constant
O(1) deci problema se rezolv n timp O(n).

Algoritmul prorpriu-zis de rezolvare a problemei este:
function CautCircuitDe3(C, x)
begin
/*C este lista circular a nodurilor din G ce formeaz circuitul*/
/*x este un nod oarecare din acest circuit*/
/*A este matriea de adiacen a grafului G*/

while ( A(x succesor succesor, x) 1) do
(x succesor) ( x succesor succesor)
return x, x succesor, x succesor succesor
end

TEMA NR. 3
18 martie 2003

1. Fie G = (V, E) un graf cu n vrfuri, m muchii i cu matricea de adiacen A. Dintre cele 2
m
orientri
posibile ale muchiilor sale, cosiderm una oarecare i cu ajutorul ei construim matricea de inciden
vrf arc Q e {0, 1, -1}
nXm
definit prin:
- (Q)
ve
= -1 dac v este extremitatea iniial a arcului e;
- (Q)
ve
= 1 dac v este extremitatea final a arcului e;
- (Q)
ve
= 0 n toate celelalte cazuri.
40
Demonstrai c matricea A + QQ
T
este matrice diagonal i precizai semnificaia combinatorie a
elementelor ei.

Soluie:
Fie G digraful obinut printr-o orientare oarecare a muchiilor lui G.
Matricea Q a grafului G are n linii, corespunztoare vrfurilor, i m coloane, corespunztoare
arcelor.
Din definiia matricei Q se observ c pe fiecare coloan i exist exact un element cu valoarea -1, pe
linia corespunztoare extremitii iniiale a arcului i, i exact un element cu valoarea 1, pe linia
corespunztoare extremitii finale a arcului i.
Fie R = QQ
T
.
La nmulirea matricei Q cu Q
T
se obine o matrice ptratic R de dimensiune n X n, pentru care
R(i, j) =

=
1
0
) , ( ) , (
n
k
T
j k Q k i Q .
Pentru i j:
Din definiie se deduce c ) , ( ) , ( j k Q k i Q
T
0 dac i numai dac att i, ct i j sunt extremiti ale
arcului k.
G fiind graf simplu (nu multigraf) exist cel mult o muchie ntre dou vrfuri i i j, deci cel mult un
element al sumei de mai sus poate fi diferit de 0. Mai mult, valoarea acestui element este -1, deoarece
unul dintre nodurile i i j este extremitate iniial (Q(l,k) = -1) iar cellalt este extremitate final
(Q(l, k) = 1) a arcului k.
Pentru i = j:
R(i, i) =

=
1
0
) , ( ) , (
n
k
T
i k Q k i Q =
2
1
0
) , (

=
n
k
k i Q .
Suma de mai sus va avea un numr de termeni nenuli egal cu numrul de elemente nenule de pe
linia i. Din definiie, Q(i, k) 0 dac i numai dac i este extremitate a arcului k. Aadar, R(i, i) este egal
cu numrul de arce incidente cu nodul j.
Aadar:
R(i, j) = -1, dac i j i exist arc ntre i i j (A(i, j) = 1);
41
|N
G
(i)|, dac i = j;
0, n rest.

Fie M = A + QQ
T
( = A + R).

M(i, j) = A(i, j) + R(i, j) = 1 + (-1) = 0, dac i j i exist arc ntre i i j (A(i, j) = 1);
0 + |N
G
(i)| = |N
G
(i)| , dac i = j;
0 + 0 = 0, n rest.

Aadar, M(i, j) = 0 pentru i j. M este matrice diagonal. Elementele de pe diagonala au
urmtoarea semnificaie: M(i, i) = |N
G
(i)| (elementul de la intersecia liniei i cu coloana i este gradul
nodului i).

Exemplu:
Fie graful G cu matricea de adiacen A:

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





O posibil orientare a grafului G este: Matricea Q:

42

a b c d e f
1 -1 0 0 0 0 0
2 1 -1 0 0 1 1
3 0 1 -1 0 0 0
4 0 0 1 1 -1 0
5 0 0 0 -1 0 -1




R = QQ
T
. Matricea R: M = A + R. Matricea M:





2. Fie G un graf oarecare i notm cu b(G) graful obinut din G prin inserarea cte unui nod pe fiecare
muchie.
Demonstrai c b(G) este graf bipartit.
Demonstrai c dou grafuri G i H sunt izomorfe dac i numai dac b(G) este izomorf cu b(H).
Deducei c testarea izomorfismului a dou grafuri se reduce polinomial la testarea izomorfismului a
dou grafuri bipartite.

Soluie:

# Artm c b(G) este graf bipartit.
1 2 3 4 5
1 1 -1 0 0 0
2 -1 4 -1 -1 -1
3 0 -1 2 -1 0
4 0 -1 -1 3 -1
5 0 -1 0 -1 2
1 2 3 4 5
1 1 0 0 0 0
2 0 4 0 0 0
3 0 0 2 0 0
4 0 0 0 3 0
5 0 0 0 0 2
43
Fie G un graf de ordin n i dimensiune m. Prin inserarea cte unui nod pe fiecare muchie a lui G se
obine graful b(G) cu n + m noduri i 2m muchii.
La construirea lui b(G), se introduce cte un nod ntre dou noduri adiacente din G astfel:
Fie v i w cele 2 noduri adiacente i fie u nodul introdus ntre ele; se obine muchie de la u la v i de la
u la w i se elimin muchia dintre v i w. Nodul nou introdus, u, nu va fi adiacent cu nici un alt nod din
graful iniial i va avea ntotdeauna N
G
(u)=2. Graful obinut prin inserarea unui astfel de nod ntre oricare
dou noduri adiacente are urmtoarele proprieti:
- nodurile nou introduse sunt adiacente numai cu cele 2 noduri ntre care au fost
introduse i deci nu sunt adiacente ntre ele;
- nodurile grafului iniial G sunt adiacente numai cu noile noduri, ntruct n locul oricrei
muchii ntre dou noduri din G avem acum dou noi muchii, de aceast dat ntre
nodurile din G i nodurile nou introduse.
Aadar, V(b(G)) poate fi mprit n dou submulimi:
- S = V(G) (nodurile iniiale), cu |S| = n;
- T = V(b(G)) - V(G) (nodurile nou introduse), cu |T| = m.
Aa cum am artat mai sus, ntre nodurile din X , cu Xe ,S, T- nu esist muchii n b(G), deci b(G) este
graf bipartit.

Exemplu:

S T

# Artm c dou grafuri G i H sunt izomorfe dac i numai dac b(G) este izomorf cu b(H).

Implicaia direct.
G ~ H.
44
Atunci:
- : V(G) V(H) bijectiv a. . - + : E(G) E(H) bine definit i bijectiv a.. e = uv e E(G) ,
+(uv) = (u) (v).

Construim b(G) i b(H) ca mai sus.
Putem extinde la e :V(b(G)) V(b(H)) astfel:
e(u) = (u), dac u e V(G);
w , dac u e V(b(G)) - V(G), unde vecinii lui u sunt v
1
i v
2
, iar vecinii lui w sunt
(v
1
) i (v
2
).
Se observ c
e(V(G)) = V(H)
i
e(V(b(G))) - V(G)) = V(b(H)) - V(H).
Restricia funciei e pe mulimea V(G) este injectiv (deoarece este injectiv). Dac notm cu
f1: V(G) V(H) o funcie pentru care
f1(u) = e(u), u e V(G),
aceast funcie f1 este bijectiv (fiind egal chiar cu ).
Trebuie s artm acum c f2 : V(b(G)) - V(G) V(b(H)) - V(H), cu
f2(u) = e(u), u e V(b(G)) - V(G)
este bijectiv.
Din definiia lui f2, respectiv a lui e, se deduce c, dac nodul u a fost introdus pe muchia cu
extremitile v1 i v2, atunci, funcia f2 i aociaz acel nod din b(H) care a fost introdus pe muchia
(v
1
)(v
2
). Cu alte cuvinte, definiia lui f2 este echivalent cu definiia lui + din izomorfismul grafurilor G
i H. Deoarece + este bijectiv, i f2 este bijectiv.
Deoarece domeniile, respectiv codomeniile celor dou funcii f1 i f2 sunt mulimi disjuncte, rezult
c i funcia e pentru care:
e(u) = f1(u), dac u e V(G);
45
f2(u), dac u e V(b(G)) - V(G)
este funcie bijectiv.

Artm c - +e : E (b(G)) E(b(H)) bine definit i bijectiv cu proprietile cerute.
e = uv e E(b(G)) ,+e(uv) = e(u) e(v).

- Artm c+e este bine definit:
Din definiia grafurilor b(G) i b(H) , rezult c, e = uv e E(b(G)), u e V(G) i ve V(b(G)) V(G) sau
invers (adic, n mod obligatoriu, una din extremiti este din V(G) iar cealalt este un nod introdus
ulterior).
Fie u e V(G) i ve V(b(G)) V(G). Atunci
- w e V(G) a.. uw e E(G)
i v este nodul introdus pe muchia uw.
G ~ H - u, w e V(G) a..
u = (u) (= e(u))
w = (w) (= e(w))
uw e E(H)
Din definiia lui e - v e V(b(H)) V(H) a.. e(v) = v. (v are ca noduri adiacente n b(H) pe u i
w).
Deci exist n b(H) muchia e(u) e(v), oricare uve E(b(G)).

- Artm c+e este injectiv:
(e1, e2 e E(b(G)), +e(e1) =+e(e2) e1 = e2).
Fie e1 = uv, e2 = xy dou muchii din E(b(G)) a.. +e(uv) =+e(xy).
Atunci:
e(u) e(v) = e(x) e(y)
e(u) =e(x) i e (v) =e(y)
46
sau
e(u) =e(y) i e (v) =e(x)
e este funcie injectiv u = x i v = y sau u = y i v = x uv = xy +e este injectiv.

- Artm c+e este surjectiv:
(e E(b(H)) - e e E(b(G) a.. e =+e(e) )
tim c +e este bine definit i injectiv, deci cardinalul mulimii +e(E(b(G))) (imaginea lui E(b(G))
prin funcia +e) este egal cu cardinalul lui E(b(G)):
|+e(E(b(G))) | = |E(b(G)) |.
Dar +e(E(b(G))) _ |E(b(H)))|.
De asemenea, din construcia grafurilor b(G) i b(H) |E(b(G)) | = |E(b(H))| = 2m.
+e(E(b(G))) = E(b(H)) +e este surjectiv.

+e este bijectiv.

Am demonstrat c, dac G ~ H, atunci b(G) ~ b(H).


Implicaia invers.
b(G) ~ b(H).
Atunci:
- : V(b(G)) V(b(H)) bijectiv a.. funcia + : E(b(G)) E(b(H)) definit prin :
e = uv e E(b(G)) , +(uv) = (u) (v)
este bine definit i bijectiv.

Fie N numrul de noduri din b(G), respectiv b(H), iar M numrul de muchii din b(G), respectiv b(H).
47
Din modul de construcie a grafurilor b(G) i b(H) avem:
- numrul nodurilor lui G = N M / 2 = numrul nodurilor lui H;
- numrul muchiilor lui G = M / 2 = numrul muchiilor lui H.

Pentru a demonstra izomorfismul dintre G i H trebuie s gsim dou funcii r:V(G)V(H) bijectiv
i +r : E(G) E(H) bine definit i bijectiv astfel nct :
e = uv e E(G) , +r(uv) = r(u) r(v).
Alegem r ca fiind restricia funciei pe mulimea V(G).
r(u) = (u) , u e V(G).
tim c oricare muchie din b(G), respectiv b(H) are o extremitate din V(G), respectiv V(H) i o
extremitate din mulimea nodurilor introduse la construcie.
Deoarece b(G) ~ b(H), fiecrei muchii e
1
din E(b(G)) i se asociaz o muchie e
2
din E(b(H)) prin funcia
+, astfel nct extremitii din V(G) a muchiei e
1
i corespunde extremitatea din V(H) a muchiei e
2
.
Aadar, imaginea lui V(G) prin funcia r va fi inclus n V(H).
r este injectiv, deoarece este injectiv (iar injectivitatea se pstraz la restriciile funciilor).
Vom arta c r : V(G) V(H) este surjectiv.
r este injectiv | V(G) | = | r (V(G)) |.
Dar r (V(G)) _ V(H), i, aa cum am vzut mai sus, | V(G) | = | V(H) |.
Aadar, r (V(G)) = V(H). Deci r este surjectiv.

r este bijectiv.

- Artm c funcia +r este bine definit.
Muchiile din G se obin intuitiv din muchiile lui b(G), unind dou muchii care au un vrf comun ce nu
aparine lui V(G). Deci dou muchii din b(G) se transform n mod unic ntr-o muchie din G.
e = uv e E(G) , +r(uv) = r(u) r(v).
u, v e V(G) - we V(b(G)) a.. uw , wv e E(b(G)).
b(G) ~ b(H) - w, u, v e V(b(G)) a..:
48
w = (w)
u = (u) (= r (u))
v = (w) (= r (v))
+(uw) = (u) (w) = uw
+(vw) = (v) (w) = vw
uw, vwe E(b(H));
w e V(H) uv e E(H) r(u) r(v) e E(H) e = uv e E(G)
u, v e V(H)


+r este bine definit.

- Artm c +r este injectiv.
(e1, e2 e E(G), +r(e1) =+r(e2) e1 = e2).
Fie e1 = uv, e2 = xy dou muchii din E(G) a.. +r(uv) =+r(xy).
Atunci:
r(u) r(v) = r(x) r(y)
r(u) = r(x) i r (v) = r(y)
sau
r(u) = r(y) i r (v) = r(x)
r este funcie injectiv u = x i v = y sau u = y i v = x uv = xy +r este injectiv.

- Artm c+r este surjectiv:
(e E(H) - e e E(G) a.. e =+r(e) )
tim c +r este bine definit i injectiv, deci cardinalul mulimii +r(E(G)) (imaginea lui E(G) prin
funcia +r) este egal cu cardinalul lui E(G):
|+r(E(G)) | = |E(G) |.
49
Dar +r(E (G)) _ |E(H)|.
De asemenea, din construcia grafurilor b(G) i b(H) |E(G) | = |E(H) | = M / 2.
+r(E(G)) = E(H) +r este surjectiv.

+r este bijectiv.

Am demonstrat c, dac b(G) ~ b(H), atunci G ~ H.

Din cele dou implicaii am obinut c G~ H dac i numai dac b(G) ~ b(H).

# Artm c testarea izomorfismului a dou grafuri se reduce polinomial la testarea
izomorfismului a dou grafuri bipartite.
Aa cum am demonstrat mai sus, pentru a testa izomorfismul a dou grafuri este suficient s
demonstrm c grafurile bipartite construite de la aceste grafuri sunt izomorfe. Trebuie s artm c
dintr-un graf G putem obtine n timp polinomial graful b(G).
Reprezentm graful G folosind matrice de adiacen. Pentru a construi graful b(G) se parcurg
urmtorii pai:
- se parcurge matricea de adiacen a grafului G, numai n jumtatea sa superioar i se
numr muchiile, obinndu-se m ( n O(n
2
/2) );
- se creeaz matricea de adiacen a grafului b(G), cu n+m linii i coloane i se umple cu
zerouri;
- se parcurge din nou matricea lui G i unde gsim muchie ntre i i j , se pune muchie ntre
i i k i j ntre j i k, unde k este un numr de la n la m + n - 1, care crete cu o unitate
dup aceast operaie ( O(1) pentru fiecare muchie din G ).

Algoritmul este:
procedure Construiete_b(G)(G)
begin
/*numrarea muchiilor*/
n |G|
50
m 0
for i 0 to n-1 do
for j i+1 to n-1 do
if ( A(i,j) = 1 ) then
m++
/*crearea matricii cu n+m linii i coloane i zerorizarea*/
V(b(G)) ,0, 1, n + m - 1}
/*introducerea muchiilor ntre nodurile lui b(G)*/
/*primele n noduri, de la 0 la n 1, corespund nodurilor din G*/
/*nodurile de la n la n + m 1, sunt nodurile adugate ulterior, care vor fi distribuite pe fiecare
muchie din G*/
k n
for i 0 to n-1 do
for j = i+1 to n-1 do
if ( A(i, j) = 1 ) then
B(i, k) B(k, i) B(j, k) B(k, j) 1
k++
end

Algoritmul are complexitate O(n
2
). Deci testarea izomorfismului a dou grafuri se poate reduce
polinomial la testarea izomorfismului grafurilor bipartite obinute din ele.


51
3. Graful paianjen cu n vrfuri este graful care se obine unind din unul din vrfurile de grad 1 ale
grafului P
3
cu toate vrfurile unui graf oarecare cu n 3 vrfuri, disjunct de P
3
(n este un ntreg
pozitiv mare). Dac G este un graf cu n vrfuri reprezentat prin matricea de adiacen, artai c se
poate testa dac este graf paianjen folosind doar O(n) probe ale matricei de adiacen. (o prob
este un acces la un element oarecare al matricei, fr a-l memora explicit pentru utilizri ulterioare.)

Soluie:
Un graf paianjen G
p
are proprietatea c exist 3 noduri n V(G
p
), notate u, v i w, astfel nct:
- nodul u are un singur vecin, pe v;
- nodul v are exact doi vecini, pe u i pe w;
- nodul w are n 2 vecini; singurul nod din G care nu este vecin cu w este u.

Notm cu G
p
subgraful indus de mulimea V(G
p
) {u, v, w}. Putem observa cteva proprieti ale
nodurilor din subgraful G
p
.
Fie un nod x din G
p
. Atunci, aa cum se vede din desenul de mai sus, avem:
(am notat prin Vecini(i) mulimea vecinilor nodului i n graful G
p
i prin Vecini(Vecini(i)) mulimea
tuturor vecinilor vecinilor lui i)
- w e Vecini(x);
- v e Vecini(x);
- v e Vecini(Vecini(x)) ;
- u e Vecini(x);
- u e Vecini(Vecini(x)) ;

52
Pentru a putea decide dac un graf G este graf paianjen, vom ncerca s gsim, pornind dintr-un nod
oarecare din graf, nodul u.
Pornim dintr-un nod oarecare x din V(G). Decidem mai nti dac x poate fi u, v sau w. Dac nu este,
mergem la pasul urmtor.
tim c, dac exist un nod w n graful G, atunci acesta este vecin al lui x i c orice nod, n afar de
u, se leag de w. Deci vom putea elimina dintre nodurile din lista vecinilor lui x acele noduri y pentru care
exist un nevecin z dintre nodurile care nu sunt vecine cu x, deoarece:
- dac nodul nevecin z este chiar u, atunci nu este vecin cu nici un nod din lista vecinilor lui x, deci
va fi depistat de algoritm (deoarece lista vecinior lui x rmne goal);
- dac nodul nevecin z nu este u, atunci nodul eliminat y nu poate fi w, deoarece w este vecin cu
toate nodurile cu excepia lui u.
Aadar, dac graful este paianjen, w va fi eliminat din list numai de ctre u (care va elimina de fapt
toate nodurile vecine cu x). Aadar lista de vecini ai lui x va deveni goal doar atunci cnd este gsit
nodul u (dac aceste exist).
De asemenea, tim c u nu este vecin cu x i cu niciunul din vecinii lui x. Deci putem elimina dintre
nodurile candidate acele noduri care nu au aceast proprietate.

Un algoritm de verificare dac G este graf paianjen este:

function EstePaianjen(G)
begin
n |G|
/*dac G nu are cel puin 4 noduri, atunci, conform definiiei, nu poate fi graf paianjen*/
if (n < 4)
then
return false

/*putem alege un nod oarecare x din V(G), de exemplu 0*/

/*ETAPA I */
53
/*creez dou liste:
- lista vecinilor lui x listaV;
- lista nodurilor care nu sunt vecine cu x listaNonV; */

for i 1 to n 1 do
if (A(0, i) = 1)
then AdaugLaList(i, listaV)
else AdaugLaList(i, listaNonV)

/*ETAPA A II-A*/
/*Verificm dac nodul x ales poate fi u, v sau w*/

switch (lungime(listaV))
case 0:
/* graful G nu este conex, deci nu poate fi graf paianjen*/
return false
case 1:
/* nodul x ar putea fi u*/
if (EsteU(x))
then return true
break
case 2:
/* nodul x ar putea fi v*/
if (EsteV(x))
then return true
break
54
case n - 2:
/* nodul x ar putea fi w*/
if (EsteW(x))
then return true
else
/* ntr-un graf paianjen, unicul nod de grad n-2 este w. Dac s-a gsit un nod
de grad n-2 care nu satisface toate proprietile lui w (adic unicul nod care nu
i este vecin are gradul 1 i vecinul su are grad 2 i este vecini cu w) atunci
graful nu poate fi paianjen, deoarece toate celelalte noduri au grad cel mult n-3
*/
return false
break
case n -1:
/*exist un nod vecin cu toate celelalte, deci nu poate exista nodul u n acest graf*/
return false
default:
break


/*ETAPA A III-A*/
/*l cutm pe u n listaNonV. Acele noduri care cu siguran nu pot fi u vor fi eliminate din
list pentru a se evita efectuarea unor operaii inutile.
Ne vom baza pe proprietatea c ntr-un graf paianjen u este unicul nod nevecin cu w, deci este
suficient s gsim un nod de gradul 1 nevecin cu un nod de gradul n-2 pentru a putea decide dac
graful este paianjen, adic un nod care nu este vecin cu nici unul din vecinii lui x.*/

posibilU -1
for all i in listaNonV do
55
while (listaV NULL) do
j (listaVfirst)
if (A(j, i) = 1)
then
/*dac nodul i curent din listaV are un vecin n listaNonV, atunci nu
poate fi u, deci va fi eliminat, i se trece la nodul urmtor, deci la pasul
urmtor din bucla for*/
EliminDinList(i, listaNonV)
break
else
/*se elimin acele noduri vecine cu x care nu sunt vecine cu i. Dac
exist un nod w, atunci acesta va fi eliminat doar dac i = u. */
EliminDinList(j, listaV)
/*dac pentru un nod i din listaNonV nu s-a gsit nici un nod vecin cu el n listaNonV
(adic dac s-a ieit din bucla while prin nesatisfacerea condiiei listaV NULL), atunci
acesta ar putea fi nodul u cutat, deoarece, dac w exist n list, acel nod i l elimin;
dac nu este acesta, cu siguran graful nu poate fi paianjen, deoarece ar exista cel
puin dou noduri care nu sunt vecine cu nici un vecin al lui x, deci nu ar exista nici un
vecin al lui x care s aib exact n - 2 vecini (n consecin nu ar exista un nod w n
graf)*/
if (listaV = NULL)
then
posibilU i
break

/*ETAPA A IV-A*/
/*Concluziile trase din rezultatul de la etapa anterioar*/
/*Dac s-a ieit din bucla for pentru c s-a gsit un posibil nod u se face verificarea; altfel,
graful nu poate fi graf paianjen*/
56
if (posibilU -1)
then
/*numr vecinii lui posibilU; dac nu este doar unul, graful nu este paianjen*/
numrVecini 0
for l 0 to n 1 do
if ( A(l, posibilU) = 1)
then
numrVecini++
if (numrVecini > 1)
then
return false
return EsteU(posibilU)
else
return false
end

function EsteU(i)
begin
/*caut vecinii lui i*/
for j 0 to n-1 do
if (A(i, j) = 1)
then break
/*verific dac j, vecinul lui i are 2 vecini*/
numrVecini 0
for k 0 to n-1 do
57
if (A(k, j) = 1)
then
numrVecini++
if (k i)
then vecinDiferitDe_i k

if (numrVecini = 2)
then
/*verificm dac cellalt vecin al lui j are exact n 2 vecini i dac nodul care nu este
vecin cu acesta este chiar i*/
numrVecini 0
for m 0 to n 1 do
if (A(m, vecinDiferitDe_i) = 1)
then
numrVecini++
else
if (m vecinDiferitDe_i )
then nodNevecin m
if (numrVecini = n - 2)
then
if (nodNevecin = i)
then
return true
else
return false
else return false
58
else
return false
end

function EsteV(i)
begin
/*caut vecinii lui i*/
vecin1 -1
vecin2 -1
for j 0 to n-1 do
if (A(i, j) = 1)
then
if (vecin1 = -1)
then
vecin1 j
else
vecin2 j
break
/*numr vecinii acestora, memornd, n aceeai parcurgere, pentru fiecare ultimul nod cu
care nu este vecin*/
numrVecini1 0
numrVecini2 0
nevecin1 -1
nevecin2 -1
for k 0 to n-1 do
if (A(k, vecin1) = 1)
59
then
numrVecini1++
else
if (k vecin1)
then
nevecin1 k
if (A(k, vecin2) = 1)
then
numrVecini2++
else
if (k vecin2)
then
nevecin2 k
if (numrVecini1 = 1 and numrVecini2 = n - 2)
then
/*verificm dac vecin1 este u i vecin2 este w, adic dac vecin1 este unicul nod
nevecin cu vecin2*/
if (nevecin2 = vecin1)
then
return true
else
return false
else
if (numrVecini2 = 1 and numrVecini1 = n - 2)
then
60
/*verificm dac vecin2 este u i vecin1 este w, adic dac vecin1 este unicul nod
nevecin cu vecin1*/
if (nevecin1 = vecin2)
then
return true
else
retrun false
else return false
end

function EsteW(i)
begin
/*caut nodul care nu este vecin cu i*/
for j 0 to n-1 do
if (A(i, j) = 0 and j i)
then break
/*verific dac j are exact 1 vecin; dac da, l memoreaz*/
numrVecini 0
for k 0 to n-1 do
if (A(k, j) = 1)
then
numrVecini++
vecin k
if (numrVecini = 1)
then
/*verificm dac vecinul lui j are exact 2 vecini i dac cellalt vecin este i*/
61
numrVecini 0
for m 0 to n 1 do
if (A(m, vecin) = 1)
then
if (m j and m i)
then
return false
return true
else
return false
end


Numrul accesrilor matricei de adiacen a grafului G:

Etapa I:
Pentru crearea listelor listaV i listaNonV se parcurge o singur dat linia x a matricei A. Vor fi n
1 = O(n) accesri.

Etapa aII-a:
Pentru verificarea dac nodul ales este u, v sau w se vor cerceta cel mult trei dintre liniile matricei
A, deci se vor efectua 3n = O(n) accesri.

Etapa a III-a:
Fie t dimensiunea listei listaV; atunci listaNonV va avea dimensiunea n 1 t.
n aceast etap se ncearc detectarea n graf a nodului u.. Dac exist, u se va afla n
listaNonV, iar w n listaV.
62
tim c, dac G este graf paianjen, nodul u nu trebuie s fie legat nici de x, nici de vreunul dintre
vecinii lui x, deci nici de w.
l cut pe u n listaNonV. Verificm pentru fiecare nod din listaNonV dac are vecini n listaV.
Dac i din listaNonV are un vecin din listaV, atunci cu siguran nu poate fi u, deci va fi eliminat din list.
Aadar, pentru fiecare element din listaNonV, fiecare accesare a matricei cu rspunsul 1 are drept
consecin eliminarea nodului respectiv din list. Vom avea cel mult |listaNonV| = n t 1 accesri ale
matricei cu rspunsul 1.

tim c un nod i poate fi u numai dac va elimina toate nodurile vecine cu x din list. (dac graful
este paianjen, toate celelalte noduri n afar de u sunt vecine cu unul din vecinii lui x, adic cu w). Deci,
pentru fiecare i din listaNonV, vom elimina acele noduri care nu sunt vecine cu el din listaV, tiind c,
dac exist w, acesta va fi eliminat doar de u).
Aadar, pentru fiecare element din listaV se vor putea da cel mult cel mult un rspuns 0 la
interogarea matricei A (la un astfel de rspuns va fi eliminat). Deci vor fi cel mult |listaV| = t accesri ale
matricei la care rspunsul este 0.

Cum elementele matricei nu poit fi dect 0 sau 1, nseamn c se vor efectua n aceast etap cel
mult t + n t 1 = n 1 probe ale matricei A. Deci numrul probelor matricei A efectuate n aceast
etap este O(n).

Etapa a IV-a:
Numrarea vecinilor unui nod i se poate face prin parcurgerea liniei i din matricea de adiacen a
grafului, deci prin n = O(n) accesri. Aa cum am vzut mai sus, verificarea dac un nod este nodul u se
face efectund O(n) accesri ale matricei de adiacen.

n concluzie, putem decide dac graful G este graf paianjen dup O(n) + O(n) + O(n) + O(n) = O(n)
probe ale matricei de adiacen a acestuia.

4. Asociem unui arbore T de ordin n cu rdcina r un drum P
3n
orientat procednd astfel: fiecrui nod v
al lui T i se asociaz trei noduri cu acelai nume v pe care le desemnm prin v
1
, v
2
, v
3
; dac v nu are n
T descendent stng, atunci se introduce arcul v
1
v
2
n P
3n
; dac v nu are n T descendent drept, atunci
se introduce arcul v
2
v
3
n P
3n
; dac decendentul stng al lui v este w, atunci se introduc n P
3n
arcele
v
1
w
2
i w
3
v
2
; dac decendentul drept al lui v este w, atunci se introduc n P
3n
arcele v
2
w
1
i w
3
v
3
.
63
Dac se parcurge drumul P
3n
de la extremitatea iniial r
1
la extremitatea final r
3
i se listeaz
numele vrfurilor n ordinea parcurgerii lor se obine un ir n care numele fiecrui vrf al lui T apare
exact de 3 ori.
Demonstrai c: dac din acest ir se reine doar prima apariie a fiecrui nume se obine
parcurgerea pre-order a arborelui T; dac din acest ir se reine doar a doua apariie a fiecrui nume
se obine parcurgerea n-order a arborelui T; dac din acest ir se reine doar a treia apariie a
fiecrui nume se obine parcurgerea post-order a arborelui T.

Soluie:

Fie T arborele pentru care se efectueaz o parcuregre ca mai sus.
Intuitiv, putem spune c irul obinut prin parcurgerea drumului P
3n
de la extremitatea iniial
la extremitatea final are urmtoarea form:
- primul nume din ir este numele rdcinii;
- n cazul n care arborele are subarbore stng, urmeaz numele nodurilor din
subarborele stng, n forma precizat de aceti pai;
- urmeaz din nou numele rdcinii arborelui;
- n continuare sunt aezate nodurile din subarborele drept n aceeai ordine, n
cazul n care acesta exist;
- irul este ncheiat de numele nodului rdacin.

Un algoritm de construcie a irului ar arta astfel:
procedure Construiete(r)
begin
Introducere_n_ir(r
1
)
if (rstnga NULL)
then
Construiete(rstnga)
Introducere_n_ir(r
2
)
if (rdreapta NULL)
then
Construiete(rdreapta)
Introducere_n_ir(r
3
)
end
64

Deci acest ir de noduri se definete ntr-o manier recursiv, ntruct definirea arborelui T
se face utiliznd definirea pentru subarborele stng i definirea pentru subarborele drept. Din
acest motiv putem utiliza metoda induciei complete dup numrul de noduri ale arborelui,
pentru a demonstra c
ntr-adevr obinem cele 3 parcurgeri.
Pasul de baz:
n = 1
Pentru arborele cu un singur nod (pe care l vom nota 1), irul obinut este 1 1 1; se observ
c,
ntr-adevr, considernd doar prima apariie vom obine parcurgerea pre-ordine, considernd
doar a doua apariie vom obine parcurgerea in-ordine, iar considernd ultima apariie vom
obine parcurgerea post-ordine a arborelui cu n singur nod.

n = 2.
Fie T un arbore cu dou noduri: rdcin (notat 1) i subarbore stng(notat 2).

irul obinut este: 1 2 2 2 1 1. Observm c:
- dac selectm numai primele apariii ale numelor nodurilor obinem 1 2, care reprezint
parcurgerea pre-order a arborelui iniial
- dac am selecta numai a doua apariie a nodurilor n ir am obine 2 1, care reprezint
parcurgerea in-oder a arborelui.
- dac am selecta doar a treia apariie a nodurilor am obine 2 1, i anume parcurgerea n
post-order a arborelui.
-
Fie T un arbore cu dou noduri: rdcin (notat 1) i subarbore drept(notat 2).

irul obinut este: 1 1 2 2 2 1. Observm c:
- dac selectm numai primele apariii ale numelor nodurilor obinem 1 2, care reprezint
parcurgerea pre-order a arborelui iniial
- dac am selecta numai a doua apariie a nodurilor n ir am obine 2 1, care reprezint
parcurgerea in-oder a arborelui.
65
- dac am selecta doar a treia apariie a nodurilor am obine 2 1, i anume parcurgerea n
post-order a arborelui.

n = 3.
Fie un arbore T un arbore cu 3 noduri, astfel nct unul dintre ele s fie rdcin i celelalte
s fie fiii si.

irul obinut dup regulile date este de forma : 1 2 2 2 1 3 3 3 1. Observm c:
- dac selectm numai primele apariii ale numelor nodurilor obinem 1 2 3, care
reprezint parcurgerea pre-order a arborelui iniial
- dac am selecta numai a doua apariie a nodurilor n ir am obine 2 1 3, care reprezint
parcurgerea in-oder a arborelui.
- dac am selecta doar a treia apariie a nodurilor am obine 2 3 1, i anume parcurgerea
n post-order a arborelui.
Totodat, n toate cele trei cazuri tratate, irul obinut este de forma specificat mai sus, i
anume: rdcin, irul subarboreui stng, rdcin, irul subarborelui drept, rdcin.
Pasul inductiv:
Se presupune c irul obinut este de forma de mai sus i c se obin aceste parcurgeri pentru
un arbore cu k noduri, k n. Demonstrm c avem aceeai form i pentru un ir obinut
dintr-un arbore cu n+1 noduri i c obinem aceleai parcurgeri .


Fie T un arbore cu n+1 noduri. Atunci subarborii fii ai rdcinii au cel mult n noduri, de
unde deducem, folosind ipoteza inductiv, c irurile obinute din ei suntde forma cerut. n
continuare, trebuie s demonstrm c sirul obinut dup regula de mai sus din acest arbore cu
n+1 noduri respect condiia.
- vom porni cu rdcina r, deci primul nod din drum va fi chiar nodul rdcin.
- pentru r se verific dac are subarbore stng. n cazul n care avem subarborele
stng, se introduce arc de la rdcin la descendentul stng notat w i se urmeaz
acelai procedeu pentru acest nod (descendentul stng), printr-o parcurgere n
adncime a arborelui; cum irul obinut, dup regulile precizate, din subarborele
stng al arborelui iniial are cel mult n noduri putem spune c respect
presupunerea fcut, deci se ncheie cu nodul rdcin al acestui subarbore, w. n
continuare, se introduce arc de la noua intrare a lui w n ir la noua intrare a lui
66
r n ir (a doua). Dac nu avem subarborele stng, introducem arc de la prima
intrare a lui r n ir la a doua. n ambele cazuri, irul obinut pn la acest pas se
ncheie cu r.
- verificm dac avem subarbore drept pentru nodul r. Dac avem descendent drept
al lui r, notat u, introducem arc de la r la prima intrare a lui u n ir i n
continuare se aplic recursiv algoritmul de construcie al irului pentru
subarborele drept, la fel ca la pasul anterior. i acest ir se ncheie cu ultima
apariie a lui u i conform regulilor, se introduce arc de la u la ultima apariie a
lui r n irul final. Dac nu ar exista subarborele drept, s-ar introduce arc direct
de la a doua intrare a lui r n ir, la a treia.

Deci irul obinut dintr-un arbore cu n+1 noduri este de aceeai form cu cea a irurilor
obinute din arbori cu mai puine noduri, i anume : rdcin, ir subarbore stng, rdcin, ir
subarbore drept, rdcin.
Dac extragem din acest ir numai primele apariii ale nodurilor obinem:
- rdcina, adic nodul r;
- primele apariii ale nodurilor din irul obinut din subarborele stng al lui r, dac
exist (care reprezint parcurgerea pre-order a subarborelui, aa cum am
presupus n ipoteza inductiv);
- primele apariii ale nodurilor din irul obinut din subarborele drept al lui r, dac
exist (adic parcurgerea pre-order a subarborelui);
Aceasta este de fapt definiia recursiv a parcurgerii pre-order pentru un arbore binar i n
concluzie, irul obinut din primele apariii ale nodurilor pentru un arbore cu n+1 noduri
reprezint parcurgerea pre-order a acestui arbore.
Dac extragem din acest ir numai a doua apariie a fiecrui nod, obinem:
- a doua apariie a fiecrui nod din irul obinut din subarborele stng al lui r, dac
exist (care reprezint parcurgerea in-order a subarborelui, aa cum am
presupus n ipoteza inductiv);
- rdcina, adic nodul r;
- a doua apariie a fiecrui nod din irul obinut din subarborele drept al lui r, dac
exist (adic parcurgerea in-order a subarborelui);
Aceasta este de fapt definiia recursiv a parcurgerii in-order pentru un arbore binar i n
concluzie, irul obinut din primele apariii ale nodurilor pentru un arbore cu n+1 noduri
reprezint parcurgerea
in-order a acestui arbore.
Dac extragem din acest ir numai ultimele apariii ale nodurilor obinem:
- ultimele apariii ale nodurilor din irul obinut din subarborele stng al lui r, dac
exist (care reprezint parcurgerea post-order a subarborelui, aa cum am
presupus n ipoteza inductiv);
- ultimele apariii ale nodurilor din irul obinut din subarborele drept al lui r, dac
exist (adic parcurgerea post-order a subarborelui);
- rdcina, adic nodul r;
Aceasta este de fapt definiia recursiv a parcurgerii post-order pentru un arbore binar i n
concluzie, irul obinut din primele apariii ale nodurilor pentru un arbore cu n+1 noduri
reprezint parcurgerea post-order a acestui arbore.
Am obinut aadar proprietatea adevrat pentru un arbore cu n + 1 noduri.
67
Deci proprietatea este adevrat pentru orice arbore, adic irul are forma intuit i se obin
acele parcurgeri.
q. e. d.


TEMA NR. 4
25 martie 2003

5. Prezentai (pe cel mult o pagin) o problem interesant din domeniul IT care s necesite rezolvarea
eficient a unei probleme de drum minim ntr-un digraf adociat problemei iniiale.

Soluie:
Problema gsirii drumului de cost minim ntr-un graf apare foarte des n realitate, una dintre cele mai
importante si mai des folosite implementari a acesteia fiind problema rutrii pachetelor de date n reeaua
Internet.
n reeaua World Wide Web exist un munr mare de noduri, numite routere, prin care pot trece pachetele
de date n drumul lor de la un calculator la altul. Pentru a evita suprancrcarea infrastructurii, trimiterea fiecrui
pachet de date trebuie fcut pe o singur cale, i trebuie s fie ct mai rapid i mai eficient. Mai exact, drumul
parcurs de un pachet de date de la surs la destinaie trebuie s fie de cost minim.
Fiind o reea complex, cu multe noduri interconectate, exist o multitudine de drumuri ntre oricare dou
noduri, gsirea celui mai eficient drum necesitnd un algoritm complex, ce trebuie s functioneze cu o baz mare
de date i trebuie s in cont de mai muli factori, cum ar fi:
- numrul de noduri (routere) prin care trece un pachet, ntruct fiecare router ncetinete transmiterea
datelor (la sosirea unui pachet ntr-un router, acesta proceseaza informaiile suplimentare ataate pachetului:
tipul pachetului, adresa destinatarului, etc.);
- viteza de transmitere a datelor ntre dou noduri;
- rata de pierdere pe un anumit traseu (procentul pachetelor pierdute dintr-o serie de pachete);
- devierea de la distana minim.
Unii dintre aceti factori sunt de fapt costuri ale muchiilor.
innd cont de dimensiunea impresionant a reelei Internet i de numrul mare de pachete transmise n
fiecare secund, orice mbuntire a algoritmilor poate aduce un spor de performan relativ mare.
Ca metode de rutare implementate, dou se disting n mod deosebit:
- rutarea cu traseu prestabilit, atunci cnd un singur router (primul) stabilete traseul pachetului, incluznd
traseul astfel stabilit n pachetul de date, i trimite pachetul spre primul nod din list; fiecare nod, la primirea
pachetului, se terge din list i trimite pachetul mai departe; se utilizeaz deci un algoritm de calculare a
drumului de cost minim dintre dou noduri terminale ntr-un graf (reeaua internet), calcularea se face o
singur dat.
68
- rutarea punct cu punct, cnd pachetul este trimis fr nici o alt informaie (evident, cu excepia
destinatarului, a expeditorului i a altor informaii despre pachetul de date) ctre primul nod prin care se poate
ajunge la destinatar. Se utilizeaz un algoritm de calculare a nodului urmtor, astfel nct drumul parcurs de un
pachet de date s fie minim (din punct de vedere local). Nu este propriu-zis un algoritm de drum de cost minim, ci
o combinaie cu un algoritm greedy, drumul de cost minim fiind calculat n momentul stabilirii bazei de date
(tabela de rutare) i nu n momentul rutrii pachetelor de date.
Ambele metode sunt imperfecte.
Prima metod este vulnerabil schimbrilor n structura reelei, ntruct aceasta este reinut ntr-o baz
de date, updatat doar la anumite intervale de timp, verificarea permanent a fiecarui nod fiind nepractic. Din
acest motiv, este posibil ca la un moment dat s se ncerce transmiterea unui pachet printr-un drum ce conine
noduri inexistente la momentul respectiv. De asemenea, deoarece traseul stabilit este inclus n pachetul de date,
creterea dimensiunii pachetului de date este proporional cu lungimea drumului de parcurs.
Metoda rutarii punct cu punct poate genera trimiteri ciclice, atunci cnd un pachet este trimis n mod
repetat ntre o serie de noduri, fiecare nod considernd ca drumul cel mai bun este prin nodul urmtor, ca n
figur :
Aceast situaie nu poate s apara n cazul rutrii cu
traseu prestabilit. Dar dimensiunea pachetelor de date
rmne mic, bazele de date cu structura reelei (tabela de
rutare) fiind mai mici, fiecarui router fiindu-i necesare
informaii doar despre vecinii imediai, schimbrile se pot
observa mai repede, dar fiecare router ncetinete trimiterea
pachetului de date.
Ca o combinaie, se poate utiliza o variant a metodei rutrii cu traseu prestabilit, fiecare nod putnd s
modifice acest traseu, n momentul n care gsete o neconcordan (un nod temporar scos din funciune sau o
linie ntrerupt). Routerul care gsete neconcordana are responsabilitatea de a calcula un nou drum de cost
minim prin nodurile disponibile i de a modifica traseul din pachet.
69
6. Fie G = (V, E) un graf, s e V un vrf oarecare al lui G iar t un alt vrf accesibil n G printr-un drum din
s. O mulime A de muchii se numete st-inevitabil dac exist Sc V a.. s e S, t e S i
A = {ee E / e = uv, u e S, v e S -. Artai c numrul maxim de mulimi st-inevitabile disjuncte dou
cte dou este egal cu distana de la s la t i c se poate determina o familie de astfel de mulimi cu
ajutorul unui BFS al lui G din s.

Soluie:
Notaii : d = lungimea drumului minim ntre s i t
n = numrul maxim de mulimi st-inevitabile disjuncte dou cte dou

Demonstrm c n=d prin demonstrarea unei duble inegaliti:
I Demonstrm nsd

Fie D
S
(t) un drum minim de la s la t. Artm c orice mulime st-inevitabil conine cel puin o
muchie din D
S
(t).
Reducere la absurd:
Presupunem c exist o mulime A st-inevitabil care nu conine nici o muchie din drumul D
S
(t).
A fiind st-inevitabil, exist dou mulimi de noduri din V, S i T, cu s e S i T = V S, cu t e T, astfel
nct A este mulimea muchiilor din G care au o extremitare n S i o extremitate n T. Prin definiie,
acest mulime A este st-inevitabil.
Fie V(D
S
(t)) = {s = v
1
, v
2
, ..., v
d
, v
d+1
= t- mulimea nodurilor de pe drumul D
S
(t).
Demonstrm prin inducie c, n acest caz, toate nodurile din V(D
S
(t)) se vor afla n mulimea S,
inclusiv t, ceea ce contrazice ipoteza.
Pasul I:
tim din ipotez c s = v
1
e S. De asemenea, muchia v
1
v
2
e A, deoarece am stabilit c nici o muchie
din drumul D
S
(t) nu aparine mulimii A. Deci v
1
i v
2
se gsesc n aceeai mulime. Dar v
1
e S v
2
e S.
Pasul II:
Presupunem c v
k
e S. Artm c v
k+1
e S.
Muchia v
k
v
k+1
e A, deoarece am stabilit c nici o muchie din drumul D
S
(t) nu aparine mulimii A.
Deci v
k
i v
k+1
se gsesc n aceeai mulime. Dar v
k
e S v
k+1
e S.
70

Aadar, j s d+1, v
j
e S. Dar v
d+1
= t t e S, ceea ce contrazice ipoteza.
Presupunerea fcut este deci fals orice mulime st-inevitabil conine cel puin o muchie din
D
S
(t).
Dac dou mulimi st-inevitabile conin aceeai muchie v
i
v
i+1
, atunci ele nu sunt disjuncte. Deci
numrul maxim de mulimi st-inevitabile disjuncte este mai mic sau egal cu numrul de muchii din D
S
(t).

nsd.
II Vom arta c pentru orice graf G exist o familie de mulimi st-inevitabile de cardinal d.

Definim familiile de mulimi S
k
i A
k
astfel:
- S
1
= {s}
- A
1
= {sy | y e N
G
(s)}
- S
i+1
= S
i
(
yeSi
N
G
(y))
- A
i+1
= {xy | xe S
i+1
, y e N
G
(x) - S
i+1
}
Observaia 1: Din definirea mulimilor S
k
, se observ c S
k
conine toate nodurile aflate la distana
cel mult k-1 de nodul s, n mulimea S
k
S
k-1
aflndu-se toate nodurile situate exact la distana k-1 de s.
Demonstrm c mulimile A
k
sunt disjuncte.
Reducere la absurd:
Presupunem c exist o muchie xy e A
i
i xy e A
j
, i = j. Din definiia mulimii A
i
i faptul c xy e A
i
,
rezult c ori x, ori y e S
i
. Vom considera cazul cnd x e S
i
, cellalt caz tratndu-se la fel.
xy e A
i
y e N
G
(x) - S
i
y e S
i+1
- S
i
. (din definiia lui S
i+1
)
x e S
i
xy e A
j
y e N
G
(x) S
j
y e S
j+1
S
j
. (din definiia lui S
j+1
)
x e S
j
Se observ din definiia mulimilor S
k
:
S
1
_ S
2
_ _ S
m
.
Presupunem S
j + 1
_ S
i + 1
, cazul cellalt tratndu-se similar.
71
S
j + 1
_ S
i + 1
i i j S
j + 1
_ S
i
.
Dar y e S
j+1
, deci y e S
i
.
y e S
i+1
- S
i
contradicie.
S
i
i S
i+1
S
i
sunt submulii disjuncte ale lui S
i+1
mulimile A
k
definite ca mai sus sunt disjuncte.
Demonstrm c mulimile A
k
sunt st-inevitabile pentru k s d.
Presupunem c - i s d astfel nct mulimea A
i
nu este st-inevitabil (adic, eliminnd din graful G
muchiile din mulimea A
i
, nodul t rmne accesibil din nodul s).
Din definiia mulimii A
i
eliminnd din graful G muchiile din A
i
, orice nod din S
i+1
S
i
devine
inaccesibil din orice nod din S
i
. n consecin, orice nod din mulimile S
i+j
, j 1 devine inaccesibil din orice
nod din mulimea S
i
.
Dar mulimile S
k
se afl n relaia S
1
_ S
2
_ _ S
m
.
s e S
1
s e S
i
.
i s d - j 1 a.. t e S
i+j
- S
i
.
t este inaccesibil din s A
i
este st-inevitabil i s d.

Am obinut deci d mulimi disjuncte i st-inevitabile, ceea ce arat c numrul maxim de mulimi
st-inevitabile disjuncte este cel puin d .
Deoarece n>d i nsd, se obine n=d.
III Determinarea unei familii de astfel de mulimi cu ajutorul unui BFS al lui G din s.
n urma unei parcurgeri BFS a grafului pornind din nodul s obinem un arbore de lime, arbore n
care avem cte un drum minim de la s la fiecare dintre nodurile grafului iniial. Printre acestea se afl i
nodul t.
Vom arta c acest arbore are urmtoarea proprietate: ntre nodurile aflate n arbore pe un nivel k i
cele aflate pe nivelurile diferite de k+1 i k-1 nu exist muchii n graful G (avem muchii numai ntre
nodurile de pe niveluri consecutive i ntre cele de pe acelai nivel).
Presupunem prin reducere la absurd c am avea muchie ntre un nod u de pe un nivel k i un nod v
de pe un nivel k+ j, j >1. nseamn c nodurile u i v sunt adiacente i, dup principiul parcurgerii BFS, ar fi
trebuit ca nodul v s fie descoperit de nodul u (asta n cazul n care v nu ar fi fost descoperit anterior, de
72
alt nod adiacent cu el). Deci nodul v ar trebui s fie situat, cel mult pe nivelul k+1. Aadar presupunerea
este fals i deci v nu poate fi situat pe un nivel mai jos de k+1. Ne aflm n aceeai situaie i pentru
presupunerea c v s-ar afla pe nivelul k j, j >1.


Notm cu N numrul de niveluri din arborele de lime obinut prin parcurgerea BFS din s. Facem
urmtoarele alegeri:
- r = nivelul pe care se afl t, 1s r s N;
- mulimea S
i
= {s} , u| u se afl pe nivelul k, 2s k s i}, 1 s i < r;
- T
i
= V - S
i
(nodurile de pe nivelurile mai jos de i), 1 s i < r;
- A
i
= {e | e=uv, u eS
i
,v e T
i
, u se afl pe nivelul i i v se afl pe nivelul i+1-, 1 s i < r.
Vom demonstra c mulimile A
i
cu i de la 1 la r-1 formeaz o familie de mulimi st-inevitabile
disjuncte dou cte dou (cu numr maxim de asemenea mulimi).
Observaia 2: Numrul de mulimi A
i
este r-1. ntr-o parcurgere BFS, drumul obinut n arbore de la s
la t este un drum de lungime minim. Am convenit c t se afl pe nivelul r, deci lungimea drumului de la s
la t este r 1, adic este egal cu numrul mulimilor A
i
construite.

Artm c mulimile A
i
sunt st-inevitabile.
Reducere la absurd:
Presupunem c o astfel de mulime A
i
nu este st-inevitabil. Atunci exist un drum de la s la t care
nu are nici o muchie n mulimea A
i
, adic, dac am elimina din graful G muchiile din A
i
, nodul t ar
rmne n continuare accesibil din s.
Am artat mai sus c nodurile de pe nivelul i+1 sunt adiacente doar cu nodurile de pe nivelurile i, i+1
i i+2. Eliminnd muchiile din A
i
, adic toate muchiile dintre nodurile de pe nivelul i i nodurile de pe
nivelul i+1, nici un nod de pe nivelurile i+j, cu j 1 nu va mai fi accesibil din nici un nod de pe nivelurile k,
1s k s i.
Dar s se afl pe nivelul 1 (1 < i), t se afl pe nivelul r (r i + 1), deci prin eliminarea muchiilor din A
i
t
devine inaccesibil din s.
Deci mulimile A
i
definite ca mai sus sunt st-inevitabile.

Artm c mulimile A
i
sunt disjuncte dou cte dou.
Mulimile A
i
au urmtoarea form:
73
- A
1
conine muchiile ntre nivelul 1 i nivelul 2
- A
2
conine muchiile ntre nivelul 2 i nivelul 3
- ...
- A
r-1
conine muchiile ntre nivelul r-1 i nivelul r
Evident, aceste mulimi sunt disjuncte dou cte dou ntruct nodurile din V apar o singur dat n
arborele BFS.

Am artat c familia de mulimi A
i
este o familie de mulimi st-inevitabile i disjuncte dou cte dou
iar numrul de mulimi A
i
este numrul maxim de mulimi cu aceast proprietate.


Deci printr-o parcurgere BFS din nodul s obinem o familie maximal de astfel de mulimi, fiecare
mulime coninnd muchiile dintre dou niveluri consecutive.


Un algoritm care s obin o astfel de familie de mulimi printr-o parcurgere BFS este:

procedure construieteA
i
(G, s, t)
begin
//introducem s n coada BFS
adaug_BFS(s)
// iniializm cu 1 contorul i, care ne spune la ce mulime A am ajuns i pe ce nivel ne aflm.
// iniializm cu 1 variabila n
1
n care vom reine numrul de noduri de pe nivelul curent
74
// iniializm cu 0 variabila n
2
n care vom reine numrul de noduri de pe nivelul urmtor
i 1
n
1
1
n
2
0
/*vizitm primul nod din coad i introducem toi vecinii si nevizitai n coada BFS,
incrementnd n
2
la fiecare nod descoperit, apoi l extragem din coad i decrementm n
1
*/
/*cnd am extras exact attea noduri cte se afl pe nivelul curent, adic n
1
=0, incrementm i i
n
1
n
2
iar n
2
0*/
while ( t este nevizitat and BFS != NULL ) do
u (BFSfirst)
while (listaVeciniNevizitai_u NULL) do
v (listaVeciniNevizitai_u first)
adaug_BFS(v)
// introducem n A
i
toate muchiile descoperite prin acest procedeu
AdaugLaMulimeaDeMuchii(uv, A
i
)
elimin (v, listaVeciniNevizitai_u)
n
2
++
/*la fiecare nod descoperit i introdus n coada BFS, incrementm n
2
i
introducem muchia n A
i
*/
extrage_BFS(BFSfirst) //de cte ori extragem un nod decrementm n
1

n
1
--
if ( n
1
= 0 ) then
i++
n1 n
2

n
2
0
end

75
7. Fie G = (V, E) un graf conex i v un vrf al su cu proprietatea c N
G
(v) V ,v-. Dac pentru
Ac V notm cu N
G
(A) =
aeA
N
G
(a) A, se observ c exist mulimi de vrfuri A care satisfac
proprietile: v e A, [A]
G
este conex, N = N
G
(A) u i R = V (A N) u (de exemplu, A = {v}).
1. Demonstrai c, dac se consider o mulime A maximal (n raport cu incluziunea) satisfcnd
proprietile enunate, atunci orice vrf din R este adiacent cu orice vrf din N.
2. Dac, n plus, graful G este {C
k
}
k4
free, atunci mulimea N de la punctul a) are proprietatea c
este clic n graful G.
3. Deducei c singurele grafuri {C
k
}
k4
free, regulate i conexe sunt grafurile complete.

Soluie:

a) Fie G = (V, E) un graf conex, v un vrf al su cu proprietatea c N
G
(v) V {v} i A c V o mulime cu
proprietile:
a. v e A;
b. [A]
G
este conex;
c. N = N
G
(A) u ;
d. R = V (A N) u;
e. A maximal cu aceste proprieti n raport cu incluziunea.
Reducere la absurd:
Presupunem c nu orice vrf din R este adiacent cu orice vrf din N, adic
- ue R, - we N, a.. uw e E(G).
Construim A = A {w}.
v e A i Ac A v e A

we N - w e A a.. ww e E(G). *A+
G
este conex
[A]
G
este conex

N
G
(A) = ((N
G
(A) - {w}) N
G
(w)) A.
Dac N
G
(A) = u (N
G
(A) - {w}) N
G
(w) _ A
N
G
(A) - {w} _ A i N
G
(w) _ A.

76
N
G
(A) - {w} _ A N
G
(A) = {w} .
N
G
(A) A = u (din definiia lui N
G
(A))

Totodat, dac N
G
(A) = u, atunci i cu iw e E(G) i e A (adic singurii vecini ai lui w se gsesc n
A).
Dar A R = u (din definiia lui R)
j e R jw e E(G) j e R i e N ji e E(G) i G nu este conex, ceea ce
N R = u (din definiia lui R) j e R ke A jk e E(G) contrazice ipoteza.

N
G
(A) u

R = V (A N
G
(A)).
R u, deoarece R conine cel puin nodul u :
u e N
G
(w) (conform presupunerii fcute) u e V (A N
G
(A))
u e N i u e A (din ipotez, deoarece u e R i R = V (A N)

u e R R = V (A N
G
(A)) u.

Aadar, am artat c, dac nu orice vrf din R este adiacent cu orice vrf din N, atunci exist o
mulime A _ A cu proprietile cerute. Aceasta ar nsemna c A nu este maximal, ceea ce ar contrazice
ipoteza.
n concluzie, presupunerea fcut este fals, adic, dac A cu proprietile de mai sus este
maximal n raport cu incluziunea, atunci orice vrf din R este adiacent cu orice vrf din N.

b) Fie G = (V, E) un graf {C
k
}
k4
free pentru care sunt satisfcute proprietile din enun.
Reducere la absurd:
77
Presupunem c N nu este clic n G.
Atunci /N/ 2 (deoarece, dac /N/ < 2, adic /N/ = 1, N ar fi clic n G, ntruct graful cu un nod este
graf complet). n plus,
- u, w e N a.. uw e E(G).
De la a) x e R, ux e E(G) i wx e E(G).
Din definiia lui N ( =
aeA
N
G
(v) A ) - u, w e A a.. uu e E(G) i ww e E(G).
u i w nu sunt n mod obligatoriu distincte. Avem urmtoarele cazuri:
1. u = w. Atunci graful din Fig 3.1 este subgraf indus n G, deoarece:
- conform presupunerii fcute, nu exist muchie ntre u i w;
- x e R i u e A, N R = u nu exist muchia xu.
Totodat, graful de mai jos este graful C
4
. Aceasta contrazice ipoteza conform creia G este
{C
k
}
k4
free.

Fig. 3.1 Fig 3.2
2. u w i nu exist un vecin comun al nodurilor u i v n A (dac ar exista, aceast situaie s-ar
reduce la cazul anterior). tim c *A+
G
este conex, deci exist n *A+
G
un drum de lungime L 1
ntre u i w. Se vor alege acele noduri u i w pentru care drumul de la u la w n [A]
G
este
minim. Atunci graful din Fig. 3.2 este subgraf indus n G, deoarece:
- conform presupunerii fcute, nu exist muchie ntre u i w;
- x e R i u, w e A, N R = u nu exist muchia xu, respectiv muchia xw; totodat, toate
nodurile u
i
de pe drumul dintre u i w sunt din A, deci nu exist muchie nici ntre u
i
i x (dac -
u
i
, adic dac L > 1) .
- s-au ales acele noduri u i w vecine cu u, respectiv w, pentru care drumul de la u la w n [A]
G

este minim, deci nu exist pe drumul de la u la w alte noduri vecine cu u sau cu w (dac ar
exista, drumul nu ar fi minim).
Dar graful de mai sus este graful C
L+4
. Aceasta contrazice ipoteza conform creia G este {C
k
}
k4

free.

78
Am vzut c n ambele cazuri s-a ajuns la o contradicie, deci presupunerea fcut este fals.
Aadar, dac graful G este {C
k
}
k4
free, atunci mulimea N de la punctul a) are proprietatea c este
clic n graful G.

c) Fie G un graf {C
k
}
k4
free, regulat (o (G) = A (G)) i conex.
Dac un astfel de graf G are mai puin de 4 noduri, atunci este complet:

Vom studia cazul grafurilor cu cel puin 4 noduri.
Reducere la absurd:
Presupunem c G nu este complet.
Atunci, G fiind regulat, avem d(u) = t ( = o (G) = A (G)) < n 1, u e V(G).
Fie v e V(G) oarecare; avem d(v) = t < n 1. Aadar N
G
(v) V ,v-, deci exist mulimea A cu
v e A i avnd proprietile de mai sus.

O mulime A maximal se poate construi astfel (printr-un algoritm greedy):
- A {v}; N N
G
(v); R V (A N);
- ct timp - w e (V A) a.. :
- *A+
G
este conex, unde A = A {w};
- N =
ueA
N
G
(u) A u;
- R = V (A N) u;
execut A A {w}.
G este {C
k
}
k4
free N definit ca mai sus este clic n G (conform punctului b).
A este maximal fiecare nod din N este adiacent cu fiecare nod din R (conform punctului a)).

Fie a = |A|, b =|N|, c = |R|. Evident, a + b + c = |R| = n.
Fie un nod u e N i un alt nod we R.

79
u e N u are cel puin un vecin n A.
N este clic u are exact b 1 vecini n N. d(u) b + c.
A este maximal u are exact c vecini n R.

w e R w nu are nici un vecin n A.
A este maximal w are exact b vecini n N. d(w) s. b + c - 1.
w cel mult c 1 vecini n R.

d(u) d(w) graful G nu poate fi regulat.

Aadar, presupunerea fcut este fals. Singurele grafuri {C
k
}
k4
free, regulate i conexe sunt
grafurile complete.

80
8. Artai c se poate utiliza o parcurgere DFS pentru a determina un circuit par ntr-un graf 3-regulat
oarecare.

Soluie:
Fie G un graf 3-regulat i T arborele de adncime obinut prin parcurgerea DFS a grafului
G
dintr-un nod oarecare v. Fie u primul nod gsit n G pentru care nu mai exist vecini nevizitai.
Aadar, dintre cei 3 vecini ai lui u, u
1
, u
2
i u
3
, unul este printele lui u n T, iar ceilali doi au
fost vizitai nainte.
u fiind primul nod dup care nu se mai poate nainta, arborele construit pn la acest pas
este de fapt un lan, aa cum se observ n Fig. 4:

tim c exist muchie de la u la u
2
, aadar avem un circuit C
1
format din u
2
,
v
j+1
, ... ,
v
k-1
, u.
tim c exist muchie de la u la u
3
, aadar avem un circuit C
2
format din u
3
,
v
i+1
, ... ,
v
k-1
, u.
De asemenea, exist circuit C
3
format din nodurile u
3
, v
i+1
, ... , u
2
, u.

Dac C
1
este circuit par, atunci s-a gsit circuitul cutat.
Altfel, dac C
2
este circuit par, atunci s-a gsit circuitul cutat.
Dac nici unul dintre cele dou circuite nu este par, atunci:
- lungimea drumului de la u
2
la u este par (C
1
este circuit impar, deci
eliminndu-se muchia u
2
u se obine un drum de lungime L
1
par);
- lungimea drumului de la u
3
la u este par (C
2
este circuit impar, deci
eliminndu-se muchia u
3
u se obine un drum de lungime L
2
par);
Circuitul C
3
este format din muchiile din drumul de la u
3
la u
2
, la care se
adaug muchiile u
2
u i uu
3
. Lungimea L
3
a drumului de la u
3
la u
2
este diferena
dintre L
2
i L
1
, care este numr par, fiind diferen de numere impare.
Deci circuitul C
3
are lungimea L
3
+ 2 , care este numr par. S-a gsit deci i
n acest caz un circuit de lungime par.

Fig. 4

Un algoritm de cutare a unui circuit par ntr-un graf 3-regulat este:

procedure CautCircuitParDFS (G)
begin
for all i in V(G) do
vizitat(i) 0
v AlegeVrf(G)
vizitat(v) 1
/*fiecare vrf vizitat este introdus ntr-o stiv*/
Push(v, StivaDFS)
81
/*atta timp ct pentru ultimul nod vizitat mai exist vecini nevizitai se
continu parcurgerea DFS*/
while (NumrVeciniNevizitai(Top(StivaDFS)) 0) do
w AlegeVecinNevizitat(Top(StivaDFS))
vizitat(w) 1
Push(w, StivaDFS)
/*primul nod care nu satisface condiia din w h i l e este nodul u de mai sus*/
u Top(StivaDFS)
Pop(StivaDFS)
/*construim primul circuit C
1
*/
C Adaug(u)
u
1
Top(StivaDFS)
Pop(StivaDFS)
C Adaug(u
1
)
w Top(StivaDFS)
/*adugm la C nodurile din stiv pn la u
2
inclusiv (u
2
este vecin cu u, deci C devine
lista nodurilor unui circuit (lista nodurilor circuitului C
1
)*/
while (w nu este vecin cu u) do
C Adaug(w)
Pop(StivaDFS)
w Top(StivaDFS)
u
2
w;
C Adaug(u
2
)
/*dac C
1
nu este circuit par, construim C
2
*/
if (Lungime(C) este numr par)
then
return C
else
Pop(StivaDFS)
w Top(StivaDFS)
/*adugm la C nodurile din stiv pn la u
3
inclusiv (u
3
este vecin cu u, deci C
devine lista nodurilor unui circuit (lista nodurilor circuitului C
2
)*/
while (w nu este vecin cu u) do
C Adaug(w)
Pop(StivaDFS)
w Top(StivaDFS)
u
3
w;
C Adaug(u
3
)
/*dac nici C
2
nu este circuit par, construim C
3
, care cu siguran
va fi circuit par, aa cum am artat mai sus*/
if (Lungime(C) este numr par)
then
return C


else
Elimim din lista C nodurile dintre u i u
2
(fr u i u
2
)
return C
end.
82



TEMA NR. 5
1 aprilie 2003
9. S se arate c un graf G este bipartit dac i numai dac orice subgraf indus H al lui G satisface
proprietatea 2o(H) |H|.
Soluie:

Fie G un graf bipartit. Artm c H subgraf indus al lui G satisface proprietatea 2o(H) |H|.
G bipartit - S _ V, T = V S dou mulimi stabile.
Fie A _ V oarecare i H = *A+
G
.
Se disting urmtoarele dou cazuri:
1. A _ X (X e {S, T})
X este mulime stabil A este mulime stabil H = [A]
G
= N
|A|
o(H) =|A| =|H|
2o(H) |H|.
2. - M _ A a.. M _ S i A M u.
M _ S i (A M) _ T M i A M sunt mulimi stabile n G
M i A M sunt mulimi stabile n H = *A+
G
.
H este graf bipartit.
o(H) max(|M|, |A -M|).
o(H) |M| i o(H) |A - M| 2o(H) |M|+ |A - M| 2o(H) |A| 2o(H) |H|.
:
Fie G un graf pentru care 2o(H) |H|, H subgraf indus al lui G. Artm c G este bipartit.
Reducere la absurd:
Presupunem c G nu este bipartit.
83
tim c G este bipatrit G nu are circuite impare.
Presupunerea fcut implic deci faptul c exist circuite impare n G.
Fie C un astfel de circuit impar n graful G i V(C) mulimea nodurilor din acest circuit. Fie
|V(C)| = k, k impar. Avem urmtoarele dou cazuri:
1. C este subgraf indus n G.
2. C nu este subgraf indus n G. Atunci exist u, v e V(C) a.. uv e E(G). Aceast muchie uv formeaz
mpreun cu muchiile circuitului C alte dou circuite C
1
i C
2
.
Fie |V(C
1
)| = a i |V(C
2
)| = b. ntruct toate muchiile
din C
1
i C
2
apar n C, cu excepia lui uv, care este muchie
comun, avem:
a + b = k + 2.
Dar k este impar, deci a + b este impar, aadar cel
puin unul din circuitele C
1
i C
2
este impar.
Cel mai mic circuit impar care poate fi descoperit astfel este C
3
(circuitul de dimensiune 3), care, fiind
n acelai timp graf complet, este cu siguran subgraf indus.
84
Aadar, dac G are circuite impare, vom putea gsi ntotdeauna un astfel de circuit C care s fie
subgraf indus in G.
Dar o(C) = ( |V(C)| - 1)/2 pentru orice circuit impar.
(Demonstraie: Fie C un circuit, V(C) = {v
1
, v
2
, , v
k
}, k impar.
Se ncearc construirea unei mulimi stabile n V(C).

Alegndu-se, de exemplu, nodurile cu indice impar (v
1
, v
3
, ... ) se observ c
nici unul dintre nodurile v
k-1
, v
k
nu poate fi introdus n mulimea S stabil din cauza
adiacenei lor cu cte un nod care se afla deja n mulime (v
k-2
, respectiv v
1
).
Am construit deci o mulime stabil S maximal cu |S| = (|V(C)| - 1)/2.
o(C) > (|V(C)| - 1)/2.
Presupunem c exist o mulime S_ V(C) stabil cu |S| > (|V(C)| - 1)/2.
Fie |S| = t.
C este circuit, deci pentru orice i e V(C) avem d(i) = 2 (fiecare nod are exact
2 vecini n acest circuit). S fiind mulime stabil, fiecare nod i din S are exact 2
vecini n V S. Aceasta nseamn c ntre mulimile S i V S avem 2t muchii. Dar
circuitul C are exact |V(C)| = k muchii, k impar 2t k 1. t (k 1)/2, adic
|S| (|V(C)| - 1)/2, ceea ce contrazice ipoteza conform creia |S| > (|V(C)| -
1)/2.
Aadar, nu exist nici o mulime stabil n V(C) cu cardinalul strict mai mare
dect (|V(C)| - 1)/2 o(C) (|V(C)| - 1)/2.
o(C) = (|V(C)| - 1)/2. )

85
Aadar, o(C) = ( |V(C)| - 1)/2 2o(C) = (|V(C)| - 1) 2o(C) < |C|, ceea ce contrazice ipoteza
conform creia 2o(H) |H|, H subgraf indus al lui G.
Presupunerea fcut este deci fals G nu poate avea circuite impare G este graf bipartit.
10. Demonstrai c ntr-un graf bipartit G cu n vrfuri i m muchii avem inegalitatea 4m n
2
. Descriei
un algoritm care s testeze dac un graf cu n vrfuri i m muchii este complementarul unui graf
bipartit n timpul O(n+m).
Soluie:
Fie G = (S, V S; E) un graf bipartit. Vom nota T = V S.
Presupunem |S| = c, respectiv |T| = n c.
Din definiia grafurilor bipartite,
v e X, cu X e {S, T}, N
G
(v) X = u.
Aadar, toi vecinii unui nod din S se gsesc n T, respectiv toi vecinii unui nod din T se gsesc n S.
Fiecare nod din S poate avea deci cel mult |T| = n c vecini, respectiv fiecare nod din T poate avea deci
cel mult |S| = c vecini. Aadar, lungimea total a listelor de adiacen este:
L = c(n - c)+ (n c)c = 2c(n c).
tim c lungimea total a listlor de adiacen este de dou ori numrul de muchii m = c(n c).
Studiind variaia expresiei c(n c) pentru c ntreg din intervalul (0, n) se observ c se obine
valoarea maxim pentru c = [n/2], acest valoare maxim fiind n
2
/4.
Aadar,
m n
2
/4 4m n
2
.
Algoritm de decizie dac un graf G este complementarul unui graf bipartit
Observaia 1: Dac graful G este complementarul unui graf bipartit, atunci, conform celor
demonstrate mai sus,
4m n
2

unde m = |E( G )|, iar n este ordinul grafului G. Dar
|E(G)| + |E( G )| = |P
2
(V)| i | P
2
(V)| = n(n 1)/2
4(n(n 1)/2 - |E(G)|) n
2

86
4|E(G)| n
2
- 2n 4m n
2
-2n.
Aadar, o condiie necesar (dar nu i suficient) pentru ca G s fie complementarul unui graf
bipartit este ca 4m n
2
-2n, unde m = |E(G)|.
Observaia 2: Un graf H este bipartit H accept o 2-colorare.
Vom ncerca s decidem dac graful G este complementarul unui graf bipartit construind G i
verificnd dac acesta accept o 2-colorare.
Pentru ca algoritmul de mai jos s aib complexitatea cerut este necesar ca graful G s fie
reprezentat prin liste de adiacen.
function EsteComplementarDeGrafBipartit(G)
begin
n |V(G)|
m |E(G)|
if (4m < n
2
-2n) then return FALSE
H Complementar(G)
return EsteBipartit(H)
end
function Complementar(G)
begin
/*construim graful H cu n noduri*/
V(H) V(G)
/*n lista de adiacen a nodului i n H se plaseaza acele noduri care nu se gsesc n lista de
adiacen a lui i n G*/
/*Considerm listele de adiacen sortate cresctor*/
for i 0 to n 1 do
p listaDeAdiacenG(i)
for j 0 to n 1 do
87
if (p indexNod = j)
then p (pnext)
else
if (j i)
then Adaug(j, listaDeAdiacenH(i))
return H
end
function EsteBipartit(H)
begin
/*se va ncerca realizarea unei 2-colorri a grafului*/
/*cele dou culori folosite sunt 0 i 1*/
/*iniial toate nodurile sunt necolorate*/
for i 0 to n 1 do
culoare(i) -1
/*se realizeaz o parcurgere DFS a fiecrei componente conexe a grafului H */
for i 0 to n 1 do
/*dac nodul nu a fost deja colorat*/
if (culoare(i) = -1)
then
/*dac eueaz 2-colorarea uneia dintre componentele conexe, atunci graful
cu siguran nu este bipartit*/
if (DoiColorareDFS(i, 0) = FALSE)
then return FALSE
return TRUE
end
function DoiColorareDFS(v, culoare)
88
begin
culoare(v) culoare
for fiecare w din lista de adiacen a lui v do
/*dac w nu este deja colorat, se va continua parcurgeea DFS i colorarea nodurilor*/
if (culoare(w) = -1)
then DoiColorareDFS(w, 1 - culoare)
else
/*dac nodul a fost deja colorat, se verific dac cele dou noduri vecine, v i
w, au culori diferite; dac nu, atunci graful nu permite 2-colorare, deci nu este
bipartit*/
if (culoare(w) = culoare(v))
then return FALSE
return TRUE
end
Complexitatea algoritmului:
- verificarea condiiei necesare ca G s fie complementarul unui graf bipartit, 4m n
2
, se
face prin parcurgerea n totalitate a listelor de adiacen ale nodurilor din graful G i
numrarea nodurilor din aceste liste; se tie c lungimea total a listelor de adiacen
este 2m, iar parcurgerea lor integral se face n timpul O(n + m). Dac nu este ndeplinit
aceast condiie, algoritmul se termin. Altfel se trece la pasul urmtor.
- construcia grafului complementar se efectueaz n timpul O(n
2
), pentru fiecare vrf
verificndu-se dac toate celelalte vrfuri se afl sau nu n lista de adiacen. Dar, dac
s-a ajuns la acest pas, nseamn c:
n
2
-2n

4m,
adic n
2
( 1- 2/n) 4m.
n
2
= O(m).
Deci se poate spune c aceast etap se execut n timpul O(m).
- parcurgerea DFS pentru colorarea grafului H se execut n timpul O(n + m), unde m
este numrul de muchii din graful H (complementarul lui G). Dar m n
2
/4 (condiie
verificat la pasul 1) m = O(n
2
). n plus, aa cum am artat la pasul 2, n
2
= O(m).
Rezult deci c m = O(m). Aadar, acest pas se execut n timpul O(n + m).
Aadar, complexitatea algoritmului de mai sus este O(n + m) + O(m) + O(n + m) = O(n + m).
89
11. Artai c orice graf G cu m muchii are un graf parial H bipartit cu cel puin m/2 muchii.
Soluie:
Pentru a demonstra c orice graf G cu m muchii are un graf parial H bipartit cu cel puin m/2 muchii
vom arta c putem construi un astfel de graf parial bipartit H = (S, T; E(H)) pentru orice graf G = (V, E).
Vom construi o prim variant a mulimilor S i T ale grafului H printr-un algoritm greedy:
- se alege un nod v arbitrar din G, care este introdus n mulimea S;
- se alege un nou nod w ; dac acesta este adiacent cu v, atunci introducem nodul w n T,
altfel l introducem n S;
- pentru fiecare nod pe care l alegem din G, verificm unde are mai muli vecini: n S sau n
T (construite pn la pasul curent). l introducem n mulimea unde are mai puini vecini,
astfel nct s obinem mai multe muchii ntre nodurile din S i cele din T.
n graful parial H pstrm numai muchiile din G cu o extremitate n S i una n T. Evident, graful
astfel construit este bipartit. Dar nu putem spune nimic despre numrul de muchii ale grafului H obinut.
Este posibil ca acest graf s indeplineasc condiia cerut. n caz contrar, numrul de muchii din G care
apar n H este mai aproape de m/2 dect n majoritatea cazurilor n care s-ar fi fcut o partiionare
arbitrar a mulimii, evitndu-se efectuarea unui numr mare de operaii la pasul 2.
Pentru a obine un graf parial H bipartit cu cel puin m/2 muchii procedm astfel:
- dac numrul de muchii ale lui H obinut pn la acest pas este cel puin m/2, atunci
graful H construit la pasul anterior are proprietatea cerut, deci am artat c exist un
graf parial al lui G care s respecte cerinele i algoritmul se oprete;
- altfel, intrm ntr-o bucl repetitiv, avnd drept condiie de oprire inegalitatea : |E
H
|>
m/2; verificm la fiecare pas dac exist noduri n X e ,S , T - (mulimile S i T obinute
la pasul curent) care au mai muli vecini n X, dect n V-X. n acest caz, putem obine
prin mutarea fiecrui astfel de nod n V-X, cel puin o muchie n plus. Pstrm graful H
bipartit, scond din H muchiile dintre nodul mutat i nodurile din V-X, i introducnd
muchiile ntre nodul respectiv i nodurile din X.
Un algoritm prin care se construiete acest graf parial este:
function ConstruieteH(G)
begin
H construieteS_T_Greedy (G)
S_T_Rearanjare (G, S, T, H)
return H
end
90
function construieteS_T_Greedy (G)
begin
V(H) V(G)
S u
T u
muchii 0 //iniializm numrul de muchii cu 0
/* fiecare nod din V va fi plasat n acea mulime n care are maipuini vecini (se vor considera
mulimile S i T construite pn la pasul curent)*/
for all i in V do
if ( |N
G
(i) S | >|N
G
(i) T | )
then
//dac i are mai muli vecini n S, l introducem n T
adaug (T, i)
muchii muchii + |N
G
(i) S |
else
//altfel l adugm pe i la S
adaug (S, i)
muchii muchii + |N
G
(i) T |
//adugm la E(H) muchiile dintre i i nodurile din mulimea n care nu se afl acesta
E(H) E(H) {iv | iv e E(G), veV-X, cu X e {S, T} }
return H
end

procedure S_T_Rearanjare (G, H, S, T)
begin
91
/*la fiecare pas cutm acele noduri i din mulimea X (Xe {S, T}) pentru care numrul de vecini
(n G) din X este mai mare dect numrul de vecini din VX; dac gsim un astfel de nod, acesta
este mutat n cealalt mulime, i se reactualizeaz numrul de muchii*/
while ( muchii < m/2 ) do
for X in {S, T} do
for all i in X do
if ( |N
G
(i) X | > |N
G
(i) ) ( X V | )
then
//dac i are mai muli vecini n X, l introducem n V-X
extrage (X, i)
adaug (V-X, i)
/*se elimin muchiile dintre i i nodurile din V-X i se introduc muchiile
dintre i i nodurile din X; se actualizeaz numrul de muchii*/
muchii muchii |N
G
(i) ) ( X V | + |N
G
(i) X |
//actualizm i mulimea E(H)

E(H) (E(H) {iv | iv e E(G), veV-X }) {iw | iw e E(G), weX }
end

Algoritmul de mai sus se oprete, iar la oprire graful construit are proprietatea cerut, deoarece:
- dac a fost efectuat o mutare dintr-o submulime n alta, nseamn c s-a gsit cel puin
un nod care are mai muli vecini n submulimea n care a fost repartizat anterior dect n
cealalt submulime; deci, prin mutarea lui, se ctig cel puin o muchie;
- numrul de muchii din G este evident finit, numrul de muchii din H este majorat de
numrul de muchii din G, iar numrul de muchii obinut la fiecare pas din transformarea lui
H este strict cresctor, aa cum am artat mai sus, deci numrul de pai este finit;
- dac nu este efectuat nici o schimbare, atunci:
- v din X, cu X e {S, T}, a.. |N
G
(v) X | >|N
G
(v) ) ( X V |
|N
G
(v) ) ( X V | |N
G
(v) X |
pentru fiecare nod din V, cel puin jumtate din muchiile adiacente cu el n G apar i n
H
E(H) E(G)/2. (aceasta arat c atunci cnd nu se mai pot efectua mutri scopul a fost
atins).
92
93
12. Demonstrai c n orice graf conex G = (V, E) exist o mulime stabil S astfel nct graful bipartit
H = (S, V - S; E) este conex, unde E = E P
2
(V S). Deducei c o(G) (|G| - 1) / A(G) pentru orice
graf conex G.
Soluie:
Vom arta c se poate construi o mulime S stabil cu proprietatea din cerin.
Folosim parcurgerea BFS dintr-un nod oarecare al grafului G, bazndu-ne pe faptul c n
arborele de lime obinut nu exist muchii dect ntre nodurile de pe nivelurile consecutive i ar
putea exista muchii n graful iniial ntre nodurile de pe acelai nivel.
Pasul 1
Iniial, introducem n mulimea S, care trebuie s devin n final stabil, nodurile de pe
nivelurile impare ale arborelui de lime. n cealalt mulime rmn nodurile de pe nivelurile
pare. Pstrm exact muchiile din arbore (adic muchiile dintre niveluri). ntruct arborele de
lime este graf conex nseamn c i graful obinut din acest arbore prin procedeul de mai sus
rmne conex. Deci deocamdat nu exist muchii ntre nodurile din S i nici ntre nodurile lui V-
S.
ns mulimea S nu este obligatoriu stabil la acest pas.
Pasul 2
Este necesar s verificm dac exist muchii ntre nodurile din S care se aflau pe acelai
nivel n arbore. Pentru fiecare nod v din S se verific dac exist muchie ntre nodul v i un alt
nod din S. Dac gsim o astfel de muchie:
- extragem nodul v din S i l introducem n V - S;
- pentru fiecare nod w din V - S, adiacent cu v, verificm dac mai are vecini n S
dup eliminarea nodului v; exist posibilitatea s distrugem conexitatea grafului
(ntruct toi vecinii lui w s-ar putea afla n V-S i atunci w ar rmne izolat).
Dac nu mai are vecini n S, mutm nodul w n S, n locul lui v. w va avea cel
puin un vecin n V - S, i anume pe v.
Observaie: Excludem din graful iniial toate muchiile ntre nodurile mulimii V-S.
Mulimea S obinut este stabil deoarece:
- am eliminat din S toate nodurile care erau adiacente cu noduri din S;
- am adugat un nod din V - S la S numai n cazul n care acesta nu mai era
adiacent cu nici un nod din S, deci nu avea vecini dect n V - S.

Graful H obinut n aceast manier este conex ntruct:
- un nod v din S care era rdcina arborelui de lime sigur este legat de cel puin
un nod din
V-S, i anume de nodurile de pe nivelul 2 din arbore care sunt fiii lui v;
- un nod v din S care se afla n arbore pe unul din nivelurile de forma 2k+1
(cu 0<k s [
2
1 N
], unde N este numrul total de niveluri ale arborelui) este
sigur legat de un nod w de pe nivelul 2k, aflat n mulimea V-S (adic printele
lui); w nu putea fi mutat n S deoarece el avea un vecin n S, i anume v.
94
- un nod v din S care se afla pe unul dintre nivelurile de forma 2k (cu 0< k s [
2
1 N
]) are sigur un vecin situat pe nivelul 2k-1 i care se afl n mulimea V-S;
nodul v de pe nivel par nu a putut ajunge n mulimea S dect printr-un schimb cu
un nod de pe nivelul 2k-1 adiacent cu el, care a ajuns n V-S (dup cum se
observ din construcia mulimii S);
- un nod w din V-S care se afla pe unul dintre nivelurile de forma 2k (cu 0< k s [
2
1 N
]) este sigur legat de un nod v de pe nivelul 2k-1 (nodul de care a fost
descoperit n BFS). Acest nod v poate fi situat n S i atunci exist muchie ntre
cele dou (deci w nu este izolat) sau se poate afla n V-S; dac v a fost mutat n
V-S fr a-l muta i pe w nseamn, conform algoritmului, c w avea un alt vecin
n S (deci nici n acest caz w nu rmne izolat).
- un nod w din V-S care se afla n arbore pe unul din nivelurile de forma 2k+1
(cu 0<k s [
2
1 N
]) este sigur legat de un nod de pe acelai nivel cu el, aflat n S
(din aceast cauz a fost mutat n aceast mulime).
Deci nu exist noduri izolate n graful H nici n S, nici n V - S, ntotdeauna existnd un
nod adiacent cu el din cealalt mulime, aa cum am artat mai sus; aadar graful H obinut
este conex.
Un algoritm care construiete mulimea S este:
procedure construieteS(G)
begin
construieteS_BFS (G)
rearanjareS (G)
end
procedure construieteS_BFS (G)
begin
//alegem un nod s aleator, nod de start pentru BFS
//introducem s n coada BFS
adaug(BFS, s)
// iniializm cu 1 contorul i, care ne spune pe ce nivel ne aflm.
// iniializm cu 1 variabila n
1
n care vom reine numrul de noduri de pe nivelul curent
// iniializm cu 0 variabila n
2
n care vom reine numrul de noduri de pe nivelul urmtor
95
i 1
n
1
1
n
2
0
/*vizitm primul nod din coad i introducem toi vecinii si nevizitai n coada BFS,
incrementnd n
2
la fiecare nod descoperit, apoi l extragem din coad i decrementm n
1
*/
/*cnd am extras exact attea noduri cte se afl pe nivelul curent, adic n
1
=0, incrementm i i
n
1
n
2
iar n
2
0*/
while ( t este nevizitat and BFS != NULL ) do
u (BFSfirst)
while (listaVeciniNevizitai_u NULL) do
v (listaVeciniNevizitai_u first)
adaug(BFS, v)
elimin (listaVeciniNevizitai_u, v)
n
2
++
/*la fiecare nod v descoperit i introdus n coada BFS, incrementm n
2
i
introducem v n S dac i este numr impar sau n V-S dac este par*/
if ( i este impar ) then
adaug (S, v)
else
adaug (V-S, v)
extrage_BFS(BFSfirst) //de cte ori extragem un nod decrementm n
1

n
1
--
if ( n
1
= 0 ) then
i++
n1 n
2

n
2
0
end
procedure rearanjareS (G)
begin
//pentru fiecare nod din S verificm dac mai are vecini n S
for all i in S do
if ( N
G
(i) S | = ) then
//dac i are vecini n S, l scoatem din S i l mutm n V-S
96
extrage (S, i)
adaug(V-S, i)
/*extragem din V-S vecinii lui i care nu mai au noduri adiacente n S i i
introducem n S*/
for all j in N
G
(i) (V-S) do
if (N
G
(i) S =| ) then
extrage (V-S, j)
adaug (S, j)
end
Demonstrm c o(G) (|G| - 1) / A(G) pentru orice graf conex G.
Aa cum am artat mai sus, exist o mulime stabil S astfel nct graful bipartit
H = (S, V - S; E) este conex, unde E = E P
2
(V S).
Vom studia valoarea lui |E|.
Notaie: m = |E|.
Demonstrm prin inducie dup numrul de noduri c orice graf conex G are cel puin |G| - 1
muchii.
I. Pentru n = 1: m = 0 m = n 1 m n 1.
Pentru n = 2: m = 1 m = n 1 m n 1.
II. Presupunem afirmaia adevrat pentru orice graf G cu |G| = k i o demonstrm pentru
grafurile G cu |G| = k + 1:
Fie G un graf conex cu k noduri. Prin adugarea unui nod v se obine un nou graf G. Pentru a
pstra conexitatea, este necesar ca v s aib cel puin un vecin printre nodurile lui G, deci se va
aduga cel puin o muchie. Aadar
|E(G)| - |E(G)| 1 |E(G)| |E(G)| + 1. (1)
Dar G are k noduri, deci din ipoteza inductiv |E(G)| k 1. (2)
n plus, |G| = k + 1.
Din (1) i (2) |E(G)| k |E(G)| |G| 1.
Am demonstrat c orice graf G conex are cel puin |G| - 1 muchii. Proprietatea se pstreaz i
pentru grafurile bipartire.
97
m |G| - 1 (3)
Presupunem S = {v
1
, v
2
, , v
k
}, unde k = |S|.
H = (S, V - S; E) este graf bipartit i S este mulime stabil n G
m = |E| = d(v
1
) + d(v
2
) + + d(v
k
).
Dar, v e V, d(v) s A(G)
m s A(G) + A(G) + + A(G) m s k A(G).

de k ori
S este mulime stabil n G k = |S| s o(G)
m s o(G) A(G) (4)
Din (3) i (4) |G| - 1 s m s o(G) A(G) o(G) A(G) |G| - 1
o(G) (|G| - 1) / A(G).
TEMA NR. 6
8 aprilie 2003
13. Pentru deN* se consider graful G
d
= K
2
* K
2
** K
2
.
S se determine ordinul, dimensiunea i diametrul lui G
d
.
S se arate c G
d
este bipartit i s se determine (G
d
).
Soluie:
Pentru a intui modul de construire a grafurilor de forma dat vom asocia fiecrui nod coordonate,
pornind de la graful K
2
= G
1
.

n continuare, pentru a obine G
d
,cu d > 1, folosim definiia produsului cartezian a dou grafuri. Fie
G=(V, E) i H=(V, E) dou grafuri. Notm cu G H graful obinut dup urmtoarele reguli:
V(G H) = V V
E(G H) = , (v, v)(w, w)| v=w i vweE sau v=w i vweE }
98
Graful G
2
= K
2
* K
2
va arta astfel (ptratul):

Graful G
3
= K
2
* K
2
* K
2
arat astfel (cubul):

1. Vom arta prin inducie c numrul de vrfuri ale grafurilor G
d
este
2
d
, d >1.
Pas I. Evident, numrul de vrfuri ale lui G
1
=K
2
este 2
1
i deci 2.
Pas II. Presupunem c |V(G
d
)| = 2
d
, d >1 i demonstrm c |V(G
d+1
)| = 2
d+1
.
Din modul n care se construiesc aceste grafuri, observm c
nodurile pentru graful G
d+1
se obin din nodurile grafului G
d
: la d-
uplele care formeaz reprezentarea nodurilor lui G
d
adugm 0 i 1
(prin produsul cartezian dintre multimea de d-uple i perechea (0,1) ).
Obinem reprezentarea nodurilor din G
d+1
i de fapt elementele codului
Gray pe d+1 poziii. Deci pentru fiecare nod din G
d
obinem dou d+1-
uple (unul prin adugarea lui 0 i unul prin adugarea lui 1). n
concluzie, |V(G
d+1
)| = |V(G
d
)| * 2=2
d
* 2= 2
d+1
.
Am demonstrat c numrul de vrfuri este 2
d
, pentru grafurile G
d
.
2. Pentru a calcula numrul de muchii ne folosim de definiia
produsului cartezian a dou grafuri.
99
Iniial, artm c n graful G
d
exist muchie numai ntre acele d-uple
care difer printr-un singur element. Vom demonstra aceast proprietate
prin inducie.
I. Pentru pasul de baz, verificm proprietatea pentru G
2
, ntruct
pentru G
1
este evident adevrat. Observm c avem muchie ntre
(0,0) i (0,1), ntre (0,1) i (1,0), ntre (1,0) i (1,1), i ntre (0,1) i (1,1).
Evident, aceste muchii respect relaia de mai sus.
II. Presupunem proprietatea adevrat pentru G
d
, cu d>2 i demonstrm
pentru G
d+1
.
Fie dou d+1-uple de forma coordonatelor nodurilor: (x
1
, x
2
,, x
d
,
y
1
) i (x
1
, x
2
, , x
d
, y
2
), unde x
i
, x
i
, y
1
, y
2
au valoarea 0 sau 1.
Conform definiiei produsului cartezian, exist muchie ntre cele dou
noduri dac:
- (x
1
, x
2
,, x
d
) = (x
1
, x
2
, , x
d
) i y
1
, y
2
sunt numere diferite (
adic unul este 0 i unul este 1, pentru a avea muchie n graful
K
2
;
sau
- y
1
= y
2
i ntre (x
1
, x
2
,, x
d
) i (x
1
, x
2
, , x
d
) exista muchie n
graful G
d
.
n prima situaie, este evident c d+1-uplele difer printr-un singur
element (i anume y
1
, respectiv y
2
). n cea de-a doua situaie avem y
1
=
y
2
i tim c exista muchie ntre nodurile determinate de d-uple n
graful G
d
. Conform ipotezei inductive, avem c n graful G
d
exist muchie
numai ntre acele d-uple care difer
printr-un singur element. Deci d-uplele (x
1
, x
2
,, x
d
) i (x
1
, x
2
, , x
d
)
difer printr-un singur element iar y
1
= y
2
. Aadar, cele dou d+1-uple
difer printr-un singur element, n cazul n care ntre acestea exist
muchie n graful G
d+1
.
Am demonstrat deci c n graful G
d
exist muchie numai ntre acele d-
uple care difer printr-un singur element.

Pentru a afla numrul de muchii, este necesar s verificm pentru
fiecare nod din G
d
cu cine este legat, i conform proprietii
100
demonstrate mai sus, trebuie de fapt s determinm toate nodurile ale
cror coordonate difer de cele ale nodului ales printr-un singur
element. Pentru un d-uplu (corespunztor coordonatelor unui nod din
G
d
) avem alte d d-uple care s difere de acesta printr-un singur element (n
locul fiecrui element din d-uplu se poate pune opusul su).
Deci, pentru fiecare nod, obinem d noduri adiacente cu el (adic
gradul nodului este d, deci G
d
este graf d-regulat).
tiind de la punctul anterior c numrul de noduri este 2
d
, i tiind
c numrul de muchii este jumtate din suma gradelor tuturor
nodurilor, se obin (d * 2
d
)/2 muchii, adic d * 2
d-1
muchii n graful G
d
.

3. Pentru a determina diametrul grafului G
d
, artm c drumul minim
dintre dou noduri distincte ale grafului este numrul de elemente distincte
din d-uplele corespunztoare acestor noduri (evident, acesta este un
numr ntre 1 i d).
101
Fie v=(x
1
, x
2
,, x
d
) i w=(x
1
, x
2
, , x
d
), dou d-uple care reprezint
coordonatele a dou noduri din G
d
. Presupunem c acestea difer prin
k elemente, 1 s k s d.
Fie a = lungimea drumului minim de la v la w. Demonstrm prin
dubl inegalitate c a = k.
I. a > k:
Demonstrm c orice drum de la v la w are lungimea > k. Implicit,
drumul minim dintre cele dou noduri va avea aceeai proprietate.
Reducere la absurd:
Presupunem c exist un drum de la v la w de lungime l (l < k). Fie
v, u
1,
, u
2
, , u
l-1
, w nodurile de pe drumul de la v la w.
Dup cum am artat mai sus, nu avem muchie dect ntre nodurile
ale cror d-uple difer printr-un singur element. Deci d-uplul
corespunztor lui u
1
difer de v printr-un singur element.
Exist muchie ntre v i u
1,
, deci d-uplul lui v difer de al lui u
1
prin
exact un element.
Exist muchie ntre u
i
i u
i+1,
, deci d-uplul lui u
i
difer de al lui u
i+1

prin exact un element, pentru i de la 1 la l - 2.
Exist muchie ntre u
l
i w
,
, deci d-uplul lui u
l
difer de al lui w prin
exact un element.
n consecin,d- uplul lui v difer de al lui w prin cel mult l elemente.
Observaie: am menionat mai sus c d-uplele a dou noduri difer
prin cel mult p elemente i nu prin exact p elemente deoarece:
- fiecare muchie transform un singur 0 sau 1din d-uplul unei
extremiti ntr-un 1 sau 0 din d-uplul celeilalte exremiti.
- este posibil ca dup parcurgerea unui numr de muchii, un
element din d-uplu s revin la valoarea iniial.
102
Exemplu:
Fie un drum care trece prin urmtoarele noduri:
00100 00110 01110 01100
Mersul de mai sus are toate nodurile i toate muchiile distincte,
deci este drum. D-uplul primului nod difer printr-un singur
element de d-uplul ultimului, dei drumul dintre ele are lungime
3. Evident, un astfel de drum nu este un drum minim.
Am ajuns la o contradicie ntruct tiam c d-uplul lui w difer prin
k elemente fa de al lui v i l < k.
Deci presupunerea este fals i am obinut c orice drum dintre v i w
are lungimea cel puin k; n consecin, drumul minim are aceeai
proprietate a > k.
II. a s k.
Ideea este c pentru a putea ajunge de la v la w trebuie s
schimbm pe rnd cte un element al lui v din cele k distincte, pn
ajungem la forma lui w. Avem nevoie de k schimbri i deci de k
muchii prin care s trecem.
Dac am avea mai multe schimbri de valoare pentru acelai
element (fiecrei astfel de schimbare i corespunde o muchie, deci am
avea implicit mai mult de k muchii), ar aprea una din urmtoarele
situaii:
- la pasul i
r
am schimbat elementul de pe poziia j (din cele k ce
trebuie schimbate) i obinem valoarea pe care dorim s o
obinem pe aceast poziie
- la pasul i
s
(s > r) schimbm din nou elementul de pe poziia j
(am revenit la valoarea lui iniial)
- la pasul i
t
(t > s) schimbm elementul de pe poziia j i
ajungem din nou la valoarea dorit pe aceast poziie.
103
Aceast situaie este redundant, ea putnd fi evitat,
nemaitrecnd prin paii i
s
i i
t.
Sau
- la pasul i
r
am schimbat elementul de pe poziia j (dintre
elementele care nu trebuiau schimbate)
- la pasul i
s
(s > r) schimbm din nou elementul de pe poziia j
(i revenim la valoarea pe care trebuie s o avem n final)
i aceast situaie este redundant, putnd fi ocolit dac nu se
mai trece prin paii i
r
i i
s
, care nu sunt absolut necesari.
n final am obinut c drumul minim dintre dou noduri ale grafului G
d

este numrul de elemente distincte din d-uplele corespunztoare acestor
noduri.
Evident, numrul maxim de elemente care pot fi distincte ntre cele
dou noduri este d i deci maximul lungimilor drumurilor minime din graf
este d.

4. Pentru a arta c graful G
d
este bipartit folosim urmtoarea
proprietate:
104
Un graf este bipartit dac i numai dac nu admite circuite impare.
Alegem un circuit C i fie V(C) = {u
1
, u
2
, , u
k
}.
Muchiile acestui circuit sunt: u
1
u
2
, u
2
u
3
, , u
k
-
1
u
k
, u
k
u
1.
Este necesar ca u
1
i u
k
s difere printr-un singur element. Ideea
este c n momentul n care trecem de la un nod u
i
la nodul u
i+1
i
schimbm unul din elementele din u
1
, este necesar ca la un pas
ulterior s readucem acel element la valoarea sa iniial. Deci pentru
fiecare muchie (care schimb elementul de pe poziia i) trebuie s avem i
complementara ei (care aduce la valoarea iniial acest element).
Trebuie s avem numr par de muchii i deci numr par de noduri.
n concluzie, nu putem avea circuite impare i deci graful este
bipartit.

5. Vom demonstra prin dubl inegalitate c (G
d
) = 2
d-1
.
I. (G
d
) > 2
d-1
.
Vom arta c se poate construi o mulime stabil maximal S n G
d
cu
|S| = 2
d-1
.
Folosind definirea codului Gray i modul n care se formeaz
muchiile n graful G
d
, construim o mulime S stabil maximal astfel:
- pornim de la un nod oarecare v;
- alegem un nod neadiacent cu v, cel mai apropiat de v (adic la
dou muchii distan); acest nod l gsim folosind codul Gray:
este al doilea element din irul codului Gray, dup v. Evident,
acest nod nu este adiacent cu v, deoarece are dou elemente
distincte fa de v i deci drumul minim ntre ele este 2 (aa
cum am artat la punctul 3);
- n continuare alegem nodurile din irul codului Gray din 2 n 2
(vedem acest ir ca pe o list circular), pn cnd ajungem
din nou la nodul v.
105
Lungimea acestui ir Gray este 2
d
, iar noi alegem jumtate din
elementele irului, deci 2
d-1
elemente.
Vom arta c n momentul n care alegem un element din ir aflat la un
element distan fa de cel ales la pasul anterior, acesta nu este adiacent
cu nici un element care se afl deja n mulimea S.
Reducere la absurd:
Presupunem c nodul v ales la pasul curent, urmnd algoritmul de
mai sus, este adiacent cu un nod aflat deja n mulimea S; fie acel nod
w. Deci reprezentrile lui v i w difer printr-un singur element din d-
uplu.
ntre v i w n irul determinat de codul Gray avem numr impar de
elemente (pentru fiecare nod aflat printre acestea i care a fost inclus
n S, mai avem cte dou elemente care l ncadreaz, deci dac ntre v
i w mai sunt s elemente incluse n S, n irul codului Gray vom avea
2s+1 elemente ntre v i w).
Elementele de la v la w din ir determinat de codul Gray formeaz un
lan (fiecare difer de cel anterior lui i de cel de dup el printr-un
singur element din d-uplu, i deci sunt legate prin muchii n G
d
) i deci
formeaz un circuit ntruct am presupus c avem muchie de la v la w.
Dar acest circuit are numr impar de elemente, astfel nct am ajuns la
o contradicie deoarece la punctul 4 am artat c graful G
d
este bipartit
i deci nu admite circuite impare.
Deci presupunerea fcut este fals.

Artnd acest lucru, am obinut c mulimea S construit ca mai sus
este stabil i evident maximal (dac am mai alege un element care se
afl n ir ntre cele deja alese, el ar fi adiacent cu dou noduri din
mulime, cu nodul de dup el din ir i cu nodul de nainte).
Deci (G
d
) > 2
d-1
.
Observaie: Acelai lucru se poate demonstra innd cont de
problema 1 din tema 5, adic: un graf G este bipartit dac i numai
dac orice subgraf indus H al lui G satisface proprietatea 2o(H) |H|.
106
Am artat c G
d
este bipartit i |G
d
| = 2
d
. Evident, G
d
este subgraf
indus n G
d
. Aadar 2o(G
d
) = |G
d
|, adic (G
d
) > 2
d-1
.
II. (G
d
) s 2
d-1
.
Reducere la absurd:
Presupunem c exist o mulime stabil S _ V(G
d
) astfel nct |S|
> 2
d-1
. Fie |S| = s.
Aa cum am artat mai sus, graful G
d
este d-regulat, adic gradul
oricrui vrf v din V(G
d
) este d. Implicit, pentru fiecare vrf v din S
exist exact d muchii incidente cu acesta. S fiind mulime stabil, toi
vecinii nodurilor din S se gsesc n V(G
d
) S, adic ntre mulimile
S i V(G
d
) S sunt exact d*s muchii. Dar s > 2
d-1
, deci pentru numrul
m de muchii dintre mulimile S i V(G
d
) S avem relaia:
m > d * 2
d-1
.
Dar, aa cum am artat mai sus, E(G
d
) = d * 2
d-1
.
Se obine deci m > E(G
d
), ceea ce este o contradicie.
Presupunerea fcut este deci fals (G
d
) s 2
d-1
.
ntruct (G
d
) > 2
d-1
i (G
d
) s 2
d-1
(G
d
) = 2
d-1
.

14. Un graf cu cel puin 3 vrfuri se numete confidenial conex dac pentru orice trei vrfuri
distincte a, b, c ale grafului exist un drum de la a la b astfel nct niciunul dintre vrfurile
interne ale acestui drum ( dac exist astfel de vrfuri ) nu este c sau un vecin al lui c. Un
exemplu banal de graf confidenial conex este graful K
n
, cu n >2. Demonstrai c un graf conex
G = (V, E), cu cel puin 3 vrfuri i care nu-i complet, este confidenial conex dac i numai dac
au loc urmtoarele dou condiii:
1. Pentru orice vrf v mulimea N (v) = { weV | w= v, vweE - este nevid i induce un graf
conex.
2. Orice muchie a grafului este coninut ntr-un C
4
indus n graf sau este muchia din mijlocul
unui P
4
indus n graf.
Soluie:
:
107
Vom presupune c graful G, cu |V(G)| = n, n > 2, i G= K
n
, este confidenial conex.
Trebuie s demonstrm relaiile 1 i 2.
1. Demonstrm c v, mulimea N (v) | = i induce un graf conex.
1.1 Demonstrm c veV(G), mulimea N (v) | = .
Reducere la absurd:
Presupunem c -v astfel nct N (v) = | .
Aceast presupunere ne conduce la faptul c nodul v are n-1
vecini. ntruct graful G nu este complet,
- a,b dou noduri din V(G) neadiacente (i evident diferite de v
deoarece, altfel, ar exista muchie ntre cele dou noduri conform
alegerii lui v).
Din definiia grafurilor confidenial conexe i din faptul c
nodurile a i b alese anterior nu sunt adiacente, obinem c exist un
drum de la a la b care conine vrfuri interne, acestea fiind diferite de v i
de vecinii lui v.
Am obinut c pe unul dintre drumurile de la a la b, -weV(G), w= v i weN (v). Dar v
era adiacent cu toate nodurile lui G deci am ajuns la o contradicie.
Aadar presupunerea de la care am plecat este fals.
Am demonstrat c veV(G), mulimea N (v) | = .
1.2 Demonstrm c veV(G), mulimea N (v) induce un graf conex.
108
Demonstrm c pentru a, be N (v) exist un drum de la a la b care
are toate nodurile interne n N (v) (aceasta n cazul n care nodurile a i b
nu sunt adiacente; altfel, relaia este automat adevrat).
Din definiia grafurilor confidenial conexe, tim c a, beV(G),
exist un drum de la a la b ale crui noduri interne s fie diferite de v
i neadiacente cu acesta. Evident, nodurile aflate pe acest drum se
afl n N (v), i deci aparin grafului indus de N (v).
Am demonstrat de fapt c a e N (v), acesta este adiacent cu
toate celelalte noduri din N (v) prin drumuri care se pstreaz n N (v).
Deci mulimea N (v) induce un graf conex, veV(G).
2. Demonstrm c abeE(G), a, beV(G), avem muchia ab inclus ntr-
un circuit C
4
indus n graful G, sau se afl n mijlocul unui P
4
indus n graf.
Aceast proprietate se reduce la urmtoarea relaie:
- aeV(G), d
G
(a) >2;
- abeE(G), cu a, beV(G), avem N(a) N(b) = | .
Demonstrm echivalena celor dou relaii prin dubl implicaie.
: Aceast implicaie este evident.
Avem urmtoarele dou situaii:


ntruct graful G este conex, putem spune c orice nod al grafului are un nod adiacent cu
el, cu care s formeze o muchie. Aceast muchie se afl n unul din cele dou cazuri, dup cum
am presupus la nceput, deci evident nodurile care formeaz muchia respectiv au gradul mai
mare sau egal cu 2.
De asemenea, observm c n ambele cazuri:
- N(a) N(b) _{d}
109
- N(b) N(a) _{c}
:: Considerm o muchie abeE(G), cu a, beV(G).
tim c
- N(a) N(b) = | -deV(G) astfel nct d eN(a) i d eN(b)
- N(b) N(a) = | -ceV(G) astfel nct c eN(b) i c eN(a)
Observm c avem drum de la d la c, care cuprinde
nodurile : d, a, b, c. Deoarece d eN(b) i c eN(a) putem spune c
singurele muchii ntre nodurile a, b, c, d sunt: ac, ad, bc i cd n
cazul n care c i d sunt adiacente. Deci graful indus de cele 4
vrfuri conine numai aceste muchii i, n cazul n care - muchia
cd, graful indus este un ciclu de lungime 4, altfel este un P
4
.
Am artat c cele dou relaii sunt echivalente deci demonstraia
noastr de la punctul 2 se reduce la a arta c pentru un graf
confidenial conex sunt ndeplinite relaiile:
- aeV(G), d
G
(a) >2;
- abeE(G), cu a, beV(G), avem N(a) N(b) = | .
110
Vom demonstra iniial c aeV(G), d
G
(a) >2.
tim c graful nostru este conex, deci aeV(G), avem d
G
(a) >1.
Reducere la absurd:
Presupunem c -aeV(G) pentru care d
G
(a) = 1.
Fie c nodul adiacent cu a. Deoarece graful G are ordinul mai mare
dect 2 putem spune c -beV(G), astfel nct b eN(a) i beN(c)
(deoarece graful este conex, c nu poate avea gradu1).
Conform definiiei grafurilor confidenial conexe, ar trebui s avem
un drum de la a la b, care s aib toate nodurile interne diferite de c i
de vecinii lui c. ns, singurul drum de la a la b trece prin c, deoarece c
este singurul nod adiacent cu a.
Am ajuns la o contradicie, deci relaia aeV(G), d
G
(a) >2 este
adevrat.
La acest pas, demonstrm c n ipoteza c graful G este confidenial
conex, cu ordinul mai mare dect 2 i nu este complet, avem adevrat
relaia: abeE(G), cu a, beV(G), avem N(a) N(b) = | .
Considerm o muchie abeE(G), cu a, beV(G).
Reducere la absurd:
Presupunem c N(a) N(b) =| , ceea ce nseamn de fapt c toi
vecinii lui a sunt i vecini ai lui b.
Alegem un nod c din V(G), astfel nct c s nu fie adiacent cu a
(exist un astfel de nod deoarece am artat la punctul 1 c aeV(G),
mulimea N (a) | = ).
Din definiia grafurilor confidenial conexe, rezult c exist drum de
la a la c care s nu-l conin pe b, sau noduri adiacente cu acesta. ntruct
ntre a i c nu exist muchie (conform alegerii lui c), pentru a ajunge
de la a la c trebuie s trecem mai nti din a printr-un nod intermediar,
vecin cu a, pe care l putem nota cu v. Deci ve N(a) i, conform
definiiei, ve N(b).
111
Dar din presupunerea iniial obinem tocmai c ve N(b). Am ajuns
deci la o contradicie, aa c presupunerea de la care am plecat este
fals.
Am demonstrat c pentru un graf confidenial conex avem
adevarate cele dou relaii i deci avem adevrat i relaia de la care
am plecat: abeE(G), a, beV(G), avem muchia ab inclus ntr-un circuit
C
4
indus n graful G, sau se afl n mijlocul unui P
4
indus n graf.
Conform punctelor 1 i 2, implicaia direct este adevrat.

:: Presupunem relaiile 1 i 2 adevrate i demonstrm c graful este
confidenial conex.
Alegem trei noduri: a, b, c ale grafului G. Trebuie s demonstrm c
exist un drum de la a la b care s nu conin printre punctele sale interne
(dac exist) nodul c sau vecini ai nodului c.
n cazul n care exist muchie de la a la b, avem un drum de la a la b
fr noduri interne i deci proprietatea este respectat.
Cnd nodurile a i b sunt neadiacente, avem urmtoarele trei
situaii:

1. Cazul n care a, b e N(c).
Deci a i b sunt noduri ale grafului indus de nevecinii lui c.
Conform relaiei 1 din ipotez, care spune c graful indus de
nevecinii unui nod oarecare al grafului G este conex, putem
spune c ntre nodurile a i b exist un drum care rmne n
graful indus. Deci exist un drum de la a la b care are toate
nodurile interne nevecini ai lui c, i diferite de acesta.

2. Cnd unul dintre nodurile a i b este vecin al lui c iar cellalt
nod aparine mulimii nevecinilor lui c ( considerm aeN(c) i
beN(c); cellalt caz este similar ).
112
n acest caz folosim relaia 2 din ipotez, n forma ei echivalent.
tim c aeV(G), d
G
(a) >2 deci a admite un alt nod adiacent
cu el n afar de c. Totodat, pentru abeE(G), cu a, beV(G),
avem N(a) N(b) = | . Folosim aceast relaie pentru muchia ac
i obinem N(a) N(c) = | . Deci a are noduri adiacente care nu
sunt adiacente cu c. Fie d eN(a), un astfel de nod (deN(c), d= b
deoarece beN(a)). Conform cazului 1 al demonstraiei, putem
spune c exist un drum de la d la b care s aib toate nodurile
interne diferite de c i de vecinii lui c. La acest drum adugm
muchia ad i obinem un drum de la a la b care respect
proprietatea ntruct drumul de la d la b respect aceast
proprietate i nodul d este neadiacent cu b.

3. Cazul n care a i b sunt vecini ai lui c (a, b e N(c) ).
113
Folosim relaia 2 din ipotez, n forma ei echivalent. tim c ae
V(G), d
G
(a) >2 deci a admite un alt nod adiacent cu el n afar
de c. Totodat, pentru abeE(G), cu a, beV(G), avem N(a)
N(b) = | . Folosim aceast relaie pentru muchia ac i obinem
N(a) N(c) = | . Deci a are noduri adiacente care nu sunt
adiacente cu c. Fie deN(a), un astfel de nod (deN(c)). Analog,
putem spune c exist un nod eeN(b) astfel nct e eN(c).
Dac d=e, drumul de la a la b cutat este a, d, b, care respect
proprietatea ntruct nodul su intern, i anume d, nu este
adiacent cu c.
Altfel, conform cazului 1 al demonstraiei, exist un drum de la d
la e care s aib toate nodurile interne diferite de c i de vecinii lui
c. Pentru a obine un drum de la a la b trebuie s adugm
muchiile ad i be. Acesta este un drum care respect proprietatea
ntruct d i e nu sunt adiacente cu c, din modul n care au
fost alese, iar restul nodurilor sunt i ele nevecini ai lui c,
deoarece fac parte din drumul de la d la e care respecta
proprietatea.
Am demonstrat c indiferent de alegerea nodurilor a, b i c
obinem un drum de la a la b care s aib nodurile interne (dac
acestea exist) nevecini ai lui c i diferite de c.

n urma demonstrrii celor dou implicaii, putem spune c un
graf conex cu cel puin 3 vrfuri i care nu este complet este
confidenial conex dac i numai dac ndeplinete cele dou relaii.
3. n problema 2-SAT se dau: o mulime de variabile booleene U = ,x
1
, x
2
, , x
n
} i o mulime de clauze
C = {C
1
, C
2
, , C
m
}, unde fiecare clauz C este disjuncia a doi literali C
i
= v
i
v w
i
, literalii reprezentnd
variabile sau negaiile acestora. Problemei i se asociaz un digraf G, cu V(G) = ,
n n
x x x x x x ,..., , , ,..., ,
2 1 2 1
- (adic toi literalii posibili) i n care pentru fiecare clauz C
i
= v
i
v w
i
se adauga arcele
i i
w v i
i i
v w
(folosind, evident, convenia referitoare la dubla negare). Demonstrai c exist o atribuire a valorilor de
adevr i fals pentru variabilele booleene, astfel nct fiecare clauz s fie adevrat, dac i numai dac
digraful G are proprietatea c pentru orice i e ,1,, n-
i
x i x
i
aparin la componente tari conexe diferite.
Argumentai complexitatea timp de O(n+m) pentru testarea proprietii de mai sus.
114
Soluie:
Artm c, dac exist o atribuire a valorilor de adevr i fals pentru variabilele booleene
astfel nct fiecare clauz din C s fie adevrat, atunci, pentru orice i e ,1, , n-,
i
x i x
i
sunt
n componente tare conexe diferite.
Reducere la absurd:
Presupunem c exist i e ,1, , n- astfel nct
i
x i x
i
s se gseasc n aceeai component tare
conex. Aceasta nseamn c exist drum d
1
n G de la
i
x la x
i
, i exist drum d
2
n G de la x
i
la
i
x .
(din definiia componentelor tare conexe ntr-un digraf).
d
1
:
i
x ,
i
x u
1
, u
1
, u
1
u
2
, u
2
, , u
k-1
, u
k-1
u
k
, u
k
, u
k
x
i
, x
i
.
d
2
: x
i
, x
i
v
1
, v
1
, v
1
v
2
, v
2
, , v
j-1
, v
j-1
v
j
, v
j
, v
j
i
x ,
i
x .
Din modul de construcie a grafului G rezult:
uv e E ( u v v) e C (sau (v v u ) e C, innd cont de comutativitatea lui v)
Aadar, arcelor din drumul d
1
le corespund urmtoarele clauze din C:
C
h1
= x
i
v u
1
;
C
h2
=
1
u v u
2
;

C
hk-1
=
1 k
u v u
k
;
C
hk
=
k
u v x
i
.
respectiv arcelor din drumul d
2
le corespund urmtoarele clauze din C:
C
p1
=
i
x v v
1
;
C
p2
=
1
v v v
2
;

C
pj-1
=
1 j
v v v
j
;
115
C
pj
=
j
v v
i
x .
Am pornit de la ipoteza c exist o atribuire a valorilor de adevr i fals pentru variabilele booleene
astfel nct toate clauzele din C s fie adevrate.
- dac x
i
= true
i
x = false (din principiul noncontradiciei).
Vom demonstra prin inducie c v
s
= true, s e ,1, , j}.
I. C
p1
= true i
i
x = false v
1
= true.
II. Presupunem v
s
= true s e ,1, , m}. Demonstrm c v
m+1
= true.
C
pm
= true
m
v v v
m+1
= true.
n plus,
m
v =false (deoarece v
m
= true) v
m+1
= true.
Aadar, v
j
= true, deci
j
v = false, i cum i
i
x = false, se obine
j
v v
i
x = false, adic
C
pj
= false.
- dac x
i
= false:
Vom demonstra prin inducie c u
s
= true, s e ,1, , k}.
I. C
h1
= true i x
i
= false u
1
= true.
II. Presupunem u
s
= true s e ,1, , m}. Demonstrm c u
m+1
= true.
C
hm
= true
m
u v u
m+1
= true.
n plus,
m
u =false (deoarece u
m
= true) u
m+1
= true.
Aadar, u
k
= true, deci
k
u = false, i cum i x
i
= false, se obine
k
u v x
i
= false, adic
C
hk
= false.

Se observ c, indiferent de valoarea atribuit lui x
i
, dac x
i
i
i
x se afl n aceeai component tare
conex (i e ,1, , n}), atunci exist cel puin o clauz fals n C, ceea ce contrazice ipoteza.
Aadar, presupunerea fcut este fals pentru orice i e ,1, , n-,
i
x i x
i
sunt n componente
tare conexe diferite.
: Artm c, dac, pentru orice i e ,1, , n-,
i
x i x
i
sunt n componente tare conexe diferite,
atunci exist o atribuire a valorilor de adevr i fals pentru variabilele booleene astfel nct
fiecare clauz din C s fie adevrat.
116
Observaie:
b a v este echivalent cu ( ) ( ) a b b a . .
Demonstraie: ( ) ( ) ( ) ( ) ( ) ( ) b a a b b a a b b a a b b a v v . v v . v . .
Aadar, fiecrui arc uv i corespunde implicaia u v. Evident,
( v u = true) ( u v = true) ( v u v = true).
Deci, pentru ca o clauz b a C v = s fie adevrat, este necesar i suficient ca implicaiile
reprezentate de arcele corespunztoare lui C n G s fie adevrate.
n consecin, pentru ca mulimea de clauze C s fie satisfiabil, este necesar i suficient s existe o
asignare astfel nct implicaiile corespunztoare tuturor arcelor s fie adevrate.
Dac toate arcele din G sunt de forma:
- sursa 0 i destinaia 0 sau 1;
- sursa 1 i destinaia 1.
atunci pentru aceast asignare C este satisfiabil.
Vom demonstra implicaia de mai sus artnd c, n condiiile date, se poate construi o asignare
pentru care mulimea de clauze C este satisfiabil.

function ConstruieteAsignare(G)
begin
for (fiecare i din V)
asignare(i) -1 //iniial toate nodurile au valoare nedefinit
while (exist noduri cu valoare nedefinit)
/*Se alege un nod a dintre nodurile nevizitate din mulimea V, corespunztor unui
literal
i
x sau
i
x . Conform ipotezei,
i
x i
i
x nu se gsesc n aceai component tare
conex. Deci nu exist drum de la a la a , sau nu exist drum de la a la a . Se alege
acel nod dintre cele dou din care nu este accesibil cellalt. Dac ambele au aceast
proprietate, se poate face oricare alegere.*/
a = AlegeNodNevizitat(V)
if ( a este accesibil din a)
117
then u a
/*dac a este accesibil din a, atunci conform ipotezei, a sigur nu este accesibil din a */
else u a
asignare(u) 1
asignare( u ) 0
ParcurgereiMarcareDFS(u)
return asignare
end

procedure ParcurgereiMarcareDFS(u)
begin
for fiecare w din lista de adiacen exterioar a lui u do
if (asignare(w) = -1)
then
asignare(w) 1
asignare( w ) 0
ParcurgereiMarcareDFS(w)
end
Corectitudinea algoritmului
Deoarece n graful G
i
x i x
i
sunt n componente tare conexe diferite (conform ipotezei), cel puin
unul dintre aceste dou noduri nu este accesibil din cellalt.
Fie u un nod cu aceast proprietate.
Vom arta c w este accesibil din u dac i numai dac w nu este accesibil din u.
Reducere la absurd:
118
Fie w un nod accesibil din u. Presupunem c i w este accesibil din u.
Aceasta nseamn c exist un drum de la u la w, format din arcele uv
1
, v
1
v
2
, , v
k
w, i exist un
drum de la u la w , format din arcele uu
1
, u
1
u
2
, , u
p
w .
Dar, din modul de construcie a grafului G reiese c exist n G i arcele w
k
v , , 2 v 1 v , 1 v u ,
(adic exist un drum de la w la u ), respectiv arcele w
p
u , , 2 u 1 u , 1 u u (adic exist un drum de la w
la u ). Aadar, exist un drum de la u la u format din arcele uv
1
, v
1
v
2
, , v
k
w, w
p
u , , 2 u 1 u , 1 u u , ceea
ce contrazice ipoteza.
Presupunerea fcut este deci fals w nu este accesibil din u.
Implicaia invers se demonstreaz similar.
Conform observaiei de mai sus, C este satisfiabil dac i numai dac implicaiile reprezentate
de toate arcele grafului G sunt adevrate.
n consecin, dac unui literal (reprezentat de nodul x) i se atribuie valoarea true, atunci este
necesar ca toate nodurile accesibile din x s reprezinte literali cu valoarea true. Dac literalul reprezentat
de nodul x are valoarea false, indiferent de valoarea boolean a literalilor reprezentai de nodurile din
lista de adiacen exterior a lui x, implicaiile corespunztoare sunt adevrate.
Pentru a construi o asignare astfel nct C s fie satisfiabil se parcurg urmtorii pai:
1. Se alege un nod u din V cu proprietatea c u nu este accesibil din u. Literalului
corespunztor lui u i se atribuie valoarea true. (Evident, literalului corespunztor lui u i se
atribuie valoarea false).
2. Printr-o parcurgere DFS pornind din nodul u, se atribuie literalilor corespunztori tuturor
nodurilor w accesibile din u (i crora nu li s-a atribuit nc o valoare) valoarea true
(totodat, literalilor corespunztori nodurilor w li se atribuie valoarea false).
3. Atta timp ct mai exist noduri nevizitate, se alege dintre acestea un nou nod v cu
aceeai proprietate ca i u la pasul 1 i se vor repeta paii 1 i 2 pentru nodul v.
La pasul 1 vom alege dintre x
i
i
i
x acel nod u din care nu este accesibil cellalt i i se atribuie
valoarea true. Acest lucru este permis de urmtoarele aspecte:
- funcia implicaie este tranzitiv; aadar, orice drum de la a la b n G este echivalent cu
implicaia a b.
- neexistnd drum n G de la u la u , nu vom avea nici implicaia u u , care este fals.
- este posibil s existe drum de la u la u; dac acesta exist, atunci, din tranzitivitatea
implicaiei, vom avea u u, care este adevrat, deoarece u este fals.
Prin urmare, n urma asignrilor de la pasul 1 nu se pot obine implicaii false.
119
La pasul 2, tuturor nodurilor w accesibile din u li se atribuie valoarea true. Aadar, toate arcele
parcurse prin DFS la acest pas vor avea ambele extremiti true, implicaiile corespunztoare fiind, n
consecin, adevrate. Aa cum am artat mai sus, dac w este acesibil din u, atunci w nu este accesibil
din u, deci nu se vor face asignri contradictorii.
n paralel, nodurilor w li se atribuie valoarea false. Tuturor arcelor care au ambele extremiti
astfel de noduri w le corespund implicaiile 0 0, care sunt adevrate. De asemenea, tuturor
drumurilor cu destinaia u le corespund implicaiile 0 0.
Dac w este accesibil din u (i se atribuie valoarea true) atunci nu conteaz din ce alte noduri mai
este accesibil w, ntruct true true i false true.
Aadar, n urma asignrilor de la pasul 2 se obin numai implicaii adevrate.
Un nod v ales la pasul 3 se poate afla n unul din urmtoarele cazuri:
- - un nod v deja vizitat, cu valoarea true, a.. v este accesibil din v; fie w acel descendent
al lui v care este printele lui v. Deoarece v este ales la pasul 3, att el ct i toi
descendenii lui nevizitai nc vor primi valoarea true. Deci arcul wv va avea sursa true i
destinaia true, implicaia w v fiind adevrat.
Totodat, arcul ' v w va avea sursa false i destinaia false, deci implicaia ' v w este
adevrat.
(cazul ca v s fie accesibil din v este imposibil, deoarece acesta ar fi fost descoperit prin
parcurgerea DFS din v, deci nu ar fi putut rmne ntre nodurile nevizitate).
- v este accesibil dintr-un nod ' v cruia i s-a atribuit anterior valoarea false. Din construcia
grafului G, constatm c acest lucru este echivalent cu faptul c v este accesibil din v .
Deoarece exist drumuri de la ' v la v i de la v la v, din tranzitivitatea funciei implicaie
vom obine ' v v, respectiv v v. Lui v i se atribuie true, iar ' v era deja false, deci
evaluarea acestor implicaii este: 0 1, respectiv 0 1, ambele fiind deci adevrate n
aceast asignare.
(cazul ca ' v s fie accesibil din v este imposibil, deoarece acesta ar insemna c v este
accesibil din v, deci v fi fost descoperit prin parcurgerea DFS din v, adic nici v, nici v nu
ar fi putut rmne ntre nodurile nevizitate)
- nu exist drumuri ntre v i nici un alt nod vizitat anterior. n acest caz, asignrile fcute
pn acum nu influeneaz asignrile care se fac la acest pas. Implicaiile corespunztoare
arcelor parcurse prin DFS vor fi adevrate, conform celor menionate la paii 1 i 2.
- Nu este posibil ca dintr-un nod v ales la pasul 3 s ajungem ntr-un nod v marcat deja cu
false, deoarece:
- dac exist drum din v n n v, atunci exist drum din ' v n v
- v este marcat cu false, atunci ' v este marcat cu 1
120
- v este accesibil din ' v , atunci el a fost marcat la pasul 2, deci v este marcat cu
true v este marcat cu false, ceea ce contrazice faptul c v nu este vizitat.
Aadar, noile mulimi nu intr n conflict cu mulimile deja stabilite.
Am artat c algoritmul de mai sus construiete o asignare astfel nct implicaiile
corespunztoare tuturor arcelor din G s fie adevrate. Aadar, conform observaiei de mai sus, pentru
asignarea construit de algoritm, C este satisfiabil.
Exemplu de funcionare a algoritmului de mai sus:
Fie C = { b c a c c b b a v v v v , , , }.
Graful G asociat acestei mulimi de clauze este:

Se observ c, n G, u i u se gsesc n componente tare conexe diferite, u e {a, b, c, a , b , c
}. n plus, nu exist drum de la a la a .
Aadar, a = true, a =false.
Se face apoi parcurgerea DFS din nodul a, atribuindu-se tuturor nodurilor accesibile din a
valoarea true, adic: b = true, b =false, c = true, c =false.
Pentru aceast asignare avem:
b a v = false v true = true.
c bv = true v true = true.
a c v = true v false = true.
b c v = false v true = true.
Aadar, C este satisfiabil pentru aceast asignare.
121
Demonstrm c se poate testa dac C este satisfiabil n timpul O(m + n).
Am artat c C este satisfiabil dac i numai dac n graful G
i
x i x
i
sunt n componente tare
conexe diferite. Este suficient deci s testm dac exist n G
i
x i x
i
n aceeai component tare conex.
mprirea grafului n componente tare conexe se face n timpul O(n + m), ntruct sunt necesare
dou parcurgeri DFS ale grafului. Verificarea dac
i
x i x
i
sunt n aceeeai component tare conex se
face n timpul O(n), deoarece fiecare nod este interogat o singur dat.
Aadar, complexiatea unui algoritm de verificare a proprietii de mai sus este
O(m + n) + O(n) = O(m + n).
Algoritmul care poate face verificarea proprietii este:
procedure CompTareConexe(G)
begin
DFSComponenteTareConexe(G) //timp O(m+n)
Calculeaz G
T

// G
T
= (V, E
T
), unde uv e E
T
vu e E
//timp O(m + n)
DFSComponenteTareConexe(G
T
) //timp O(m+n)
/*n care, n bucla for principal, vrfurile sunt vizitate n ordinea descresctoate a timpilor
finali de vizitare*/
/*fiecare arbore T calculat la acest pas este o component tare conex*/
return all T
/*T calculai la pasul anterior*/
end
procedure DFSComponenteTareConexe(G)
begin
for all v in V do
culoare(v) 0
122
printe(v) 0 //in printe se memoreaz pdurea DFS
k 0
timp 0
for all v in V do
if (culoare (v) = 0)
then DFSComponenteTareConexeRECURSIV(v)
end
procedure DFSComponenteTareConexeRECURSIV(v)
begin
timp timp + 1
timpVizit(i) timp
culoare(v)
for (fiecare w din lista de adiacen exterioara a lui v) do
if (culoare(w) = 0)
then
printe(w) v
DFSComponenteTareConexeRECURSIV(w)
timp timp + 1
timpFinaltimp
end
function VerificareComponenteConexe(G)
begin
for (all v in V) do
if (v i v sunt n acelai T)
return FALSE
123
return TRUE
end.
TEMA NR. 7
15 aprilie 2003
15. Gossip Problem. ntr-un grup de m doamne, fiecare cunoate o parte dintr-o brf pe care
celelalte nu o cunosc. Ele comunic prin telefon i orice aplel telefonic ntre orice dou doamne
are ca efect faptul c fiecare dintre ele va afla tot ce cunoate cealalt.
1. Descriei o schem de a da telefoanele astfel nct ntr-un numr minim f(n) de apeluri
telefonice, fiecare doamn va afla tot ce tiu celelalte. Indicaie: Artai c f(2) = 1, f(3)
= 3, f(4) = 4 i, pentru n > 4, f(n) = 2n 4 (uor, indicnd scheme de telefonare cu aceste
numere de apeluri). ncercai s argumentai c 2n 4 este chiar numrul minim.
2. Modelai problema n limbajul teoriei grafurilor: schemei de telefonare i va corespunde
un ir de muchii, iar cunoaterea comun se va exprima printr-o condiie referitoare la
existena unor drumuri speciale cu elemente din irul considerat.
Soluie:
b) Modelarea problemei n limbajul teoriei grafurilor
Problemei de mai sus i se asociaz un graf G = (V, E) construit astfel:
- V = ,0, 1, , n-1}, adic fiecrei doamne i corespunde cte un nod;
- iniial G = N
n
; (adic se pornete cu graful nul, E = u);
- un telefon ntre doamnele i i j se reprezint prin adugarea muchiei ij n E; fiecare muchie este
etichatat cu un numr, ncepnd cu 1, n ordinea n care se dau telefoanele.
- pentru ca informaia pe care o cunote iniial doamna i s fie cunoscut de doamna j, este
necesar i suficient s existe n graful G un drum cresctor D de la i la j (prin drum cresctor se
nelege un drum D cu V(D) = ,i, v
1
, , v
m-1
, j- i E(D) = {e
1
, e
2
, ..., e
m
-, cruia i corespunde secvena
D: i, e
1
, v
1
, e
2
, v
2
, ... , e
m-1
, v
m-1
, e
m
, j.
astfel nct
label(e
1
) < label(e
2
) < <label(e
m
)
unde label este eticheta asociat fiecrei muchii aa cum am artat mai sus (se poate considera
c telefoanele nu se dau simultan, deci nu putem avea dou muchii cu aceeai etichet, prin
urmare relaia de ordine este strict).
Argumentaie:
124
: Dac exist un drum cresctor de la i la j, atunci doamna j cunoate informaiile deinute
iniial de doamna i.
Fie D
ij
un drum cresctor de la i la j n graful G.
Cazul 1: D
ij
este reprezentat de o singur muchie (deoarece orice mulime cu un element poate fi
considerat lan, drumul format dintr-o singur muchie este un drum cresctor). Dar
muchia e = ij exist n E dac i numai dac s-a produs convorbirea telefonic ntre
doamna i i doamna j (din modul de construcie a grafului G), deci informaia de la
doamna i s-a propagat la doamna j.
Cazul 2: V(D
ij
) = {i, v
1
, , v
m-1
, j- i E(D
ij
) = {e
1
, e
2
, ..., e
m
-, cu m > 1 i
D: v
0
= i, e
1
, v
1
, e
2
, v
2
, ... , e
m-1
, v
m-1
, e
m
, j = v
m

label(e
1
) < label(e
2
) < <label(e
m
).
Aadar, la momentul producerii convorbirii dintre v
i
i v
i+1
, v
i
deinea deja informaia lui
v
0
, i e ,0, , m 1}. Aadar, n urma acestui lan de convorbiri, informaia de la v
0
= i
se propag prin toate nodurile din acest lan pn la v
m
= j.
Dac doamna j cunoate informaiile deinute iniial de doamna i, atunci exist un drum
cresctor de la i la j.
Doamna i cunoate informaiile deinute iniial de doamna j, deci a existat un ir de
telefoane ntre doamnele i i k
1
, k
1
i k
2
, ... , k
n-1
i k
n
, k
n
i j, date n aceast ordine, astfel nct
informaiile deinute iniial de doamna i s ajung la doamna j. Acestor apeluri le corespund n
graf muchiile ik
1
, k
1
k
2
, ... , k
n-1
k
n
, k
n
j, etichetate astfel nct
label(ik
1
) < label(k
1
k
2
) < <label(k
n-1
k
n
) <label(k
n
j)
(reiese din modul de construcie a grafului). Aadar exist un drum D cresctor de la i la j, cruia
i corespunde urmtoarea secven:
D: i, ik
1
, k
1
, k
1
k
2
, k
2
, ... , k
n-1
k
n
, k
n
, k
n
j, j.
Observaie: Afirmaia este valabil i pentru cazul cnd n = 0, adic V(D) = {i, j} i
E(D) = {ij}, deoarece drumul format dintr-o singur muchie poate fi considerat drum
cresctor.
Pentru a rezolva problema brfei trebuie deci s se construiasc un graf G = (V, E), cu muchii
etichetate, de dimensiune minim, astfel nct, i e V, j e V {i}, exist un drum cresctor de la i
la j.
Observaie: Este necesar ca un astfel de graf s fie conex.
125
a) Demonstrm c dimensiunea minim a unui astfel de graf este:
- 1 pentru |G| = 2;
- 3 pentru |G| = 3;
- 2|G| - 4 pentru |G| > 4.
I. Artm c se pot construi grafuri cu proprietile cerute care s aib dimensiunile precizate
mai sus.
Pentru |G
2
|= 2: G
2
= K
2
.

Pentru |G
3
| = 3: G
3
= K
3
.

Pentru |G| > 4 se demonstreaz prin inducie dup numrul de noduri c se poate construi un
graf G cu proprietile de mai sus i cu dimensiunea 2|G| - 4.
Pasul I: |G
4
| = 4: G
4
= C
4
; |E(G
4
)| = 4 = 2*4 4.

|G
5
| = 5: |E(G
5
)| = 6 = 2*5 4.

Pasul II: Presupunem afirmaia adevrat pentru |G| s n. Demonstrm pentru |G| = n + 1.
126
Graful G
n+1
se poate construi din graful G
n
astfel:
- la mulimea vrfurilor din G
n
se adaug un nou nod, fie acesta n. Astfel,
V(G
n+1
) = ,0, 1, , n-1, n}.
- prima muchie inserat n E(G
n+1
) la construirea grafului G
n+1
este muchia (n, i
0
), cu i
0

oarecare din ,0, 1, , n-1}, care va fi etichetat cu 1;
- se introduc apoi n E(G
n+1
) muchiile dintre nodurile 0, 1, , n-1, n ordinea n care au
fost introduse n G
n
, etichetate de la 2 la 2n 3 (deoarece am presupus la pasul
inductiv c G
n
are dimensiunea 2n 4);
- din modul de construcie pn la acest pas a lui G
n+1
, reiese c subgraful indus n G
n+1

de mulimea ,0, 1, , n-1 } este chiar G
n
, deci are proprietatea c,
i e ,0, 1, , n-1 }, j e ,0, 1, , n-1 } ,i-, exist un drum cresctor de la i la j.
n particular, j e ,0, 1, , n-1} {i
0
}, exist un drum cresctor de la i
0
la j. ntruct
unica legtur a nodului n cu nodurile din acest subgraf indus este muchia (n, i
0
),
nseamn c orice drum ntre n i un nod j din ,0, 1, , n-1} ncepe cu muchia (n, i
0
) i
se continu cu drumul corespunztor de la i
0
la j. Deoarece muchia (n, i
0
) are cea mai
mic etichet, orice drum cresctor pornind din i
0
n faa cruia se adaug aceast
muchie rmne drum cresctor, conform definiiei. Aadar, exist cel puin un drum
cresctor de la n la j,
j e ,0, 1, , n-1}.
- n final se adaug muchia (n 1, j
0
), cu j
0
oarecare din ,0, 1, , n-1}, care va fi
etichetat cu 2n 2. Conform celor artate la pasul anterior, exist un drum
cresctor de la j la j
0
, j e ,0, 1, , n-1} {j
0
}.
Dac la un astfel de drum se adaug, la sfrit, muchia (j
0
, n), drumul astfel obinut
ntre j i n rmne cresctor, deoarece eticheta lui (j
0
, n) este mai mare dect
eticheta lui e
i
, e
i
e E(G
n+1
) {(j
0
, n)-. Aadar, j e ,0, 1, , n-1-, exist cel puin un
drum cresctor de la j la n.
Se obine prin acest mod de construcie un graf cu proprietatea c i e V, j e V {i}, exist un
drum cresctor de la i la j. n plus, dimensiunea acestui graf este:
1 + (2n 4) + 1 = 2n 2 = 2(n + 1) 4 = 2|G
n+1
| - 4.
O posibil structur a grafurilor G
n
construite prin paii de mai sus pornindu-se de la graful G
4
este:

127
Evident, aceasta nu este unica schem posibil.
Aa cum se vede i n exemplul pentru G
5
i aa cum reiese din paii descrii mai sus, nodul adugat
pentru construcia lui G
n
din G
n-1
poate fi legat prin dou muchii de oricare dou noduri (nu neaprat
distincte, fiind permis i obinerea unui multigraf) dintre cele din G
n-1
. Condiia impus de algoritmul
descris mai sus este ca una dintre aceste muchii s aib eticheta minim, cealalt s aib eticheta
maxim, iar etichetele muchiilor dintre celelalte noduri s fie n relaia n care erau n graful G
n-1
.
Pot exista i alte modaliti de construire a unui graf cu proprietile cerute.
Algoritmul care construiete recursiv G
n
urmnd paii explicai mai sus este:
procedure ConstruieteSchema(n)
begin
if (n < 2)
mesaj: Nu se poate construi o schem pentru acest numr.
return
/*iniial, G este graful nul cu n noduri*/
V(G) ,0, 1, , n-1}
E(G) u
/*se trarteaz cazurile particulare: n = 2 i n = 3*/
switch(n)
case 2:
E(G) {(0, 1)}
label((0, 1)) 1
break
case 3:
E(G) = {(0, 1), (1, 2), (2, 0)}
label((0, 1)) 1
label((1, 2)) 2
label((2, 0)) 3
128
break
default:
G ConstruieteSchemaRecursiv (n, 1)
break
end
function ConstruieteSchemaRecursiv(n, eticheta)
begin
if (n = 4)
E(G) {(0, 1), (1, 2), (2, 3), (3, 0)}
label((0, 1)) eticheta
label((1, 2)) eticheta + 2
label((2, 3)) eticheta + 1
label((3, 0)) eticheta + 3
else
E(G) E(G) {(n - 1, 0), (n - 1, 2)}
label((n - 1, 0)) eticheta
G ConstruieteSchemaRecursiv (n 1, eticheta + 1)
label((n - 1, 2)) 2*n 4 eticheta + 1
return G
end
II. Artm c dimensiunile precizate mai sus sunt dimensiunile minime posibile pentru astfel de
grafuri.
Pentru |G
2
|= 2: Dimensiunea lui G
2
construit la I este 1. Dac dimensiunea lui G
2
ar fi mai mic
dect 1 (adic 0), graful G
2
nu ar fi conex, deci nu ar exista nici un drum ntre cele dou noduri ale sale.
Implicit, nu exist drumuri cresctoare. Aadar, dimensiunea minim pentru un graf G
2
este 1.
Pentru |G
3
| = 3: Dimensiunea lui G
3
construit la I este 3.
129
Presupunem c exist un graf G
3
cu |G
3
|=3 i dimensiunea mai mic dect 3. Dac dimensiunea
lui G
3
ar fi 0 sau 1, graful nu este conex, deci exist n acest graf noduri ntre care nu exist drumuri, deci
nici drumuri cresctoare.
Dac dimensiunea grafului este 2, atunci acest graf este P
3
. ntr-un astfel de graf exist exact un
drum ntre oricare dou noduri. Fie i i j cele dou noduri de grad 1 din acest graf. Deoarece n graful G
3

dou muchii nu pot avea aceeai etichet, dac drumul de la i la j este cresctor, atunci nu exist drum
cresctor de la j la i, i reciproc. Aadar, Graful G
3
trebuie s aib dimensiunea 3.
Pentru a demonstra optimalitatea prntru G
n
cu |G
n
| > 4 se folosete urmtoarea propoziie:
Propoziia 1: Dac G
n
cu n > 4 are dimensiunea minim posibil, atunci -w e V(G
n
) a.. d(w) s 3.
(Demonstraie: Dac toate nodurile ar avea gradul cel puin 4, atunci

e
>
V i
n i d 4 ) ( . n plus, dimensiunea
oricrui graf este jumtate din suma gradelor tuturor vrfurilor. Se obine deci c
|E(G
n
)| > 2n. Dar am artat c se poate construi G
n
de dimensiune 2n 4, deci
dimensiunea unui graf optimal este mai mic sau egal cu 2n 4, adic 2(n+1) s 2n 4
contradicie).
Pentru |G
n
| > 4 se demonstreaz prin inducie dup |G
n
| c un graf G
n
cu proprietile de mai
sus are dimensiunea cel puin 2|G
n
| - 4.
Pasul I:
Pentru |G
4
| = 4:
Dac dimensiunea acestui graf ar fi 0, 1, sau 2, graful nu ar fi conex, deci, conform celor artate
mai sus, nu ar putea avea proprietatea cerut.
Dac dimensiunea este 3, graful n cauz poate fi unul din grafurile din figura de mai jos:

Se observ c graful III nu este conex, deci exist cel puin dou noduri ntre care nu este nici un
drum n acest graf. Implicit, ntre aceste dou noduri nu exist nici drumuri cresctoare, deci un graf cu
aceast form nu are proprietatea cerut.
130
Dac studiem grafurile I i II remarcm faptul c aceste grafuri sunt de fapt arbori, n astfel de
grafuri existnd un singur drum ntre oricare dou noduri.
Fie dou noduri i i j neadiacente ntr-un astfel de graf (exist, deoarece grafurile nu sunt
complete). Atunci unicul drum dintre ele are lungimea cel puin 2.
Indiferent de modul de etichatare a muchiilor, deoarece n graf dou muchii nu pot avea aceeai
etichet (din modul de construcie), dac drumul de la i la j este cresctor, atunci nu exist drum
cresctor de la j la i, i reciproc. Aadar, graful G
4
nu poate avea nici aceast form.
Am artat deci c graful G
4
trebuie s aib dimensiunea cel puin 4.
Pasul II: Presupunem afirmaia adevrat pentru |G| s n. Demonstrm pentru |G| = n + 1.
Conform propoziiei 1 (pagina 4), exist cel puin un nod w n V(G
n+1
) cu gradul mai mic sau egal
cu 3. Se disting urmtoarele cazuri posibile:
Cazul 1: d(w) = 0. Atunci nodul w este izolat, deci graful G nu este conex, neavnd, n consecin,
nici proprietile cerute. Aadar acest caz este practic imposibil.

Cazul 2: d(w) = 1. Fie v unicul vecin al lui w.
tim c exist drum cresctor de la w la i i de la i la w, i e V(G
n+1
) {w}.
Deoarece w are gradul 1, avem:
(1) Toate drumurile cresctoare de la w la i ncep cu muchia wv, deci etichetele tuturor muchiilor
de pe aceste drumuri sunt mai mari dect label(wv).
(2) Toate drumurile cresctoare de la i la w se termin cu muchia wv, deci etichetele tuturor
muchiilor de pe aceste drumuri sunt mai mici dect label(wv).
Din (1) i (2) rezult c, e e E(G
n+1
) {wv}, dac e este pe un drum cresctor de la i la w, atunci
e nu poate fi pe nici un drum cresctor de la w la j, cu i i j arbitrare diferite de w i v. (Demonstraie:
Dac e este pe un drum cresctor de la i la w, atunci label(e) < label(wv), conform (2).
Dac e este pe un drum cresctor de la w la j, atunci label(e) > label(wv), conform (1).
contradicie).
Exist drum cresctor de la w la i, i e V(G
n+1
) {w}, deci graful parial care conine doar
muchiile de pe aceste drumuri este conex. n consecin are cel puin |G
n+1
| - 1 = n muchii.
Exist drum cresctor de la i la w, i e V(G
n+1
) {w}, deci graful parial care conine doar
muchiile de pe aceste drumuri este de asemenea conex, avnd cel puin |G
n+1
| - 1 = n muchii.
131
Intersecia mulimilor de muchii ale celor dou grafuri are cardinalul 1, coninnd doar muchia
wv, dup cum am artat mai sus.
Prin urmare, graful G
n+1
care are un nod de grad 1 conine cel puin
n + n 1 = 2n 1 = 2 |G
n+1
| 3 muchii.
Dar am artat c se poate construi un graf cu 2 |G
n+1
| 4 muchii, deci aceast structur nu
este optimal.
Cazul 3: d(w) = 2. Se disting urmtoarele dou subcazuri:

a) b)
Cazul 3a: w are un unic vecin i de care este legat cu dou muchii (G poate fi multigraf).
Atunci, oricare ar fi u i v diferite de w i i, drumul cresctor de la u la v nu trece prin
w (deoarece un drum este un mers cu toate nodurile distincte; dac un mers trece prin w, trebuie
s treac de dou ori prin i, deci nu este drum).
Aadar, subgraful G indus de V(G
n+1
) ,w- pstreaz proprietatea c u, v e V(G) =
V(G
n+1
) {w}, exist n G drum cresctor de la u la v. Dar |G| = n, deci, conform ipoteyei
inductive, dimensiunea lui G este cel puin 2n 4. n consecin, dimensiunea lui G
n+1
este cel
puin
2n 4 + 2 = 2n 2 = 2(n + 1) 4 = 2|G
n+1
| 4.
Cazul 3b: w are doi vecini i i j, iar etichetele muchiilor wi i wj se gsesc n relaia
e
1
= label(wi) < label(wj) = e
2
.
Exist drum cresctor de la w la u, u e V(G
n+1
). Prin urmare, graful parial care conine
doar muchiile de pe aceste drumuri este conex, deci are cel puin |G
n+1
| - 1 = n muchii.
Exist drum cresctor de la u la w, u e V(G
n+1
). Deoarece unicii vecini ai lui w sunt i i j,
toate aceste drumuri trec prin i sau prin j.
Toate muchiile de pe drumul cresctor de la u la w au etichetele mai mici fie dect e
1
, fie
dect e
2
.
132
- Dac drumul cresctor de la u la w trece prin i, atunci etichetele tuturor muchiilor de
pe acest drum sunt mai mici dect e
1
. Dar e
1
< e
2
, deci aceste etichete sunt mai mici i
dect e
2
. Prin urmare, nici una din aceste muchii nu ar putea face parte dintr-un
drum cresctor de la w la v, v e V(G
n+1
). Toate aceste muchii sunt deci distincte de
cele n menionate mai sus.
- Dac drumul cresctor de la u la w trece prin j, atunci etichetele tuturor muchiilor de
pe acest drum sunt mai mici dect e
2
. Aadar, aceste muchii nu ar putea face parte
dintr-un drum cresctor din w prin j. Unele ar putea face parte dintr-un drum
cresctor din w prin i. Dar, pentru ca graful parial menionat mai sus s fie minimal,
trebuie s fie arbore, deci s nu admit cicluri. Aadar, pentru a crea legtura dintre
o muchie dintr-un drum cresctor din w prin i, i j, trebuie adugat cel puin o
muchie distinct de cele n din graful parial.
n concluzie, este necesar cel puin cte o muchie pentru fiecare din cele n 2 noduri
diferite de w, i i j. n plus, aceste muchii sunt distincte ntre ele dou cte dou, avnd cel puin
cte o extremitate diferit.
Aadar, i n acest caz, graful trebuie s aib cel puin
n + n 2 = 2n 2 = 2(n + 1) 4 = 2|G
n+1
| 4 muchii.
Cazul 4: d(w) = 3. Se disting urmtoarele trei subcazuri:

a) b) c)
Cazul 4a: w are un unic vecin i de care este legat prin 3 muchii. Fie e
1
, e
2
, e
3
etichetele celor 3
muchii, astfel nct e
1
< e
2
< e
3
. Acest graf nu este minimal, ntruct se poate renuna la muchia
cu eticheta e
2
cu pstrarea proprietilor:
- toate drumurile cresctoare spre sau de la w trec prin i, acesta fiind unicul lui vecin;
- aa cum am artat la cazul 3a, oricare ar fi u i v diferite de w i i, drumul cresctor de la
u la v nu trece prin w;
- dac un drum cresctor spre w trece prin e
2
, atunci e
2
< label(e), oricare ar fi o muchie e
de pe acest drum; dar e
1
< e
2
, deci e
1
< label(e), adic acest drum ar putea trece prin e
1
;
- dac un drum cresctor de la w trece prin e
2
, atunci e
2
> label(e), oricare ar fi o muchie e
de pe acest drum; dar e
3
> e
2
, deci e
3
> label(e), adic acest drum ar putea trece prin e
3
.
Prin urmare, o astfel de structur nu este minimal, reducndu-se la cazul 3a prezentat mai
sus.
Cazul 4b: w are 2 vecini i i j, fiind legat de j prin dou muchii.
133
- Dac exist u i v astfel nct drumul cresctor de la u la v s treac prin w, atunci acest
drum conine muchia e
1
i una din muchiile e
2
i e
3
, fie aceasta e.
o Dac trece nti prin e
1
i apoi prin e, toate muchiile de pn la i au
eticheta mai mic dect e
1
, respectiv toate muchiile de dup j au eticheta
mai mare dect e. n plus, e
1
< e, deci e este mai mare sau egala cu
valoarea din mijloc dintre e
1
, e
2
i e
3
. Deci, n orice astfel de drum
cresctor, putem nlocui cele dou muchii cu o muchie ntre i i j care are
ca etichet valoarea medie dintre cele 3.
o Dac trece nti prin e i apoi prin e
1
, toate muchiile de pn la i au
eticheta mai mare dect e
1
, respectiv toate muchiile de dup j au
eticheta mai mic dect e. n plus, e < e
1
, deci e
1
este mai mic sau egala
cu valoarea din mijloc dintre e
1
, e
2
i e
3
. Deci, n orice astfel de drum
cresctor, putem nlocui cele dou muchii cu o muchie ntre i i j care are
ca etichet valoarea medie dintre cele 3.
Adugnd ca mai sus o muchie ntre i i j i eliminnd complet nodul w, se obine un graf
de ordin |G
n+1
| - 1 care pstreaz proprietatea c ntre oricare dou noduri exist un
drum cresctor. Dar acest graf are dimensiunea cel puin 2( |G
n+1
| - 1) 4 (din ipoteza
inductiv). Deoarece a fost obinut din G
n+1
prin eliminarea a 3 muchii i introducerea
uneia noi, nseamn c G
n+1
are dimensiunea cel puin
(2( |G
n+1
| - 1) 4) 1 + 3 = 2 |G
n+1
| - 4.
- Dac nu exist u i v astfel nct drumul cresctor de la u la v s treac prin w, atunci,
prin eliminarea lui u i a muchiilor care l leag de i i j, se obine un graf de ordin |G
n+1
| -
1 care pstreaz proprietatea c ntre oricare dou noduri exist un drum cresctor. Dar
acest graf are dimensiunea cel puin 2( |G
n+1
| - 1) 4 (din ipoteza inductiv). Deoarece a
fost obinut din G
n+1
prin eliminarea a 3 muchii, nseamn c G
n+1
are dimensiunea cel
puin
(2( |G
n+1
| - 1) 4) + 3 =2 |G
n+1
| - 4.
(aceast structur nu este deci optimal, ntruct am artat c se pot construi grafuri de
dimensiune 2 |G
n+1
| - 4).

Cazul 4c: w are 3 vecini, i, j i k. iar etichetele muchiilor wi, wj i wk se gsesc n relaia
e
1
= label(wi) < e
2
= label(wj) < e
3
= label(wk).
- Exist drum cresctor de la w la u, u e V(G
n+1
). Prin urmare, graful parial care conine
doar muchiile de pe aceste drumuri este conex, deci are cel puin |G
n+1
| - 1 = n muchii.
- Exist drum cresctor de la u la w, u e V(G
n+1
). Deoarece unicii vecini ai lui w sunt i, k i
j, toate aceste drumuri trec prin i, prin k sau prin j.
Aa cum am artat la cazul 3b, pentru ca s existe drum cresctor de la oricare nod din
graf la w, este necesar cel puin cte o muchie pentru fiecare din cele n 3 noduri
diferite de w, i i j. n plus, aceste muchii sunt distincte ntre ele dou cte dou, avnd
cel puin cte o extremitate diferit, fiind distincte i de cele n menionate mai sus.
134
- Considernd relaia menionat ntre e
1
, e
2
i e
3
, exist deja drum cresctor de la i la j de
la i la k i de la j la k prin w. Pentru ca s existe drum cresctor de la k la j sau la i, fie este
necesar o muchie ntre k i aceste noduri (care nu fcea parte nici dintre muchiile din
drumurile cresctoare din w, nici din cele cresctoare spre w), fie un drum cresctor care
trece printr-un alt nod.
Dar orice drum cresctor din k spre un nod u care s aib muchii deja menionate la
punctele anterioare este n una din urmtoarele situaii:
o este constituit dintr-o singur muchie, ca parte a unui drum descresctor
de la u la w, deci label(uk) > e
3
;
o este parte a unui drum cresctor din w prin k, deci toate muchiile au
etichetele mai mari dect e
3
.
Respectiv, orice drum cresctor de la u la i sau la j care s aib muchii deja menionate la
punctele anterioare este n una din urmtoarele situaii:
o este constituit dintr-o singur muchie, ca parte a unui drum cresctor de
la u la w, deci label(uj) < e
2
sau label(ui) < e
1
;
o este parte a unui drum cresctor spre w prin i sau j, deci toate muchiile
au etichetele mai mici dect e
2
, respectiv e
1
.
n plus, e
1
< e
3
i e
2
< e
3
, deci la concatenarea a dou drumuri cresctoare ca cele de mai
sus, unul de la k la u i unul de la u la j sau la i, nu se obine un drum cresctor de la k la i
sau la j, deoarece toate muchiile dintre k i u au etichetele mai mari dect toate muchiile
dintre u i i (sau j).
Prin urmare, este necesar cel puin o muchie distinct de toate cele menionate la
primele dou puncte din acest subcaz, pentru obinerea drumului cresctor de la k la i
(dac toate muchiile de pe acest drum au etichetele mai mici dect e
1
, atunci avem i
drum de la k la j prin i i w).
Aadar, i n acest caz, graful trebuie s aib cel puin
n + n 3 + 1 = 2n 2 = 2(n + 1) 4 = 2|G
n+1
| 4 muchii.

Conform propoziiei 1 (pagina 4), un graf G cu proprietile cerute, de dimensiune cel mult 2|G|
4, se afl n cel puin unul din cazurile studiate mai sus (exceptnd cazul 1, care contrazicea ipoteza).
Pentru fiecare astfel de caz am artat c numrul minim de muchii necesare pentru satisfacerea
proprietilor este 2|G| 4. ntruct am artat anterior c exist grafuri cu aceast dimensiune, se
obine faptul c un graf G care are proprietile cerute i are dimensiunea 2|G| 4 este o variant
optimal de rezolvare a problemei.

135
16. Fie D un digraf i dou funcii definite pe mulimea arcelor sale, a: E(D) R
+
i
b: E(D) R
+
*
. Descriei un algoritm eficient pentru determinarea unui circuit C* n D astfel
nct:
,
) (
) (
min{
*) (
*) (
C b
C a
C b
C a
= C circuit n D} .
Soluie:
Fie p: E(D) R
+
funcia de cost ataat grafului de mai sus, definit prin :
p(e) =
) (
) (
e b
e a
, e e E(D).
Extensia funciei p la drumuri n digraf, i implicit la circuite, se definete astfel:
p(Dr) =

e ) (
) (
) (
Dr E e
e b
e a
, Dr drum (inchis sau deschis) n digraful D.
Observaie: Evident, costul p al oricrui drum n digraf este limitat superior de max{
) (
) (
e b
e a
, e e E(D)},
respectiv limitat inferior de min{
) (
) (
e b
e a
, e e E(D)}. (Ambele limite sunt nenegative, fapt care reiese din
definiia funciilor a i b.)
(Demonstraia se face folosind proporii derivate).

n aceste condiii, este suficient s cutm costul minim al unui circuit din digraful D n intervalul (m,
M), unde m = min{
) (
) (
e b
e a
, e e E(D)} i M = max{
) (
) (
e b
e a
, e e E(D)}.
Se definete o nou funcie c: E(D) R, cu parametrul , unde
c(e) = a(e) - b(e).
iar este o valoare din intervalul (m, M) precizat mai sus.
Pentru eficiena cutrii valorii n acest interval se pornete cu valoarea
2
M m+
pentru i se
verific dac exist circuite care s aib pentru acest parametru costul c negativ.
Se disting urmtoarele 3 cazuri posibile:
136
Cazul 1. Exist cel puin un circuit negativ
Dac c(C) < 0 a(e) - b(e) < 0.
Deoarece b(e) > 0 (din definiia funciei b), se obine c
) (
) (
C b
C a
- < 0
) (
) (
C b
C a
<.
Prin urmare, dac s-a gsit un circuit C cu costul c negativ, atunci acel circuit C are valoarea pentru
) (
) (
C b
C a
mai mic dect . Se actualizeaz cu
) (
) (
C b
C a
, acesta fiind costul p minim al unui circuit din D
pn la acest pas.
Prin urmare, ales n acest moment este prea mare. Reactualizm marginile intervalului n care se
caut :
m m
M

2
M m+
.
Se continu cu verificarea circuitelor, pentru noul .
Cazul 2. Nu s-au gsit circuite de costuri negative i nici circuite cu costul 0.
Atunci ales este prea mic. Se reactualizeaz astfel:
m
M M

2
M m+
.
Se continu cu verificarea circuitelor, pentru noul .
Cazul 3. Nu s-au gsit circuite negative dar exist circuit cu costul 0. Atunci curent este costul
circuitului minim i trebuie descoperit circuitul, cunoscndu-se un nod din acest circuit.

137
Algoritmul se oprete atunci cnd s-a descoperit un pentru care exist un circuit C*
cu
*) (
*) (
C b
C a
= i oricare ar fi alt circuit C n D, c(C) > 0, adic
) (
) (
C b
C a
>. Algoritmul se oprete ntotdeauna
deoarece costul circuitului minim se afl n intervalul considerat iniial. poate fi gsit ntotdeauna prin
mpriri la 2, chiar dac n realitate nu are numr finit de zecimale, deoarece calculatorul realizeaz
trunchierea.
Pentru detectarea circuitelor de cost negativ n digraful D se utilizeaz algoritmul lui Floyd-Warshall.
procedure CautCircuitCostMinim(D)
begin
m min{
) (
) (
e b
e a
, e e E(D)}
M max{
) (
) (
e b
e a
, e e E(D)}.

2
M m+


/*gsire minimului i a maximului se realizeaz printr-o parcurgere a vectorilor n care reinem
valorile funciilor a i b pentru fiecare muchie; lungimea acestor vectori este exact |E(D)|*/
gsit false
while ( not gsit ) do
rez CautCircuitNegativ(D)
switch (rez)
case -1:
m

2
M m+

break
case 1:
138
M

2
M m+

break
case 0:
CautCircuit(D, s, )
gsit true
break
end

Se apeleaz funcia CautCircuit de log |E(D)| ori (deoarece avem cutare binar), unde E(D) este
de ordinul lui n
2
. Deci se face un numr de apelri ale funciei CautCircuit de ordin
log n
2
= 2logn.

function CautCircuitNegativ(D)
begin
/*algoritmul utilizat este algoritmul Floyd Warshall; acest algoritm lungimea drumului
minim dintre oricare 2 noduri*/
/*W este matricea in care iniial sunt costurile c ale muchiilor;
dac ij e E(D), W(i, j) = c(i, j), unde c(e) = a(e) - b(e); altfel, c(ij) = +.
Dup terminarea algoritmului, W(i, i) = costul minim al unui circuit ce conine i*/
for i 0 to n 1 do
for j 0 to n 1 do
if (ij e E(D)) then W(i, j) = a(ij) - b(ij)
else W(i, j) = +
for k 0 to n 1 do
for i 0 to n 1 do
139
for j 0 to n 1 do
if (W(i, j) > W(i, k) + W(k, j))
then W(i, j) W(i, k) + W(k, j)

/*se parcurge diagonala pentru detectarea costului minim*/
cMinim W(0, 0)
s 0
for i 1 to n 1 do
if (W(i, i) < cMinim) then
cMinim W(i, i)
s i
/*se returneaz -1 dac exist circuite negative, 0 dac nu exist circuite negative dar exist
circuite de cost 0, respectiv 1 dac toate costurile sunt pozitive*/
if (cMinim < 0)
then return -1
else
if (cMinim = 0)
then return 0
else return 1
end

Funcia CautCircuitNegativ se execut n timpul O(n
3
) deoarece tim c algoritmul lui Floyd-
Warshall are complexitatea O(n
3
).

procedure CautCircuit(D, s, )
begin
140
/*se va folosi algoritmul lui Dijkstra adaptat pentru acest caz; adaptarea algoritmului const
m faptul c, printre nodurile spre care se caut drumuri de cost minim se va afla ntotdeauna nodul s
(deoarece cutm un circuit care conine s). n plus, se vor lua n consideraie doar costurile
circuitelor.*/
/*Dac n funcia CautCircuitNegativ(D) am gsit un nod i pentru care W(i, i) = 0, atunci j din
acest circuit, W(j, j) = 0. n consecin, o alt modificare adus algoritmului este aceea c se vor
introduce n V (mulimea din care alegem nodurile) doar aceste noduri j.*/
V {j | W(j, j) = 0}
nainte(s) 0
for i e V do
u
i
a(si) - b(si)
// dac nu exist muchia si, u
i
va fi +
S {}
while (s e S)
x min(u
i
)
S S x
V V x
for ie V do
if (u
i
> u
x
+ a(xi) - b(xi))
then
u
i
a(xi) - b(xi)
predecesor(i) x
// n predecesor, pornind din s se poate gsi circuitul de cost minim n ordine invers.
end
Funcia CautCircuit are complexitatea O(n
2
) ntruct este adaptarea algoritmului lui Dijkstra i se
cunoate c acest algoritm are complexitatea O(n
2
).
n final, obinem complexitatea algoritmului O (n
3
logn + n
2
) = O(n
3
logn) .
141
17. Fie A
1
, A
2
,, A
n
submulimi distincte ale unei mulimi de n elemente S. Demonstrai c exist un
element x n mulimea S astfel nct A
1
- {x}, A
2
- ,x-,, A
n
- ,x- s fie i ele distincte.
Soluie:
Construim un graf G cu urmtoarele proprieti:
- Nodurile grafului G sunt mulimile A
i
, cu 1si sn;
- Fiind date mulimile A
i
i A
j
, avem muchie ntre cele dou noduri reprezentate de mulimile
respective numai n cazul n care A
i
A A
j
= ,x- ( adic A
i
= A
j
{x} sau A
j
= A
i
{x} );
- Fiecare muchie este etichetat: eticheta este reprezentat de elementul care formeaz diferena
simetric a celor dou mulimi ce se afl n cele dou noduri.

Observaie: n cazul n care avem dou sau mai multe perechi de mulimi pentru care mulimile
obinute prin diferena simetric sunt egale, introducem muchie numai ntre nodurile pentru primele
mulmi pentru care am obinut acel rezultat (celelalte noduri nu vor mai fi legate).

Presupunem c mulimea obinut prin reuniunea celor n mulimi este o mulme A care are
cardinalul m.
Dac m<n nseamn c exist elemente din S care nu au fost incluse n nici una dintre mulmile
A
i
. Deci, dac am considera x ca fiind unul dintre aceste elemente am obine relaia cutat ntruct din
diferenele A
i
- {x}, A
2
- ,x-,, A
n
- ,x- rezult tot mulimile A
1
, A
2
, , A
n
care erau distincte din ipotez.

Dac m=n, notm numrul de muchii cu M i urmrim s demonstrm c M<n. Este evident c n
momentul n care nu toate elementele din mulimea S eticheteaz muchii din graful G, obinem un
element care s respecte proprietatea. Alegem x ca fiind unul dintre acele elemente care nu eticheteaz
nici o muchie (deci x nu este unul dintre elementele pe care dac le scoatem dintr-o mulime obinem
alt mulime dintre cele n). Aadar putem spune c dac scoatem x din toate cele n mulimi, obinem tot
mulimi distincte.
Vom demonstra acum c ntr-adevr M<n (este evident c M nu poate fi mai mare dect m,
doarece am specificat c muchiile au etichete distincte).
Reducere la absurd:
Presupunem c exist n muchii n graful G.
ntruct graful G are n noduri putem spune c admite cicluri (un graf de ordin n care nu admite
cicluri i este maximal cu aceast proprietate are dimensiunea n 1 i este arbore; oricum s-ar aduga o
muchie la un astfel de graf se formeaz cel puin un circuit).
142
Fie C unul dintre ciclurile din graful G i fie A
i1
, A
i2
, , A
ik
mulimile din nodurile care formeaz
ciclul de lungime k, legate n aceast ordine. Presupunem c o mulime A
ij
este legat de o mulime
A
ij+1
; vom nota eticheta muchiei dintre cele dou noduri cu a
ij
. Conform modului de introducere a
muchiilor ntre dou noduri, putem spune c avem urmtoarele relaii ntre mulimile de mai sus:
- | card(A
i1
) card(A
i2
) | = 1
- | card(A
i2
) card(A
i3
) | = 1
-
- | card(A
ik-1
) card(A
ik
) | = 1
- | card(A
ik
) card(A
i1
) | = 1
Aceste relaii se reduc la faptul c dou mulimi consecutive din lan pot avea cel mult un
element n plus sau unul n minus una fa de alta.

Din relaiile de mai sus putem trage urmtoarele concluzii:
- | card(A
i1
) card(A
i2
) | = 1
- | card(A
i1
) card(A
i3
) | = 0 sau | card(A
i1
) card(A
i3
) | = 2
- | card(A
i1
) card(A
i4
) | = 1 sau | card(A
i1
) card(A
i3
) | = 3
- | card(A
i1
) card(A
i5
) | = 0, 2, sau 4
-
- | card(A
i1
) card(A
ik
) | = 0, 2, sau k-1 pentru k numr impar
= 1, 3, sau k-1 pentru k numr par.
Relaiile de mai sus sunt evidente ntruct la fiecare pas pe care l parcurgem n ciclu putem avea
cel mult un element n plus sau n minus fa de elementul anterior. Putem demonstra acest fapt prin
inducie.
Pasul de baz este :
| card(A
i1
) card(A
i2
) | = 1
| card(A
i1
) card(A
i3
) | = 0 sau | card(A
i1
) card(A
i3
) | = 2
La pasul inductiv presupunem c avem adevrat relaia pentru k mulimi i demonstrm pentru
a k+1-a mulime.
tim c avem muchie ntre A
ik
i A
ik+1
. Deci diferena simetrica a celor dou mulimi este format
dintr-un element i dup cum am spus i mai sus avem | card(A
ik
) card(A
ik+1
) | = 1. n cazul n care k este
numr par, avem | card(A
i1
) card(A
ik
) | = 1, 3, sau k-1. Din cele dou relaii obinem c | card(A
i1
)
card(A
ik+1
) | = 0, 2, k-2 sau k, adic exact ce trebuia s artm. Avem aceeai situaie i n cazul n care
k este numr impar.
Am demonstrat deci c
| card(A
i1
) card(A
ik
) | = 0, 2, sau k-1 pentru k numr impar
143
= 1, 3, sau k-1 pentru k numr par.

n cazul n care | card(A
i1
) card(A
ik
) | = 1 nu putem avea muchie ntre cele dou noduri i deci
obinem contradicie fa de presupunerea iniial.
Trebuie s mai artm c i pentru | card(A
i1
) card(A
ik
) | = 1 obinem contradicie.
Considerm cazul n care card(A
ik
)=card(A
i1
)+1. Deci A
ik
= A
i1
,x- (i din modul n care am
construit muchiile). Dar ca s fi putut ajunge la aceast situaie este necesar ca anterior s fi introdus
ntr-o mulime, printr-o muchie etichetat cu x, elementul x (pentru c mulimea iniial A
i1
nu coninea
acest element i acesta este singurul mod de a obine elemente noi n mulimile de dup A
i1
). Muchia
dintre A
ik
i A
i1
este etichetat cu x (deoarece x este elementul care formeaz diferena simetric a celor
dou mulimi). Am ajuns la o contradicie ntruct noi am considerat muchii cu etichete distincte i am
obinut c exist dou muchii etichetate cu x. Analog se trateaz i cazul n care card(A
i1
)=card(A
ik
)+1.
Presupunerea de la care am plecat este fals, deci nu pot exista cicluri n graful G i deci graful G
nu poate avea n muchii.
Putem spune aadar c ntotdeauna va exista cel puin un element care s nu eticheteze nici o
muchie i deci unul dintre aceste elemente va fi elementul x cutat.
Am demonstrat c exist un element x n mulimea S astfel nct A
1
- {x}, A
2
- ,x-,, A
n
- ,x- s fie
de asemenea distincte.
18. Fie G un graf i C:E(G)R
+
o funcie de capacitate a muchiilor. Oricrui drum din graf cu mcar
o muchie i se asociaz locul ngust ca fiind muchia sa de capacitate minim. Dai un algoritm
eficient care s determine, pentru 2 vrfuri s i t distincte ale grafului, drumul cu locul ngust
cel mai mare (dintre toate drumurile de la s la t n G).
Soluie:
Iniial verificm dac s i t se afl in aceeai component conex n graful G, adic dac
exist drum de la s la t.
n cazul n care exist un astfel de drum vom ordona muchiile, n funcie de capacitile
asociate, n ordine descresctoare. Ideea se bazeaz pe algoritmul union-find. Pornim cu toate
nodurile aflate n arbori diferii, deci fiecare nod va fi rdcina unui arbore.
ntr-un vector cu n componente (unde n este numrul de noduri din arbore) reinem pentru
fiecare nod printele su in arborele din care face parte la pasul curent. Dac un nod este
rdcina unui astfel de arbore, el nu are printe, deci elementul corespunztor lui din vector va
avea valoarea -1. Iniial vectorul conine evident numai valori de 1 (astfel sugerm c toate
nodurile sunt rdcini).
La fiecare pas vom considera o muchie (x,y) din irul de muchii ordonate descresctor.
Vom modifica prinii nodurilor din arborele lui y astfel nct y s devin rdcina acelui
arbore. Apoi, rdcina lui y o vom schimba n x. Astfel, am legat arborele lui y de arborele lui
144
x, pstrnd i muchiile aa cum sunt n graful iniial. Verificm dac s i t se afl deja n acelai
arbore. Dac nu, continum algoritmul n aceeeai manier ca mai sus.
n cazul n care x i y au fost adui deja n aceeai component, putem spune c am
format un drum de la s la t, i nu orice drum, ci drumul cu locul ngust maxim.
Observaie: ntotdeauna s rmne rdcin n arborele n care se afl la un moment dat.
Pentru a reface drumul de la s la t, pornim din t i mergem n sus n arbore, din printe n
printe, pn ajungem n s. irul de noduri obinut este drumul de la t la s cutat.
Avem nevoie de urmtoarele funcii:
- Funcia union prin care legm un arbore de un alt arbore folosind regulile
enumerate mai sus;
- Funcia find prin care verificm din care arbore face parte un anume nod;
- Funcia de ordonare descresctoare a muchiilor dup capacitile asociate.
Pentru nceput extragem toate muchiile din graful G i le punem ntr-un vector de structuri
de tip muchie n care reinem prima i a doua extremitate a fiecrei muchii.
function ExtrageMuchii(a)
begin
/*parcurgem matricea de adiacen, numai n jumtatea ei superioar, i mrim numrul de
muchii descoperite pn la momentul curent, introducnd i muchia nou descoperit*/
m 0 //numrul de muchii din graful G
for i 0 to n 1 do
for j i+1 to n 1 do
if ( a(i, j) = 1 ) then
/*Muchii este vectorul de elemente de tip muchie */
Muchii[m].extremitate1=i
Muchii[m].extremitate2=j
m = m+1
end
Funcia are complexitatea O( (n-1)*n/2 ) = O(n
2
).
n continuare vom utiliza un algoritm de sortare, de preferat quicksort, care n cele mai multe
cazuri funcioneaz cel mai bine, dintre algoritmii de sortare cunoscui (nu putem utiliza n acest
caz algoritmi de sortare n timp liniar, ntruct nu ne permite tipul valorilor care trebuie
ordonate). Complexitatea acestui algoritm este de O(n
2
) n cazul cel mai defavorabil, ns timpul
mediu de execuie este O(nlgn).
145
function QuickSort(Muchii, p, r)
begin
if (p<r) then
q Partiie(Muchii, p, r)
QuickSort(Muchii, p, q)
QuickSort(Muchii, q+1, r)
end
function Partiie(Muchii, p, r)
begin
x f(Muchii[p].extremitate1, Muchii[p].extremitate2)
i p-1
j r+1
while (true) do
repeat
j j-1
until C(Muchii[j].extremitate1, Muchii[j].extremitate2) >x
repeat
i i+1
until C(Muchii[i].extremitate1, Muchii[i].extremitate2) sx
if (i < j) then
interschimb ( Muchii*i+, Muchii*j+ )
else return j
end
Se iniializeaz vectorul n care reinem pentru fiecare nod prinii lui cu 1. Numim acel vector
Printe (are dimensiunea n). Algoritmul care rspunde la cerin este:

146
procedure LocIngust ()
begin
/*putem verifica iniial dac t este accesibil din s, printr-o parcurgere bfs sau dfs; n cazul n
care s i t nu se afl n aceeai component conex nu are rost s mai continum*/
if (VerificAccesibilBFS(s, t) = false) then return
ExtrageMuchii(a)
/*n vectorul Muchii avem toate muchiile din graful G */
QuickSort(Muchii, 0, m-1)
/*n vectorul Muchii avem toate muchiile din graful G ordonate descresctor dup
capaciti*/
i 0
while (s = find(t)) do
//ct timp t nu se afl n arborele lui s, deci nu am gsit drum de la s la t
if (find(Muchii[i].extremitate2) = find(Muchii[i].extremitate1) then
/*n cazul n care cele dou extremiti se afl deja n aceeai component nu facem
nici o modificare*/
if (Muchii[i].extremitate1=s) then
union (s, Muchii[i].extremitate2)
else
if (Muchii[i].extremitate2=s) then
union (s, Muchii[i].extremitate1)
else
/*prin expresiile condiionale de mai sus ne asigurm c s rmne mereu n postura de
rdcin */
union (Muchii[i].extremitate1, Muchii[i].extremitate2)
i i+1
//apelm n continuare o funcie care obine drumul de la t la s cutat
147
Drum (s, t)
end

n continuare vom trata funciile union i find.
function find (x)
begin
temp x
//naintm pn cnd ajungem n rdcin
while ( Printe*temp+ > 0 ) do

temp Printe*temp+
return temp
end;
Complexitatea funciei este O(n) deoarece parcurgem un numr de vrfuri de ordinul lui n.
function union (x, y)
begin
temp1 Printe*y+
temp2 y
while ( temp1> 0 ) do
//inversm toate legturile astfel nct y s devin rdcina subarborelui n care se afl
p Printe *temp1+
Printe*temp1+ temp2
temp2 temp1
temp1 p
Printe*y+ x
148
//legm subarborele cu y drept rdcin direct de x
end
Complexitatea funciei este O(n), la fel ca pentru funcia find.
function Drum (s, t)
begin
temp t
//afim nodurile din drumul de la t la s cutat
while ( temp = s ) do
afieaz temp
temp Printe*temp+
afieaz s
end.
Complexitatea funciei este O(n).

Complexitatea algoritmului este O( (n-1)*n/2 ) + O(n
2
) + O(n*m) (se apeleaz funciile union i
find de m = numrul de muchii ori ). La aceasta se adaug complexitatea parcurgerii pe care o facem
pentru a verifica dac exist drum de la s la t i care se face n O(m+n). Deci complexitatea final a
algoritmului este O((n+1)*(n+m)).

Corectitudinea algoritmului se bazeaz pe modul n care am realizat unificarea arborilor i care
pstreaz muchiile din realitate, spre deosebire de algoritmul de union-find clasic, unde nu conta modul
n care se realizau legturile. Evident ceea ce obinem n final este un drum de la s la t deoarece n
momentul n care am gsit un element din componenta lui s care este legat de un element din
componenta lui t atam cele dou componente. Ceea ce am obinut n final este un arbore care i
conine pe s i pe t, precum i muchiile din graful iniial, pn la momentul cnd am legat cele dou
componente i ne-am oprit din adugarea de muchii.
Drumul obinut este i drumul cu muchiile cele mai lungi i deci locul ngust al acestui drum este
locul ingust cel mai mare dintre locurile nguste ale drumurilor de la s la t; am obinut aceast relaie
ntruct am ales muchiile din irul muchiilor ordonate descresctor.
149
Vom demonstra prin inducie structural c n momentul n care atam un arbore unui alt
arbore, obinem un nou arbore n care avem drum de la rdcin la orice nod al su, drum preluat chiar
din graful iniial.
Pentru pasul de baz ne referim la situaia iniial n vectorul Printe, cnd fiecare nod din graful
iniial era rdcina unui arbore. Cnd am ataat un arbore de un alt arbore, am legat de fapt dou noduri
ntre care exista muchie n graful iniial. Deci noul arbore obinut, format numai din dou noduri, respect
proprietatea pe care dorim s o demonstrm: avem drum de la rdcin la cellalt nod, drum preluat din
graful iniial.
La pasul inductiv presupunem c avem deja k arbori care respect proprietatea i demonstrm
c dac legm doi arbori dintre acetia se obine un nou arbore care respect proprietatea.
Presupunem c am gasit o muchie ntre un nod x dintr-un arbore A
1
i un nod y dintr-un arbore
A
2
. Iniial, algoritmul transform arborele A
2
astfel nct y s devin rdcin. Transformarea s-a fcut
pstrnd muchiile din graful iniial, ns s-au modificat prinii unor noduri din arbore (pentru nodurile
aflate n subarborele n care se afl i y, pn la nivelul lui y). Apoi, printele lui y devine x.
Conform ipotezei inductive, tim c n A
1
exista drum de la rdcin la x, preluat din graful
iniial.
De asemenea, tim c n A
2
exist drum ntre orice dou noduri, drum care exist i n graful
iniial (fie a, b dou noduri din A
2
; din ipoteza inductiv tiam c exist drum de la rdcin la a i la b,
drumuri din graful iniial; dac lipim cele dou drumuri n rdcin, obinem un drum de la a la b cu
muchii din graful iniial). Deci n A
2
avem drum din graful G de la y la orice nod.
Din cele dou relaii i din faptul c ntre x i y exista muchie, obinem c exist drum din G de la
rdcina lui A
1
, care devine rdcina arborelui nou format, la orice nod din A
2
. i cum ipoteza inductiv
spune c avem drum n A
1
, preluat din graful iniial, de la rdcin la orice nod al su, putem concluziona
c pentru arborele nou format se respect proprietatea.
n urma demonstraiei prin inducie structural putem spune c ntre s, care era radcina unui
arbore (convenie fcut n program), i t, aflat n alt arbore, obinem drum din graful iniial, dup
legarea celor doi arbori .

Vom demonstra c drumul obinut este ntr-adevr drumul cutat, adic cel cu locul ngust cel
mai mare, prin reducere la absurd.
Presupunem c exist un alt drum D
2
n G al crui loc ngust este mai mare dect locul ngust al
drumului descoperit prin acest algoritm, D
1
. Fie m
1
muchia care reprezint locul ngust al lui D
1
i m
2

muchia care reprezint locul ngust al lui D
1
. Am presupus c m
2
> m
1
.
Dac m
2
> m
1
, nseamn c m
2
se afla naintea lui m
1
n irul de muchii, ordonat descresctor
dup capacitate. nseamn c m
2
a fost descoperit naintea lui m
1
. Cum m
2
era locul ngust al lui D
2
,
150
celelalte muchii de pe drumul D
2
se afl naintea sa n ir, deci au fost deja decoperite. Aadar, ntruct m
1

nu era nc descoperit cnd am descoperit i ultima muchie din drumul D
2
, putem spune c drumul D
1
a
fost descoperit dup drumul D
2
. Am ajuns la o contradicie, deoarece am presupus c D
1
era primul drum
descoperit ntre s i t (cnd descoperim un drum algoritmul se termin).

Am demonstrat c drumul descoperit este i drumul cutat, pentru c dac ar exista un drum cu
locul ngust mai mare, acesta ar fi fost descoperit nainte i algoritmul s-ar fi oprit.

Deci algoritmul determin ntr-adevr drumul de la s la t din graful iniial, cu locul ngust cel mai
mare.

TEMA NR. 8
22 aprilie 2003
19. Fie G un graf conex i o funcie de cost c:E(G)R. Vom numi tietur orice mulime A de
muchii ale lui G cu proprietatea c exist o bipartiie (S, V(G) S) a mulimii vrfurilor lui G
astfel nct A este mulimea muchiilor lui G cu extremitile n clase diferite ale bipartiiei.
a) Artai c dac funcia de cost are proprietatea c orice tietur are o unic muchie
de cost minim, atunci exist un unic arbore parial de cost minim.
b) Deducei c, dac funcia de cost c este injectiv, atunci G are un unic arbore parial
de cost minim.
c) Sunt adevrate reciprocele afirmaiilor a i b?
Soluie:
a) Fiind conex, graful G accept cel puin un arbore parial de cost minim. Vom
utiliza teorema general de construcie a arborilor pariali de cost minim, particularizat
pentru cazul n care funcia de cost are proprietatea c orice tietur are o unic muchie
de cost minim.
Se fac urmtoarele notaii:
- T
K
= (T
1
k
, , T
n-k
k
), unde T
i
k
, cu 1si sn-k, sunt arbori (subgrafuri ale lui G);
- V(T
i
k
) = partiie a lui V(G);
- e
*
este muchia de cost minim printre toate cu o extremitate pe T
s
k
ales i cealalt n
V-V(T
s
k
).
Vom demonstra urmtoarea teorem:
Fie G=(V,E) cu V = ,1, , n- i o funcie de cost c: E(G)R astfel nct orice A, tietur, are o
unic muchie de cost minim. Dac G este conex (T
G
| = ), atunci exist i este unic T
*
(arbore parial de
151
cost minim) i pentru oricare k ntre 0 i n-1, E(T
K
) = ) (
1
k
j
k n
j
T E

=
_E(T
*
) (pentru k = n - 1 obinem soluia
problemei)
Demonstraie:
Vom demonstra teorema prin inducie dup k, adic dup pasul la care am ajuns cu construcia
arborelui.
Pasul de baz:
Pentru k=0 avem G conex, deci exist T
*
(T
G
| = i finit).
E(T
*
) | = cE(T
*
), deci relaia este adevrat.
Pasul inductiv:
Presupunem relaia adevrat pentru k < n - 1 adic: exist i este unic T
*
astfel nct
E(T
k
) _E(T
*
).
Trebuie s demonstrm c exist i este unic T
*
astfel nct E(T
k+1
) _E(T
*
).
E(T
k+1
) = E(T
k
) {e
*
}, unde e
*
este muchia considerat mai sus. Avem dou posibiliti:
1. dac muchia e
*
este din E(T
*
), unde T
*
este arborele parial de cost minim de la pasul k,
atunci la acest pas nu modificm arborele de la pasul anterior i deci teorema are loc.
2. dac muchia e
*
nu este din E(T
*
), unde T
*
este arborele parial de cost minim de la pasul k,
atunci T
*
+ e
*
are exact un circuit C care are toate muchiile, n afar de e
*
, n E(T
*
). ntruct T
*

este arbore, putem spune c exist deja o muchie e
1
cu o extremitate pe T
s
k
i cealalt n
afar, la fel ca e
*
. Deci, pentru a obine un alt arbore parial de cost minim, este necesar s
nlocuim e
1
cu e
*
n T
*
; ns nlocuirea se poate face numai n cazul n care c(e
*
) sc(e
1
). Dar T
*

era arbore parial de cost minim aadar c(T
*
) era minim; nu putem obine un arbore parial
de cost mai mic dect T
*
dar am putea obine un alt arbore parial, de cost egal cu c(T
*
).
Acest lucru s-ar ntmpla dac am gsi o muchie e
*
astfel nct c(e
*
)= c(e
1
).
(V(T
s
k
), V(G)-V(T
s
k
)) determin o tietur iar e
1
este muchia de cost minim din aceast
tietur. tim c funcia de cost are o singur muchie de cost minim ntr-o tietur, aa c nu
exist o alt muchie de cost egal cu costul lui e
1
. Deci nu gsim o muchie e
*
cu proprietatea
de mai sus, aa c aceast situaie nu este posibil.
Aadar, muchia e
*
este obligatoriu din E(T
*
) de la pasul anterior, deci T
*
nu se poate modifica; el
rmne la fel la fiecare pas.

Am demonstrat c n ipoteza de la care am pornit obinem un unic arbore parial de cost minim.

152
b) Dac funcia c este injectiv, nseamn c pentru oricare dou muchii e
1
, e
2
din E(G), diferite,
avem c (e
1
) = c(e
2
). Deci pentru orice mulime de tieturi obinem c are o unic muchie de cost minim,
ntruct orice alt muchie diferit de ea trebuie s aib cost diferit, i evident mai mare ntruct muchia
considerat era de cost minim.
Ne aflm acum n condiiile de la punctul a) i conform teoremei demonstrate mai sus, obinem
c exist un unic arbore parial de cost minim.

c) Reciprocele afirmaiilor de la punctele a) i b) nu sunt adevarate. Acest lucru l putem arta cel
mai bine pe un graf conex G pe care l considerm nc de la nceput arbore. Este evident c acest graf are
un unic arbore parial de cost minim, i anume chiar graful G, deoarece nu putem scoate nici o muchie din
el pentru c nu ar mai fi conex (este minimal cu aceast proprietate). Vom arta c nu este obligatoriu
ca funcia de cost s aib una din proprietile de mai sus: s fie injectiv sau s accepte o unic muchie
de cost minim n orice tietur.

Vom considera un exemplu, sugestiv pentru aceste dou cazuri:


Dup cum putem observa, tietura determinat de mulimea
S=,1- i V(G)-S=,2, 3, 4, 5- are dou muchii de cost minim = 10,
i anume: muchia (1,2) i muchia (1,3). Cu toate acestea, aa
cum am precizat i anterior, graful nostru adimite un unic
arbore parial de cost minim.
Pentru punctul b), subliniem faptul c funcia c asociat
grafului G nu este injectiv: exist dou muchii diferite, (1,2)
i (1,3), care au costuri egale: 10.

Deci, reciprocele afirmaiilor de la punctele a) i b) nu sunt adevrate, ntruct exist situaii n
care exist un unic arbore parial de cost minim pentru un graf i totui nici una din prorietile funciei
de cost de mai sus nu este ndeplinit.
20. Considerm o numerotare fixat a celor m>0 muchii ale unui graf conex G=(V,E) de ordin n.
Pentru orice submulime de muchii A considerm x
A
eGF
m
vectorul
m-dimensional cu elemente 0,1 definit prin x
i
A
=1 e
i
eA (vectorul caracteristic). GF
m
este
153
spaiul vectorial peste corpul GF (cu elemente 0 i 1, i operaiile de adunare i nmulire
modulo 2).
a) Demonstrai c mulimea vectorilor caracteristici ai tuturor tieturilor
grafului G, la care adugm i vectorul nul, formeaz un subspaiu vectorial
X al lui GF
m
.
b) Demonstrai c vectorii caracteristici ai mulimilor muchiilor circuitelor
grafului G genereaz un subspaiu vectorial U al lui GF
m
ortogonal pe X.
c) Artai c dim(X) > n-1
d) Artai c dim(U) > m-n+1
e) Deducei c dim(X) = n-1 i c dim(U) = m-n+1.
Soluie:
a) Vom ncepe prin a defini spaiul vectorial i vom specifica ce nseamn subspaiu vectorial.
Fie K un corp. Se numete spaiu vectorial (peste corpul K) un grup abelian (V,+) pe care este dat
o lege de compoziie extern cu operatori n K,
K V V, (o , u) o u, care verific axiomele:
S
1
) (o + | )u = o u + | u,
S
2
) o (u + v) = o u + o v,
S
3
) o ( | u) = (o | )u,
S
4
) 1 u = u,
Oricare ar fi o , | e K i u, ve V.
n cazul nostru, (GF
m
, +
(mod2)
) este grupul abelian iar (GF, +
(mod2)
,*) este corpul K din definiie.
Pentru a demonstra c X este un subspaiu vectorial al lui GF
m
, iniial, trebuie s demonstrm

c X este
subgrup al lui GF
m
.
0
m
e X din ipotez.
Este evident c X are acelai element neutru ca i GF
m
, i anume vectorul 0
m
.
Trebuie s demonstrm c din oricare dou elemente din X, compuse prin operaia de
adunare modulo 2 pe vectori, se obine un element tot din X.
De fapt, trebuie s demonstrm c din dou tieturi A
1
i A
2
, reprezentate prin vectori
caracteristici, se obine o nou tietur A
3
, A
3
=A
1
+A
2
. n momentul n care adunm cei doi
vectori, folosind adunarea modulo 2, putem avea urmtoarele cazuri, cu semnificaiile proprii:
154
0+0 = 0 dac o muchie i, cu i ntre 0 i m-1, nu aparine nici lui A
1
i nici lui A
2
, atunci
ea nu aparine nici lui A
3
(n vectorul caracteristic al lui A
3
vom avea 0 pe poziia i )
0+1 = 1+ 0 = 1 dac o muchie i aparine mcar uneia dintre tieturi, atunci aparine i
lui A
3
; deci va fi 1 pe poziia i n vectorul lui A
3
.
1+1 = 0 dac o muchie aparine ambelor tieturi, ea nu aparine lui A
3
; vom avea 0 pe
poziia i n vectorul A
3
.
Aceste trei situaii se pot traduce n limbajul mulimilor prin diferena simetric, i
anume
A
3
= A
1
A A
2
. n A
3
avem numai acele muchii care nu se afl i n A
1
i n A
2
.

Trebuie s artm c noua mulime de muchii A
3
este tot tietur. Pentru aceasta,
trebuie s gsim o mulime S
3
, corespunztoare lui A
3,
astfel nct muchiile din A
3
s aib o
extremitate n S
3
i cealalt n V(G)-S
3
. Vom demonstra c mulimea S
3
corespunztoare este S
1

A S
2
, unde S
1
, S
2
sunt mulimile corespunztoare lui A
1
, respectiv A
2
; artm c toate muchiile
cu o extremitate n
S
1
A S
2
i cealalt n afar se afl n A
3
.
S
1
A S
2
={v| veS
1
i veS
2
sau veS
2
i veS
1
}
Demonstrm prin dubl inegalitate:

1) A
3
_{uveE(G)| ue S
1
A S
2
i ve V(G)-(S
1
A S
2
)}

Considerm o muchie uv din A
3
. tim c uveA
1
AA
2
. Presupunem c uveA
1
.
Deci u se afl n S
1
i v se afl n V(G)-S
1
, sau invers. Deoarece uveA
2
nseamn c
u i v se afl amndou n S
2
sau n V(G)-S
2
.
Dac u i v e S
2
, avem u e S
1
AS
2
i v e S
1
AS
2
. Deci avem muchia uv inclus
n mulimea {uveE(G)| ue S
1
A S
2
i ve V(G)-(S
1
A S
2
)}.
Dac u i v e V(G)-S
2
, avem v e S
1
AS
2
i u e S
1
AS
2
. Deci avem muchia uv
inclus n mulimea {uveE(G)| ue S
1
A S
2
i ve V(G)-(S
1
A S
2
)}.
Analog, obinem i pentru v n S
1
i u n V(G)-S
1
.

2) {uveE(G)| ue S
1
A S
2
i ve V(G)-(S
1
A S
2
)} _ A
3


Considerm o muchie uv din {uveE(G)| ue S
1
A S
2
i v e V(G)-(S
1
A S
2
)}.
Presupunem c ueS
1
i ueS
2
. Din faptul c v e V(G)-(S
1
A S
2
) putem spune
c v fie nu aparine nici lui S
1
, nici lui S
2
, fie aparine lui S
1
S
2
.
Dac veS
1
i veS
2
, nseamn c veV(G)-S
1
i veV(G)-S
2
. Conform
presupunerii anterioare, obinem c uveA
1
i uveA
2
, deci uveA
3
.
Dac ve S
1
S
2
, nseamn c veS
1
i veS
2
. Conform presupunerii anterioare,
obinem c uveA
2
i uveA
1
, deci uveA
3
.
Analog, demonstrm i n presupunerea c ueS
2
i ueS
1
.
Conform cazurilor 1 i 2, obinem c A
3
= {uveE(G)| ue S
1
A S
2
i ve V(G) (S
1
A
S
2
)}. Deci A
3
este tietur, cu S
3
= S
1
A S
2
.

155
ntruct simetricul x al unui element x
A
din spaiul X este tot x
A
(x
A
+ x
A
= 0 ) care
aparine lui X i compunerea a oricare dou elemente din X este tot un element din X, putem
spune c X este subgrup al lui GF
m
.

n continuare, verificm axiomele:

S
1
) (o + | )u = o u + | u, o , | e {0,1} , ueX
o = 0 i | = 1 : (o + | )u = u
o u + | u = 0
m
+ u = u
o = 0 i | = 0 : (o + | )u = 0
m
e X
o u + | u = 0
m
+ 0
m
= 0
m

o = 1 i | = 1 : (o + | )u = 0
m
u = 0
m
e X
o u + | u = u + u = 0
m


S
2
) o (u + v) = o u + o v, o e {0,1}, u, veX
o = 0 : o (u + v) = 0
m
e X
o u + o v = 0
m
+ 0
m
= 0
m
o =1 : o (u + v) = u + v e X aa cum am demonstrat anterior
o u + o v = u + v

S
3
) o ( | u) = (o | )u, o , | e {0,1} , ueX
o = 0 i | = 1 : o ( | u)=0 u = 0
m
= (o | )u
o = 0 i | = 0 : o ( | u)=0 0
m
= 0
m
= (o | )u
o = 1 i | = 1 : o ( | u)=1 u = u = (1*1) u = (o | )u
o = 1 i | = 0 : o ( | u)=1 0
m
= 0
m
= 0 u =(o | )u

S
4
) 1 u = u, ueX evident

ntruct X este subgrup al grupului GF
m
i respect axiomele, putem spune c X este
subspaiu vectorial al lui GF
m
.

b) U = <{x
C
| C circuit n G}>
Mulimea tuturor vectorilor caracteristici asociai circuitelor din graful G este inclus n
U. Notm un astfel de vector cu x
C
, unde x
C
[i] = 1 dac muchia i se afl n circuitul C i 0 altfel.
156
Pentru a demonstra c subspaiul vectorial generat de vectorii caracteristici asociai
mulimilor muchiilor circuitelor grafului G este ortogonal pe X, trebuie s considerm vectorul
caracteristic al unui circuit (din U), s l nmulim cu vectorul caracteristic al unei tieturi (din
X) i s demonstrm c obinem rezultatul 0.
Fie C un circuit i x
C
vectorul caracteristic asociat i fie A o tietur. Prin nmulirea
vectorului x
C
cu x
A
nelegem produsul scalar al celor doi vectori, i anume:
x
C
x
A
= ( ) ( ) (
1
0
i x i x
A
m
i
C

=
) (mod 2).
De fapt ) ( ) (
1
0
i x i x
A
m
i
C

=
reprezint numrul de muchii pe care le au n comun circuitul C
i tietura A, ntruct ) ( ) ( i x i x
A C
este 1 numai n momentul n care amndoi sunt 1, deci numai
dac muchia I se afl i n circuit i n tietur. Deoarece suma obinut este modulo 2, putem
spune c de fapt, produsul scalar este 0 dac circuitul i tietura au un numr par de muchii
n comun i 1 dac numrul de muchii n comun este impar.

Deci demonstraia noastr se reduce la a demonstra c orice circuit i tietur au n
comun numr par de muchii (numai n acest caz produsul scalar este 0).

Fie C un circuit i A o tietur. Fie k numrul de muchii comune lui A i C. Fie S i V S
mulimile corespunztoare tieturii A.
Dac k = 0, k este par, ceea ce trebuia demonstrat.
Dac k > 0:
Exist un nod v e V(C) S (evident, deoarece, dac acest circuit are muchii comune cu
o tietur, atunci, n mod necesar, el are noduri n ambele submulimi determinate de bipartiia
corespunztoare tiaturii).
Circuitul C este un drum nchis de la v la v. Fiecare muchie din cele k comune tieturii A
i circuitului C este o trecere din S n V S sau invers.
Presupunem c pornim din nodul v i parcurgem muchiile acestui circuit n ordinea n
care ele apar (rezultatul este acelai indiferent de direcia n care se pornete).
ntruct captul final al acestui drum nchis se gsete n S, pentru fiecare muchie te
trecere de la S la V S trebuie s existe o alt muchie de revenire n S. n consecin, k trebuie
s fie par.
Aadar, orice circuit i tietur au n comun numr par de muchii i dup cum am
explicat mai sus, putem spune c U este ortogonal pe X.

c) Vom ncerca s construim incremental (n maniera construciei arborelui parial de
cost minim) tieturi, prin adugarea la fiecare pas a unui nod; vom demonstra c prin acest mod
de construcie se obin n - 1 tieturi liniar independente, adic nici o tietur nu poate fi obinut
dintr-o combinaie liniar de alte tieturi. Prin urmare, exist cel puin n - 1 tieturi liniar
independente.
Se pornete iniial cu un singur nod aflat n mulimea S a primei tieturi. La fiecare pas
se adaug un nou nod n S-ul de la pasul anterior.
Facem convenia ca nodul ales la pasul i s fie notat cu u
i
iar mulimea S obinut la
acest pas s fie S
i
. Tietura determinat de mulimea S
i
va fi A
i
.
157
1. Vom demonstra c tieturile obinute n aceast manier sunt distincte.
Reducere la absurd:
Presupunem c exist S
i
, S
j
cu j > i, a.. A
i
= A
j
.
Din modul de construcie a mulimilor S S
i
c S
j
(incluziune strict), adic
S
j
= S
i
{u
1
, ,u
j-i
}.
Mulimea {u
1
,,u
j-i
} este evident nevid, deoarece am presupus j > i, avnd exact j i
noduri.
Vom studia urmtoarele dou cazuri(care acoper toate posibilitile):
Cazul 1: - w e S
i
, - u
p
e S
j
- S
i
a.. wu
p
e E(G). Atunci:
- u
p
e S
j
- S
i
u
p
e S
i
u
p
e V(G) - S
i
; n plus, w e S
i
; u
p
i w sunt n submulimi
diferite ale bipartiiei corespunztoare tieturii A
i
wu
p
e A
i
;
- u
p
e S
j
- S
i
u
p
e S
j
; n plus, w e S
i
i S
i
c S
j
(aa cum am artat mai sus) w e
S
j
u
p
i w sunt n acceai submulime dintre cele dou corespunztoare tieturii A
j

wu
p
e A
j
.
Am artat deci c, n acest caz, wu
p
e A
i
i wu
p
e A
j
A
i
A
j
u A
i
A
j
.
Cazul 2: w e S
i
, u
p
e S
j
- S
i
a.. wu
p
e E(G).
Atunci, ntruct G este conex, - u
p
e S
j
- S
i
i - s eV(G) S
j
, a.. su
p
e E(G). (Am
precizat c s e V(G) S
j
, deoarece:
- am presupus n ipoteza acestui caz c nici un nod din S
j
- S
i
nu este
adiacent cu nici un nod din S
i
;
- dac pentru orice u
p
e S
j
- S
i
nu ar exista nici un alt nod din V(G) S
j

cu care s fie adiacent, nodurile din S
j
- S
i
nu ar fi accesibile din nici un
alt nod din graf care nu aparine acestei mulimi, deci graful nu ar fi
conex. ).
- u
p
e S
j
- S
i
u
p
e S
j
; n plus, s e V(G) S
j
u
p
i s sunt n submulimi diferite ale
bipartiiei corespunztoare tieturii A
j
su
p
e A
j
;
- u
p
e S
j
- S
i
u
p
e S
i
u
p
e V(G) - S
i
; n plus, s e V(G) S
j
i S
i
c S
j
(aa cum am
artat mai sus) s e V(G) S
i
u
p
i s sunt n acceai submulime dintre cele
dou corespunztoare tieturii A
i
su
p
e A
i
.
Am artat deci c, i n acest caz, su
p
e A
j
i su
p
e A
i
A
j
A
i
u A
j
A
i
.
2. Vom demonstra c tieturile obinute n aceast manier sunt liniar independente i
deci ele aparin bazei spaiului vectorial X.
Demonstraia o vom face prin inducie:
Pasul de baz:
Se alege un nod oarecare pe care am convenit s-l notm cu u
0
. Mulimea S
0
este format
numai din elementul u
0
. A
0
este format numai din acele muchii care au o extremitate n u
0
.
A
0
= { u
0
v| veV(G), u
0
v e E(G) }
ntruct graful G este conex, u
0
are cel puin un nod adiacent cu el n mulimea V-{u
0
}.
Deci A
0
este mulime nevid (are cel puin o muchie) i vectorul caracteristic asociat x
A
0
este
diferit de vectorul nul 0
m
.
158
Aadar o
0
x
A
0
= 0
m
, o
0
e{0,1} o
0
= 0. Deci mulime de tieturi {A
0
} este liniar
independent.

Pasul inductiv:
Presupunem c toate tieturile pn la A
k
inclusiv, cu k<n-1 sunt liniar independente.
Vom alege nodul u
k+1
din V S
k
.
S
k+1
= S
k
{ u
k+1
}.
Tietura A
k+1
va cuprinde toate muchiile din A
k
, mai puin eventualele muchii cu o
extremitate n u
k+1
, la care se adaug eventualele muchii cu o extremitate n u
k+1
i cealalt n
V(G)-S
k+1
. Deci A
k+1
= A
k
{ u
k+1
v| veS
k
, u
k+1
v e E(G) } { u
k+1
v| veV(G)-S
k+1
, u
k+1
v e E(G)
}.
Noua tietur este diferit de toate cele de nainte prin cel puin una din urmtoarele
dou situaii (sau chiar amndou):
- dac u
k+1
are vecini n mulimea V(G)-S
k+1
atunci se formeaz muchii care nu au
existat pn acum n nici o alt tietur, deoarece pn la acest pas u
k+1
i aceti
vecini ai si s-au aflat n aceeai mulime: V(G)-S
i
, cu i ntre 0 i k.
- dac u
k+1
are vecini n mulimea S
k
atunci A
k+1
difer de toate celelalte tieturi de
nainte deoarece aceast tietur nu mai conine muchiile dintre u
k+1
i aceti vecini.
Demonstraie: Deoarece graful este conex, exist drum ntre oricare dou noduri.
Demonstrm c mulimea de tieturi {A
0
, A
1
, ... A
k
, A
k+1
} rmne liniar independent.
Avem

=
k
i
i
0
o x
A
i
= o
k+1
x
A
k+1
, o
i
e{0,1}.
Cazul 1
o
k+1
= 0

=
k
i
i
0
o x
A
i
= 0
m
o
i
= 0, i=0,, k conform ipotezei inductive c tieturile
pn la pasul k inclusiv sunt liniar independente.
Cazul 2
o
k+1
= 1

=
k
i
i
0
o x
A
i
+ x
A
k+1
= 0
m.
De la punctul a) tim c suma a dou tieturi reprezentate prin vectori caracteristici este
de fapt diferena simetric a celor dou tieturi. Acest rezultat se pstreaz i pentru suma dintre
mai multe tieturi. ntruct diferena simetric este asociativ, putem scrie c:

=
k
i
i
0
o x
A
i
+ x
A
k+1

1 =
A
i
o
S
i
, cu i de la 0 la k+1

159
Dar
1 =
A
i
o
S
i
este nevid ntruct conine nodul u
k+1
(acest nod nu apare dect n mulimea S
k+1
i
deci rmne n diferena simetric. Deci i

=
k
i
i
0
o x
A
i
+ x
A
k+1
este diferit de vectorul nul.
Deci, n ambele cazuri, vectorii caracteristici asociai tieturilor pn la pasul k+1 inclusiv sunt
liniar independeni. Aadar aceste tieturi sunt liniar independente i deci aparin bazei spaiului vectorial
X. ntruct se pot face n-1 adugri de noduri, pn cnd n mulimea V(G)-S rmne un singur nod,
putem spune c avem n-1 astfel de tieturi liniar independente care aparin bazei lui X i deci dim(X) >
n-1.
d) Considerm un arbore parial al grafului G. tim c un astfel de arbore are exact n-1
muchii, este conex i deci ntre oricare dou noduri exist un unic drum.
Dac adugm cte o muchie la acest arbore, din cele care nu sunt incluse deja,
obinem la fiecare pas cel puin un nou ciclu. Presupunem c adugm muchia uv, care nu
fusese deja adugat. tim c ntre u i v exist un drum n arbore format numai din muchiile
iniiale ale acestuia; prin adugarea acestei muchii, se nchide respectivul drum i se formeaz
un ciclu care conine numai muchii iniiale, mai puin muchia uv. Se pot aduga m-n+1 astfel de
muchii. Toate circuitele de aceast form (cu o singur muchie n afar de cele iniiale) sunt
liniar independente, adic nu se pot obine prin combinaii liniare ale altor circuite, ntruct
fiecare circuit are o muchie care nu poate fi obinut din celelalte circuite (muchia adugat
care nu aparinea iniial arborelui).
Deci aceste circuite aparin bazei spaiului vectorial U i obinem c dim(U) > m-n+1.
e) ntruct X i U sunt ortogonale (deci nu au elemente n comun) i sunt subspaii ale
spaiului vectorial GF
m
, putem spune c dim(GF
m
) > dim(U) + dim(X). Dimensiunea lui GF
m

este m ntruct baza acestui spaiu vectorial este format numai din acei vectori caracteristici
care au 1 pe o singur poziie (toi ceilali vectori pot fi obinui din acetia).
Deci m> dim(U) + dim(X) (1).
Dar am demonstrat mai sus c:
dim(U) > m-n+1
dim(X) > n-1
Aadar dim(U) + dim(X) > m (2).
Din (1) i (2) obinem c dim(U) + dim(X) = m.
i cum dim(U) > m-n+1 i dim(X) > n-1 obinem dim(X) = n-1 i dim(U) = m-n+1.
21. Artai c orice arbore cu gradul maxim t > 0 are cel puin t vrfuri pendante.
Soluie:
Fie T un arbore cu n = |T| i A(T) = t.
Atunci exist un nod v e V(T) astfel nct d(v) = A(T) = t.
160
Fie u
1
, u
2
, ... , u
t
vecinii lui v.

Printr-o parcurgere BFS a arborelui T pornind din nodul v se obine un arbore de lime, notat T,
care este, de fapt, arborele T n care considerm nodul v ca fiind rdcin.
T i T au, evident, acelai numr de noduri, aceleai muchii, deci, implicit, acelai numr de
noduri pendante (mai mult, nodul u este pendant n T dac i numai dac este pendant n T). Este
suficient deci s studiem numrul de noduri pendante din T.
n fiecare din subarborii din T cu rdcinile u
1
, u
2
, ... , u
t
exist cel puin un nod de grad 1.
(Demonstraie: Reducere la absurd:
Presupunem c u e T
uk
, d(u) > 2, unde T
uk
este subarborele din T cu rdcina u
k
.

Deoarece numrul de muchii din orice graf este jumtate din suma gradelor nodurilor, se obine:
|E(T
uk
)|=

e ) (
) (
2
1
uk
T V u
u d > ) ) ( 2 (
2
1
uk
T V > |V(T
uk
)|
Dar T
uk
este arbore, i n orice arbore T = (V, E) avem |E| = |V| - 1, deci
|V(T
uk
)| - 1 > |V(T
uk
)| contradicie).
Aadar, fiecare din cei t subarbori are cel puin un nod pendant. Acestea sunt distincte, deoarece
subarborii sunt disjuni.
n cosdsecin, T are cel puin t noduri pendante T are cel puin t noduri pendante.
22. Fie T = (V, E) un arbore cu rdcina r (un vrf oarecare) i cu parent(v) printele nodului
v e V, v r. Un cuplaj M al lui T se numete propriu dac orice vrf expus v (relativ la M) n T are un
frate w astfel nct w parent(v) e M.
a) Demonstrai c orice cuplaj propriu este de cardinal maxim.
b) Artai c pentru orice arbore cu n vrfuri, dat prin listele de adiacen, se poate
construi n timpul O(n) un cuplaj propriu.
Soluie:
a) Fie M un cuplaj propriu al lui T.
Conform Teoremei lui Berge, M este cuplaj de cardinal maxim M nu admite drumuri de
cretere. Este suficient deci s artm c M nu admite drumuri de cretere.
Reducere la absurd:
161
Presupunem c exist n T un drum de cretere P relativ la M.

Conform definiiei drumului de cretere, v
0
i v
k
sunt vrfuri expuse. Din definiia cuplajelor
proprii, orice vrf expus u are un frate w astfel nct w parent(v) e M.
n consecin, v
0
are un frate w
0
a.. w
0
parent(v
0
) e M, respectiv v
k
are un frate w
k
a..
w
k
parent(v
k
) e M.
T este arbore T este conex exist drum ntre oricare dou noduri.
n plus, ntr-un arbore aceste drumuri sunt unice.
Fie v
i
acel nod de pe drumul de cretere P considerat mai sus, cu proprietatea c drumul D
i
de la r
(rdcina arborelui T) la v
i
are
lungime(D
i
) = min{lungime(D)| D drum de la r la un nod v
j
de pe P}.
v
i
este unic cu aceast proprietate.
(Demonstraie: Presupunem c - v
j
v
p
e V(P) a..
lungime(D
j
) = lungime(D
p
) = min{lungime(D)| D drum de la r la un nod v
j
de pe P}.
Exist drum de la r la v
j
care trece prin v
p
. Acesta se obine prin concatenarea drumului D
p
cu
drumul P
jp
, unde P
jp
este acea poriune din P aflat ntre nodurile v
j
i v
p
.
v
j
v
p
lungime(P
jp
) > 0.
Deci lungimea drumului de la r la v
j
prin v
p
este strict mai mare dect
lungime(D
p
), deci i dect lungime(D
j
). n consecin, drumul de la r la v
j
prin v
p
este diferit de D
j
,
adic exist dou noduri n arborele T ntre care sunt mai multe drumuri (mai mult de un drum)
contradicie).
ntr-un arbore, numrul nivelului pe care se gsete un nod u este dat de distana dintre acest nod
u i rdcina arborelui.
Distana de la r la v
j
este mai mare dect distana de la r la v
i
, v
j
v
i
e V(P) nodurile v
j
se
gsesc pe nivelurie inferioare nivelului lui v
i
n T.
De asemenea, n orice arbore, oricare dou noduri adiacente sunt n relaia printe - fiu. n plus,
ntotdeauna printele este unic i se gsete pe nivelul imediat superior nuvelului fiului.
162
Presupunem c v
i
se afl n T pe nivelul h. Vom demonstra prin inducie c:
- v
i+j
se gsete pe nivelul h+j, avndu-l pe v
i+(j-1)
ca printe (j = i k , 1 );
- v
i-j
se gsete pe nivelul h+j, avndu-l pe v
i-(j-1)
ca printe (j = i , 1 ).
Pasul I:
- dac i > 0, v
i-1
este adiacent cu v
i
; distana(r, v
i-1
) > distana(r, v
i
) (din modul de alegere a
lui v
i
) v
i-1
este fiu al lui v
i
(nu poate fi printe, deoarece se gsete pe un nivel inferior)
i se afl n arbore pe nivelul h+1 (distana(r, v
i-1
) = distana(r, v
i
) + distana(v
i
, v
i-1
));
- dac i < k, v
i+1
este adiacent cu v
i
; distana(r, v
i+1
) > distana(r, v
i
) (din modul de alegere a
lui v
i
) v
i+1
este fiu al lui v
i
(nu poate fi printe) i se afl n arbore pe nivelul h+1.
Pasul II:
Presupunem afirmaiile adevrate pentru j1 s m1, respectiv j2 s m2 (1s j1 s m1< k i,
1s j2 s m2< i).
- Demonstrm pentru j1 = m1 + 1:
Din ipoteza inductiv
o v
i+m1
se afl pe nivelul h + m1;
o parent(v
i+m1
) =

v
i+m1-1
.
v
i+m1+1
este adiacent cu v
i+m1
(deci sunt n relaia printe fiu) i v
i+m1
are un unic printe
(pe v
i+m1-1
)
v
i+m1
= parent(v
i+m1+1
)
v
i+m1+1
se afl pe nivelul imediat inferior nivelului lui v
m1
, i anume pe
(h + m1) + 1 = h + (m1 + 1).
- Demonstrm pentru j2 = m2 + 1:
Din ipoteza inductiv
o v
i-m2
se afl pe nivelul h + m2;
o parent(v
i-m2
) =

v
i-m2-1
.
v
i-(m2+1)
este adiacent cu v
i-m2
(deci sunt n relaia printe fiu) i v
i-m2
are un unic printe
(pe v
i-(m2-1)
)
v
i-m2
= parent(v
i-(m2-1)
)
v
i-(m2+1)
se afl pe nivelul imediat inferior nivelului lui v
i-m2
, i anume pe
(h + m2) + 1 = h + (m2 + 1).

Aadar, schematic, poziia nodurilor i a muchiilor de pe drumul P n arborele T este:
163

Evident, dac v
i
= v
0
sau v
i
= v
k
, una dintre cele dou ramuri care pornesc de la v
i
lipsete.
Vom presupune c v
i
v
k
. Aceasta corespunde cazurilor:
- v
i
v
0
i v
i
v
k
;
- v
i
= v
0
(n acest caz, evident, v
i
v
k
, deoarece orice drum de cretere are lungimea
nenul, deci v
0
v
k
).
Cazul cnd v
i
= v
k
se trateaz similar cu cel tratat mai jos, nlocuind peste tot orice indice j ( j =
k , 0 ) cu k j.

v
k-1
= parent (v
k
) i v
k
este nod expus are un frate w
k
a.. w
k
parent(v
k
) e M.
parent(w
k
) = v
k-1
w
k
v
k-1
e M.
Dar v
k-2
v
k-1
e M i w
k
v
k-2
, (deoarece v
k-2
= parent(v
k-1
), deci nu poate fi i fiu al acestuia)
d
M
(v
k-1
) > 2 contradicie cu definiia cumplajului, conform creia, dac M este cuplaj n G,
atunci, u e V(G), d
M
(v) s 1.
n consecin, presupunerea fcut este fals M nu admite drumuri de cretere
M este cuplaj de cardinal maxim, conform teoremei lui Berge.
b) Artm c, pentru orice arbore cu n vrfuri, dat prin listele de adiacen, se poate construi n
timpul O(n) un cuplaj propriu.
Pentru a arta aceasta este suficient s artm c exist un algoritm care construiete, pentru
orice arbore cu n vrfuri, dat prin listele de adiacen, un cuplaj propriu n timpul O(n).
164

Observaie: Aa cum se vede n cele dou exemple de mai sus, pentru un arbore T, un cuplaj M
este sau nu propriu n funcie de nodul considerat rdcin.
n exemplul I, dac rdcina este 4, atunci exist un nod expus (acest nod este 1) care nu are nici
un frate, deci pentru care nu exist w fiu al lui 2 astfel nct 2w e M (M = {32, 45, 67}). Aceast
problem dispare dac vom considera nodul 2 ca rdcin a arborelui.
De asemenea, dac studiem arborele din exemplul II, vom constata c,
indiferent de cuplajul maxim considerat, dac rdcina arborelui este 10, respectivul
cuplaj nu este propriu, ntruct fie rdcina, fie o parte din nodurile frunze sunt noduri
expuse fr a avea un frate care mpreun cu printele lor comun s formeze o muchie
din cuplaj.

O condiie necesar i suficient ca un cuplaj M s fie prorpiu pentru un arbore este ca orice nod
expus s aib un frate care, mpreun cu printele lor comun, s formeze o muchie din cuplajul M.
O alt condiie necesar pentru ca un cuplaj M s fie propriu este aceea ca rdcina s
nu fie nod expus. Rdcina nu are frai, deci, dac ar fi nod expus ntr-un cuplaj M, atunci
respectivul cuplaj nu ar putea fi propriu pentru arborele respectiv cu rdcina considerat. n
plus, se precizeaz c rdcina arborelui pentru care se construiete cuplajul propriu este un
nod oarecare v, aadar nodul rdcin nu prezint importan.
n plus, cuplajele proprii sunt ntotdeauna cuplaje de cardinal maxim, deci se folosesc pentru a
putea construi pentru arbori cuplaje de cardinal maxim n timp liniar (n condiiile n care, pentru grafuri
oarecare, un cuplaj maximal se construiete n O(n
3
)). Un cuplaj de cardinal maxim i pstreaz
proprietatea indiferent de nodul rdcin a arborelui, aadar nodul pe care l cosiderm rdcin n
momentul construciei cuplajului propriu nu afecteaz rezultatul final.
165

O posibilitate de construcie a unui astfel de cuplaj este parcurgerea DFS a arborelui T i
selectarea acelor unui numr de muchii care s ndeplineasc condiia de mai sus.
Trebuie evitat acea situaie cnd pentru un nod frunz u expus nu se gsete nici un alt nod
frate care mpreun cu printele s formeze o muchie din cuplaj. Aceast situaie poate aprea atunci
cnd, n urma parcurgerii, a fost selectat muchia parent(u) parent(parent(u)), iar toi fiii lui parent(u)
sunt frunze.
De aceea, selectarea muchiilor pentru cuplaj nu se va face la prima parcurgere a fiecrei muchii,
ci la ntoarcerea n fiecare nod, dup ce muchiile dintre nivelele inferioare au fost deja parcurse i s-a
stabilit dac sunt sau nu selectate. Cu alte cuvinte, aceast selecie se face de jos n sus, tocmai pentru
a se evita situaia menionat mai sus.
Algoritmul care construiete un cuplaj propriu este:
function ConstruieteCuplajPropriuDFS(T)
begin
/*iniial:
- mulimea de muchii M (care va memora n final cuplajul propriu) este vid;
- toate nodurile sunt nevizitate;
- nici un nod nu este extremitate a unei muchii din cuplaj, deoarece M u deci
nu este nod saturat.
*/
M u
for all u in V(T) do
vizitat (v) false
saturat (v) false
/*se selecteaz un nod oarecare din arbore, din care se pornete parcurgerea */
v AlegeNodDinArbore(T)
rdvin v
vizitat (v) true
for all u in listaDeAdiacen(rdcin) do
166
/*se efectueaz parcurgerea DFS i selectarea muchiilor pentru fiecare subarbore care
are ca rdcin un nod de pe nivelul 2 (adic un fiu al rdcinii lui T)*/
ConstruieteRecursiv(u)
if (not saturat (u) and not saturat(rdcin))
then
/*dac este posibil, se adaug muchia dintre rdcin i un fiu al su n
cuplaj*/
M M {u rdcin-
saturat(rdcin) true
saturat(u) true
if ( saturat(rdcin) = false )
then
/*este posibil ca, n urma selectrii tuturor muchiilor, rdcina s rmn nod
nesaturat; aceasta se ntmpl atunci cnd nu se poate niciodat aduga o muchie
dintre primele 2 nivele n cuplaj, adic atunci cnd toate nodurile de pe al doilea nivel
sunt saturate*/
/*aa cum am artat mai sus, un cuplaj este sau nu propriu pentru un arbore n funcie
de nodul ales rdcin*/
/*dac, pentru cuplajul construit, vom alege ca rdcin un fiu al actualei rdcini,
vechea rdcin ca avea un frate care mpreun cu printele s formeze o muchie din
cuplaj, deoarece nodul acela era saturat, iar toate celelalte noduri i pstreaz
proprietile*/
/*n consecin, M devine cuplaj propriu pentru arborele cu noua rdcin*/
v un fiu oarecare al rdcinii
rdcin v
return M
end

function ConstruieteRecursiv(u)
167
begin
vizitat(u) true
for all w in listaDeAdiacen(u) do
/*dac se ntlnete un nod deja vizitat, acela nu poate fi dect printele, ntruct T
este arbore*/
if (vizitat(w) = true)
then printe w
else
ConstruieteRecursiv(w)
if (not saturat(printe) and not saturat(u))
then
/*dac este posibil, se adaug muchia dintre u i printele su n cuplaj*/
M M { u printe}
saturat(printe) true
saturat(u) true
end
Corectitudinea algoritmului:
Vom arta c, ntr-adevr, M construit de algoritm este cuplaj propriu, orice nod expus s aib un
frate care, mpreun cu printele lor comun, s formeze o muchie din cuplajul M.
Fie u un nod expus (nici o muchie din cuplaj nu este incident cu el).
Caz 1: u nu este rdcina (adic nodul din care s-a pornit parcurgerea DFS). Atunci exist
parent(u) i, cu siguran, muchia u parent(u) nu este din cuplaj. Aceasta nseamn c, n funcia
ConstruieteRecursiv(u), condiia din ultimul if era fals, adic
(not saturat(printe) and not saturat(u)) = false.
tim deja c (not saturat(u)) = true not saturat(printe) = false
saturat(printe) = true printe este deja extremitatea unei muchii din cuplaj.
168
Deoarece selecia muchiilor se face de jos n sus, la acest pas nu ar fi putut fi selectat nc o
muchie dintre parent(u) i parent(parent(u)). Aadar, ntruct parent(u) este deja extremitatea unei
muchii din cuplaj, aceast muchie poate fi doar ntre parent(u) i un alt fiu al su w u.
Am artat deci c u are un frate w a.. w parent(u) e M.
Caz 2: u = rdcin (adic este nodul din care s-a pornit parcurgerea DFS). Dac nu s-a putut
introduce n cuplaj nici una din muchiile dintre acest u i un fiu v al su, atunci, n funcia
ConstruieteCuplajPropriuDFS(T), codiia de la prima instruciune if (cea din interiorul buclei for) este
ntotdeauna fals, adic
not saturat (fiu) and not saturat(rdcin) = false.
tim deja c (not saturat(rdcin)) = true not saturat(fiu) = false
saturat(fiu) = true toi fii rdcinii sunt extremiti ale unor muchii din cuplaj.
Aceste muchii pot fi doar ntre respectivii fii i nodurile de pe nivelul imediat inferior.
Prin urmare, trecnd un astfel de fiu a al rdcinii pe primul nivel, i considernd rdcina ca fiu
al acestuia, avem:
- saturat(a) = true, aa cum am artat mai sus - b fiu al lui a a.. ab e M n aceast
configuraie (acum parent(rdcin) = a) vechea rdcin, care este n continuare nod
expus, are un frate, pe b, a.. b parent(rdcin) e M.
- nici un alt nod din arbore nu i schimb starea (ceilali fii ai rdcinii, dac existau, erau
deja noduri saturate); aadar, oricare alt nod expus din arbore are n continuare
proprietatea cerut, conform celor artate la cazul 1.
Aadar, cuplajul construit de algoritm este cuplaj propriu penrtu arborele T.
Complexitatea algoritmului:
Deoarece algoritmul se bazeaz pe o parcurgere DFS (celelalte operaii efectuate la fiecare pas se
execut n O(1)) a unui arbore dat prin liste de adiacen, complexitatea algoritmului este O(m+n). n
plus, pentru orice arbore, m = n - 1, deci m = O(n). n consecin, complexitatea timp a algoritmului
prezentat mai sus este O(n).
TEMA NR. 9
6 mai 2003
Problema 1:
Fie G = (S, T; E) un graf bipartit.
Conform teoremei lui Hall, - M e M
G
a.. S _ S(M) A _ S, |N
G
(A)| > |A|.
169

tim c, pentru orice ntreg k, 0 s k s |S|, G are un cuplaj M de cardinal cel puin |S| - k.
G este bipartit, deci orice muchie din E are o extremitate n S i o etremitate n T. Aceast
afirmaie este evident valabil i pentru mulchiile din cuplajul M. Deoarece cardinalul lui M este cel puin
|S| - k, se obine c cel puin |S| - k noduri din S sunt saturate de M, prin urmare nu pot fi noduri izolate.
n consecin, mulimea S poate conine cel mult |S| - (|S| - k) = k noduri izolate.
Fie X mulimea nodurilor saturate din S i Y = S X, |Y| s k (nu este obligatoriu ca toate
nodurile din Y s fie izolate).
Construim graful G = (X, T, E). G este subgraful indus n G de XT.
Deoarece extremitile tuturor muchiilor din M se gsesc n X i T, M _ E.
Cuplajul M satureaz toate nodurile din X n G, deci va satura toate nodurile din X n G, adic X _
S(M) n G.
Atunci, conform teoremei lui Hall, A _ X, |N
G
(A)| > |A|.
Fie o mulime A _ S oarecare. Evident, |A Y| s k.
Aa cum am artat mai sus, |N
G
(AX )| > |A X|.
Dar (A Y) (A X) = A i X |N
G
(A)| > |A|Y = u |A X| = |A |- |A X| |A X| > |A |-
k.
Se obine deci c |N
G
(A)| > |A| - k pentru orice k submulime a lui S, ceea ce trebuia demonstrat.
:
Artm c, n condiiile date, exist un cuplaj de cardinal |S| k.

Construim urmtoarele iruri de mulimi:
A
i
o mulime de k+i noduri din S.
T
i
o mulime de i noduri din T pentru care A _T
i
, |N
G
(A)| > |A
S
i
o mulime de i noduri din S astfel nct S
i
_ N
G
(T
i
) i S
i
_ A
i
.
Inducie:
Pas de baz:
170
Artm c exist un nod u
1
n T astfel nct |N
G
(u
1
)| > 1.
Fie A
1
o submulime oarecare de k+1 noduri. Din ipotez tim c |N
G
(A
1
)| > |A
1
| - k = 1
- un nod u
1
n T, astfel nct - v
1
n A
1
cu u
1
v
1
e E(G).
Deci T
1
= {u
1
}, S
1
= {v
1
}.
Pas inductiv:
Presupunem c exist T
i
i S
i
pentru submulimea A
i
de k+i noduri.
Fie A
i+1
= A
i
{x}, x e S A
i
oarecare.
Atunci |N
G
(A
i+1
)| > |A
i+1
| - k = i+1 > |T
i
|.
Fie T
i+1
= N
G
(A
i+1
) T
i
. i fie A
i+1
= A
i+1
S
i
.
|A
i+1
| = k+i+1 i |S
i
| = i, S
i
_ A
i+1
|A
i+1
| = k+1 (din ipotez) - u
i+1
e T
i+1
a.. - v
i+1
e A
i+1
a..
u
i+1
v
i+1
e E(G).
Deci T
i+1
= T
i
{u
i+1
}, S
i+1
= S
i
{v
i+1
}, iar muchiile u
j
v
j
, 1 j i+1, formeaz chiar un cuplaj.

Formm mulimi atta timp ct exist noduri n S A
i
, deci putem forma |S|-k astfel de mulimi,
deoarece |A
i
| = i + k, |A
i
| s |S|, deci exist n G un cuplaj de cardinal |S| - k, ceea ce trebuia demonstrat.
Problema 2:
a) Reducere la absurd:
Presupunem c exist un cuplaj M de grad maxim care nu este de cardinal maxim.
Confirm teoremei lui Berge, un cuplaj M este de cardinal maxim n graful G G nu admite
drumuri de cretere relativ la M.
Vom presupune deci c exist un cuplaj M de grad maxim care admite un drum de cretere P.

v
0
i v
k
sunt vrfuri expuse.
Construim cuplajul M = ( M \ {v
1
v
2
, , v
k-2
v
k-1
}) {v
0
v
1
, , v
k-1
v
k
- (cuplajul M conine aceleai
muchii ca i M, cu excepia celor din P M, care sunt nlocuite cu cele din P \ M).
171
Constatm c S(M) = S(M) {v
0
, v
k
-. (M satureaz toate vrfurile saturate de M; n plus M
satureaz i vrfurile v
0
, v
k
, varfuri expuse relativ la M).
n aceste condiii avem:
). ( ) ( ) ( ) ( 0
) ( ) ' (
k
M S j M S i
v d v d j d i d + + =

e e

d(v
0
) >0 i d(v
k
) >0 (deoarece se gsesc pe un drum P)
deci

e e
>
) ( ) ' (
) ( ) (
M S j M S i
j d i d
adic M nu este cuplaj de grad maxim, ceea ce contrazice ipoteza.
Presupunerea fcut este deci fals.
Am obinut c orice cuplaj de grad maxim este de cardinal maxim.
b)
:: tim c, n graful G, orice cuplaj de grad maxim satureaz toate vfurile de grad maxim.
Deoarece n orice graf exist ntotdeauna cel puin un cuplaj de grad maxim, se obine, evident, c, n
aceste condiii, exist n G un cuplaj care satureaz toate vrfurile de grad maxim.
: tim c exist un cuplaj M
0
care satureaz toate nodurile de grad maxim (n aceste
condiii, A(G) 0, deci G nu este graful nul).
Reducere la absurd:
Presupunem c exist un cuplaj de grad maxim M care nu satureaz toate nodurile de grad
maxim.
Fie u e V(G) a.. d(u) = A(G) i u e E(M) (u nod expus relativ la cuplajul M).
Caz 1: Exist v e N
G
(u) a.. v e E(M).
Construim cuplajul M = M ,uv-. Atunci, |M| = |M| + 1, adic |M| > |M|, deci M nu
este de cardinal maxim. Conform punctului a), M nu este nici de grad maxim, ceea ce contrazice ipoteza.
Caz 2: Exist v e N
G
(u) a.. v e S(M), vw e M (w e N
G
(v)) i d(w) < A(G) .
Construim cuplajul M = (M \ {vw}) {uv}.
Atunci,
172
). ( ) ( ) ( ) (
) ( ) ' (
u d w d j d i d
M S j M S i
+ =

e e

ntruct d(w) < A(G) = d(u), se obine

e e
>
) ( ) ' (
) ( ) (
M S j M S i
j d i d
adic se obine faptul c M nu este cuplaj de grad maxim, ceea ce contrazice ipoteza.
Caz 3: Oricare v e N
G
(u), v e S(M), vw e M (w e N
G
(v)) i d(w) = A(G) (Toate nodurile vecine cu u
sunt saturate, formnd mpreun cu alt nod w u de grad maxim cte o muchie din cuplaj).


tim, din ipotez, c exist un cuplaj M
0
care satureaz toate vrfurile de grad maxim.
Exist deci e e M
0
, e e M, a.. u este extremitate a lui e.
Dac e = uv e M
0
i vw e M, evident vw e M
0
. Dar M
0
satureaz w (deoarece am
presupus c w este nod de grad maxim), deci exist v e N
G
(w) a.. v e S(M
0
), adic wv e M
0
.
Raionnd astfel n continuare pentru noul vrf de grad maxim w, se poate spune c
exist un drum P n G a..: P \ M
0
_ M.
Cu alte cuvinte, P este drum alternat n G relativ la cuplajul M, respectiv este drum
alternat n G relativ la cuplajul M
0
. n plus, P M M
0
= u (cele dou cuplaje nu au muchii comune pe
acest drum.
n plus, P are numr impar de noduri, respectiv numr par de muchii (deoarece are o
extremitate expus relativ la M, i anume pe u; de asemenea, am presupus c M este cuplaj de grad
maxim, deci, conform a), este cuplaj de cardinal maxim, deci nu admite drumuri de cretere).
Cealalt extremitate a drumului P, notat u, este deci nod saturat de M, deci este nod
expus relativ la M
0
. u nu poate fi deci nod de grad maxim, deoarece, conform ipotezei, M
0
satureaz
toate nodurile de grad maxim.
173
Construim un nou cuplaj M = (M P) (P M
0
), adic, nlocuind acele muchii comune
lui P i M cu acele muchii comune lui P i M
0
n M.
Conform celor precizate mai sus, M satureaz toate vrfurile saturate de M, cu excepia
lui u. n plus, M satureaz u.
Aadar avem:
). ( ) ' ( ) ( ) (
) ( ) ' (
u d u d j d i d
M S j M S i
+ =

e e

Dar d(u) < A(G), deci d(u) < d(u). n consecin,

e e
>
) ( ) ' (
) ( ) (
M S j M S i
j d i d
adic M nu este cuplaj de grad maxim, ceea ce contrazice ipoteza.
Presupunerea fcut este fals i n acest caz.
Am obinut deci c, dac exist un cuplaj care satureaz toate nodurile de grad maxim, atunci
orice cuplaj de grad maxim satureaz toate nodurile de grad maxim.
c) Fie H subgraful bipartit indus de mulimea nodurilor de grad maxim.
O condiie necesar pentru existena cuplajului este A(G) > 0 (graful diferit de graful nul).
Vom arta c exist un cuplaj care satureaz toate nodurile de grad maxim, artnd c orice
cuplaj de grad maxim satureaz toate nodurile de grad maxim n condiiile ipotezei.
Reducere la absurd:
Presupunem c exist un cuplaj M de grad maxim, care nu satureaz toate nodurile de grad
maxim. Fie u e V(G), cu d(u) = A(G) i u e E(M) (u este nod de grad maxim, expus relativ la
cuplajul M). M este cuplaj de grad maxim (conform punctului a) nu exist drumuri de cretere
relativ la M.
Deoarece u este nod expus i u nu este izolat, atunci u este fie extremitatea unui drum alternat
par, sau aparine unui circuit alternat impar (nu poate fi extremitatea unui drum alternat impar,
deoarece orice drum alternat impar cu o extremitate expus este drum de cretere; nu poate fi
ntr-un circuit alternat par, deoarece ntr-un astfel de circuit nu exist noduri expuse).
Caz I: u e unui circuit alternat impar. Deoarece H este bipartit, nu admite circuite impare. Aadar,
- cel puin un nod v n G, cu d(v) < A(G) care s se gseasc pe acest circuit. Deoarece M este
cuplaj de cardinal maxim, toate celelalte noduri din circuitul C cu excepia lui u, sunt noduri
saturate. Fie P unul din drumurile de la u la v. Construim cuplajul M n care nlocuim acele muchii
din P M cu muchiile din P M. Atunci avem:
174
). ( ) ( ) ( ) (
) ( ) ' (
u d v d j d i d
M S j M S i
+ =

e e

Dar d(v) < d(u) = A(G) se poate construi un cuplaj M de grad mai mare dect al lui M, ceea ce
contrazice ipoteza.
Caz II: u este extremitatea unui drum alternat par. Fie ucealalt extremitate a acestui drum.
Artm c dac toate extremitile drumurilor alternate pare sunt noduri de grad maxim, atunci
u face parte dintr-un circuit, caz ce se reduce la cazurile anterioare.
Demonstraie:
Presupunem c extremitile tuturor drumurilor alternate sunt noduri de grad maxim.
Reducere la absurd:
Dac nu exist nici un circuit, atunci nu exist nici un drum de la u la u nu exist drumuri de la
nici un vecin de-ai lui u la nici un alt vecin dintre vecinii lui u.
Fie H subgraful indus n H de mulimea nodurilor accesibile dintr-un vecin v al lui u prin drumuri
care nu trec prin u.
Numrul de muchii din acest subgraf este (A(H)* |H| -1)/2. Pentru ca acesta s fie numr
ntreg, este necesar ca |H| s fie numr impar. H fiind bipartit (H = (S, T; Eh)), una din
mulimile S i T este de cardinal par, iar cealalt este de cardinal impar.
A(G) >2 (este impar, aa cum am artat mai sus; este diferit de 1 deoarece exist drumuri
alternate pare, deci exist noduri de grad cel puin 2).
Aadar, numrul de muchii care pleac din S este diferit de numrul de muchii care pleac din
T contradicie.
Deci H nu poate fi subgraf indus n H, adic exist un drum din u ntr-un nod din G V(H).
Deci, dac u nu face parte din nici un circuit, exist un drum alternat par cu cealalt extremitate
u nod ce nu are grad maxim.
n aceste condiii, construim cuplajul M n care nlocuim acele muchii din P M cu muchiile din P
M. Atunci avem:
). ( ) ' ( ) ( ) (
) ( ) ' (
u d u d j d i d
M S j M S i
+ =

e e

Dar d(u) < d(u) = A(G) se poate construi un cuplaj M de grad mai mare dect al lui M, ceea ce
contrazice ipoteza.
175
n toate cazurile am obinut contradicii, deci presupunerea fcut este fals, deci orice cuplaj de
grad maxim satureaz toate nodurile de grad maxim. Graful avnd un numr finit de noduri i
A(G) e N, exist un cuplaj de grad maxim oricare ar fi graful G.
d) Vom demonstra c pentru un graf G bipartit E(G) poate fi partiionat n A(G) cuplaje prin
inducie dup A(G).
Pasul de baz:
A(G) = 0. Atunci graful G este graful nul, aadar exist 0 cuplaje posibile pentru acest graf.
A(G) = 1 ie V(G), d(i) = 0 sau d(i) = 1. ntr-un astfel de graf fiecare nod are maxim un vecin,
fiind incident cu maxim o muchie. Aadar, E(G) este mulime de muchii independente, adic E(G) este un
cuplaj.
Pasul inductiv:
Presupunem afirmaia adevrat pentru toate grafurile G cu A(G) s k. Demonstrm pentru
grafurile cu A(G) = k+1:
Caz 1: exist un singur nod u e V(G) cu d(u) = A(G).
Atunci exist un cuplaj oarecare M
0
care satisface nodul u (de exemplu M
0
= {uv}, unde
v e N
G
(u); acest nod v exist deoarece am presupus A(G) > 0).
Prin eliminarea acestei muchii din graf se obine un nou graf bipartit G (deoarece orice graf
parial al unui graf bipartit este graf bipartit), pentru care A(G) = k. Din pasul inductiv rezult c E(G)
poate fi partiionat n k cuplaje.
Aceste k cuplaje, mpreun cu M
0
menionat mai sus, formeaz o mulime de k+1 cuplaje
ce partiioneaz E(G).
Caz 2: exist mai multe noduri u
i
e V(G) cu d(u
i
) = A(G).
Aceste noduri induc un graf bipartit (deoarece orice subgraf cu cel puin dou noduri al unui graf
bipartit este graf bipartit).
Atunci, aa cum am artat la c), exist un cuplaj oarecare M
1
care satisface toate nodurile de
grad maxim u
i
.
Prin eliminarea muchiilor din acest cuplaj din graf se obine un nou graf bipartit G (deoarece
orice graf parial al unui graf bipartit este graf bipartit), pentru care A(G) = k. Din pasul inductiv rezult
c E(G) poate fi partiionat n k cuplaje.
Aceste k cuplaje, mpreun cu M
1
menionat mai sus, formeaz o mulime de k+1 cuplaje
ce partiioneaz E(G).

176
Problema 3:
Vom arta c exist un algoritm care rezolv aceast problem de decizie n timp polinomial.
Date b (numrul de muchii) i k (numrul minim de noduri pe care trebuie s le aib subgraful
cutat) constatm c:
- dac, n graful G, |E(G)| < b sau nu exist cel puin k noduri care s nu fie izolate, atunci
cu siguran nu exist un subgraf cu proprietile cerute, deci rspunsul la problema de
decizie este negativ; altfel se poate continua cutarea;
- dac 2b < k, rspunsul este negativ (deoarece orice graf de ordin n fr noduri izolate are
cel puin *(n+1)/2+ muchii); altfel se poate continua cutarea;
- dac 2b = k, problema se reduce la a gsi un cuplaj de cardinal b n G;
o dac v(G) < b, atunci rspunsul este negativ;
o altfel, rspunsul este pozitiv (se poate construi un cuplaj de cardinal maxim din
care se elimin, dac este cazul, muchii, pn cnd se obine un cuplaj de
cardinal b; subgraful astfel obinut are b muchii i 2b = k vrfuri, deci ndeplinete
condiiile; deoarece este o problem de decizie, nu este necesar construcia
grafului propriuzis);
- dac 2b > k, atunci:
o se construiete un cuplaj de cardinal maxim M, obinndu-se astfel un subgraf cu
v(G) muchii i 2v(G) noduri;
o dac v(G) > b, atunci: din cuplajul de cardinal maxim construit se elimin muchii
(dac este cazul) pn la obinerea unui nou cuplaj M cu exact b muchii; un
subgraf al lui G, notat H, pentru care E(H) = M i V(H) = S(M) are exact b muchii i
2b noduri; dar 2b > k, deci subgraful astfel obinut are proprietile cerute;
rspunsul dat n acest caz este pozitiv;
o dac v(G) < b, trebuie adugate muchii pn se ajunge la cele b necesare;
trebuie adugate b - v(G) muchii (i cel puin k - 2v(G) noduri, n cazul n care k >
2v(G)); ntruct M era cuplaj de cardinal maxim, orice alt muchie adugat la
mulimea de muchii M va fi incident cu cel puin o muchie din M; prin urmare, la
adugarea unei muchii se mai poate aduga cel mult un vrf;
dac k s 2v(G), atunci s-a obinut deja numrul de noduri cutat; se vor
aduga la mulimea M noi muchii (oricare din graf) pn la b,
obimndu-se o nou mulime de muchii M cu |M|=b; un subgraf H al
lui G cu E(H) = M i V(H) = V(M) (V(M) are cardinalul cel puin 2v(G),
deci cel puin k) ndeplinete condiiile cerute, deci rspunsul pentru
acest caz este pozitiv;
dac k > 2v(G), atunci exist cel puin k - 2v(G) noduri expuse relativ la
M care nu sunt izolate (conform condiiei iniiale, exist cel puin k
noduri neizolate n G ); se adaug la subgraf k - 2v(G) noduri expuse
relativ la M, neizolate; la adugarea fiecrui astfel de nod se adaug
cte o muchie (ntruct M este cuplaj de cardinal maxim, orice nod expus
este fie izolat, fie vecinul unui nod saturat; aadar, la adugarea unui
astfel de nod se adaug i muchia dintre el i vecinul su saturat); se
obine astfel un subgraf cu k noduri neizolate i v(G) + (k - 2v(G)) = k
v(G) muchii. Dac k v(G) > b (adic, adugnd numrul necesar de
177
noduri, am depit numrul de muchii cerut), atunci rspunsul este
negativ. Altfel, se mai pot aduga muchii oarecare din E(G) pn la b
(tim c exist muchiile necesare, din condiia iniial), obinndu-se
astfel un graf H cu b muchii i cel puin k noduri. Rspunsul n acest caz
este deci pozitiv.

Un algoritm propriu-zis de rezolvare a problemei de decizie este:
function DecizieP3(G, k, b)
begin
m |E(G)|
nNeiz NumrNoduriNeizolate
/*Numrarea muchiilor i a nodurilor neizolate din graful G se poate face printr-o parcurgere
BFS sau DFS a grafului G, deci se execut n timp polinomial (O(m+n) dac G este reprezentat prin liste
de adiacen, O(n
2
) n cazul cel mai nefavorabil)*/
if (m < b or nNeiz < k)
then
return FALSE
if (2b < k)
then
return FALSE
if (2b = k)
then
M ConstruieteCuplajDeCardinalMaxim(G)
/*Construcia unui cuplaj de cardinal maxim se poate efectua n timp polinomial, i
anume n O(n
3
)*/
a Calculeazv(G)
if (a < b)
then
return FALSE;
178
else
/*dac se cere i construcia propriu-zis a subgrafului :
construcia grafului se poate face n O(v(G) - b) = O(m) = O(n
2
), adic n
timp polinomial*/
while (a > b) do
EliminMuchieOarecareDinCuplaj(M)
a a 1
E(H) M
V(H) S(M)
return TRUE

/*dac 2b > k, atunci:*/
M ConstruieteCuplajDeCardinalMaxim(G)
/*Construcia unui cuplaj de cardinal maxim se poate efectua n timp polinomial*/
a Calculeazv(G)
if (a >b)
then /*rspuns pozitiv*/
/*dac se cere i construcia propriu-zis a subgrafului :
construcia grafului se poate face n O(v(G) - b) = O(m) = O(n
2
), adic n
timp polinomial*/
while (a > b) do
ElimimMuchieOarecareDinCuplaj(M)
a a 1
E(H) M
V(H) S(M)
return TRUE
179
else
/*suntem n cazul v(G) < b*/
if (k s 2v(G)) /*dac avem deja nodurile necesare*/
then /*rspuns pozitiv*/
/*dac se cere i construcia propriu-zis a subgrafului :
construcia grafului se poate face n O(v(G) - b) = O(m) = O(n
2
), adic n
timp polinomial*/
while (a < b) do
AdaugMuchieOarecareDinGnM(M)
a a + 1
E(H) V(M)
V(H) M
return TRUE
else
/*suntem n cazul k > 2v(G )*/
if (k - v(G) > b)
then return FALSE
else /*rspuns pozitiv*/
/*dac se cere i construcia grafului:*/
E(H) S(M)
V(H) M
k |V(H)|
/*adaug vrfurile expuse necesare*/
/*operaia se poate face n O(n+m), O(n
2
) n cazul cel mai
nefavorabil*/
for all i in V(G) do
180
if (i e E(M))
then
V(H) V(H) {i}
E(H) E(H) { ij} /*j este vecinul saturat al lui i*/
k k + 1
if (k = k) then break
/*adaug alte muchii necesare din graf, pn cnd |E(H)|
devine b; dac este necesar, se vor auga i noi vrfuri, fapt ce
nu afecteaz proprietile lui H*/
/*operaia se poate executa n O(m), O(n
2
) n cazul cel mai
nefavorabil*/
b |E(H)|
while (b < b) do
AdaugMuchieOarecareDinG (E(H))
b b + 1
return TRUE
end
function ConstruieteCuplajDeCardinalMaxim (G)
begin
M gsete_cuplaj_oarecare()
while ( -P drum de cretere relativ la M) do
MM A P
return M
end
Complexitatea algoritmului de mai sus este O(n
2
) + O(n
3
) = O(n
3
). Am artat deci c aceast
problem de decizie se poate rezolva n timp polinomial.
181
Problema 4:
Fie G = (V, E) un graf 2-muchie conex 3-regulat.
Conform teoremei lui Tutte, un graf G are un cuplaj perfect S _ V, S V, q(G S)s |S|,
unde q(H) este numrul de componente conexe de ordin impar ale grafului H.
Aadar, pentru a arta c graful G are un cuplaj perfect, este suficient s demonstrm c,
S _ V, S V, q(G S)s |S|.
Fie S o mulime oarecare de noduri din V, S V, k =|S| i H = <S>
G
.
Prin eliminarea tuturor nodurilor ce compun mulimea S din graful G se obine un numr h de
componente conexe G
i
, 1 s i s h, din care x sunt de ordin impar.
ntruct graful G este 2-muchie conex (deci implicit conex), exist muchii ntre noduri din G
i
i
noduri din H, i, 1 s i s h.

1. Artm c exist cel puin 2 muchii ntre H i G
i
:
Subgraful indus de mulimea de vrfuri V S are h componente conexe, deci oricare dou
noduri u i v, u e V(G
i
), v e V(G
j
), i j, 1 s i, j s h, uv e E(G).
Dac nu ar exista nici o muchie n G ntre subgraful H i subgraful G
i
, atunci G nu ar fi conex
contradicie.
Dac ar exista o singur muchie n G ntre subgraful H i subgraful G
i
, prin eliminarea
acesteia graful G ar deveni neconex contradicie cu faptul c G este 2-muchie conex.
2. Fie G
j
o component conex impar a subgrafului indus <V S>
G
, i y = |G
j
|, y evident impar.
Suma gradelor nodurilor din V(G
j
) n G este 3y, deoarece G este 3-regulat. Fie z numrul de
muchii dintre G
j
i H.
182
Numrul de muchii din G
j
n graful <V S>
G
este |E(G
j
)| =
2
3 z y
.
Deoarece |E(G
j
)| e N, 3y z este numr par.
Dar y = |G
j
| este impar, deci 3y este impar. n consecin, z trebuie s fie numr impar.
Aa cum am artat mai sus, z trebuie s fie cel puin 2 i z impar z > 3. (Adic, ntre
nodurile din H i nodurile dintr-o component conex impar G
j
a grafului <V S>
G
, trebuie s
existe n graful G cel puin 3 muchii).
n consecin, cel puim 3x muchii din graful G se utilizeaz pentru legarea nodurilor din S de
noduri din componentele impare G
j
.
3. Suma gradelor vrfurilor din S n G este 3|S| = 3k. Fiecare nod din s poate fi extremitatea
unor muchii (cel mult 3) de legtur dintre subgraful H i subgraful G
j
de ordin impar). Aadar, 3k
> 3x, adic x s k (numrul de componente conexe impare din G S q(G S) s k = |S|).
Am obinut deci c, S _ V, S V, q(G S)s |S|, deci, conform teoremei lui Tutte, graful G are
un cuplaj perfect.
TEMA NR. 10
13 mai 2003

5. Fie G un graf conex cu n vrfuri i T
G
familia arborilor si pariali. Se consider graful H = (T
G
, E(H))
unde T
1
T
2
eE(H) |E(T
1
) AE(T
2
)| = 2.
i. Demonstrai c H este conex i are diametrul cel mult n-1.
ii. Demonstrai c pentru orice funcie de cost c pe mulimea muchiilor grafului G, mulimea
arborilor pariali de cost c minim induce un subgraf conex n H.

Soluie:
a) Iniial vom demonstra c graful H obinut este conex, i anume c exist drum ntre
oricare 2 noduri ale sale.
Se observ c n cazul mulimilor de muchii ale arborilor pariali, cardinalul diferenei
lor simetrice este numr par. Aceasta are loc ntruct mulimile de muchii ale celor 2 arbori
pentru care calculm diferena simetric au acelai cardinal (arborii pariali ai unui graf au exact
n-1 muchii). Deci dac un arbore difer de un al doilea printr-o muchie este evident c i cel de-al
doilea are o muchie diferit de cele ale primului.
Acest lucru se poate demonstra prin reducere la absurd.
183
Presupunem prin reducere la absurd c exist T
1
i T
2
, 2 arbori pariali pentru un graf G,
astfel nct |E(T
1
) AE(T
2
)| = 2k + 1, k>0. Aceasta nseamn c un arbore difer de cellalt printr-
un numr par de muchii (s zicem prin 2s muchii), iar cellalt arbore difer de primul printr-un
numr impar de muchii (2t+1 muchii), astfel nct 2s+2t+1 = 2k+1.
Putem face presupunerea c T
1
difer de T
2
prin 2s muchii. Deci restul muchiilor din T
1
,
i anume n-1-2s, apar i n T
2
. Dar mai sus am obinut c T
2
are 2t+1= 2k+1-2s muchii diferite de
cele din T
1
. Deci T
2
are 2k+1-2s+n-1-2s = n+2k-4s muchii. tiam c T
2
are, asemenea tuturor
arborilor pariali, n-1 muchii. Obinem c 4s-2k = 1, ceea ce este absurd, ntruct 4s-2k este
numr par.
Aadar presupunerea iniial este fals i deci putem spune c |E(T
1
) AE(T
2
)| = 2k, k>0
pentru oricare 2 arbori pariali T
1
i T
2
.

Vom demonstra c graful H este conex i are diametrul cel mult n 1 prin inducie dup
cardinalul K = 2k al diferenei simetrice a mulimilor de muchii.

Pasul de baz:
La acest pas vom verifica dac pentru oricare 2 arbori, pentru care diferena simetric
dintre mulimile lor de muchii are cardinalul 2, exist drum ntre ei.
Din ipotez tim c ntre doi arbori pariali care difer printr-o singur muchie exist
muchie n graful H. Aadar exist drum ntre oricare doi arbori pariali cu aceast proprietate.

Pasul inductiv:
Presupunem c exist drum ntre oricare doi arbori care difer prin k-1 muchii
(adic au cardinalul diferenei simetrice egal cu 2(k-1)).
Vom demonstra c i ntre oricare doi arbori care difer prin k muchii (adic au
cardinalul diferenei simetrice egal cu 2k) exist drum n graful H.
Pentru aceasta vom gsi un arbore parial T
3
care difer prin k-1 muchii de T
1
i printr-o
muchie de T
2.
Dac reuim acest lucru, obinem un drum de la T
1
la T
2
care trece prin T
3
(tim,
conform ipotezei inductive, c exist drum de la T
1
la T
3
, ntruct acetia difer prin k-1 muchii;
ntre T
3
i T
2
avem muchie n H, ntruct cei 2 arbori difer printr-o singur muchie).
Alegem o muchie dintre muchiile care aparin diferenei simetrice, i anume una
dintre muchiile lui T
1
care nu se gsesc i n T
2
, pe care o notm cu e
1
. Adugnd aceast
muchie la arborele T
2
obinem exact un circuit (dup cum am explicat i la problema 2 de la
tema 8). Alegem o muchie e
2
, dintre muchiile circuitului obinut, care nu aparine i lui T
1
.
Va exista ntotdeauna o astfel de muchie ntruct, altfel, ar nsemna c toate muchiile circuitului
aparin lui T
1
i deci arborele parial T
1
admite un circuit, ceea ce este absurd.
Considerm arborele T
3
determinat de muchiile lui T
2
, mai puin e
2
, la care adugm
muchia e
1
din T
1
. Acesta este tot un arbore parial ntruct are tot n-1 muchii i este conex (am
eliminat o muchie din circuit dar toate celelalte noduri care formeaz circuitul rmn legate).
184
Arborele T
3
difer de T
2
prin muchia e
1
i de arborele T
1
prin k-1 muchii (cele k muchii prin care
difer T
2
de T
1
, mai puin muchia e
2
).
Deci ntre T
2
i T
3
avem muchie n graful H, ntruct difer printr-o muchie, iar de la
T
1
la T
3
avem drum conform ipotezei inductive, ntruct difer prin k-1 muchii. Aadar
avem drum i de la T
1
la T
2
, prin T
3.

Deci ntre oricare 2 arbori pariali care difer prin k muchii putem construi un drum n
graful H i conform metodei induciei putem spune c ntre oricare 2 arbori care difer
printr-un numr de k muchii (cu k ntre 1 i n-1) exist drum n graful H.
Aadar graful H este conex.

tiind c numrul de muchii dintr-un arbore parial este n-1, diferena simetric dintre doi
arbori pariali are cel mult 2n-2 muchii. Putem ajunge dintr-un arbore parial n altul reducnd la
fiecare pas cu 2 numrul de muchii din diferena simetric dintre cei doi arbori (fiecare pas
reprezint o muchie n H din drumul dintre cei doi arbori).
Demonstraie:
Pas de baz:
Dac doi arbori pariali difer printr-o muchie (|T
1
AT
2
| = 2), atunci n H exist o muchie
ntre cei doi arbori pariali, deci se poate ajunge de la T
1
la T
2
printr-o muchie, deci exist un
drum de lungime 1 ntre cei doi arbori.
Pas inductiv:
Fie T
1
i T
2
doi arbori pariali. Dup cum am artat mai sus, putem alege orice muchie din
T
1
T
2
i o muchie (aleas din ciclul format prin adugarea muchiei alese din T
1
la T
2
) din T
2


T
1
, astfel nct s obinem un nou arbore parial T
0
, astfel nct diferena simetric dintre T
0
i T
2

are cardinalul mai mic cu 2.
Procednd inductiv, n |T
1
AT
2
|/2 pai (muchii din drumul de la T
1
la T
2
) putem ajunge de
la T
1
la T
2
, i cum max(|T
1
AT
2
|) = 2(n-1) ntre orice doi arbori exist un drum de lungime mai
mic sau egal cu n-1 diametrul(H)s n-1
b) Vom demonstra c subgraful C determinat de arborii pariali de cost minim este conex,
indiferent de funcia de cost c, prin inducie dup cardinalul diferenei simetrice a mulimilor
de muchii ca la punctul a).

Alegem o funcie de cost c.
Pasul de baz:
La acest pas vom verifica dac ntre oricare 2 arbori pariali de cost minim, pentru care
diferena simetric dintre mulimile lor de muchii are cardinalul 2, exist drum.
Din ipotez tim c ntre doi arbori pariali care difer printr-o singur muchie exist
muchie n graful H. Aadar exist drum i n C ntre oricare doi arbori pariali cu aceast
proprietate.
185

Pasul inductiv:
Presupunem c exist drum, n C, ntre oricare doi arbori pariali de cost minim
care difer prin k-1 muchii (adic au cardinalul diferenei simetrice egal cu 2(k-1)).
Vom demonstra c i ntre oricare doi arbori care difer prin k muchii (adic au
cardinalul diferenei simetrice egal cu 2k) exist drum n subgraful C.
Pentru aceasta vom gsi un arbore parial de cost minim (n cazul funciei c alese) T
3
care
difer prin k-1 muchii de T
1
i printr-o muchie de T
2.
Dac reuim acest lucru, obinem un drum
de la T
1
la T
2
care trece prin T
3
(tim, conform ipotezei inductive, c exist drum de la T
1
la T
3
,
ntruct acetia difer prin k-1 muchii; ntre T
3
i T
2
avem muchie n H, ntruct cei 2 arbori
difer printr-o singur muchie).
Alegem muchia de cost minim dintre muchiile care aparin diferenei simetrice (pe
care o notm cu e
1
) i presupunem c e din T
1
. Dac ar fi fost din T
2
ar fi fost o situaie analog
doar c am fi creat un arbore parial de cost minim care ar fi diferit printr-o muchie de T
1
i prin
k-1 de T
2
.
Adugnd aceast muchie la arborele T
2
obinem exact un circuit (analog punctului a) ).
Alegem o muchie e
2
, dintre muchiile circuitului obinut, care nu aparine i lui T
1
. Va exista
ntotdeauna o astfel de muchie ntruct, altfel, ar nsemna c toate muchiile circuitului aparin lui
T
1
i deci arborele parial T
1
admite un circuit, ceea ce este absurd.
Considerm arborele T
3
determinat de muchiile lui T
2
, mai puin e
2
, la care adugm
muchia e
1
din T
1
. Acesta este tot un arbore parial ntruct are tot n-1 muchii i este conex (am
eliminat o muchie din circuit dar toate celelalte noduri care formeaz circuitul rmn legate).
Costul lui T
3
este c(T
2
)-c(e
2
)+c(e
1
), care evident este cel mult c(T
2
) ntruct alesesem e
1
ca fiind
muchia de cost minim din diferena simetric. Aadar i arborele T
3
este de cost minim deoarece
c(T
2
) este minim i deci c(T
3
) este minim. Arborele T
3
difer de T
2
prin muchia e
1
i de
arborele T
1
prin k-1 muchii (cele k muchii prin care difer T
2
de T
1
, mai puin muchia e
2
).
Deci ntre T
2
i T
3
avem muchie n graful H i deci i n subgraful C, ntruct difer
printr-o muchie, iar de la T
1
la T
3
avem drum n C conform ipotezei inductive, ntruct
difer prin k-1 muchii. Aadar avem drum i de la T
1
la T
2
, prin T
3
, drum care se pstreaz
n C
.

Deci ntre oricare 2 arbori pariali de cost minim care difer prin k muchii putem construi
un drum n subgraful C i conform metodei induciei putem spune c ntre oricare 2 arbori
pariali de cost minim, pentru o funcie c, care difer printr-un numr de k muchii (cu k
ntre 1 i n-1) exist drum n subgraful C.
Aadar subgraful C este conex, indiferent de funcia c.
6. Fie H = (V,E) un digraf i tseE un arc fixat al su. Se coloreaz toate arcele lui H cu galben, rou i
verde arbitrar, cu singura condiie ca arcul ts s fie galben (se poate ntmpla ca s nu avem arce
roii sau verzi) Demonstrai algoritmic c are loc exact una din urmtoarele situaii:
i) exist un circuit n graful G(H) (nu se ine seama de orientare) cu arce galbene sau verzi care
conine arcul ts i toate arcele galbene ale sale au aceeai orientare)
186
ii) exist o partiie (S,T) a lui V astfel nct seS, teT, toate arcele de la S la T sunt roii i toate
arcele de la T la S sunt roii sau galbene.

Soluie:

Iniial, vom explica intuitiv de ce nu pot avea loc simultan cele dou situaii.
S presupunem c am avea ndeplinit prima situaie, i anume, c am avea un circuit cu
respectivele proprieti. Dac am ncerca s construim o partiie de forma exprimat la punctul ii)
ar trebui ca nodurile din circuit ntre care sunt arce verzi s se afle n aceeai mulime (n S sau n
T) iar cele ntre care se afl arce galbene s aib originea n T i destinaia n S sau s se afle n
aceeai mulime. Dar oricum am aranja vrfurile n cele 2 mulimi am obine mcar dou vrfuri
n mulimi diferite i ntre care este fie arc verde, fie arc galben dar nu n direcia dorit (de la T
la S).
Presupunem prin reducere la absurd c este posibil o asemenea situaie, i deci c
exist o asemenea partiie. Aadar toate nodurile ntre care exist arce verzi, se afl dou cte
dou n aceeai mulime iar arcele galbene din circuit sunt fie cu sursa n T i destinaia n S (dac
au orientarea corect), fie au ambele extremiti ntr-o mulime.
Dac avem mcar un arc galben uv din circuit n cadrul partiiei i anume cu ueT i veS
am avea toate arcele verzi care intr sau ies din u n T, iar cele care intr sau ies din v n S. ns
aceste noduri fac parte dintr-un circuit i deci mai exist un arc care ar trebui s fac legtura
ntre nodurile (circuitului) din cele dou mulimi, altfel ar rmne un nod cu gradul 1; obinem un
arc verde sau un arc galben de la S la T, ceea ce contrazice presupunerea fcut c exist o astfel
de partiie (S,T) a lui V.
Dac nu avem nici un arc galben din circuit n cadrul partiiei, nseamn c toate nodurile
din circuit ntre care exist arc sunt puse dou cte dou n aceeai mulime. Dar atunci ar
nsemna c unul dintre noduri nu are dect un vecin, pentru c altfel ar trebui ca toate nodurile s
fie n aceeai mulime pentru c altfel ar trebui ca toate nodurile s fie n aceeai mulime (dar s i
t sunt cu certitudine n muimi diferite). Dar acest lucru este imposibil ntruct ntr-un circuit
toate nodurile au gradul 2. i din nou se contrazice presupunerea fcut i deci nu exist o astfel
de partiie.

Dac am avea ndeplinit a doua situaie, adic am avea o asemenea partiie, am obine
aceeai contradicie dup cum am explicat i anterior.

Vom ncerca s construim o astfel de partiie i vom arta c n cazul n care nu putem
construi o asemenea partiie, obinem un circuit cu proprietile de la punctul i). Iniial,
introducem n mulimea T nodul t iar n mulimea S toate celelalte noduri, inclusiv nodul s.
Algoritmul gestioneaz o coad n care reine nodurile din T i pe msur ce termin de lucrat cu
un nod l extrage din coad. Se preia fiecare nod v din coad (primul introdus dintre nodurile
rmase n coad) i se verific dac mai are vreun nod adiacent cu el n mulimea S. Cnd se
187
gsete un nod w n S astfel nct vweE( G(H) ), unde vw are culoarea verde sau wv, arc de
culoare galben, se introduce nodul w n mulimea T i n coad. Coninum pn cnd se golete
coada sau pn cnd introducem nodul s n T. Dac suntem n situaia de a introduce s n T ne
putem opri i spune c nu se poate construi o astfel de partiie dar exist un circuit ca la punctul
i).

procedure Construiete_i_sau_ii(H)
begin
/* iniializm mulimile S i T, precum i coada C*/
T {t}
S V-{t}
C {t}
do
v C.first
/* lum primul nod din coad i verificm vecinii adiaceni cu el din S, care respect condiiile
pe care le-am explicat mai sus*/
for every w in S do
if ( (vweE(H) and vw-verde) or (wveE(H) and (wv-verde or wv-galben) ) ) then
if ( w s ) then
T T {w}
S S \ {w}
C.adaug(w)
C.extrage(v)
/* ne oprim cnd coada este vid i deci am terminat de examinat toate nodurile din T i nu am
mai gsit nepotriviri sau cnd am ajuns s-l punem pe s*/
while ( (C nu e vid) and (w s) )
if ( w s) then am obinut o partiie (S,T)
else nu putem obine o astfel de partiie, ns exist un circuit care corespunde punctului i)
188
end;
Algoritmul se termin ntotdeauna, deoarece se face cel mult o verificare a adiacenei a
oricare dou noduri, iar numrul de noduri este finit.
n continuare vom explica de ce n cazul n care nu reuim s construim o astfel de partiie
i se iese din bucla do while prin nesatisfacerea condiiei w s, exist un circuit cu proprietile
de la i).
Nodul s a fost descoperit de un nod cu care forma un arc care respecta cerinele
circuitului. Dac se ncearc aducerea acestui nod n T, atunci exist un arc verde de la un nod v
din T la s sau un arc verde sau galben se la s la un nod v din T. Pornindu-se din t, s-a ajuns la s
prin astfel de arce. Dar exist arc galben de la t la s, acest arc nchiznd un circuit care respect
proprietatea i).
Dac s-a ieit din bucla do while prin neatisfacerea condiiei C nu este vid, atunci s-a
reuit construirea unei partiii (S, T) ce respect condiiile din enun, adic ntre S i T nu exist
dect arce roii n orice sens, i arce galbene orientate de la T la S, iar nodul s nu aparine lui T,
deci s e S. Toate arcele galbene fiind orientate de la T la S, nu exist un arc care s nchid un
eventual circuit cu proprietatea i).
Evident, doar una dintre cele dou condiii poate fi fals la un moment dat, deci nu se pot
construi att un circuit ct i o partiie.
3. Fie G = (V, E) un graf. O mulime de vrfuri A _ V se numete m independent dac exist un cuplaj
M al lui G astfel nct A _ S(M). Demonstrai c, dac A i B sunt m independente i |A| < |B|,
atunci exist b e B A a.. A {b} este m independent.
Soluie:
Fie A i B dou mulimi m independente cu |A| < |B|. n aceste condiii,
B A u, adic - b e B A.
n plus, se tie c toate mulimile m independente maximale au acelai cardinal. ntruct exist
cel puin o mulime m independent (de exemplu B) de cardinal mai mare dect A, A nu este maximal,
deci - v e V A a.. A {v} este m independent.
n aceste condiii, cutarea unui b n B A a.. A {b} s fie m independent are sens.
Observaia 1: O mulime X _ V este m independent dac exist un cuplaj M
0
al lui G astfel
nct X _ S(M
0
). Dar, dac un cuplaj M
0
satureaz toate nodurile din mulimea X, atunci M
0
satureaz
toate nodurile din orice submulime a lui X. n consecin, orice submulime a unei mulimi m
independente este m independent.
Aadar, dac A i B sunt dou mulimi m independente cu proprietile de mai sus, i, n plus, A
_ B, atunci, b e B A, A {b} _ B, deci A {b} este
m independent.
189
Notaii:
- M
A
= {M| A _ S(M)};
- M
B
= {M| B _ S(M)}.
Fie M
A
e M
A
un cuplaj care satureaz A, cu proprietatea c
|M
A
| = max(|M|, M e M
A
}
respectiv M
B
e M
B
un cuplaj care satureaz B, cu proprietatea c
|M
B
| = max(|M|, M e M
B
}.
Vom arta c M
A
i M
B
sunt cuplaje de cardinal maxim n G.
Reducere la absurd:
Presupunem c M
A
nu este cuplaj de cardinal maxim. Conform teoremei lui Berge, M
A
admite un
drum de cretere P. Fie x i y cele dou noduri expuse relativ la M
A
(extremitile acestui drum de
cretere). Construim M = (M
A
(P M
A
)) (P M
A
).
S(M
A
) _ S(M), deci M e M
A
. n plus, |M| = |M
A
| + 1, ceea ce contrazice faptul c M
A
este
cuplaj cu cardinalul maxim ntre cuplajele care satureaz A.
Analog se demonstreaz c M
B
este cuplaj de cardinal maxim.
Se construiete subgraful H = (S(M
A
) S(M
B
), M
A
M
B
). Evident,
A _ S(M
A
) S(M
B
) i B _ S(M
A
) S(M
B
).
Deoarece H este obinut din reuniunea a dou cuplaje,
u e S(M
A
) S(M
B
) d
H
(u) s 2.
(deoarece un nod v poate fi extremitatea a cel mult 2 muchii n H).
n aceste condiii, orice component conex C din H este fie drum, fie circuit (orice alt structur
este imposibil din cauza faptului c gradele tuturor nodurilor sunt cel puin 1, pt c am considerat doar
nodurile saturate de cuplaje, i cel mult 2).
Fie C o component conex oarecare din G.
1. Fie C circuit. ntruct muchiile acestui circuit sunt muchiile a dou cuplaje de cardinal
maxim din G, oricare dou muchii incidente sunt din cuplaje diferite.
Acest circuit este in G (i n H) un circuit alternat relativ la oricare din cele dou cuplaje.
Aadar C nu poate fi circuit impar (dac ar fi circuit alternat impar relativ la M
A
, atunci ar exista
n circuit un nod u expus relativ la M
A
. Dar, u fcnd parte din acest circuit, d
H
(u) = 2. Atunci u
190
este incident cu dou muchii din E(H) M
A
, adic din M
B
M
A
. De aici reiese c exist dou
muchii incidente n M
B
contradicie cu faptul c M
B
este cuplaj. Analog se arat c C nu poate
fi circuit alternat impar relativ la M
B
).
n consecin, orice circuit alternat din H este circuit alternat par, i toate nodurile acestui
circuit sunt saturate de ambele cuplaje.
Aadar, dac - b e (B A) V(C), atunci cuplajul M
A
satureaz b, deci satureaz A {b},
ceea ce trebuia demonstrat. Altfel, se obine c
(B A) V(C) = u
adic b, dac b e B V(C) be A V(C), adic |A V(C)| > |B V(C)|.
2. Fie C drum. (Deoarece c este component conex a grafului H, evident C este drum
maximal n raport cu incluziunea).
Observaie: Dac este drum de lungime 1, atunci:
C = v, e, u cu e e M
A
sau e e M
B
. Vom arta c e e M
A
M
B
.
Reducere la absurd: Presupunem e e M
A
i e e M
B
(cellalt caz se demonstreaz
analog). d
H
(u) = d
H
(v) = 1 (adic, n G, muchia e nu este incident cu nici o alt muchie din M
B
.
n aceste condiii putem construi M = M
B
,e-. M este cuplaj, dup cum am artat
mai sus. n plus, S(M
B
) _ S(M), deci B _ S(M), i
|M| = |M
B
| + 1, ceea ce contrazice faptul c M
B
este cuplaj de cardinal maxim.
Aadar, orice drum de lungime 1 este reprezentat de o muchie din intersecia celor
2 cuplaje i extremitile acesteia, aceste extremiti fiind deci saturate de ambele cuplaje.
Prin urmare, dac - b e (B A) V(C), atunci cuplajul M
A
satureaz b, deci satureaz A
{b}, ceea ce trebuia demonstrat. Altfel, se obine c
(B A) V(C) = u
adic b, dac b e B V(C) be A V(C), adic |A V(C)| > |B V(C)|.
Fie C un drum de lungime strict mai mare dect 1. ntruct muchiile acestui drum sunt
muchiile a dou cuplaje de cardinal maxim din G, oricare dou muchii incidente sunt din cuplaje
diferite.
Acest drum este in G (i n H) un drum alternat relativ la oricare din cele dou cuplaje.
Presupunem c C este drum alternat impar. Fie u i v extremitile acestui drum alternat.
Din modul de construcie a grafului H C este drum alternat impar relativ la ambele cuplaje n
G.
191
Presupunem u i v e S(M
A
). Evident, u i v e S(M
B
). Atunci, n graful G, c este drum de
cretere relativ la M
B
, deci M
B
admite drumuri de cretere, ceea ce contrazice faptul c M
B
este
cuplaj de cardinal maxim. Aadar presupunerea fcut este fals C nu poate fi drum alternat
impar.
Atunci C este drum alternat par. Fie u i v extremitile acestui drum. Presupunem c u e
S(M
A
), cellalt caz tratndu-se similar. Evident, deoarece componenta conex C a grafului H este
drum alternat par, u e S(M
A
) - S(M
B
) i
v e S(M
B
) - S(M
A
).
ntruct B _ S(M
B
) i A _ S(M
A
), este evident c u e B i v e A.
Presupunem c, studiind celelalte tipuri de componente conexe, nu am descoperit nici un
nod b din mulimea B A.
Atunci, toate nodurile din aceast mulime se gsesc n aceste componente conexe care
sunt drumuri alternate pare.
Dac exist un nod b din B A care nu este extremitate a acestui drum, atunci, gsindu-se
n interiorul drumului, este extremitate a unei muchii din M
A
, deci este saturat de M
A
. Prin
urmare, n acest caz, A {v} este m independent.
Vom studia n continuare cazul cnd toate nodurile din B A sunt extremiti ale
drumurilor alternate pare C.
Dac exist o component conex de acest tip (drum alternat par cu extremitatea v din
mulimea B - A) n care extremitatea u este din S(M
A
) A, atunci:

Putem construi un nou cuplaj M astfel:
M = (M
A
(M
A
E(C))) (E(C) - M
A
).
Avem: S(M) = (S(M
A
) {u} ) {v}. Dar A _ S(M
A
) {u} i v e B A, deci M satureaz A
,v-, adic A {v} este m independent, ceea ce trebuia demonstrat.
Vom arta acum c, dac toate componentele conexe de celelalte tipuri nu conin noduri
din B A, atunci ntre drumurile alternate pare cu extremitatea v din B - A exist cel puin unul
pentru care u este din S(M
A
) A.
192
Reducere la absurd:
Presupunem toate componentele conexe care sunt drumuri alternate pare cu o extremitate
v n B A au cealalt extremitate u n A.
Aa cum am artat mai sus, u e B, deci u e A B.
Atunci, oricare ar fi o astfel de component conex C, vom avea
|(A B) V(C)| > |(B A) V(C)|.
ntruct am presupus c nici o alt component conex a lui H nu mai conine noduri din B
A, se obine c
|(A B) V(H)| > |(B A) V(H)|.
Dar A i B sunt incluse n V(H) (reiese din construcia lui H), deci
|(A B))| > |(B A) |, adic |A | > |B |, ceea ce contrazice ipoteza.
Prin urmare, presupunerea fcut este fals.
n toate cazurile am obinut deci c exist b e B A a.. A {b} este m independent.
4. Cuplaje stabile n grafuri bipartite. Fie graful complet bipartit K
n,n
= (B, F; E), unde B={b
1
, b
2
,..., b
n
- i F =
{f
1
, f
2
,..., f
n
-. Dac M este un cuplaj perfect n K
n,n
(fiecare b este cuplat cu exact un f), vom folosi notaia:
b
i
f
j
eM f
j
= M(b
i
) b
i
= M(f
j
). Vom presupune c:
b e B are o ordonare a preferinelor sale pe F: f
i1
<
b
f
i2
<
b
... <
b
f
in
i

f e F are o ordonare a preferinelor sale pe B: b
i1
<
f
b
i2
<
f
... <
f
b
in
.
Un cuplaj perfect M al lui K
n,n
se numete stabil dac:
b e B dac f<
b
M(b), atunci M(f)<
f
b i, de asemenea,
f e F dac b<
f
M(f), atunci M(b)<
b
f.
S se arate c pentru orice ordonri ale preferinelor exist un cuplaj stabil i s se construiasc unul
n O(n
3
).

Soluie:
Un cuplaj perfect M al lui K
n,n
se numete stabil dac nu exist o pereche (f, b) astfel
nct fiecare s se prefere unul pe cellalt n locul partenerilor cu care au fost cuplai de algoritm.
193
Astfel de perechi determin un blocaj i dac exist un astfel de blocaj putem spune c M,
cuplajul perfect obinut, nu este stabil.
Exist mai multe posibiliti de a alege tipurile de date cu care lucrm. Am avea nevoie de
urmtoarele structuri:
1. o structur n care s reinem preferinele fiecrui biat i ale fiecrei fete i care poate
fi de dou tipuri:
vector sau list de preferine n care, se rein, pentru fiecare biat respectiv fat,
toate fetele, respectiv bieii n ordinea descresctoare a preferinelor (adic persoana aflat pe
prima poziie este i cea mai preferat de posesorul listei). Cel mai bine s-ar lucra cu vectori,
ntruct s-ar realiza mai uor accesul la elementele sale. Se observ c, folosind acest tip de
structur, avem timpul de acces la cea mai preferat persoan n O(1), ns dac dorim s
comparm dac o persoan este preferat altei persoane accesul se face n O(n).
vector sau list de grade de preferin, n care reinem pentru fiecare biat sau fat,
toate fetele, respectiv bieii, n ordine, i pentru fiecare este specificat un grad de preferin.
Dac o persoan este preferat altei persoane, atunci va avea gradul de preferin mai mare
dect al respectivei persoane dar nu va fi neaprat naintea sa n cadrul structurii. i aceasta
poate fi implementat cu vector sau list ns de aceast dat vectorul este optim n cazul n care
dorim s comparm gradele de preferina ale dou persoane; accesul se va face n O(1) n
cazul vectorului i n O(n) n cazul listei (n comparaie cu primul tip de structur, unde aveam
O(n) n ambele cazuri). Pentru a gsi persoana cea mai preferat pentru un biat sau o fat
vom avea nevoie de O(n) n cazul cel mai nefavorabil (n timp ce n prima situaie accesul se
fcea n O(1)).
Vom alege varianta cu vectorul de preferine, pentru fiecare biat i fat. Se rein de
fapt dou matrice n*n, una pentru fete i una pentru biei : prF, prB n care avem prF[i]
vectorul de preferine pentru fata i i analog pentru biei.
2. o structur n care s reinem cuplurile formate la fiecare pas i n care s obinem
n final perechile stabile. De preferat este ca aceast structur s fie implementat prin 2 vectori,
unul pentru fete i unul pentru biei, cF, cB. n cF(i) avem perechea fetei i (-1 n cazul n care
aceasta este singur) i analog i pentru biei. Accesul la informaiile despre o anumit persoan
se face n O(1).
3. un vector primaProp cu intrri pentru fiecare biat din list, i n care se reine
prima fat din lista de preferine a fiecrui biat (poziia ei n vectorul de preferine a
biatului respectiv). Accesul la elemente se face tot n O(1). Iniial n acest vector se rein numai
valori de 0.
4. o structur n care s reinem bieii liberi. Cel mai bine ar fi ca multimea de biei
liberi s fie reinut ntr-o stiv BieiLiberi astfel nct atunci cnd se adaug un biat liber, el
s fie mpins n stiv iar cnd dorim s alegem un biat liber care s fac o propunere, acesta s
fie preluat din vrful stivei. Despre o fat putem afla dac e liber sau nu din vectorul n care se
rein cuplurile formate la fiecare pas: fata i este liber dac cF(i) este 1.

Algoritmul se bazeaz pe urmtoarea idee:
Iniial toate persoanele sunt libere
ct timp exist un biat liber
considerm un biat liber
194
fie f prima fat de pe lista de propuneri a lui b, creia nu i-a propus deja
dac f este liber
cupleaz f i b
altfel
dac f l prefer pe b actualei ei perechi b
elibereaz-l pe b
cupleaz pe f cu b
altfel
f l refuz pe b.

n continuare, vom prezenta algoritmul ntr-o form mai concret i mai detaliat.

function Prob_Cstoriilor(n)
begin
// iniializarea structurilor
for i 0 to n do
//Iniial nici un biat i nici o fat nu sunt cuplai
//Bieii nu fac nc nici o propunere
//Iniializrile se fac n O(n)
cB*i+ -1
cF*i+ -1
primaProp* i + 0
BieiLiberi.push(i)
//ct mai avem nc biei liberi
while ( nu_e_vid(BieiLiberi) ) do

195
/*numrul de iteraii executate de aceast bucl nu poate depi n
2
deoarece:
Atunci cnd un biat liber este cuplat cu o fat, cel mult un biat este eliberat, deci
reintrodus n BieiLiberi. Prin urmare, la fiecare iteraie, dimensiunea stivei BieiLiberi nu poate
depi dimensiunea de la iteraia anterioar.
Fiecare biat poate propune o singur dat unei fete, i poate fi refuzat de fiecare fat cel mult
o dat.*/

/*celelalte operaii din cadrul buclei (mai puin funcia de preferin se execut n O(1)
ntruct sunt simple accesri*/
//se alege primul biat din stiv dar nu se extrage nc din stiv
b BieiLiberi.top()
/*se alege prima propunere a lui b dintre fetele crora nu le-a fcut deja propuneri*/
f prB*b+* primaProp*b++
(primaProp [b])++
//se trece la urmtoarea propunere din lista preferinelor lui b
//verificm dac fata creia i face b propunerea este liber
if (cF[f] = -1) then
/*dac fata este liber se formeaz cuplul (f, b) i se extrage b din lista bieilor liberi*/
cF* f + b
cB* b + f
BieiLiberi.pop()
else
/* Verificm dac f prefer mai mult biatul b dect l prefer pe actualul ei logodnic*/
//Verificarea preferinei se face n O(n)
if ( prefer(f, b, cF(f) ) then
/* funcia returneaz true dac ntr-adevr f l prefer mai mult pe b dect pe cF(f) */
//l scoatem pe b din rndul bieilor liberi i l introducem pe cF(f)
BieiLiberi.pop()
BieiLiberi.push( cF(f) );
cB*cF*f++ -1
196
//i cuplm pe f i pe b
cF[ f ] = b
cB[ b ] = f
end;

//funcia care determin dac o fat prefer mai mult un biat dect pe altul i care are are evident
complexitatea O(n) ntruct n cel mai ru caz se parcurge ntreaga list de preferine a fetei f */

function prefer (f, b1, b2)
begin
i 0
//naintm n vectorul de preferine pn cnd gsim unul dintre cei doi biei
//primul biat ntlnit este preferat de fata f n locul celuilalt
while ( prF[f][i] = b1 || prF[f][i] = b2 ) do
i++
if ( prF[f][i] = b1 ) then
return true
else return false
end;

Conform celor explicate, complexitatea algoritmului este
O(n) + O(n
2
)(O(n) + O(1)) = O(n
3
).
Algoritmul alege primul biat liber din stiv (i anume acel biat aflat n vrful stivei). Acesta
rmne n stiv pn cnd este cuplat cu o fat. n momentul n care un cuplu se rupe un biat rmne
liber i unul liber este cuplat; se va scoate din stiv biatul care se cupleaz la acel pas i va fi introdus cel
care este desprit de pereche. Evident un biat va rmne n stiv pn cnd i se gsete o pereche
stabil, deci pn cnd nu mai poate fi scos de nici un biat dintre cei rmai.
197
Fiecare biat este acceptat de o fat aadar algoritmul se termin cu un cuplaj. Acest cuplaj este
ntotdeauna stabil i este favorabil din punctul de vedere al bieilor. Presupunem c acest cuplaj obinut
este M. Trebuie s artm c ntr-adevr nu se formeaz nici un blocaj.
S presupunem c exist o fat f pe care un biat b o prefer mai mult dect pe perechea cu care
a fost grupat n urma execuiei algoritmului. Atunci, dup modul n care lucreaz algoritmul, putem trage
concluzia c aceast fat f a refuzat n momentul n care biatul b i-a fcut propunerea, sau l-a acceptat
la un moent dat, dar a fost nlocuit ulterior cu un altul n condiiile precizate n algoritm, deci putem
spune c f l prefer pe partenerul ei curent. Aadar f i b nu formeaz un blocaj i cum am ales biatul b
arbitrar, putem spune c nu exist blocaje i deci c M este un cuplaj stabil.

Observaie:
n cazul n care numrul de fete nu este egal cu numrul de biei, putem aduga nume fictive.
Dac avem mai puine fete se adaug un numr de fete fictive iar altfel, se adaug un numr fictiv de
biei. Pentru fetele sau bieii adugai vom alctui listele de preferine aleator numai c:
dac adugm fete, atunci fetele adugate trebuie puse ultimele n listele de preferine ale
bieilor;
dac adugm biei, atunci fetele trebuie s i introduc ultimii n listele lor de
preferine.
Facem aceast alegere ntruct avem nevoie ca cei adugai s nu fie luai n consideraie dect
de persoanele cele mai puin dorite din cealalt tabr. n final se vor exclude persoanele introduse n
plus, urmnd n tabra cealalt s rmn i biei sau fete fr pereche.
TEMA NR. 11
20 mai 2003

7. Se dispune de un algoritm care, primind la intrare un graf G i o funcie de pondere nenegativ pe
mulimea muchiilor acestuia, returneaz un cuplaj perfect n G de pondere minim (printre toate
cuplajele perfecte ale grafului; dac G nu are cuplaj perfect se anun acest lucru). Artai c se
poate utiliza acest algoritm pentru determinarea eficient a cuplajului de cardinal maxim ntr-un graf
oarecare.

Soluie:
Fie G = (V, E) un graf oarecare.
Se tie c M este cuplaj perfect pentru un graf G dac S(M) = V (un cuplaj este perfect
dac satureaz toate nodurile).
198
De asemenea, orice muchie din cuplaj satureaz exact dou noduri i orice nod poate fi
saturat de cel mult o muchie.
Aadar, dac M este cuplaj perfect, atunci |M| =
2
| | G
.
O condiie necesar pentru ca G s aib un cuplaj perfect este ca acesta s aib ordin par.
O alt condiie necesar este ca G s nu aib noduri izolate. Evident, aceste condiii nu sunt
condiii suficiente.
Vom cuta deci un cuplaj perfect ntr-un graf convenabil ales astfel nct s putem obine
cuplajul maxim n G.
Varianta I:
innd cont de condiiile precizate mai sus, se va ncerca construirea cuplajului de
cardinal maxim pentru graful G astfel:
Pas 1: Construim un nou graf G = (V, E). Iniial, G = G.
Pas 2: Se va asocia o funcie de pondere p: E R
+
muchiilor grafului G:
ee E(G), p(e) = 1.
Pas 2: Dac |G| este numr impar, nu are sens aplicarea algoritmului de cutare a
cuplajului perfect de pondere minim (conform celor precizate mai sus). Se adaug un nou nod w
la V(G), diferit de toate nodurile din V(G), astfel fiind satisfcut condiia ca G s aib ordin
impar.
Noul nod w va fi legat prin muchii de toate nodurile din V(G). Se extinde funcia
de pondere la noul graf astfel:
p(wi) = N, ee V(G) {w},
( unde N este un numr mare, de exemplu n(n-1)/2).
Justificarea alegerii acestei funcii de pondere:
Intruct se dorete obinerea unui cuplaj de cardinal maxim pentru G prin calculul
unui cuplaj perfect de pondere minim n G, vom ncerca s includem n acest cuplaj perfect ct
mai multe muchii din G. Aadar, muchiile din G vor avea o pondere mic, pentru a se facilita
introducerea lor n cuplajul de pondere minim, iar muchiile adugate ulterior vor avea pondere
mult mai mare, astfel nct s se evite pe ct posibil introducerea lor n cuplajul construit. Este
suficient dac ponderea unei astfel de muchii depete suma ponderilor tuturor muchiilor din G).
Dac |G| este numr par, nu se trece la pasul urmtor.
Pas 3: Se aplic algoritmul de cutare a unui cuplaj perfect de pondere minim n G.
Dac un astfel de cuplaj Mp este gsit, atunci se aleg din Mp acele muchii care apar n G,
obimndu-se asfel un cuplaj de cardinal maxim pentru G, dup cum vom demonstra mai jos.
n caz de eec, se procedeaz astfel:
- se adaug dou noi noduri u i v la V(G) (vom aduga dou noduri pentru ca
ordinul grafului s rmn par; evident, u i v e V(G) i sunt distincte la
fiecare pas);
199
- aceste noduri vor fi legate de toate celelalte noduri din G (i ntre ele) prin
muchii crora li se asociaz ponderea N, ca mai sus.
- se repet pasul 3 pn cnd n G se obine un cuplaj perfect de pondere
minim Mp; din acesta se extrage cuplajul M de cardinal maxim pentru G, aa
cum am artat mai sus.
Algoritmul propriu-zis de construcie a cuplajului M este:
function ConstruieteCuplajDeCardinalMaxim(G)
begin
/*construcia lui G*/
G G
n |G|
N n(n-1)/2
if (|V(G)| este impar)
then
V(G) V(G) {w}
E(G) E(G) {wi| i e V(G), i w}
/*asocierea funciei de pondere*/
for all e in E(G) do
if (e e E(G)) then p(e) 1
else p(e) N
/*aplicarea algoritmului de calcul al cuplajului perfect de pondere minima*/
while (not ExistCuplajPerfect (G, p)) do
V(G) V(G) {u, v}
E(G) E(G) {ui, vi| i e V(G), i u, v}
/*la ieirea din while se obine cuplajul perfect de pondere minim pentru G*/
M CuplajPerfectDePondereMinima(G, p)
/*alegerea din M a muchiilor care apar n G*/
M M E(G)
return M
end

Corectitudinea algoritmului:
200
1. Vom arta c algoritmul se oprete, adic, modificnd astfel graful G, se obine
dup un numr de pai un graf care are un cuplaj perfect.
Conform Teoremei lui Tutte, un graf G = (V, E) are un cuplaj perfect dac i numai dac,
S _ V, S V, q(G S) s |S|.
Fie B
k
mulimea tuturor bipartiiilor posibile (S, V S) ale mulimii V
k
a grafului G
k

construit i verificat de algoritm la pasul k din bucla while, pentru care
S V
k
.
B
k
= {(S
0
, V
k
S
0
), , (S
nk
, V
k
S
nk
)}.
Pp c G
k
nu are cuplaj perfect. Atunci exist cel puin o mulime S
j
_ V
k
, S
j
V
k
,
pentru care q(G
k
S
j
) > |S
j
|.
Fie a = q(G
k
S
j
) i b = |S
j
|.
Urmnd paii algoritmului de construcie a cuplajului de cardinal maxim n G, se vor
aduga n G
k
dou noduri care vor fi legate prin muchii att ntre ele, ct i cu toate celelalte
noduri din V
k
, obinndu-se astfel un nou graf G
k+1
.
La introducerea a dou noi noduri n graful G
k
, acestea vor trebui mprite ntre cele dou
mulimi ale bipartiiilor. Aadar, B
k+1
va avea forma:
B
k+1
= {(S
i
, (V
k
- S
i
) {u, v}), (S
i
{u }), (V
k
- S
i
) {v}), (S
i
{v }), (V
k
- S
i
) {u}), (S
i
{u, v}), V
k
- S
i
)|
(S
i
, V
k
- S
i
) e B
k
}.
Vom studia fiecare variant de astfel de cupluri din B
k+1
:
- dac bipartiia este de forma: (S
i
, (V
k
- S
i
) {u, v}):
Deoarece nodurile u i v sunt adiacente cu toate nodurile din G
k
, subgraful indus de (V
k
- S
i
) {u,
v} este conex.
Dac | S
i
| este par, atunci |(V
k
- S
i
) ,u, v-| este par, deci nu exist nici o component conex
impar n G
k+1
S
i
, adic q(G
k+1
S
i
) = 0 s | S
i
|.
Dac | S
i
| este impar, atunci |(V
k
- S
i
) ,u, v-| este impar, deci exist exact o component
conex impar n G
k+1
S
i
, adic q(G
k+1
S
i
) = 1 s | S
i
|.
Prin urmare, la fiecare pas, acest tip de mulimi satisfac condiiile teoremei lui Tutte.
- dac bipartiia este de forma: (S
i
{u }), (V
k
- S
i
) {v}) sau (S
i
{v }), (V
k
- S
i
) {u}):
Deoarece nodurile u i v sunt adiacente cu toate nodurile din G
k
, subgraful indus de (V
k
- S
i
) {u }
sau de (V
k
- S
i
) {v }este conex.
Dac | S
i
{u }| este par, atunci |(V
k
- S
i
) ,v-| este par, deci nu exist nici o component conex
impar n G
k+1
(S
i
,u -), adic q(G
k+1
S
i
{u }) = 0 s | S
i
{u}|.
201
Dac | S
i
{u }| este impar, atunci |(V
k
- S
i
) , v-| este impar, deci exist exact o component
conex impar n G
k+1
(S
i
,u -), adic q(G
k+1
(S
i
{u })) = 1 s | S
i
{u}|.
Analog pentru S
i
{v }.
Prin urmare, la fiecare pas, acest tip de mulimi satisfac condiiile teoremei lui Tutte.
- dac bipartiia este de forma: (S
i
{u, v}), V
k
- S
i
):
Atunci, q(V
k
S) este acelai ca i la pasul anterior, (deoarece nu se adaug i nu se elimin
noduri sau muchii n V S). n schimb cardinalul celeilalte mulimi a bipartiiei crete cu 2.
Aadar, pentru o astfel de mulime de noduri S
l
, dac vom aduga succesiv la graful G cte dou
noduri, dup un anumit numr de pai se va mai elimina un caz de mulime S care nu satisface condiiile
teoremei lui Tutte.
De precizat c trebuie adugate attea noduri ct este diferena iniial dintre q(V S) i |S|.
Dup cum am artat, indiferent cte noduri se adaug n S, nu se modific numrul de
componente conexe impare din V S (deoarece nu se adaug i nu se elimin noduri sau muchii n V S).
Aadar, valoarea lui q(V
k
S), pentru orice G
k
construit de algoritm i orice S submulime proprie a lui V
k
,
este mrginit de maximul dintre valorile q(V S), unde V este mulimea vrfurilor grafului G de la
primul pas. n cazul cel mai nefavorabil, fiecare nod din V este o component conex impar, deci q(V
k

S) nu poate depi |V| (notat n).
Aadar, dup adugrarea a cel mult n noi noduri la graful G se obine un graf care are un cuplaj
perfect.
ntruct, n bucla while, la fiecare iteraie se adaug dou noduri, condiia din while devine fals
dup cel mult n/2 iteraii.
Evident, dac exist cuplaj perfect, atunci exist cuplaj perfect de pondere minim, deci s-a gsit
cuplajul cutat i se poate trece la construcia cuplajului de cardinal maxim pentru G.
2. Vom arta c M obinut din din intersecia cuplajului perfect de pondere minim al lui
G cu mulimea muchiilor lui G este cuplaj de cardinal maxim pentru G.
Reducere la absurd:
Presupunem c algoritmul de mai sus nu construiete un cuplaj de cardinalmaxim pentru
G. Conform teoremei lui Berge, aceasta nseamn c G admite un drum de cretere P relativ la M.

Nodurile u i v sunt noduri expuse relativ la cuplajul M.
Dar G este subgraf al lui G, iar M este submulime a cuplajului M, care este cuplaj
perfect n G. Aadar, muchiile din P care apar n m sunt i n M.
202
n plus, deoarece M este cuplaj perfect n G, nu exist n G noduri expuse relativ la M.
Aadar, exist u, v n V a..:
ue N
G
(u), v e N
G
(v) i uu e M, respetiv vv e M.

Dac mcar unul din nodurile u i v (de exemplu u) ar fi din V (din G), atunci, din
modul de construcie a cuplajului M, ar rezulta c uu este muchie n cuplajul M (deoarece, la
construcia lui G nu s-au adugat muchii ntre nodurile care erau iniial n G, deci dac exist
muchia uu, atunci aceasta face parte din mulimea E a grafului G; aadar, uu e E i uu e M
uu e E M, adic uu e M). Dar acest lucru contrazice presupunerea fcut, i anume c u
este nod expus relativ la M.
n consecin, u i v e V V (sunt noduri adugate ulterior, la construcia lui G).
Dar, din modul de construcie al lui G (la fiecare pas exist muchie ntre orice nod din V
V i toate celelalte noduri din V) reiese c exist n G muchia uv.

Evident, aceast muchie nu este din cuplajul M, deoarece extremitile sale sunt saturate
de alte muchii din M.
Am obinut deci un circuit alternat par C n G relativ la M.
Fie 2k + 1 numrul muchiilor de pe drumul P n G. Evident, dintre acestea, k se gsesc n
cuplajul M (i n M).
Ponderea muchiilor din M de pe acest circuit C este:
p(C M) = k * 1 + 2 * N.
(deoarece ponderile muchiilor de pe P sunt 1, acestea fcnd parte din G, iar ponderile muchiilor
adugate ulterior, adic uu i vv, sunt N).
Construim un nou cuplaj M n G, astfel:
M = (M (C M)) (C M).
(adic eliminm muchiile de pe C, nlocuindu-le cu acele muchii de pe C care nu erau iniial n
M).
203

Evident, M este cuplaj perfect, ntruct S(M) = S(M), iar S(M) = V.
Ponderea cuplajului M este:
p(M) = p(M) p(M C ) + p(C M)
p(M) = p(M) (k*1 + 2*N) + ((k + 1)*1 + N) i N >1
p(M) < p(M), ceea ce contrazice faptul c M era cuplaj de ponedere minim.
n consecin, presupunerea fcut este fals. G nu admite drumuri de cretere relativ la
M, deci M este cuplaj de cardinal maxim n G.
Varianta a II-a:
Construim G = (V, E) astfel:
- dac |V| este par, atunci V = V; altfel V = V {w} (se adaug un nou nod
pentru ndeplinirea condiiei necesare de existen a cuplajului perfect, referitoare
la paritatea ordinului grafului);
- E este mulimea tuturor muchiilor posibile ntre nodurile lui G (G este graf
complet).
Evident, un graf complet de ordin par are un cuplaj perfect.
Vom asocia o funcie de pondere p: E R
+
astfel:
- p(e) = 1 dac e e E(G);
- p(e) = |E| dac e e E(G) E(G).
Justificarea alegerii acestei funcii de pondere:
Intruct se dorete obinerea unui cuplaj de cardinal maxim pentru G prin calculul unui
cuplaj perfect de pondere minim n G, vom ncerca s includem n acest cuplaj perfect ct mai
multe muchii din G. Aadar, muchiile din G vor avea o pondere mic, pentru a se facilita
introducerea lor n cuplajul de pondere minim, iar muchiile adugate ulterior vor avea pondere
mult mai mare (este suficient dac ponderea unei astfel de muchii depete suma ponderilor
tuturor muchiilor din G).
Dup construcia cuplajului perfect de pondere minim M n G, se aleg din acest cuplaj
acele muchii care sunt n G. Mulimea acestor muchii va fi un cuplaj de cardinal maxim n G.
Algoritmul de construcie a unui cuplaj de cardinal maxim, utiliznd un algoritm de
calcul al cuplajului perfect este:
function ConstruieteCuplajDeCardinalMaxim(G)
begin
204
/*construcia G*/
V(G) V(G)
if (|V(G)| este impar)
then V(G) V(G) {w}
E(G) {ij| i, j e V(G), i j}
/*asocierea funciei de pondere*/
for all e in E(G) do
if (e e E(G)) then p(e) 1
else p(e) |E(G)|
/*aplicarea algoritmului de calcul al cuplajului perfect de pondere minima*/
M CuplajPerfectDePondereMinima(G, p)
/*alegerea din M a muchiilor care apar n G*/
M M E(G)
return M
end

Vom demonstra c mulimea M construit de algoritm este chiar cuplaj de cardinal maxim
n G.
Reducere la absurd:
Presupunem c M nu este cuplaj de cardinal maxim.
Fie m = |M|.
tim c M _ M (din construcia cuplajului M).
M este cuplaj perfect n G |M| =
2
| ' | G
.
Ponderea acestui cuplaj este:


e e
= +
) ( ) ( ) ' (
) ( ) (
G E e G E G E e
e p e p m * 1 + (|M| m) * |E|.
Deoarece am presupus c M nu este cuplaj de cardinal maxim, - M
1
e M
G
a.. |M
1
| >
|M|. Fie |M
1
| = |M|+ a, a > 0.
Atunci, ntruct G este graf complet, - M
1
cuplaj perfect n G a.. M
1
_ M
1
.
(Demonstraie:
M
1
este cuplaj n graful G i G este subgraf al lui G M
1
este cuplaj n G.
205
|S(M
1
)| i |G| sunt numere pare, deci |G S(M
1
)| este numr par (adic mulimea
nodurilor expuse n G relativ la M
1,
E(M
1
) are cardinal par). n plus, E(M
1
) induce un subgraf
complet n G. Acesta, avnd ordin par, are un cuplaj perfect M
2
.
Dar:
S(M
1
) S(M
2
)= V(G) i S(M
1
) S (M
2
)= u
M
1
= M
1
M
2
este cuplaj pefect n G.
Am artat deci c, pornind de la M
1
, se poate construi un cuplaj perfect n G, ceea ce
trebuia demonstrat).
Ponderea cuplajului M
1
este:
(m + a) * 1 + (|M| m a) * |E|.
adic p(M
1
) = p(M) a(|E| - 1).
Dar a > 0 i |E| > 1, deci
p(M
1
) < p(M)
ceea ce contrazice alegerea cuplajului M ca fiind cuplaj perfect de pondere minim n G.
Presupunerea fcut este deci fals.
Prin urmare, algoritmul de mai sus construiete un cuplaj de cardinal maxim ntr-un graf
G oarecare.
8. Artai c se poate determina, ntr-o matrice cu elemente 0 i 1 dat, o mulime de cardinal maxim
de elemente egale cu 0 i care s nu se gseasc pe aceeai linie sau coloan, cu ajutorul unui
algoritm de flux maxim (pe o reea convenabil definit).

Soluie:
Fie M o matrice oarecare de 0 i 1, M e {0, 1}
m X n
. Aceast matrice are deci m linii,
numerotate de la 0 la m 1, i n coloane, numerotate de la 0 la n 1.
Vom asocia aceste matrice un graf bipartit G = (X, Y; E) astfel:
- X = {0, 1, , m 1}, adic fiecrei linii din M i corespunde un nod n X;
- Y = {m+ 0, m+ 1, , m+ n 1}, adic fiecrei coloane din M i corespunde un nod n
Y;
- dac elementul de la intersecia liniei i cu coloana j este 0, atunci se introduce n E
muchia (i, j + m).
Graful G este evident bipartit, putnd exista intersecii doar ntre o linie i o coloan, deci
nu exist muchii ntre dou noduri din aceeai mulime a bipartiiei.
Observm deci c fiecrui element 0 de la intersecia liniei i cu coloana j n matricea M i
corespundeo muchie e n G cu extremitile i i j+m.
n aceste condiii, problema gsirii unei mulimi de cardinal maxim de elemente egale cu
0 i care s nu se gseasc pe aceeai linie sau coloan n M se reduce la gsirea unei mulimi de
206
muchii de cardinal maxim n G n care oricare dou muchii au extremitile distincte, adic la
gsirea unui cuplaj de cardinal maxim n graful bipartit G.
Problema gsirii unui cuplaj de cardinal maxim ntr-un graf bipartit se poate rezolva cu
ajutorul unui algoritm de flux maxim.

Se asociaz problemei o reea de transport R
G
= (G, c, s, t) construit astfel:
- G = (V, E) digraf unde :
- V = X Y {s, t},
- E = {ij| i e X, j e Y, ij e E} {si| i e X} {jt| t e X};
- funcia de cost c:E R
+
definit prin c(a) = 1, a e E.
Aplicnd un algoritmul Ford Fulkerson pentru determinarea unui flux maxim pe reeaua
astfel definit, se poate determina ntotdeauna un flux de valoare maxim cu componente ntregi,
deoarece capacitile arcelor din reea sunt ntregi.
Aadar, fluxul x
ij
, cu i din X i j din Y poate avea valoarea 0 sau 1.
Evident, dintre toate muchiile cu o extremitate i comun, i din X, doar una va avea fluxul 1,
iar celelalte 0. Analog, dintre toate muchiile cu o extremitate j comun, j din Y, doar una va avea
fluxul 1, iar celelalte 0.
n consecin, mulimea arcelor dintre X i Y pe care fluxul este 1 este mulime stabil de
muchii, deci este cuplaj pentru G. Fluxul descoperit fiind maxim, acest cuplaj este de cardinal
maxim.
3. Digraful G=(V, E) descrie topologia interconectrii ntr-o reea de procesoare . Pentru fiecare procesor
veV se cunoate ncrcarea sa load(v) eR
+
. Se cere s se determine (cu ajutorul unei probleme de
flux maxim) un plan de echilibrare static a ncrcrii procesoarelor: se va indica pentru fiecare
procesor ce cantitate de ncrcare va trimite i la ce procesor astfel nct, n final, toate procesoarele
s aib aceeai ncrcare.
Soluie:
207
Vom porni de la reeaua de procesoare i vom construi o reea creia s-i putem asocia un flux
care s rezolve problema.
Se consider un digraf G ca fiind graful ce reprezint conexiunile dintre procesoare n reea.
Se calculeaz media ncrcrilor procesoarelor adunnd ncrcrile tuturor procesoarelor i
mprind suma la numrul acestora.
Vom aduga dou noduri fictive, o surs s i o destinaie t. De sursa s vom lega toate
procesoarele suprancrcate, iar de destinaia t vom lega toate procesoarele subncrcate. Notm cu S
i

procesoarele suprancrcate, cu E
i
cele cu ncrcarea potrivit i cu U
i
cele aflate sub medie.
Putem vedea cele dou noduri fictive adugate ca dou procesoare, procesorul s fiind procesorul
din care s plece surplusul din procesoarele S
i
iar procesorul t ar fi procesorul n care ajunge toat aceast
ncrctur. n procesoarele suprancrcate pastrm numai ncrctura pe care trebuie s o aib n final
(media).
Muchiilor din digraful asociat acestei reele de calculatoare le asociem capaciti pentru a obine
o reea creia s-i calculm fluxul maxim.
Reeaua va avea urmtoarele proprieti:
-Arcele care pleac din s i ajung n S
i
vor avea capacitile egale cu load(S
i
)-medie
(n reeaua iniial de calculatoare aceast ncrctur nu pleac din s, ci din procesoarele S
i
, ns
a fost necesar aceast convenie pentru a realiza reeaua creia s-i atam fluxul de care avem
nevoie pentru a echilibra ncrctura procesoarelor);
-Pentru arcele care pleac din S
i
sau ajung n S
i
dintr-o surs diferit de s, ct i pentru
arcele care intr n U
i
sau ies din U
i
i se duc ntr-o destinaie diferit de t, precum i pentru toate
celelalte arce ntre celelalte procesoare vom asocia capacitile egale cu , pentru a putea
permite procesoarelor, n momentul n care se construiete fluxul maxim, s trimit i s
primeasc ct este nevoie pentru a putea obine echilibrarea n final;
-Un flux asociat acestei reele repreznt de fapt modul n care circul ncrctura de la
procesoarele suprancrcate la cele subncrcate.
-Arcele care pleac din U
i
i ajung n t vor avea asociate capacitile medie-load(U
i
),
adic exact de ct are nevoie fiecare procesor pentru a atinge media. (noi tim c dac toat
ncrctura din s a ajuns n t nseamn c procesoarelor subncrcate li s-a transmis exact
cantitatea de nrcare de care aveau nevoie)
Pentru aceast reea se va utiliza un algoritm de cutare a fluxului maxim, de exemplu
algoritmul lui Edmonds i Karp. Notm fluxul maxim gsit cu x*.
Fie x fluxul asociat acestei reele pentru care v(x) este:

e e
=
S i U i
i load medie medie i load ) ( ) ( (cantitatea care pleac din s trebuie s ajung n
ntregime n t, adic cantitatea de ncrcare care prisosete procesoarelor suprancrcate trebuie s
ajung n cele subncrcate)
208
Vom arta c acest flux este cel de care avem nevoie pentru a obine o echilibrare a
ncrcrilor procesoarelor i c dac fluxul maxim x* obinut pentru reeaua aleas este chiar
acest flux x atunci am obinut o echilibrare a ncrcturilor procesoarelor.
S presupunem c n urma aplicrii algoritmului obinem chiar acest flux x.
Procesoarele care erau suprancrcate primesc numai ncrctura care le prisosete. Evident,
nodurile care reprezint procesoarele suprancrcate vor avea n final ncrctura medie, ntruct, dup
cum am ales reeaua, ncrctura n exces intr n S
i
i iese din S
i
dup regula conservrii fluxului. La fel i
ncrctura care intr n aceste noduri, venit din alte noduri dect s. Nodurile din E
i
, care erau deja
echilibrate vor rmne astfel ntruct tot ceea ce a intrat n ele prin acest flux a i ieit. Nodurile din U
i

care au primit cantitatea de ncrcare necesar pentru a atinge media au transmis-o lui t, n ntregime.
Ceea ce au primit n plus au transmis prin alte arce pentru a respecta regula conservrii (nu puteau
transmite mai mult lui t ntruct erau limitate de capacitile arcelor ctre t). Aadar fiecare procesor
subncrcat i va trimite lui t exact ct mai are nevoie pn va fi echilibrat. Deci tot ceea ce a fost surplus
n celelalte procesoare a ajuns n final n t i deci putem spune c a ajuns n procesoarele care merau
iniial subncrcate. Aadar putem scoate muchii fictive i obinem c urmnd drumurile determinate de
acest flux obinem o modalitate de echilibrare. Deci fluxul maxim x* ne d chiar modalitatea de
transmitere a cantitii de ncrcare ntre procesoare.

Formm o partiie (S, T) a lui V{s, t} , seS i teT. De exemplu putem alege partiia (,s-, V-{s}).
Aceasta determin o seciune care este de altfel i seciune minim n reeaua aleas intruct dac am
mai duga un nod v n S am putea pierde eventual un arc de la s la v, ns am mai obine cel puin un arc
deoarece nodul v trebuia s transmit unui alt nod ce a primit de la s, conform legii de conservare a
fluxului. Din teorema seciunii minime i fluxului maxim tim c c(S,T)=v(x*), unde (S, T) este seciune de
capacitate minim iar x* este fluxul maxim.

Vom presupune acum c fluxul maxim x* este strict mai mare dect fluxul x. Dar valoarea lui x
este exact capacitatea seciunii (S,T).
c(S, T)=

e

i
S i
medie i load ) ( (capacitatea muchiilor ntre S i T, adic ntre s i nodurile din S
i
)
= v(x). Conform teoremei amintite mai sus obinem c x este flux maxim, ceea ce contrazice presupunerea
fcut.

Dac presupunem c x este mai mare dect x*, atunci cel puin pe una din muchiile care pleac
din s fluxul este subcapacitar. ntruct

+
e e
=
) ( ) ( i N j i N j
ij
g g
xji x
209
vom obine n acest caz un procesor i suprancrcat care nu va transmite tot surplusul de ncrctur, deci
nu va ajunge la medie. Fluxul necesar pentru echilibrare este deci mai mare dect fluxul maxim posibil n
aceast reea. n consecin, o astfel de reea de procesoare nu va putea fi echilibrat.

Deci putem realiya echilibrarea procesoarelor numai n cazul n care obinem fluxul maxim egal
cu fluxul cutat de noi, x.
4. S se determine fluxul de valoare maxim n reeaua din figur (explicnd funcionarea algoritmului
lui Edmonds-Karp).

Soluie:
Algoritmul lui Edmonds-Karp are la baz algoritmul lui Ford & Fulkerson, cruia i s-au
adus mbuntiri. Se pornete de la un flux iniial i se efectueaz creteri succesive pn cnd
nu mai obinem drumuri de cretere. n acest caz putem spune c am ajuns la un flux maxim.
Pentru depistarea drumurilor de cretere utilizm etichete:
nodul i este etichetat dac exist un drum de cretere de la s la acel nod.
n cazul algoritmului lui Edmonds Karp se gestioneaz o coad, pe care o folosim pentru
parcurgerea BFS a vrfurilor etichetate. Acest algoritm se bazeaz pe utilizarea drumurilor
minime (cu numr minim de arce) de cretere a fluxului curent.
La fiecare pas se selecteaz primul vrf din coad (care este primul vrf etichetat i
necercetat) i se ncearc etichetarea vecinilor si. n momentul n care ajungem n t nseamn c
am obinut un drum de cretere de la s la t. Se determin capacitatea rezidual a acestui drum
obinut la pasul curent i se adaug la vechiul flux, obinndu-se un nou flux, pentru care repetm
algoritmul.
Vom aplica algoritmul n cazul grafului nostru.
Pornim prin a alege un flux iniial x, i anume fluxul cu x
ij
=0, ij arc din digraful nostru. Evident
acesta este un flux ntruct pentru fiecare nod valoarea fluxului de intrare este egal cu valoarea fluxului
de ieire, iar n cazul nostru aceste valori sunt 0.
Etichetarea nodurilor se face astfel:
- pe prima poziie vom pune nodul din care a fost obinut nodul pentru care facem etichetarea;
- pe a doua poziie vom scrie tipul arcului prin care am descoperit nodul (direct sau invers);
- a treia poziie va conine minimul dintre valoarea de pe poziia a treia a etichetei nodului prin
care am descoperit nodul pe care l etichetm la pasul curent i capacitatea rezidual a respectivului arc.
Vom eticheta sursa s cu (NULL, NULL, ), ntruct considerm sursa s ca nod iniial i deci ea nu
este obinut din nici un alt nod pentru a obine n final capacitatea rezidual minim.
210
Introducem sursa s n coad i pornim etichetarea nodurilor adiacente cu s.
Prin parcurgere bfs gsim nodul a i apoi nodul b.
Pentru a avem etichetarea (s, direct, 4) iar pentru b obinem (s, direct, 3). Capacitile reziduale
sunt egale n acest caz cu capacitile muchiilor, ntruct avem x
ij
= 0 pentru fiecare arc din digraf.
Vom scoate din coad nodul s i vom cerceta urmtorul nod etichetat, n cazul nostru a. Din a
putem ajunge n s, n b i n c, ns b i s sunt deja etichetate aa c l vom introduce n coad i eticheta
numai pe c. Eticheta pentru c este (a, direct, 4).
l scoatem pe a din coad i b devine primul nod din coad, etichetat i necercetat. Din b gsim
neetichetat nodul d, pe care l etichetm prin (b, direct, 3). l scoatem pe b i l cercetm pe c, din care l
obinem pe t, pe care l etichetm cu
(c, direct, 3).
Am ajuns n t, aadar am obinut un drum de cretere de la s la t care este:
P=sact.
Acest drum are capacitatea rezidual egal cu min(r
ij
)
ij-arc de pe drumul P
=3.
Aceast capacitate rezidual o adunm la fiecare x
ij
de pe drumul de cretere pentru fluxul x i
obinem un nou flux x
1
, pentru care repetm algoritmul.
x
1
sa
= 3, x
1
ac
= 3, x
1
ct
= 3, restul arcelor avnd valorile anterioare (de la fluxul x).
Se eticheteaz din nou sursa s cu (NULL, NULL, ).
Din s descoperim nodurile a i b. Nodul a va fi etichetat cu (s, direct, 1) iar b cu (s,
direct, 3). Din a l descoperim pe c pe care l etichetm cu (a, direct, 1) i pe b care este etichetat
cu (a, direct, 1). Din c se descoper b, d i t. ns b era deja etichetat i t nu poate fi etichetat
ntruct c
ct
=3 =x
ct
. Aadar l etichetm numai pe d cu (c, direct, 1) i l introducem n coad. Deci
b devine urmtorul nod etichetat i necercetat, ns din b nu mai putem eticheta nici un nod. Din
d l descoperim pe t care poate fi etichetat cu (d, direct, 1).
ntruct l-am descoperit pe t, putem spune c am gsit un nou drum de cretere de la s
la t,
sacdt,
care are capacitatea rezidual 1.
Trebuie s aplicm din nou algoritmul, pentru fluxul x
2
obinut prin adugarea capacitii
reziduale la fluxul x
1
, pentru arcele din drumul de cretere obinut anterior. De data aceasta se
obine un flux cu valorile:
x
2
sa
= 4, x
2
ac
= 4, x
2
cd
= 1, x
2
dt
= 1, x
2
ct
= 3 iar restul rmn 0.
Etichetm din nou s cu (NULL, NULL, ). Din s i gsim pe a i pe b. Nodul a nu poate
fi etichetat ntruct c(sa) = x
2
sa
= 4 iar pe b l etichetm cu (s, direct, 3). Din b l obinem pe a, c
i d (s fiind deja etichetat). Pe a nu l putem eticheta deoarece de la b la a avem arc invers cu
valoarea asociat 0 , pe c l etichetm cu (b, invers, 3), i pe d cu (b, direct, min(c(bd)-x
2
bd
= 5,
e
3
(b)=3) ) = (b, direct, 3). Din c i obinem pe a i t. Pe a l etichetm cu (c, invers, 3), pe iar pe t
211
nu l putem eticheta deoarece avem capacitatea muchiei egal cu x
2
ct
=3. Nodul d devine primul
nod din coad i l descoper pe t care are eticheta (d, direct, min(c(dt)-x
2
dt
= 6, e
3
(d)=3) )= (d,
direct, 3). Am gsit un nou drum de cretere de la s la t:
sb dt
cu capacitatea rezidual 3. Se obine un nou flux x
3
cu valorile x
3
sa
= 4, x
3
sb
= 3, x
3
ac
= 4,
x
3
bd
= 3, x
3
cd
= 1, x
3
dt
= 4, x
3
ct
= 3 iar restul sunt 0.
Etichetm s cu (NULL, NULL, ). Din s i gsim pe a i pe b. Nodul a nu poate fi
etichetat ntruct c(sa) = x
3
sa
= 4 iar pe b de asemenea nu poate fi etichetat ntruct
c(sb)=x
3
sb
=3. Aadar nu mai putem obine un drum de cretere de la s la t i deci fluxul
obinut anterior este maxim.

x
3
ij
sunt reprezentate n figura de mai jos:


TEMA NR. 12
27 mai 2003

9. Fie v valoarea fluxului maxim n reeaua R = (G, c, s , t). Demonstrai c exist k-st drumuri n G, P
1
,
P
2
,, P
k
( 0 s k s |E(G)| ), i numerele reale nenegative v
1
, v
2
,, v
k
astfel nct x:E(G) R, definit
pentru orice arc ij prin x
ij
= 0+

e =
t
P ij t
t
v , este flux n R de valoare maxim v.

Soluie:
Vom demonstra aceast proprietate prin inducie dup numrul de arce pentru care fluxul are valoare
pozitiv, pentru un flux f de valoare maxim.
Pas de baz
n cazul n care fluxul nostru maxim are un singur arc, de valoare v
1
, pozitiv, este evident c
putem alege P
1
ca fiind chiar acest arc iar valoarea v
1
, valoarea asociat arcului x
st
.
212
Pas inductiv
Presupunem c la pasul curent i este adevrat proprietatea: pentru un flux f
i
obinut la pasul i,
dac adugm toate valorile v
1
, , v
i
, asociate irului P
1
,P
i
obinute pn la acest pas obinem un flux
de valoare maxim.
Vom demonstra c i pentru pasul i+1 dac alegem un st-drum direct P
i+1
i o valoare convenabil
obinem un nou flux f
i+1
care are aceeai proprietate cu fluxul f
i
.

Alegem arcul uv cu valoarea pozitiv cea mai mic pentru fluxul nostru f
i
i construim un drum
direct P
i+1
de la s la t care s conin i arcul uv astfel nct toate arcele de pe acest drum s aib valori
pozitive.
Considerm un flux f
i+1
care s conin arcele fluxului f
i
cu proprietatea c arcele care nu apar n
drumul P
i+1
vor avea valoarea pe care o au n fluxul f
i
iar arcele care apar n drumul P
i+1
vor primi valoarea
egal cu diferena dintre valoarea arcului respectiv pentru fluxul f i valoarea lui uv n fluxul f. Adugm
acest drum P
i+1
la irul de drumuri determinate pn la pasul curent iar valorea asociat lui va fi v
i+1
= f
uv
.
Noul flux obinut are valoarea egal cu valoarea lui f
i
, din care scdem v, de cte ori apare un arc din P n
fluxul f.

Cnd nu mai avem nici un arc cu valaore pozitiv n fluxul nostru ne putem opri i putem spune c
valoarea fluxului maxim este chiar suma din cerina problemei.

Am putea ncerca i o alt abordare a acestei probleme, i anume:
- putem gsi toate drumurile de cretere directe i, pornind de la un flux a crui valaoare o
iniializm cu 0, putem construi fluxul conform algoritmului lui Edmonds . Vom obine un flux cu
valoarea mai mic sau egal cu fluxul de valoare maxim;
- dac nu mai avem drumuri de cretere, nseamn c fluxul obinut este chiar cel maxim,
drumurile P
i
sunt drumurile directe descoperite iar valorile asociate sunt valorile care se adaug
la fiecare pas n algoritmul lui Edmonds.
- dac mai exist drumuri de cretere, care au arce inverse, transformm fiecare drum de cretere
obinut, n dou drumuri de cretere directe. Vom descoperi arcele inverse dintr-un drum de
cretere de la dreapta la stnga , i pentru fiecare arc invers obinut mprim drumul nostru de
cretere n 2 drumuri: unul direct (din care am scos deja toate arcele inverse, aflat la dreapta
arcului invers obinut) i un alt drum din care eliminm arcul invers de la pasul curent, ocolindu-l.
Noul drum de cretere este de fapt o concatenare a celor 2 drumuri: unul direct i unul care mai
poate avea nc arce inverse. De aceste arce inverse scpm la un pas ulterior.
- cnd nu mai avem drumuri de cretere putem spune c am gsit fluxul maxim. In final
vom obine numai drumuri de cretere directe n irul P
i
iar valorile lor asociate sunt
valorile cu care au contribuit aceste drumuri la construcia fluxului maxim.
10. Numim GP descompunere a grafului complet K
n
orice mulime A = {B
1
, , B
k(A)
}, unde: fiecare B
i

este subgraf bipartit complet al lui K
n,
orice dou grafuri B
i
i B
j
au mulimile de muchii disjuncte i
i =
213
1, k(A)
E(B
i
) = E(K
n
). Artai c orice
GP - descompunere a lui K
n
satisface inegalitatea k(A) > n 1.

Soluie:
1. Vom arta prin inducie c pentru n > 2, exist o GP - descompunere A
n
a lui K
n
a.. k(A
n
) = n
1.
Pasul de baz:
Pentru n = 2:

Graful K
2
este graf bipartit complet (K
1,1
), deci putem considera B = K
1,1
i
A = {B}. Evident, k(A
2
) = 1 = 2 1.
Pasul inductiv:
Presupunem afirmaia adevrat pentru k s n. Demonstrm pentru k = n + 1.
Fie K
n+1
.
Vom construi mulimea A astfel:
- se construiete un graf biartit B
1
= (S, T; E
1
) unde: S = {u}, u un nod oarecare din V(K
n
), T =
V(K
n
) - {u}. B
1
trebuie s fie graf bipartit complet, deci B
1
= K
1,n
.
- se construiete un nou graf G din care se elimin toate muchiile ce apar n B
1
. Deoarece B
1
=
K
1,n
, nodul u rmne nod izolat n G, deci nu va putea face parte dintr-un subgraf bipartit
complet. Aadar vom elimina i nodul u din G. Se constat c G devine subgraf indus al lui
K
n+1
i |G| = n, deci
G = K
n
. Dar, din ipoteza inductiv, pentru K
n
exist o GP - descompunere A
n
astfel nct
k(A
n
) = n 1. De asemenea, din construcie reiese c
E(B
1
) E(G) = u, deci, B e A
n
, E(B
1
) E(B) = u. n plus, tot din construcie, avem E(B
1
)
E(G) = E(K
n+1
). Aadar, mulimea
A
n+1
= {B
1
} A
n

este GP descompunere pentru K
n+1,
iar
k(A
n+1
) = 1 + k(A
n
) = 1 + n 1 = (n+1) 1.
Aadar, pentru orice n > 2, se poate construi o GP - descompunere A
n
a lui K
n
a.. k(A
n
) = n 1.
2. Vom arta c nu se poate construi pentru K
n
o GP descompunere A
n
pentru care k(A
n
) < n 1.

214
Observaie: Orice GP descompunere A
n
a grafului K
n
conine cel puin un graf bipartit B = (S, T;
E) pentru care |S| = 1 sau |T| = 1.
Demonstraie:
Reducere la absurd:
Presupunem c exist o GP-descompunere a grafului K
n
care nu are proprietatea de mai sus.
Observm c, orice nod poate aprea n cel mult (n 1) / 2 grafuri bipartite (deoarece cel puin
dou muchii incidente cu el apar ntr-un astfel de graf, iar mulimile de muchii ale grafurilor sunt
disjuncte).
Considernd un graf bipartit B, dac vom ncerca s gsim grafuri bipartite n care se afl
muchiile ce nu apar n B i care au proprietatea |S| > 1 i |T| > 1, vom constata c fie muchiile acestor
grafuri se suprapun, fieunele dintre aceste grafuri nu sunt complete.
Aadar nu este posibil o astfel de descompunere.

Lund n considerare observaia de mai sus, vom demonstra proprietarea cerut prin inducie:
Pasul de baz:
Pentru n = 2 propoziia de mai sus este evident (este necesar cel puin un subgraf bipartit pentru
acoperirea mulimii de muchii, al crei cardinal este nenul).
Pasul inductiv:
Presupunem afirmaia adevrat pentru k s n. Demonstrm pentru k = n + 1.
Fie K
n+1
.
Reducere la absurd:
Presupunem c exist o GP descompunere A
n+1
a acestuia pentru care k(A
n+1
) < (n + 1) 1.
ntruct am artat mai sus c orice GP descompunere A
n+1
a acestuia conine cel puin un graf
bipartit B = (S, T; E) pentru care |S| = 1 sau |T| = 1, exist un nod u n V(K
n
) astfel nct exist B n A
n+1
cu
S = {u} sau v = {u}.
Vom elimina din K
n
acest nod u i toate muchiile care l leag de celelalte noduri din graf. Se va
obine astfel graful K
n
. Putem obine o GP descompunere pentru K
n
din GP descompunerea grafului de
mai sus, considernd intersecia dintre E(K
n
) i fiecare graf bipartit din A
n+1
. Evident, intersecia dintre B i
E(K
n
) este vid, deci nici un subgraf al acestuia nu va aprea n acest A
n
. Aadar, k(A
n
) s k(A
n+1
) 1, adic
k(A
n
) s n 2, ceea ce contrazice ipoteza inductiv.
215
Aadar presupunerea fcut este fals. Pentru orice n, orice GP descompunere A a lui K
n
are
k(A) > n 1.
3. Fie G = (V, E) un graf i f : V V cu proprietatea c uv e E: f(u)f(v)e E. Demonstrai c e(G) s
|f(V)|. Artai c pentru orice graf G = (V, E) exist funcii f cu proprietatea de mai sus astfel nct
|f(V)| s A(G) + 1.
Soluie:
1. Demonstrm c e(G) s |f(V)|.
Reducere la absurd:
Presupunem c, pentru graful G = (V, E), exist o funcie f a.. e(G) > |f(V)|.
Fie A _ V clic cu |A| = e(G).
i, j e A, ij e E f(i)f(j)e E.
f(A) _ f(V) i e(G) > |f(V)| e(G) > |f(A)| |A| > |f(A)|
-u, v e A a.. f(u) = f(v) = w e V.
Dar u, v e A i A clic
uv e E f(u)f(v)e E (din definitia funciei f) wwe E contradicie.
Presupunerea fcut este fals e(G) s |f(V)|.
2. Artm c exist grafuri pentru care orice funcie f cu proprietatea de mai sus are |f(V)| >A(G)
+ 1.
Vom considera graful C
5
.
A(C
5
) = 2.
Vom arta c este imposibil construcia unei funcii f cu proprietatea de mai sus i cu |f(V)| s 3.

216
Construim funcia f:
Fie f(1) = v1.
Fie f(2) = v2. Evident, v2 v1, deoarece 12 este muchie, deci i v1v2 trebuie s fie muchie.
Fie f(3) = v3.
v3 v2, deoarece 23 este muchie, deci i v2v3 trebuie s fie muchie.
Presupunem c putem alege v3 = v1.
Fie f(4) = v4.
v4 v1, deoarece 34 este muchie, deci i v3v4 trebuie s fie muchie, adic v1v4 trebuie s fie
muchie (am ales v3 = v1).
Presupunem c putem alede v4 = v2.
Fie f(5) = v5.
v5 v1, deoarece 51 este muchie, deci i v5v1 trebuie s fie muchie.
v5 v2, deoarece 45 este muchie, deci i v4v5 trebuie s fie muchie, adic v2v5 trebuie s fie
muchie (am ales v4 = v2).
ntruct v1v5, v2v5, v1v2 sunt muchii n C
5
, am obine c graful de mai jos este subgraf al lui C
5
,
ceea ce este imposibil.

Vom face un pas napoi, alegnd alt valoare pentru v4.
Vom alege v4 v1 i v4 v2.
Fie f(5) = v5.
v5 v1, deoarece 51 este muchie, deci i v5v1 trebuie s fie muchie.
v5 v4, deoarece 45 este muchie, deci i v4v5 trebuie s fie muchie.
Dac vom alege v5 = v2, atunci, ntruct v1v2, v2v4, v1v4 sunt muchii n C
5
, am obine c graful
de mai jos este subgraf al lui C
5
, ceea ce este imposibil.
217

Mai facem un pas napoi i alegem pentru v3 o valoare diferit de v1.
Fie f(4) = v4.
v4 v3, deoarece 34 este muchie, deci i v3v4 trebuie s fie muchie.
Presupunem c putem alege v4 = v2.
Fie f(5) = v5.
v5 v1, deoarece 51 este muchie, deci i v5v1 trebuie s fie muchie.
v5 v2, deoarece 45 este muchie, deci i v4v5 trebuie s fie muchie, adic v2v5 trebuie s fie
muchie (am ales v4 = v2).
Presupunem c putem alege v5 = v3.
ntruct v1v3, v2v3, v1v2 sunt muchii n C
5
, am obine c graful de mai jos este subgraf al lui C
5
,
ceea ce este imposibil.

Alegem alt valoare pentru v4. Deoarece acesta nu poate fi v3 sau v2, dup cum am artat, vom
alege v1 (pentru a ne ncadra n numrul de valori cerut, adic 3).
Deci v4 = v1.
Deoarece, n aceste condiii, v1v2, v2v3, v3v4 (adic v3v1) sunt muchii n C
5
, conform definiiei lui
f, obinem c graful de mai sus este subgraf n C
5
, ceea ce este evident imposibil.

Am artat deci c, indiferent de modul de alegere a valorilor pentru f, nu se poate gsi pentru C
5

o astfel de funcie pentru care |f(V)| s 3.

218
4. Fie G=(V, E) un graf. Numim partiie special orice bipartiie (S, T) a lui V astfel nct subgraful indus
de T n G este neconex i subgraful indus de S n complementarul grafului G este neconex. Artai c
graful circuit C
n
(n>2) nu are partiii speciale. Descriei un algoritm polinomial care s testeze dac un
graf dat are partiii speciale.

Soluie:
Considerm T o mulime de noduri ale circuitului, astfel nct subgraful indus de T n G
s fie neconex. Oricum am alege aceast mulime putem face urmtoarea observaie, care se
bazeaz pe neconexitatea subgrafului:
exist cel puin o pereche de noduri din T : (v
1
, v
2
) astfel nct, ntre v
1
i v
2
, s nu
existe drum in subgraful indus de mulimea T.
Fie u i v o pereche de noduri din T cu aceast proprietate, alese astfel nct pe unul din
cele 2 drumuri de la u la v n circuitul C
n
s nu existe alte noduri din T. Este evident c putem
gsi 2 noduri cu aceast proprietate ntruct dac alegem 2 noduri oarecare x i y ntre care nu
exist drum n <T>
G
nseamn c ntre acestea, n circuitul C
n
, exist cel puin un nod din S, pe
fiecare din cele 2 drumuri de la x la y (noduri care ntrerup cele 2 drumuri ). Alegem unul din
drumurile de la x la y n C
n
. Dac pe acest drum mai exist cel puin un nod z din T, atunci z
devine noul x i verificm pe drumul de la noul x la y dac mai avem noduri din T. Aplicm
aceast metod pn cnd nu mai avem nici un nod din T ntre x i y. Dar valorile iniiale ale lui
x i y au fost alese n aa fel nct s nu existe drum de la x la y n <T>
G
i deci noii x i y
obinui nu sunt adiaceni (ntre ei trebuie s existe cel puin un nod din S n circuitul C
n
)
Nodurile x i y obinute sunt 2 noduri cu proprietatea enunat mai sus, i deci le putem considera
u, respectiv v. Fie w
1
,, w
k
nodurile din S aflate ntre u i v n C
n
(pe drumul de la u la v pe care nu mai
exist noduri din T). Evident i cellalt drum de la u la v din C
n
conine noduri din S care s-l ntrerup. Fie
t
1
, , t
r
aceste noduri din S. In graful iniial C
n
,

nici unul dintre nodurile dintre w
1
,, w
k
nu este adiacent
cu nici unul dintre nodurile t
1
, , t
r
, deoarece sunt de o parte i de alta a lui u i v. Deci n graful
complementar al lui C
n
avem muchie ntre fiecare nod t
i
i fiecare nod w
j
. Aceste noduri acoper toat
mulimea S i avem urmtoarea proprietate: de la fiecare nod w
i
se poate ajunge la fiecare nod t
j
, de la
fiecare nod t
i
se ajunge la un alt nod t
s
printr-un nod w
l
(care evident este legat de amndou) i analog
pentru oricare dou noduri w
j
, w
s,
care sunt legate tot printr-un oricare nod t
i
. Aadar ntre oricare 2
noduri din S exist drum n subgraful indus de S n graful complementar lui C
n
. Deci acest subgraf este
conex.
Oricum am alege o mulime T care s genereze un subgraf neconex n C
n
, mulimea S obinut
genereaz un subgraf conex n graful complemetar. Deci pentru orice graf circuit C
n
cu n>2 nu avem
partiii speciale. Pentru n egal cu 2 nu putem alege o mulime T care s genereze un subgraf neconex
(ntruct mulimea T nu poate avea dect cardinalul 1 i deci am obine o singur component conex).

219
ntruct nu am reuit s obinem un algoritm care s determine n timp polinomial o partiie
special pentru un graf dat vom utiliza un algoritm de tip backtracking , deci un algoritm care s rezolve
n timp exponenial.
Reinem ntr-un vector caracteristic v, de dimensiune egal cu numrul de noduri ale grafului
nostru G, valori de 0 i 1 care simbolizeaz dac un nod aparine sau nu mulimii T. Spunem c un nod i
aparine lui T dac v*i+ are valoarea 0. n cazul n care nodul j nu aparine lui T atunci pe poziia j n v vom
avea 1 i deci acest nod va aparine lui S. Prin algoritmul backtracking pe care l vom prezenta mai jos
vom ncerca toate posibilitile n care putem forma mulimea T. Vom verifica dup ce construim vectorul
v fcut dac se pstreaz proprietatea de neconexitate n subgraful determinat de mulimea T n G i n
subgraful determinat de mulimea S n complementarul lui G. Se vor ncerca toate posibilitile de creare
a vectorului cu valori de 0 i 1. Condiia este s avem cel puin 2 valori distincte . Pornim cu vectorul
umplut cu 1. Dac cele 2 mulimi de la pasul curent respect proprietatea algoritmul se oprete i se
anun c graful G admite partiii speciale.

procedure verificare_partitii_speciale ()
begin
/*iniializm vectorul v cu valori de -1
if (a[0][1] = 1 ) then
if ( verifica_neconexitate(1) = true ) //verificm neconexitatea pentru T
then
afiseaz am gsit o partiie special
return
i 0
/* ct timp nu am epuizat toate posibilitile intrm n bucl*/
while ( i>-1 ) do
ok false
while ( v[i] < 1 and ok = false ) do
v[i] v[i]+1
if ( i > n-3) then
220
/* verificm dac nu avem toate elementele din urm cu
aceeai valoare i dac suntem pe n-2 i valoarea celorlalte elemente este 0 atunci v*n-2] va fi
setat pe 1 iar dac celelalte elemente au valoarea 1 atunci acesta va fi obligatoriu 0 (dac s-a
verificat deja aceast variant, atunci algorimtul se oprete ntruct nu mai avem nici o
variant de verificat); dac suntem pe poziia n-1 i suntem n situaia c n spate avem n-2
elemente cu aceeai valoare i unul de o valoare diferit, atunci i v*n-1] trebuie setat pe acea
valoare*/
if (i=n-2) then
if (toate elementele din urm au aceeai valoare val )
then
if ( val = 0 and v[i] = 1) then
v[i] 2
else
v[i] (val+1) mod 2
ok true
else ok true
else if (i=n-1) then
if (toate n-3 elemente din urm au aceeai valoare val i
unul are valoarea val1 ) then
if ( val1 = 0 and v[i] = 1) then
v[i] 2
else
v[i] (val+1) mod 2
ok true
else ok true
else ok true
if ( ok = true ) then
/* dac am gsit o valoare corespunztoare pentru poziia respectiv*/
221
if ( i=n-1 ) then
/* dac am completat vectorul pn la ultima poziie*/
if (verifica_neconexitate(1)=true and verifica_neconexitate(0) = true)
then
/* dac am gsit dou mulimi care corespund*/
afieaz graful admite partiii speciale
return
else
i i 1
/* ncercm s completm din nou poziiile din vector cu alte valori*/
else
/* trecem la poziia urmtoare n vector i ncercm s o completm cu
o nou valoare*/
i i + 1
v[i] -1
/* dac nu mai putem continua ne ntoarcem */
else i i - 1

/* dac am ajuns pn aici, nseamn ca nu am gsit nici o partiie special*/
afieaz graful nu admite partiii speciale
end;

Funcia de verificare a neconexitii ( se face n timp liniar n+m, unde n este numrul de vrfuri pentru
care se verific neconexitatea iar m este numrul de muchii ntre aceste vrfuri ) este funcia
standard de determinare a componentelor conexe, cu precizarea c se verific neconexitatea numai
pentru subgraful determinat de acele noduri care au valoarea n vectorul v egal cu valoarea
transmis drept parametru funciei. Pentru valoarea 0 (elementele din T) verificm neconexitatea n
graful G iar pentru valoarea 1 (elementele din S) verificm neconexitatea n graful G (de fapt lucrm
222
cu negaiile valorilor din matricea de adiacen). Se gsesc de fapt componentele conexe pentru
subgraful dorit i n momentul n care se descoper 2 componente conexe, funcia returneaz true.
Altfel returneaz false.

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