Documente Academic
Documente Profesional
Documente Cultură
| > |M|.
14
Figura 1.3.6
Cuplaj Perfect
Def. 1.3.7
Transversal . O transversal K din G este o mulime de vrfuri K V(G) cu
proprietatea c orice muchie din G are cel puin unul din vrfuri n ea.
Obs : Notm cu o transversal de cardinal minim din G
Def. 1.3.8
Fie G=(V,E) un graf simplu i X V, notm cu N
G
(X) mulimea nodurilor
adiacente celor din X.
(d) Concepte utilizate pentru grafuri bipartite
Def. 1.3.1
Graf bipartit .Un graf G=(V,U) se numete bipartit dac exist dou mulimi nevide
A, B astfel nct V=A U B, AB = i orice muchie a lui G are o extremitate n A iar
cealalt n B.
Obs : Pentru un graf bipartit G=(V,U) cu mulimea nodurilor dat de partiiile
mulimii V : A i B , mulimea muchiilor E vom folosi notaia G=( A U B, E).
15
Figura 1.3.7
Def 1.3.2
Graf bipartit complet. Un graf bipartit G=( A
1
U A
2
, E), este bipartit complet dac
fiecare nod din mulimea A este adiacent cu toate nodurile din B si reciproc.
Capitolul 2
Cuplaje n Grafuri Bipartite
Presupunem c ni se d un graf i trebuie s gsim n el ct mai multe muchii
independente. ntrebarea asta mi-a atras atenia imediat dup lecia iniiativ n cuplaje
de la facultate n care ni s-au prezentat de ctre domnul profesor noiunile introductive
premergtoare. Cum s procedm? Vom reui s distingem toate muchiile grafului
astfel? Dac nu, cum putem fi siguri c nu avem o soluie? n mod surprinztor aceast
problem banal n aparen st la baza multor aplicaii, mbogeste semnificativ Teoria
Grafurilor.
16
S lum n considera urmtorul exemplu din realitate : la o serat particip o
mulime B de n biei i o mulime F de n fete. Se tie c fiecare biat cunoate
exact k fete i c fiecare fat cunoate deasemenea exact k biei.
Se poate organiza o repriz de dans astfel nct fiecare dintre participani
s danseze cu o cunotin a sa? n plus, se pot organiza k astfel de reprize de
dans n care fiecare participant s danseze pn la final cu toate cunotinele sale.
Rspunsul ne-a fost pentru prima dat oferit de ctre Hall(1935).
Dac considerm B- mulimea bieilor i F mulimea fetelor putem construi
graful G=(B F, E) n care muchiile sunt formate de acele perechi {b,f} cu bB
i fF cu proprietatea c b i f se cunosc atunci obinem un graf bipartit k-
regulat iar mulimii perechilor ce evolueaz ntr-o repriz de dans cu proprietile
din enun i corespunde un cuplaj perfect n G, iar mulimii celor k reprize de
dans i corespunde o descompunere n k cuplaje perfecte a mulimii muchiilor lui
G.
Teorema lui Hall ne ofer o condiie necesar i suficient pentru existena unui
cuplaj perfect ntr-un graf bipartit. Putem demonstra acest rezultat folosind lanuri
alternante sau teorema lui Knig(1931) : n orice graf bipartit cardinalul cuplajului
maxim este acelasi cu al transversalei de cardinal minim.
Pentru descompunerea n cuplaje perfecte a mulimii muchiilor unui graf bipartit
ne vom folosi de teorema lui Bernstein i alte cteva rezultate intermediare.
n demonstrarea a numeroase aplicatii teoretice ne vom folosi de caracterizarea
cuplajelor de cardinal maxim a lui Berge(1957) folosind lanuri M-alternante: Un cuplaj
M este maximal dac i numai dac nu mai exist nici un lan M-alternant deschis.
Numim transfer de-a lungul lanului M-alternant deschis P operaia prin
care cuplajul M se transform ntr-un cuplaj M prin nlocuirea muchiilor sale din
lanul P cu cele ale lanului P care nu-i aparin ceeace formal se poate scrie
astfel: M = M E(P). Astfel problema gsirii unui cuplaj maximal poate fi redus la
gsirea unui lan M-alternant deschis dac exist.
2.1 Caracterizarea Cuplajelor de Cardinal Maxim a lui Berge
Propoziie:
Fie M un cuplaj n graful G=(V,E) i P un lan M-alternant deschis.
Numim transfer de-a lungul lanului M-alternant deschis P operaia prin care
cuplajul M se transform ntr-un cuplaj M prin nlocuirea muchiilor sale din
lanul P cu cele ale lanului P care nu-i aparin ceeace formal se poate scrie
astfel: M = M E(P). Cardinalul noului cuplaj va fi ,M,=,M,+1.
Prin operaia de transfer am obinut un cuplaj cu un cardinal strict mai mare dect
cel anterior. Aceast proprietate reduce gsirea unui cuplaj maximal la gsirea unui lan
alternant deschis.
17
2.2Teorema lui Berge
Teorem(Berge, 1957):
Fie G=(V,E) , E, un graf simplu i M E un cuplaj. Atunci M este un cuplaj
de cardinal maxim dac i numai dac nu exist nici un lan M-alternant deschis.
Demonstraie:
1.1Presupunem c M este un cuplaj maxim i c exist n graful G lanul
M-alternant deschis P :v
1
v
2
...v
k
. ntruct lanul este M-alternant cu ambele capete M-
nesaturate k este par i c muchiile v
2
v
3
, v
4
v
5
, ... v
k-2
v
k-1
sunt toate muchii ale cuplajului.
De asemenea rezult c muchiile v
1
v
2
,v
3
v
4
, ..., v
k-1
v
k
nu sunt muchii ale cuplajului
M.(Fig. 2.1)
Definim mulimea de muchii M
1
v
2
v
3
, v
4
v
5
, ... v
k-2
v
k-1
) { v
1
v
2
,v
3
v
4
, ...,
v
k-1
v
k
}. Vom demonstra c M
1
este cuplaj.
Muchiile lui M
1
E(P) sunt independente una fa de alta ntruct le regseam
i-n cuplajul iniial M. Dac o muchie din M
1
E(P) este incident cu una din mulimea
{ v
1
v
2
,v
3
v
4
, ..., v
k-1
v
k
} nu poate fi dect ntrunul dintre nodurile v
2
,v
3
,...,v
k-1
altfel lanul P
nu ar mai fi fost M-alternant deschis.
Cum muchiile v
1
v
2
,v
3
v
4
, ..., v
k-1
v
k
sunt independente obinem M
1
cuplaj i n
plus cardinalul lui M
1
va fi exact cu o unitate mai mare dect cel al lui M, contradicie cu
faptul c M era un cuplaj maxim.
v
1
v
2
v
3
v
4
v
5
v
6
v
k-2
v
k-1
v
k
Fig. 2.1
Pentru implicaia invers presupunem c G nu are lanuri M-alternante deschise i
c exist un cuplaj M
. Formal E(H) = M M
.
S analizm cteva dintre proprietile subgrafului H. ntruct fiecare nod al su
este incident cu cel mult o muchie din M i cel mult o muchie din M
gradul maxim n H
va fi 2. Datorit acestei proprieti orice component conex va fi un nod izolat, un lan
sau un ciclu.
Muchiile dintr-o component conex a lui H alternnd ntre M si M
vom aveam 4
tipuri de component conexe :
Ciclu M, M
saturat (component
tip (M, M
));
Lan M, M
, M
));
Cum cele dou cuplaje au un numr egal de muchii n componentele conexe de tip C i
de tip (M, M
) i cardinalul lui M
este strict mai mare dect cel al lui M rezult c avem
o component conex de tip (M
, M
O matrice permutare este matricea patratic ce are exact un singur element egal cu 1 pe
fiecare linie i coloan i 0 n rest. Evident orice matrice permutare este o matrice dublu
stocastic.
Teorem(Birkhoff 1946, von Neuman 1953)
Orice matrice dublu stocastic nenegativ se poate scrie ca o combinaie convex de
matrici-permutare.
Demonstraie:
Vom demonstra un rezultat mai general.
Fie A=(a
ij
) ,1 i j n, o mtrice patratic de ordin n ce satisface condiiile
|I| contradicie cu faptul c
.
Conform teoremei 2.3.1 exist un SRD j
1
S
1
, j
2
S
2
, .... j
n
S
n.
30
Considerm matricea permutare P = (p
ij
) cu p
ij
= dac i numai dac j = j
i
i = min{a
ij
| j
= j
i
i=1,2 , , n} i matricea A
= A - P. A
va avea mcar cu unul mai puine elemente
pozitive dect A i-n plus satisface relaiile
.
Aplicnd ipoteza de inducie obinem A
unde P
1
, P
2
P
s
sunt
matrici-permutare iar
1
,
2
...
s
0 cu
. Prin urmare,
A = P + A
= P +
unde
i demonstraia este
ncheiat.
Alegnd = 1 obinem rezultatul teoremei Birkhoff-von Neuman.
Capitolul 3
3.1 Teorema lui Tutte
O condiie necesar i suficient pentru ca un graf s fie perfect a fost enunat de
ctre Tutte. O component conex a lui G este par sau impar n funie de paritatea sau
imparitatea numrului de noduri ce o constituie. Notm cu o(G) numrul componentelor
conexe impare din G.
Teorem(Tutte, 1947)
Un graf G admite un cuplaj perfect dac i numai dac o(G-S)|S| pentru orice
S G.
Demonstraie:
=>
Presupunem c G admite un cuplaj perfect M i fie S G iar G
1
, G
2
, ...G
n
componentele impare din G-S.
31
G
i
, i=1,n va conine cel puin un nod u
i
care se va cupla cu un nod v
i
din S ntruct
nodurile din G
i
nu se pot cupla toate ntre ele fiind numr par, ntre G
i
i G
j
cu ij nu
exist muchii fiind componente conexe disjuncte.
Cum {v
1
,v
2
...,v
n
} S avem o(G-S)=n=|{v
1
,v
2
...,v
n
}||S|
Componentele impare din G Componentele pare
Figura 3.1.1
<=
Presupunem c G=(V,E) satisface o(G-S)|S| pentru orice S G dar nu admite
un cuplaj perfect. Atunci G este un graf parial al uni graf maximal G
*
ce nu admite
cuplaj perfect.
G-S va fi un graf parial al lui G
*
-S i o(G
*
-S)o(G-S) |S| pentru orice S
V(G
*
);
32
Pentru S= avem o(G*)=0, adic n= numrul de noduri din G
*
, este par.
Considerm mulimea U a nodurilor de grad n-1 n G
*
. Dac U=V atunci G
*
este graf
complet cu numr par de noduri i evident admite un cuplaj perfect. Prin urmare
presupunem c UV.
n continuare ne propunem s artm c G
*
-U este o partiie de grafuri complete.
Presupunem prin reducere la absurd c ar exista o component conex din G
*
-U care nu
este graf complet. Prin urmare exist nodurile x, y,z astfel nct xy E(G*) i yz E(G*)
dar xz E(G*); cum y U => exist un nod w G
*
-U astfel nct yw E(G
*
).(Situaia e
ilustrat n figura 3.1.2
Figura 3.1.2
Cum G
*
este un graf maximal coninnd nici un cuplaj perfect, G
*
+e va conine
un cuplaj perfect pentru orice muchi e E(G*). Fie M
1
i M
2
cuplajele perfecte n G
*
+xz
i G
*
+yw, respectiv .
33
(b)
M
1
linie ngroat
M
2
linie curbat
Figura 3.1.3
Fie H subgraful lui G
*
U {xz, yw}indus de M
1
M
2
d
[M1 M2 ]
(x) = d
[M1]
(x) + d
[M2]
(x) = 1+1=2 => Toate componentele conexe ale lui H vor fi
cicluri de lungime par.
Distingem dou cazuri:
(a) xz i yw se afl n componente conexe diferite ale lui H(Figura 3.1.3a). Atunci
dac zw se afl n ciclul C din H, muchiile lui M
1
n C , impreun cu muchiile lui
M
2
care nu sunt n C formeaz un cuplaj perfect n G
*
, contradicie.
(b)xz i zw se afl n aceeai component conex C a lui H. Datorit simetriei dintre x
i z , putem presupune c nodurile x, y, w, z apar n ordinea aceasta n C
(Figura 3.1.3b). Atunci muchiile din poriunea yw...z a lui C, mpreun cu muchia yz
i muchiile din M
2
ce nu se afl n poriunea yw...z a lui C constituie un cuplaj perfect
n G
*
. Contradicie.
34
ntruct ambele cazuri au dus la contradicii deducem c G
*
-U este o partiie de
grafuri complete.
Mai devreme am demonstrat c o(G
*
-U)|U|. Prin urmare avem cel puin |U|
componente conexe impare n G
*
-U. Construim un cuplaj perfect n G
*
astfel
Cuplm fiecare nod al componentelor conexe impare din G
*
-U cu cte un nod din U.
. Figura 3.1.4 ilustreaz cum se cupleaz componentele conexe pare din G
*
-U ntre
ele i numrul par de noduri din U rmase.
Componente Impare din G
*
-U Componente pare din G
*
-U
Figura3.1.4
ntruct G
*
s-a presupus a nu conine un cuplaj perfect am obinut contradicie
dorit. Astfel dovedeim c G admite un cuplaj perfect i demonstraie este ncheiat.
Prezentm un rezultat demonstrat prima dat de ctre Petersen n 1891, dar care
poate fi foarte uor dedus din Teorema lui Tutte.
35
3.2 Teorema lui Petersen
Teorem(Petersen, 1891)
Orice Graf 3-regulat conex fr muchii admite un cuplaj perfect dac nu conine
muchii critice.
Demonstraie:
Fie G=(V, E) un graf 3-regulat fr muchii i S G. Considerm G
1,
G
2
...G
n
componentele conexe impare din G-S i definim m
i
ca fiind numrul de muchii ce au un
capt n G
i
i cellalt n S , i=1,n.
Cum G este 3-regulat pentru orice i=1,n avem
Din relaia de mai sus obinem c
, adic m
i
este impar .
G neconinnd muchii critice => m
i
1 , m
i
impar deci m
i
3 ,i =1,n.
Din faptul c orice nod are gradul 3 obinem relaia :
Din ultimele dou relaii obinem c
De unde conform Teoremei lui Tutte G admite un cuplaj perfect.
3.3 Aplicaii
36
Propoziie 3.2.1
Un arbore conine maxim un cuplaj perfect.
Demonstraie:
Fie T = (V, E) un arbore oarecare. Avem dou cazuri.
I)Arborele nu conine un cuplaj perfect. n acest caz demonstraia este
ncheiat.
II)Arborele conine cel puin un cuplaj perfect.
Notaii : s(x) = nodul din care s-a ajuns n nodul x ntr-o parcurgere n
lime;
n acest caz considerm reprezentarea arborelui pe nivele, dupa o
parcurgere n lime pornind dintr-un nod oarecare. Nivelul rdcinii (nodul de
start n parcurgere) va fi notat cu 1.
Fie un nod v cu d
[ T ]
(v)=1 => muchia (v, s(v)) aparine cuplajului ntruct
nodul v nu are alt muchie prin care s aparin cuplajului.
Presupunem c exist 2 noduri v, u cu d
[ T ]
(v)=1, d
[ T ]
(u)=1 astfel nct
s(u)=s(v) => muchiile (v, s(v)) i (u, s(u)) sunt incidente, contradicie cu faptul c
ar aparine cuplajului.
Deci orice frunz din arborele nostru nu are frai. Prin urmare de pe ultimul
nivel al arborelui toate muchiile aparin cuplajului, iar penultimul nu contribuie cu
nici o muchie.
Ne mutm pe penultimul nivel n arborele nostru. Nici o muchie nu va
aparine cuplajului ntruct ar fi incident cu muchiile frunzelor, contradicie.
Nodurile de pe acest nivel trebuie s abin ns cuplajului i nu o pot face
dect prin muchi ce le leag de strmoul lor i ne aflm ntr-o situaie simetric
cu cea iniial.
Practic muchiile cuplajului vor aparine cuplajului , alternativ pe nivele,
ncepnd cu muchiile frunzelor ca n figura 3.2.1.
37
La fiecare pas modul de alegere al muchiilor fiind unic determinat cuplajul
va fi maxim unul , demonstraia fiind ncheiat.
Figura 3.1.2(Cuplajul perfect are muchiile ngroate)
Propoziie 3.2.2(V. Chungphaisan)
Un arbore T admite un cuplaj perfect dac i numai dac o(T-v)=1 oricare ar fi v
V.
Demonstraie:
=>
Fie T=(V, E) un arbore ce admite un cuplaj perfect.
Fie S={v} , unde v V este un vrf oarecare.
T, admind un cuplaj perfect, conform Teoremei lui Tutte avem o(T-S)|S|
, adic o(T-v)1.
Arborele T are un numr par de noduri ntruct fiecare muchie din cuplaul perfect
este descris de cte o pereche distinct de noduri.
38
Presupunem prin reducere la absurd c o(T-v)=0, adic Graful T-v are doar
componente conexe pare=> T-v are un numr par de noduri
Dar |T|=|T-v|+1 => |T| are un numr impar de noduri, contradicie.
Prin urmare o(T-v)=1 oricare ar fi v V.
<=
Fie T=(V, E) un arbore n care o(T-v)=1 oricare ar fi v V.
Considerm arborele T ca fiind reprezentat pe nivele, numerotarea fcndu-se de la
frunze ce se afl pe nivelul 1 pn la un nod x numit rdcin ce va avea nivelul n.
Presupunem c exist u
1
, u
2
...u
m
frunze din T astfel nct s(u
i
)=s(u
j
) , i =1,m j=i,m-
1 unde prin s(x) am notat nodul tat al lui x.
Graful T-s(u
1
) va avea m+1 componente conexe: m noduri izolate i un arbore.
Evident o(T-s(u
1
))m
Din ipotez o(T-s(u
1
))=1, rezultnd c m=1.
Demonstrm prin inducie dup k, nivelul nodurilor, c ntr-un arbore cu
proprietatea din enun nodurile ce se afl pe nivele pare au un singur fiu.
P(1) a fost demonstrat!
Presupunem P(2k) adevrat pentru orice nivel p2k i ne propunem s c i
P(2k+2) este adevrat.
Presupunem prin reducere la absurd c exist u
1
, u
2
...u
m
noduri situate pe nivelul
2k+2 astfel nct s(u
i
)=s(u
j
) , i =1,m j=i,m-1.
Graful T-s(u
1
) va avea m+1 componente conexe. Dintre acestea m vor fi subarbori
formai cu noduri ce se afl pe nivele strict mai mici dect 2k+2.
Fiecare nod aflat pe un nivel p2k, p numr par are un singur fiu deci nivele p+1,
p vor avea cte o singur muchie. Numrnd muchiile astfel obinem un numr par de
muchii. Componentele conexe fiind arbori, vor avea prin urmare un numr impar de
noduri.
Evident o(T-s(u
1
))m
39
Din ipotez o(T-s(u
1
))=1, rezultnd c m=1, sau c fiecare nod de pe nivelul 2k+2
are un singur fiui ipoteza de inducie este demonstrat.
Dac rdcina arborelui se afl pe un nivel impar , nseamn conform
celor demonstrate pn acum c arborele nostru are un numr par de muchii,
adic impar de noduri.
Fie v o frunz a lui T, atunci o(T-v) =1 conform ipotezei.
T-v va fi un subarbore a lui T cu |T-v|=|T|-1.
Prin urmare arborele T va avea un numr par de noduri , contradicie.
Astfel am demonstrat c rdcina se afl pe un nivel par.
Construcia unui cuplaj maximal este evident n acest moment: alegem
muchiile ale cuplajului, alternativ pe nivele, ncepnd cu cele care leag frunzele
de arbore.
Capitolul 4
4.1 Algoritmul Ungar
Introducere
Continum aceast lucrare prezentnd o problem din viaa cotidian care i va
gsi rezolvarea n mod firesc, n acest cadru al cuplajelor.
S presupunem c ntr-o companie avem un numr de m lucrtori i tot attea
locuri de munc. Fiecare loc de munc are specificul su i fiecare angajat este calificat
pentru unul sau mai multe dintre acestea. Problema const n a gsi o mprire a locurilor
de munc astfel nct fiecare angajat s fie repartizat conform uneia dintre calificrile
sale.
40
Rezolvare
Pentru a rezolva aceast problem modelm datele astfel
Notm mulimea lucrtorilor cu X= (x
1
, x
2
....x
n
) i mulimea locurilor de munc
cu Y = (y
1
, y
2
....y
n
).
Construim , cu ajutorul acestora, graful bipartit G =(X
Y, E) unde
e =(x
i
, y
j
) E dac i numai dac lucrtorul x
i
este calificat pentru locul de munc y
j
.
Problema se reduce astfel la determinarea unui cuplaj perfect al grafului G.
n condiiile acestei probleme Teorema lui Hall asigur existena unui astfel de
cuplaj. Pentru determinarea lui vom folosi Algoritmul Ungar. Acesta decide dac, n
general un graf bipartit admite un cuplaj perfect sau nu. n cay afirmativ metoda
determin un astfel de cuplaj iar n caz contrar aceasta returneaz (conform Teoremei lui
Hall) o submulime S X cu proprietatea c :|N
G
(S)|<|S|.
Algoritmul pornete cu un cuplaj arbitrar M(de exemplu, prima muchie n ordinea
lexicografic a etichetelor nodurilor). Dac aceasta satureaz toate nodurile mulimii X,
atunci algoritmul se oprete, pentru c a fost determinat un cuplaj perfect. Altfel, se alege,
n ordinea etichetelor, un nod z X, M-nesaturat i se ncearc construirea unui lan M-
alternant deschis cu extremitatea iniial n nodul z ales. Mai nti se alege un (primul)
vecin (nod adiacent) y al lui z. Dac acesta este M-nesaturat, am aflat deja un lan M-
alternant deschis de lungime unu, cu extremitatea iniial n nodul z ales i extremitatea
final n y.
Astfel adugm lanului L muchia zy din E-M, muchia yz
din cuplajul M i
continum procedeul cu nodul z
= M E(L)
M:= M
43
Figura 3.3.1
Pornim cu M = x
1
y
1
;
X saturat ?
NU: z = x
2
, S ={ x
2
}, T =
N(S) = T ?
NU : y = y
2
; L=[x
2
y
2
]
y- M saturat ?
NU : M
= [x
1
y
1
, x
2
y
2
];
M
= [x
1
y
1
, x
2
y
2
];
X saturat ?
NU: z = x
3
, S ={ x
3
}, T =
N(S) = T ?
NU : y = y
1
; L=[x
3
y
1
]
Y- M saturat ?
DA: z=x
1
; L=[x
3
y
1
, y
1
x
1
];
S ={ x
3
, x
1
}, T={ y
1
}
N(S) = T ?
NU : y = y
3
; L=[x
3
y
1
, y
1
x
1
, x
1
y
3
]
Y- M saturat ?
DA: M
=[x
1
y
3
, x
2
y
2
, x
3
y
1
];
M=[x
1
y
3
, x
2
y
2
, x
3
y
1
];
44
X saturat ?
NU: z = x
4
, S ={ x
4
}, T =
N(S) = T ?
NU : y = y
3
; L=[x
4
y
3
]
Y- M saturat ?
DA: z=x
1
; L=[x
4
y
3
, y
3
x
1
];
S ={ x
4
, x
1
}, T={ y
3
}
N(S) = T ?
NU : y = y
1
; L=[x
4
y
3
, y
3
x
1
,x
1
y
1
]
Y- M saturat ?
DA: z=x
3
; L=[x
4
y
3
, y
3
x
1
,x
1
y
1
,y
1
x
3
];
S ={ x
4
, x
1
,x
3
}, T={y
3
, y
1
}
N(S) = T ?
NU: y = y
2
; L=[x
4
y
3
, y
3
x
1
,x
1
y
1
,y
1
x
3
, x
3
y
2
]
Y- M saturat ?
DA: z=x
2
; L=[x
4
y
3
, y
3
x
1
,x
1
y
1
,y
1
x
3
,x
3
y
2
,y
2
x
2
];
S ={ x
4
, x
1
,x
3
,x
2
}, T={y
3
, y
1
,y
2
}
N(S) = T ?
NU: y = y
4
; L=[x
4
y
3
, y
3
x
1
,x
1
y
1
,y
1
x
3
, x
3
y
2
, y
2
x
2
,x
2
y
4
]
Y- M saturat ?
NU: M
= [x
4
y
3
, x
1
y
1
, x
3
y
2
, x
2
y
4
];
X saturat ?
DA : STOP
45
Observaie: Cuplajul perfect al grafului G nu este unic, depinde de cuplajul
iniial. Un alt exemplu de cuplaj perfect pentru G este :
4.1 Algoritmul Kuhn(1955)-Munkres(1957)
Introducere
Am vzut c algoritmul ungar ne rezolv problema determinrii unui cuplaj
perfect ntr-un graf bipartit, de exemplu cel al asocierii lucrtori-locuri de munc. Dar ce
s-ar ntmpla dac nu am reine numai pentru ce loc de munc este calificat fiecare
lucrtor , ci i gradul specializrii sale ? n aceast situaie putem modela problema cu
ajutorul unui graf bipartit ponderat. Astfel este definit o funcie pondere w: X Y R
+
care asociaz fiecrei muchii a grafului un numr real pozitiv(altfel spus, aceast funcie
ne indic gradul de pricepere al lucrtorului x
i
pentru locul de munc y
j
prin valoarea
w(x
i
,y
j
)). Observm c, fr a restrmge generalitatea, aceast problem poate fi modelat
cu ajutorul unui graf bipartit complet n care, dac lucrtorul x
i
nu este calificat pentru
locul de munc y
j
muchiei x
i
y
j
i vom asocia ponderea 0, n celelalte cazuri ponderea fiind
strict pozitiv.
46
O prim soluie a acestei probleme ar fi generarea tuturor celor n! cuplaje perfecte
ale grafului bipartit complet i selectarea unuia optim dintre acestea. Pentru valori mari
ale lui n aceast soluie este, n mod evident, total ineficient. Algoritmul Kuhn-Munkres
reprezint o variant de rezolvare a acestei probleme acceptabil din punctul de vedere al
complexitii.
Pentru a-l putea prezenta avem nevoie de urmtoarea:
Definiie: Fie G=(X U Y, E) un graf bipartit complet. Spunem c o funcie
l: X U Y R
+
este o etichetare valid a nodurilor grafului G dac oricare ar fi x
din X i y din Y este ndeplinit inegalitatea l(x)+l(y) w(xy). Numrul l(x) l vom numi
eticheta nodului x.
Se poate observa c o astfel de etichetare valid exist ntotdeauna , spre
exemplu :
l(x)= max
yY
w(xy), dac x X;
l(y)=0, dac x X; (4.1.1)
Pentru o etichetare valid l vom nota cu E
l
mulimea de muchii din G
pentru care are loc egalitatea l(x)+l(y) = w(xy): E
l
={xy E| l(x)+l(y) = w(xy) }; i cu G
l
graful generat de mulimea de muchii E
l
. Legtura ntre acest subgraf al grafului G i
determinarea unui cuplaj perfect optim este dat de urmtoarea:
4.1.2Teorem: Fie l o etichetare valid a grafului G. Dac G
l
conine un cuplaj
perfect M
*
, atunci M
*
este un cuplaj optim pentru graful G.
Demonstraie:
Presupunnd c G
l
conine un cuplaj perfect M
*
, cum V(M
*
) = V(G
l
)=V(G)
rezult c M
*
este un cuplaj perfect i pentru graful G, atunci w(M
*
)=
eM*
w(e). Dar
cum toate muchiile M
*
conin o singur dat toate nodurile grafului G i fiind din
graful G
l
, ponderea unei muchii este suma etichetelor extremitilor ei, rezult
eM*
w(e)=
vV*
l(v). n schimb, pentru un cuplaj perfect oarecare al grafului G are
loc relaia anterioar cu inegalitate : w(e) =
eM
w(e)
vV*
l(v). Comparnd obinem
c w(M
*
)w(M), deci M
*
este un cuplaj optim al grafului G.
47
Aceste rezultat mpreun cu algoritmul Ungar prezentat n seciunea
anterioar reprezint instrumentele ce stau la baza construirii algoritmului Kuh
Munkres.
Pentru a aplica algoritmul, alegem pentru nceput o etichetare valid l a
nodurilor grafului G(de exemplu, cea dat de 4.1.1), determinm graful asociat
acestei etichetri, G
l
i alegem un cuplaj arbitrar al acestuia,M. Pentru acest
cuplaj, aplicm algoritmul ungar n vederea determinrii unui cuplaj perfect n G
l
,
care, conform Teoremei 4.1.2 ar fi cuplaj optim n graful G, deci algoritmul se
ncheie. Dac, n schimb, nu exist un cuplaj perfect n graful G
l
, nseamn c,
aplicnd algoritmul ungar am ajuns n situaia N
Gl
(S)=T i, n acest caz, efectum
o reetichetare a nodurilor grafului G dup urmtoarea regul :
-- calculm
l
= min
xS, y T
{l(x)+l(y) - w(xy)};
--alegem etichetarea valid
l(v)
l
, dac v S
l
= l(v) +
l
, dac v T
l(v), altfel
-- determinm noul graf G
l
.
Aceste trei operaii asigur apariia n graful G
l
a unui nou nod
nesaturat al mulimii Y cu ajutorul cruia extindem cuplajul M la un nou cuplaj M,
dup care este reluat algoritmul, pn la obinerea cuplajului optim.
Pentru o mai bun nelegere a acestui algoritm ilustrm schema logic.
48
NU
Exist lan L=[z,..,y]
M-alternant deschis
DA
Exist yz M
Exist y N
Gl
\T
NU
Exist y N(S)\T
DA
NU
Exist z X M-
nesaturat?
DA
START
Etichetar
e
Determinarea G
l
, un
cuplaj M n G
l
Este x-M
saturat n
G
l
?
STOP
M este
cuplaj
optim
Sz
T
N(S)=T
Calculul
pentru
l
,l
,G
l
LL U zy
Este Y-
M
saturat
ll
G
l
G
l
LL U yz
SS U z
T T U y
M
= ME(L)
MM
49
Capitolul VI
Aplicaie
Fie G = (X,U), # X = n 3 un graf complet nesimetric i fr bucle i
x n ij
a A
= ) ( matricea valorilor arcelor corespunztoare grafului.
Se cere proiectarea unui algoritm care s execute operaiile:
a) s genereze matricea
n n ij
b B
= ) ( a valorilor AB minimale ale arcelor
grafului utiliznd elementele matricei
x n ij
a A
= ) ( .
b) Utiliznd elementele matricei
n n ij
b B
= ) ( anterior generate s se precizeze
un circuit hamiltonian minimal
h
c i lungimea sa
h
l (valoarea sa
minimal).
Pentru algoritmul proiectat s se scrie un program corespunztor.
Cazuri particulare:
S se exemplifice textul temei pentru G= (X,U), 7 # = X , n care matricea A
este:
0 49 26 78 52 39 87
28 0 36 53 44 68 61
31 29 0 42 49 50 38
52 38 47 0 67 75 82
51 83 51 22 0 37 71
62 93 54 69 38 0 26
58 66 76 41 52 83 0
A
| |
|
|
|
|
=
|
|
|
|
|
\ .
Descrierea algoritmului:
Elementele
n n ij
a A n
= > ) ( , 3 precizate, pentru generarea matricei
n n ij
b B
= ) ( a elementelor AB minimale asociate grafului G propunem un
algoritm care generalizeaz Algoritmul ungar. Dac p, o permutare {1,2, , n}
care se scrie sau nu ca un produs de transpoziii, atunci graful permutare G
p
50
asociat se numete cuplaj n graful G. Dac graful permutare G
p
are o valoare
extremal (minim sau maxim), atunci cuplajul respectiv se numete extremal.
Fiind dat graful G= (X,U), 3 # > = n X simetric sau nu, cu sau fr bucle i
x n ij
a A
= ) ( matricea valorilor arcelor corespunztoare grafului algoritmul ungar
i propune s precizeze un cuplaj extremal al grafului G. Pentru a face o alegere
vom descrie algoritmul ungar pentru generarea cuplajelor minimale. Algoritmul
ungar are urmtoarele faze:
Faza 1. Generarea matricei
n n ij lc
a A
= ) (
'
a zerourilor pe linii i coloane
corespunztoare arcelor grafului G. Dac graful nu are bucle n toate operaiile
care vor fi descrise pentru orice matrice ce intervine nu vor fi luate n considerare
elementele diagonalei principale; iar dac graful admite i bucle, elementele
dup diagonal corespunztoare buclelor vor fi luate n considerare.
Dac linia n i , 1 = a matricei A are toate elementele nenule, atunci din
fiecare element al liniei se scade elementul de valoare minim corespunztoare
liniei respective.
Procednd n mod analog pentru orice linie care are proprietatea enunat
la sfritul prelucrrii din matricea A se va obine A
l
a zerourilor pe linie asociat
grafului G. Aceast matrice are proprietatea c pe fiecare linie a sa exist cel
puin un element de valoare 0.
Dac n matricea A
l
pe fiecare coloan a sa exist cel puin un element de
valoare 0 atunci A
lc
= A
l
reprezint matricea zerourilor pe linii i pe coloane
asociate grafului G.
Dac n matricea A
l
exist cel puin o coloan n j , 1 = n care toate elementele
sunt nenule, atunci din elementele coloanei respective se va scade elementul de
valoare minim al coloanei respective.
Procednd n mod analog cu toate coloanele matricei A
l
care au
proprietatea enunat la sfritul prelucrrii din matricea A
l
se va obine matricea
A
lc
a zerourilor pe linii i pe coloane asociate grafului G. Dac graful G este
simetric, algoritmul se reia ncepnd cu Faza 3, iar n caz contrar, se continu cu
Faza 2.
51
Faza 2. Generarea matricei
n n ij cl
a A
= ) (
2
a zerourilor pe coloane i pe linii
asociate matricei
c
A . Dac n j , 1 e este o coloan arbitrar a matricei A ale crei
elemente sunt toate nenule, atunci din elementele coloanei j se scade
elementul de valoare minim corespunztor coloanei.
Procednd n mod analog cu elementele oricrei coloane a matricei A care
au proprietatea enunat la sfritul prelucrrii, din matricea A se va obine
matricea A
c
a zerourilor pe coloane asociate grafului G. Matricea A
c
are
proprietatea c pe fiecare coloan a sa exist cel puin un element de valoare 0.
Dac pe fiecare linie a matricei A
c
exist cel puin un element de valoare 0,
atunci A
cl
= A
c
reprezint matricea zerourilor pe coloane i pe linii
corespunztoare grafului G. Dac n matricea A
c
exist cel puin o linie n i , 1 e
care are toate elementele nenule, atunci din elementele liniei i se scade
elementul de valoare minim corespunztor liniei respective. Procednd n mod
analog cu toate elementele matricei A
c
care au proprietatea enunat la sfritul
prelucrrii, din matricea A
c
se va obine matricea A
cl
a zerourilor pe coloane i pe
linii corespunztoare grafului G.
Faza 3. Generarea matricei
n n ij z
a A
= ) (
0
a zerourilor grafului G. Dac graful G
este simetric atunci j i a a a
ji ij ij
= = }, , min{
1 1 0
. Dac graful G este nesimetric,
atunci j i a a a
ij ij ij
= = }, , min{
2 1 0
. La sfritul execuiei acestor operaii se va obine
matricea
n n ij z
a A
= ) (
0
a zerourilor grafului G. Matricea A
z
anterior generat are
proprietatea c pe fiecare linie i pe fiecare coloan a sa exist cel puin un
element de valoare 0.
Faza 4. Generarea unui cuplaj minim. Cu ajutorul elementelor matricei A
z
se
caut cuplajele de valoare minim; ntr-un astfel de cuplaj trebuie s apar ct
mai multe arce ale grafului crora n matricea A
z
le corespund elemente egale cu
0.
Dac } max{ A a b
ij
e = , j i a b a
ij ij
= = , , ' '- =
ii
a , atunci aplicnd
algoritmul ungar anterior descris pentru
n n ij
a A
= ) ( la sfritul prelucrrii vor fi
precizate cuplajele maximale corespunztoare grafului G. Algoritmul pe care-l
propunem const n urmtoarele:
52
Se genereaz irul (l
1
, , l
n
) n care l
i
, n i , 1 = este cel mai mic element al
liniei i i irul (c
1
, , c
n
) n care c
j
, n j , 1 = reprezint cel mai mic element al
coloanei j din matricea A.
Fie }} , 1 / max{ }, , 1 / max{max{ n j c n i l m
j i
= = = . n matricea A exceptnd
eventual diagonala principal, toate elementele sale mai mici sau egale cu m vor
fi marcate cu A, din elementele strict mai mari dect m se va scade valoarea m.
La sfritul prelucrrii, din matricea A se va obine matricea A
l
. Dac n matricea
A
l
pe fiecare linie i pe fiecare coloan a sa exist cel puin dou elemente
marcare cu A atunci B = A
l
reprezint matricea valorilor ABminimale asociate
grafului G. n caz contrar, utiliznd elementele nemarcate cu A ale matricei A
l
se genereaz irul (l
1
, , l
n
) n care l
i
, n i , 1 = este cel mai mic element
nemarcat al liniei i din matricea A
l
i irul (c
1
, , c
n
) n care c
j
, n j , 1 = este cel
mai mic element nemarcat al coloanei j din matricea A
l
.
Fie }} , 1 / ' max{ }, , 1 / ' max{max{ ' n j c n i l m
j i
= = = . n matricea A
l
nlocuind toate
elementele nemarcate cu A i care sunt mai mici sau egale dect m cu B i
din elementele nemarcate cu A i care sunt strict mai mari dect m scznd m
la sfritul prelucrrii din matricea A
l
se va obine matricea
n n ij
b B
= ) (
elementelor ABminimale asociate grafului G.
Pentru generarea unui circuit hamiltonian minimal asociat grafului G se
scrie matricea latin corespunztoare elementelor marcate cu A din matricea
anterior generat ) ( A M
L
. Utiliznd elementele matricei ) ( A M
k
L
se determin
toate drumurile avnd aceeai lungime maxim n k s . Dac nici unul din
drumurile generate nu reprezint un circuit hamiltonian se completeaz fiecare
dintre aceste drumuri pn la obinerea unui circuit cu arce ale grafului G crora
n matricea B anterior generat le corespund elemente marcate cu B. Din
mulimea circuitelor hamiltoniene astfel generate se aleg circuitele hamiltoniene
care au aceeai valoare minimal l
h
. Acestea vor fi circuitele hamiltoniene
minimale asociate grafului G.
53
Pentru generarea circuitelor hamiltoniene maximale asociate grafului G se
aplic algoritmul anterior descris pentru elementele matricei
n n ij
a A
= ) ( anterior
precizate.
Cazuri particulare:
0 49 26 78 52 39 87
28 0 36 53 44 68 61
31 29 0 42 49 50 38
52 38 47 0 67 75 82
51 83 51 22 0 37 71
62 93 54 69 38 0 26
58 66 76 41 52 83 0
A
| |
|
|
|
|
=
|
|
|
|
|
\ .
A
l
:
1 2 3 4 5 6 7
1 - B A 26 B A 35
2 A - A 1 B 16 9
3 A A - B B B A
4 B A B - 15 23 30
5 B 31 B A - A 19
6 10 41 2 17 A - A
7 6 14 24 A B 31 -
m = 41
m= 52
d
h
= (5, 4, 2, 3, 1, 6, 7)
l(d
h
) = A + A + A + A + A + A + A
c
h
= (5, 4, 2, 3, 1, 6, 7, 5) l
h
= 6A + B = 224
Programul C:
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
54
#define MAXN 100
typedef struct
{
int n;
int a[MAXN][MAXN];
}matrice;
typedef struct l
{
int a[MAXN];
struct l *next;
}list;
typedef list *plist;
typedef struct
{
int n,k;
plist a[10][10];
}ML;
typedef ML *pML;
void ScadeM(matrice *b,int ml,int do_it,int A)
{
int i,j;
for(i=0;i<b->n;i++){
for(j=0;j<b->n;j++){
if(b->a[i][j]<=0)continue;
if(b->a[i][j]<=ml)
b->a[i][j]=A;
else
if(do_it)
b->a[i][j]-=ml;
}
}
}
void PuneLitera(matrice *b,int A,int *k)
55
{
int i,j,ml,mc,m1,m2,p1,p2;
ml=mc=b->a[0][1];
p1=p2=0;
for(i=0;i<b->n;i++){
m1=b->a[i][(i+1)%b->n];
m2=b->a[(i+1)%b->n][i];
for(j=0;j<b->n;j++){
if(b->a[i][j]<=0)continue;
if(b->a[i][j]<m1){
m1=b->a[i][j];
p1=i;
}
if(b->a[j][i]<m2){
m2=b->a[j][i];
p2=i;
}
}
if(ml<m1)
ml=m1;
if(mc<m2)
mc=m2;
}
if(ml<mc){
ml=mc;
*k=-1;
for(i=0;i<b->n;i++)
if((*k==-1)||
((*k>b->a[i][p1])&&(b->a[i][p1]>ml))){
*k=b->a[i][p1];
}
}else{
*k=-1;
for(i=0;i<b->n;i++)
if((*k==-1)||
((*k>b->a[p2][i])&&(b->a[p2][i]>ml))){
*k=b->a[p2][i];
56
}
}
ScadeM(b,ml,0,A);
}
int CelPutin2A(matrice *b,int A)
{
int i,j,p,q;
for(i=0;i<b->n;i++){
p=q=0;
for(j=0;j<b->n;j++){
if(b->a[i][j]==A)
p++;
if(b->a[j][i]==A)
q++;
}
if((p<2)||(q<2))
return(0);
}
return(1);
}
void CopyMatrix(matrice *a,matrice *b)
{
*b=*a;
}
void die(char *s)
{
printf("%s",s);
exit(1);
}
void PuneSimplu(int i,int j,list **a)
{
list *b;
if(*a!=NULL){
fprintf(stderr,"Hmm, matricea contine deja elemente?\n");
return;
57
}
b=(list *)malloc(sizeof(list));
if(!b){
die("Memorie insuficienta\n");
}
b->next=(*a);
b->a[0]=i;
b->a[1]=j;
*a=b;
}
void GenerareML(matrice *a,ML *m)
{
int i,j;
for(i=0;i<a->n;i++){
for(j=0;j<a->n;j++){
if(a->a[i][j]){
PuneSimplu(j,i,&m->a[i][j]);
}
}
}
}
void GenerareDupaA(matrice *b,ML *m,int A)
{
int i,j;
matrice a;
CopyMatrix(b,&a);
for(i=0;i<a.n;i++)
for(j=0;j<a.n;j++)
if(a.a[i][j]!=A)
a.a[i][j]=0;
else
a.a[i][j]=1;
GenerareML(&a,m);
}
void Citire(matrice *a)
58
{
int i,j;
printf("n=");
scanf("%d",&a->n);
for(i=0;i<a->n;i++)
for(j=0;j<a->n;j++)
{
printf("matrice[%d][%d]=",i,j);
scanf("%d",&a->a[i][j]);
}
}
void TiparireML(ML *m)
{
int i,j,k,p;
list *a;
for(i=0;i<m->n;i++){
for(j=0;j<m->n;j++){
if(m->a[j][i]){
p=0;
for(a=m->a[j][i];a!=NULL;a=a->next){
if(a->a[0]<0)continue;
if(!p){
printf("[%d,%d]\n",j,i);
p=1;
}
printf("(");
for(k=0;k<m->k;k++){
printf("%d ",a->a[k]+1);
}
printf(")\n");
}
}
}
}
}
int LungimeDrum(int *b,int n, matrice *a)
{
59
int s=0,i;
for(i=0;i<n-1;i++)
s+=a->a[b[i+1]][b[i]];
if(n>0)
s+=a->a[b[0]][b[n-1]];
return(s);
}
int MinimalML(ML *m,matrice *a)
{
int i,j,k;
int min=-1;
list *q;
for(i=0;i<a->n;i++)
for(j=0;j<a->n;j++)
if(m->a[i][j]!=NULL){
for(q=m->a[i][j];q!=NULL;q=q->next){
k=LungimeDrum(q->a,m->n,a);
if((k<min)||(min==-1))
min=k;
}
}
for(i=0;i<a->n;i++)
for(j=0;j<a->n;j++)
if(m->a[i][j]!=NULL){
for(q=m->a[i][j];q!=NULL;q=q->next)
if((k=LungimeDrum(q->a,m->n,a))>min){
q->a[0]=-1;
}
}
return(min);
}
void AdaugaDirect(list *p,int kp,list *q,int kq,ML *c)
{
int i,j;
list *z;
60
if(((kp>1)&&(p->a[0]==p->a[kp-1]))||
((kq>1)&&(q->a[0]==q->a[kq-1])))
return; /* adugam un ciclu la ceva... */
if(q->a[0]!=p->a[kp-1]){
return;
}
for(i=1;i<kq-1;i++){
for(j=0;j<kp;j++){
if(p->a[j]==q->a[i]){
return;
}
}
}
for(j=1;j<kp;j++){
if(p->a[j]==q->a[kq-1]){
return;
}
}
z=(list *)malloc(sizeof(list));
if(!z){
die("Memorie insuficienta\n");
}
for(i=0;i<kp;i++){
z->a[i]=p->a[i];
}
for(i=1;i<kq;i++){
z->a[kp+i-1]=q->a[i];
}
z->next=c->a[q->a[kq-1]][p->a[0]];
c->a[q->a[kq-1]][p->a[0]]=z;
}
void Adaugare(list *p,int i,int k,ML *b,ML *c)
{
int j;
list *q;
for(j=0;j<b->n;j++){
if(b->a[j][i]){
for(q=b->a[j][i];q!=NULL;q=q->next){
AdaugaDirect(p,k,q,b->k,c);
61
}
}
}
}
void Inmultire(ML *a,ML *b,ML *c,int skip)
{
int i,j;
list *p;
for(i=0;i<a->n;i++){
for(j=0;j<a->n;j++){
if(((!skip)||(skip && i!=j))&&(a->a[i][j]!=NULL)){
for(p=a->a[i][j];p!=NULL;p=p->next){
Adaugare(p,i,a->k,b,c);
}
}
}
}
}
ML* InitML(ML **m,int n,int k)
{
int i,j;
(*m)=malloc(sizeof(ML));
if(!(*m)){
die("Memorie insuficienta!\n");
}
(*m)->n=n;
(*m)->k=k;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
(*m)->a[i][j]=NULL;
}
}
return(*m);
}
void PuteriML(ML *m,int n,ML *q[MAXN],int skip)
{
int i;
62
q[0]=m;
for(i=1;i<n;i++){
InitML(&q[i],n,i+2);
Inmultire(q[i-1],m,q[i],skip);
}
}
int VidML(ML *a)
{
int i,j;
for(i=0;i<a->n;i++){
for(j=0;j<a->n;j++){
if(a->a[i][j]!=NULL)
return(0);
}
}
return(1);
}
void Tiparire(matrice *a)
{
int i,j;
for(i=0;i<a->n;i++){
for(j=0;j<a->n;j++){
if(a->a[j][i]>=0)
printf("%4d ",a->a[j][i]);
else
printf("%4c ",(-1*a->a[j][i])+'A'-1);
}
printf("\n");
}
}
int main(void)
{
matrice a,b;
ML *m[MAXN];
ML *q,*r;
int k;
63
Citire(&a);
CopyMatrix(&a,&b); /* b e matricea "curata" */
PuneLitera(&a,-1,&k);
if(!CelPutin2A(&a,-1)){
ScadeM(&a,k,1,-2);
}
printf("Matricea elementelor AB minimale asociate grafului G este:\n");
Tiparire(&a);
m[0]=InitML(&m[0],a.n,2);
GenerareDupaA(&a,m[0],-1);
PuteriML(m[0],a.n,m,0);
printf("Circuitele hamiltoniene minimale sunt:\n");
if(!VidML(m[a.n-1])){
TiparireML(m[a.n-1]);
printf("Lh=%d\n",MinimalML(m[a.n-1],&b));
}else{
/* nu avem circuite numai cu A, deci luam drumurile cu A */
/* mai mult, matricea latina [n-2] nu contine elemente pe
diagonala */
/* determinam matricea latina cu elemente B */
InitML(&q,a.n,2);
GenerareDupaA(&a,q,-2);
InitML(&r,a.n,a.n+1);
Inmultire(m[a.n-2],q,r,1);
k=MinimalML(r,&b);
TiparireML(r);
printf("Lh=%d\n",k);
}
return 0;
}
64
Concluzii
Lucrarea a avut ca principal scop prezentarea unor noiuni de teoria grafurilor, cu
accent pe cuplaje. .Aceast problem are numeroase aplicaii practice , enumernd mai jos
doar o parte dintre ele:
Analiza 2D i 3D a imaginilor
Procesarea documentelor
Identificarea Biometric
Baze de date pentru imagini
Analiz Video
n aceast lucrare s-au prezentat cele mai importante teoreme din acest subcapitol
al Teoriei Grafurilor ntr-un mod ct mai natural i direct.
Am evideniat o metod de caracterizarea a cuplajelor maximale prin Teorema lui
Berge, am descoperit o metod necesar i suficient de caracterizare a unui cuplaj
perfect ntr-un graf bipartit i am tratat problema cuplajelor perfecte n cteva grafuri
oarecare.
Toate aceste teoreme au avut scopul de a pregti suportul teoretic necesar
nelegerii algoritmului ungar i al algoritmului Kuhn-Munkers, lucrarea practic
culminnd cu acestea.
Tema Cuplajelor n Grafuri nu a fost atins ndeajuns n aceast lucrare ntruct
aplicaiile i suportul teoretic al acestui subcapitol sunt prea vaste pentru a fi cuprinse
ntr-o singur lucrare.
65
Teza se constituie ntr-o foarte bun metod de iniiere n acest domeniu i dorete
s instige cititorul la a afla mai mult, mult mai mult, rspunsurile din lucrare fiind o baz
buna pentru alte ntrebri.
Bibliografie
[1] Drago-Radu Popescu Combinatoric i Teoria Grafurilor, Societatea de
tiine Matematice din Romnia 2005
[2]J. A. Bondy and U. S. R. Murty, Graph Theory With Applications
[3]C. Croitoru Algoritmica Grafurilor, Ediia 2006
[4]Reinhald Diestel Graph Theory, Electronic Edition 2005
[5]Ioan Tomescu, Combinatoric i Teoria Grafurilor,1978.
[6]http://www.leda-tutorial.org/
[7] Popescu Rozica-Maria, Lecii complementare de teoria grafurilor
[8] http://www.britannica.com/