You are on page 1of 3

Tema Algoritmica Grafurilor

Ioana Bondar (B4), Andrei Onea (B4)


9 Ianuarie 2018

Problema 1
Pentru a calcula multimea inchisa de pondere maxima, se aplica o transformare
intr-o retea (digraf). Doua noduri auxiliare sunt adaugate digrafului: un nod
de start s, din care pleaca arce catre fiecare nod de pondere negativa si un
nod terminal t extremitate finala a unor noi arce cu extremitatile initiale in
fiecare nod de pondere pozitiva din digraful initital. Asignam fiecarei muchii o
capacitate. Noile arce adaugate vor avea capacitatea egala cu valoarea in modul
a ponderilor nodurilor adiacente din graful initial.
Toate celelalte arce vor avea capacitate infinita. Pe aceasta retea se aplica
algoritmul de calculare a fluxului maxim Ford-Fulkerson. Nodurile de cost neg-
ativ vor fi comparate cu niste tunele ce permit stocarea apei, iar arcele vor fi
comparate cu niste tevi ce fac legatura intre sursa apei, tuneluri si locul unde
se varsa apa. Fluxul apei poate avea o singura directie prin tevi si tevile au o
capacitate maxima de apa care poate circula prin ele la un moment dat (asa
cum am definit anterior). Pentru a atinge aceasta capacitate maxima unele
tevi vor fi saturate (cantiatea de apa ce curge prin ele este maxima). Tevile de
capacitate x care au fost saturate vor fi eliminate si inlocuite cu o noua teava
de capacitate x, cu sensul opus (conform algoritmului). Urmand algoritmul lui
Ford-Fulkerson, toate tunelele care pot fi accesate din sursa sunt identificate ca
apartinand multimii inchise de cost/pondere maxima. Reducerea se face poli-
nomial in O(n + m) intrucat pentru fiecare nod se mai creeaza cate un arc catre
(dinspre) s respectiv t si fiecarui arc din graful initial i se asigneaza o capacitate
infinita, unde n este numarul de noduri si m este numarul de arce.

Problema 2
Daca d : d1 , d2 , ..dn este secventa grafica, putem spune fara pierdere a generali-
tatii ca orice permutare a vectorului d este si ea o secventa grafica. (de fapt, se
realizeaza doar o redenumire a varfurilor).
Alegem dk astfel incat sa aiba gradul cel mai mare.
Fie urmatorul aranjament al nodurilor grafului:

s : d1 , d2 , ...., dn , cu d1 >= d2 >= ... >= dn

1
s1 : d2 − 1, d3 − 1, ..., dd1 +1 − 1, dd1 +2 , ..., dn
1. Presupunem ca s1 este secventa grafica. Astfel, conform definitiei, exista
un graf G1 de ordin n − 1 cu secventa gradelor s1 , deci putem nota nodurile
V (G1 ) : v2 , v3 , ....vn astfel incat

deg(vi ) = di − 1 pentru 2 ≤ i ≤ d1 + 1 sau

deg(vi ) = di pentru i = d1 + 2, d1 + 3, ...n


Tot ce am facut este sa notam nodurile a.i. sa cream corespondenta
Acum putem construi un graf nou G dupa cum urmeaza: Pornim cu graful
G1 Adaugam un varf nou v1 Adaugam d1 muchii de forma:

(v1 vi )2 ≤ i ≤ d1 + 1

Acum cu siguranta in G deg(vi ) = di 1 ≤ i ≤ n Astfel s este grafica


2. a. Presupunem ca s este secventa grafica. Deci exista M = multimea de
grafuri de ordin n cu secventa gradelor varfurilor identica cu s. Fie G apartinand
M a.i. V (G) = v1 , ..., vn cu deg(vi ) = di , 1 ≤ i ≤ n si suma gradelor nodurilor
adiacente lui v1 maxima
Demonstram ca v1 este adiacent tuturor varfurilor cu gradele d2 , d3 , ...dd1 +1
dem: Presupunem ca ar exista noduri vr si vs cu deg(vr ) > deg(vs ) a.i. v1 este
adiacent cu vs and v1 nu este adiacent vr Cum deg(vr ) > deg(vs ) ⇒ ∃vt a.i. vt
este adiacent la vr si nu este adiacent cu vs Eliminam muchiile: (v1 vs ) si vr vt ;
Adaugam muchiile v1 vr si vs vt ; Astfel am obtinut un Graf G0 cu aceeasi secventa
a gradelor ca a lui G DAR suma gradelor nodurilor adiacente lui v1 in G0 este
mai mare decat cea din G, ceea ce este FALS deoarece contrazice proprietatea
grafului G ales Deci v1 este adiacent nodurilor cu gradele d2 , d3 , ...dd1 +1 . Astfel
graful G \ v1 are secventa d2 − 1, d3 − 1, ...dd1 +1 − 1, dd1 +2 , ...dn , adica secventa
s1, deci s1 este grafica
b. Dupa cum am demonstrat la punctul a, s este secventa grafica daca si
numai daca s1 este secventa grafica, s : d1 , d2 , ..., dn , d + 1 ≥ d2 ≥ ... ≥ dn si
s1 : d2 − 1, d3 − 1, ..., dd+1 − 1, dd1 +2 , ..dn Pe acelasi principiu, s1 este secventa
grafica daca si numai daca s2 este secventa grafica, unde s2 este obtinut in
aceeasi maniera in care s1 a fost obtinut din s. La modul general: si este
secventa grafica daca si numai daca si+1 este secventa grafica, unde si+1 este
obtinut prin transformarea mai sus mentionata. Aceasta transformare scade
numarul elementelor din secv cu o unitate pana ce se ajunge la cazul de baza:
o secv formata din doar doua grade.
Fiecare transformare se realizeaza in O(n) si avem n − 2 transformari. Astfel
complexitatea acestui algoritm este O(n2 )
Alternativ, conditie necesara
Pk si suficienta ca oP secventa sa fie grafica este ca
n
inegalitatea Erdos-Gallai i=1 di ≤ k(k + 1) + i=k+1 min(di , k) sa fie ade-
varata pentru orice k=1;n Un algoritm care verifica inegalitatea pentru fiecare
k apartine clasei O(n2 ) se fac n iteratii pentru testarea inegalitatii, iar testarea
inegalitatii la randul ei se face in maxim n pasi, deci O(n2 )

2
Problema 3
a. Cum in reteaua data sunt n noduri adiacente cu s si fiecare arc poate fi utilizat
o singura data (intr-un drum pentru aflarea fluxului), consecinta a faptului ca
fiecare arc are capacitatea 1, vor exista maxim n drumuri distincte de la s la t.
(1) Modelam nodurile dintre s si t pe o matrice astfel:

v00 v01 v02 ... v0n

v10 v11 v12 ... v1n


.....................
vn0 vn1 vn2 ... vnn
Alegand drumurile s, vi1 , vi2 , vi3 ... vin , 0 ≤ i ≤ n gasim un flux de valoare n;
(2)
(1), (2) ⇒ valoarea fluxului maxim din retea este n.
b. Fie P drumul s, v00 v01 , v11 , v12 , v22 ... v(n−1)(n−1) , v(n−1)n , vnn . Dupa
parcurgerea acestui drum: (1) Fluxul va avea valoarea 1, (2) graful se separa
in doua componente neconexe si nu mai exista niciun drum de la s la t. Astfel
valoarea fluxului ramane 1.