Sunteți pe pagina 1din 64

Facultatea de Matematic i Informatic Universitatea din Bucureti

Lucrare de Licen

Cuplaje n Grafuri
autor

Grosu Andrei Nicolae

ndrumtor tiinific Prof. Dr. Tomescu Ioan

Bucureti, iunie 2011

Cuprins

1.Prefa

1.1 Subiectul Tezei ................................................................................ 4 1.2 Repere Istorice..................................................................................5 1.2.1 Problema podurilor din Knigsberg..................................5 1.2.2 Teorema poliedral a lui Euler..........................................6 1.2.3 Problema celor patru culori................................................6 1.2.4 Ciclu Hamiltonian..............................................................7 1.2.5 Originea cuvntului graf ....................................................7 1.3 Definiii i notaii.................................................................................8

2.Cuplaje perfecte

15

2.1 Introducere ..15 2.2 Teorema lui Berge ...........................................................................17 2.3 Teorema lui Hall............................................................................................18 2.4 Teorema lui Knig:...........................................................................................26

3.Cuplaje n Grafuri Oarecare 3.1 Teorema lui Tutte...........................................................................................28

3.2 Teorema lui Petersen.......................................................................................32 3.3Aplicaii................................................................................33

4.Problema Asocierii

37

4.1Algoritmul Ungar...........................................................................................37 4.2Algoritmul Kuhn-Munkres.............................................................................42 5. Aplicaie Concluzii Bibliografie 46 61 62

Prefa
In nenumarate situatii putem folosi o multime de puncte unite prin linii sau sageti spre a descrie o situatie ce reprezinta interes. Punctele pot substitui oameni ori locuri ori atomi, iar sagetile sau liniile ar putea reprezenta relatii de rudenie, drumuri sau legaturi chimice. Astfel de diagrame le intalnim la tot pasul sub diverse denumiri: sociograme in psihologie, simplexuri in topologie, structure organizationele in economie, retele sociale, etc. Denes Knig a sugerat pentru prima data ca numele generic graf sa fie folosit pentru astfel de structuri asumandu-si totodata studiul noului domeniu ce urma a se contura.

1.1 Subiectul Tezei


Teza are la baz o noiune simpl , aceea de cuplaj. Un cuplaj reprezint n esen un mod de a atribui unui element dintr-o mulime un alt element al altei mulime satisfcnd anumite condiii aceast corelaie. Motivaia n a alege aceast tem o constituie surpriza de a descoperi o noiune a Teoriei Grafurilor care nu promite nimic interesant la prima impresie, ca apoi s ne prezinte cum se poate trece de la simplu la subtil. Cuplajele n Grafuri prezint o multitudine de aplicaii practice n biochimie, e-bussiness, sau Pattern Recognition si analiza imaginii.

1.2 Repere istorice


1.2.1 Problema podurilor din Knigsberg
Continum lucrarea cu o scurt descriere a evoluiei Teoriei Grafurilor, din care face parte i tema vizat : Cuplajele n Grafuri. Subiectul Teoriei Grafurilor i are originile n probleme recreaionale de matematic. Originea acestui domeniu este strns legat de anul 1736, cnd matematicianul elveian Leonard Euler a rezolvat Problema Podurilor din Knigsberg. Aceast problem era un puzzle vechi privind posibilitatea de a gsi un drum care s traverseze toate cele apte poduri ce legau o insul de rm dar fr a trece un pod de dou ori.

Figura 1.2.1 Euler a argumentat c o astfel de cale nu exist , n esen demonstrnd prima lui teorem referitoare la grafuri. Translatat n terminologia teoriei grafurilor actuale teorema ar putea fi enunat astfel : pentru a parcurge toate muchiile dintr-un graf exact o singur dat trebuie ca fiecare nod s aibe un numr par de muchii, indiferent de pozitia acestuia n drum(de nceput/sfrit sau n interior).

1.2.2 Teorema poliedral a lui Euler


Euler a fcut a doua mare contribuie la teoria grafurilor n 1758, la dou decenii dup ce a rezolvat problema podurilor din Knigsberg. Acesta a enunat o formul pentru

grafuri planare. Un graf planar este un graf care poate fi trasat n plan astfel nct muchiile sale s nu se intersecteze n interior.

Figura 1.2.2 O caracteristic evident a acestui tip de graf este c mparte planul n regiuni nchise de un ciclu numite fee. De exemplu n Figura 1.3 sunt trei fee interioare si una exterioar infinit. Euler a demonstrate ca pentru o reprezentare a unui graf planar numrul de vrfuri minus numrul muchiilor plus numrul feelor este ntotdeauna egal cu doi. Pe scurt n e + f = 2, unde n este numrul de vrfuri, e numrul de muchii si f numrul feelor. Pentru exemplul de mai sus avem n = 4, e = 6 i f = 4, valori care verfic egalitatea. Acest teorem poart numele aceluiai Euler, n plus pentru orice reprezentare n plan al unui graf valoarea pentru n e + f caracteristica Euler. este cunoscut ca si

1.2.3 Problema celor patru culori


Problema ne ntreab dac rile de pe orice hart pot fi colorate folosind doar 4 culori, astfel nct rile care sunt vecine s fie de culori diferite. Aparent enunat iniial de ctre Francis Guthrie n 1850 , problema are o istorie presarat cu ncercri greite de rezolvare. Rezultatul a fost demonstrat n 1976, utiliznd aproape 2000 de verificri computerizate.

1.2.4 Ciclu Hamiltonian


n 1857 matematicianul irlandez William Rowan Hamilton a inventat un puzzle pe care l-a vndut mai trziu unui fabricant de jocuri pentru 25 de lire englezeti. Puzzleul presupunea gsirea unui drum special, cunoscut mai trziu sub numele de ciclu

hamiltonian, de-a lungul muchiilor unui dodecadron. Drumul trebuia s se termine n vrful de start , parcurgnd fiecare nod o singur dat.

Figura 1.2.3

1.2.5 Originea cuvntului graf


Cuvntul graf n nelesul actual a fost derivat din termenul notaie grafic din chimie i a fost folosit prima dat de J. Silvester n anul 1878 ntr-un articol publicat n primul numr al revistei American Journal of Mathematics, nfiinat chiar de el. Dei teoria unitar chimio-algebr pe care el ncerca s-o fundamenteze s-a dovedit o utopie, teoria grafurilor are multe aplicaii n chimie.

1.3Definiii i notaii

Pentru a nelege mai bine ceea ce este prezentat n aceast lucrare, vom defini noiunile de baz care sunt folosite n cadrul lucrrii.

(a) Conceptele utilizate pentru grafurile orientate

Def. 1.3.1 Drumul este o succesiune de vrfuri legate, fiecare cu urmtorul, prin cte un arc. Drumul poate fi finit sau nu. Exemplu:

1 1 2 Graful Figura 3

2 5 4

din

1.3.1 conine 5 3

Figura1.3.1 Figura 1.3.2 numai drumurile finite, iar al doilea graf conine i drumuri infinite. Drumurile finite 4 sunt d1=(x1,x2,x5); d2=(x1,x4,x5); d3=(x1,x3,x4,x5).

Def. 1.3.2 Un drum se numete simplu dac arcele care le compun sunt folosite fiecare, o singur dat. n caz contrar, el se numete compus.

Def. 1.3.4 Un drum se numete elementar dac trece o singur dat prin vrfurile sale.

Def. 1.3.5 Lungimea unui drum este dat de numrul arcelor sale, indiferent dac acestea sunt sau nu valorizate; deci dac drumul are n vrfuri, atunci lungimea sa este l= n -1.

Def. 1.3.6

Circuitul este un drum al crui vrf iniial coincide cu vrful final. Def. 1.3.7 Bucla este un circuit de lungime 1.

(b) Concepte utilizate pentru grafuri neorientate

Def. 1.3.1 Muchia. Se spune c exist o muchie ntre dou vrfuri X i Y, dac exist un arc de la X la Y i / sau de la Y la X.

Def. 1.3.2 Lanul este o drumuri. succesiune de muchii consecutive. Lanul poate fi simplu sau compus, elementar sau nu, n aceleai condiii prezentate pentru

Def. 1.3.3 Ciclul este un lan nchis. Noiunea de circuit de la grafuri orientate este nlocuit la cele neorientate cu ciclu. Orice circuit este un ciclu dar nu orice ciclu este circuit.

Def. 1.3.4 Graful conex. Oricare ar fi vrfurile X i Y considerate, exist un lan ntre X i Y. Def. 1.3.5

Graful complet. Oricare ar fi vrfurile X i Y considerate, exist o muchie ntre X i Y (Figura 1.3.3). Trebuie observat c ntre X i Y se afl o muchie i nu un arc.

Figura 1.3.3 Def. 1.3.6 Graf regulat. Un graf neorientat se numete k-regulat dac toate nodurile au gradul exact k. (c) Graf parial i subgraf

Def. 1.3.1 Graful parial. Dac ntr-un graf se suprim unul sau mai multe arce, se formeaz un graf parial al grafului de referin (Figura 1.3.4a i 1.3.4b). Harta tuturor drumurilor unei ri, cuprinznd drumurile naionale i cele judeene formeaz un graf. Dac se consider numai drumurile naionale se obine un graf parial.

Def. 1.3.2

10

Subgraful. Dac ntr-un graf se suprim unul sau mai multe puncte, precum i arcele care sosesc sau pleac din ele, graful care rmne este un subgraf al grafului de referin (Figura 1.3.4a i 1.3.4c). Se pot considera, de asemenea, i subgrafuri pariale.

D
Fig. 1.3.4 a) Graful G de referin

Fig. 1.3.4 b) Graful parial al lui G

Fig. 1.3.4 c) Subgraful lui G

11

(d) Concepte utilizate pentru cuplaje Def. 1.3.1 Cuplaj. Fie G=(V, E) un graf simplu. Se numete cuplaj al grafului G,
mulimea M

E cu proprietatea c oricare dou muchii sunt neincidente(mulime

independent de muchii). Graful indus de M l notm prin [M]. Notm cu M* un cuplaj de cardinal maxim din G.

Def. 1.3.2 Cuplaj. Vrfurile muchilor unui cuplaj M al unui graf G spunem c sunt M-saturate. Vrfurile grafului G care nu aparin lui M spunem c sunt M-nesaturate.

Def. 1.3.3 Lan M-alternant. n raport cu un cuplaj M din G, un lan sau un ciclu elementar spunem c este M-alternant dac muchiile sale aparin alternative mulimilor M i M =E(G)-M. Un lan M-alternant spunem c este deschis (sau cresctor) dac are capetele nesaturate. n figura 1.3.5 b) avem de exemplu lanul M-alternant , dat prin nodurile sale [12, 3,4,5,6].

Figura 1.3.5 a) 12

Figura 1.3.5 b)

Un graf G oarecare

Cuplaj n graful G

Def. 1.3.4 Spunem c o mulime de noduri A V(G) poate fi saturat daca exist un cuplaj M care s conin toate nodurile mulimii A.

Def. 1.3.5 Cuplaj perfect. Un cuplaj M se numete perfect dac acesta satureaz mulimea V. Dac din mulimea de noduri V rmne exact un nod nesaturat , numim cuplajul V aproape perfect. Obs : Un cuplaj cu un numr impar de noduri nu poate conine un cuplaj perfect.

Def. 1.3.6 Cuplaj maxim. Un cuplaj M al uni graf G se numete maxim dac nu exist un alt cuplaj M din G astfel nct | M | >|M|. Evident orice cuplaj perfect este i maxim.

Figura 1.3.6 Cuplaj Perfect Def. 1.3.7 13

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 NG(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 A i B ,iar mulimea muchiilor E vom folosi notaia G=( A U B, E).

Figura 1.3.7

Def 1.3.2

14

Graf bipartit complet. Un graf bipartit G=( A1 U A2, E), este bipartit complet dac fiecare nod din mulimea A este adiacent cu toate nodurile din B si reciproc.

Capitolul 2
2.1 Introducere
Diferena simetric a dou cuplaje Notaie: d[G](x)=gradul nodului x n graful G; Fie M1, M2 dou cuplaje. Considerm graful [M1 M2 ] indus de diferena lor simetric. Pentru orice x V[M1 M2 ] avem : d[M1 M2 ](x) = d[M1](x) + d[M2](x) ntruct M1 i M2 sunt cuplaje, fiecare nod avnd maxim un vecin obinem: d[M1](x)1 i d[M2](x)1. Aadar d[M1 M2 ](x) = d[M1](x) + d[M2](x)2; Prin urmare componentele conexe ale diferenei simetrice vor fi de 4 tipuri (am colorot cu negru muchiile cuplajului M1 i cu rou pe cele ale lui M2): Ciclu M1, M2-alternant (numit pe scurt component de tip C);

15

Lan M1, M2-alternant cu un capt M1-saturat i cellalt M2 saturat (component tip (M1, M2));

Lan M1, M2-alternant cu ambele capete M1-saturate (component tip (M1, M1));

Lan M1, M2-alternant cu ambele capete M2-saturate (component tip (M2, M2));

2.1.1 Propoziie Fie M1, M2 dou cuplaje diferite. a) Pentru o component conex oarecare G0 [M1 M2] avem 0 dac G0 este de tip(C) sau (M1, M2); |M1 U E(G 0)| -| MU 2 E(G0)| = 1 daca G0 este de tip (M1, M2); -1 daca G0 este de tip (M2, M2);

16

b) | M1| - |M2| = numrul componentelor conexe din [M1 M2 ] de tip (M1, M2) numrul componentelor conexe din [M1 M2 ] de tip (M2, M2);

2.2 Teorema 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: Pentru a demonstra aceast teorem ne vom folosi de observaiile prezentate n Introducerea acestui capitol. Aceast metod se va dovedi a fi una elegant i natural.

=> Pentru implicaia direct raionm prin reducere la absurd. Fie M un cuplaj maximal i L un lan M-alternant deschis caracterizat prin nodurile sale astfel : v0v1v2..v2mv2m+1. . Definim M E , M= (M \ {v1v2, v3v4...v2m-1v2m}U {v0v1, v2v3...v2mv2m+1}). Atunci M va fi un cuplaj n G i |M|=|M|+1, deci cuplajul M este de cardinal strict mai mare decat dect M, contradicie cu maximilitatea cuplajului M.

17

<= Pentru implicaia invers , fie M un cuplaj pentru care nu exist niciun lan M-alternant deschis. Prin reducere la absurd presupunem c M nu este maximal. Fie M* un astfel de cuplaj maximal. Atunci |M*|-|M|>0. Dar conform Propoziiei 2.1.1 b) avem c |M*|-|M|= numrul componentelor conexe din [M* M]de tip (M* , M* )- numrul componentelor conexe din [M* M]de tip(M,M). De aici rezult ca numrul componentelor conexe din [M* M]de tip (M* , M* ) este strict pozitiv, adic avem cel puin un lan M-alternant n G. Contradicie!

2.3Teorema lui Hall


2.3.1 Definiii.Notaii.Observaii preliminarii

nainte de a prezenta o etap important n evidenierea utilitii Cuplajelor n Grafuri, identificm sub-etapele ce vor face demonstrarea i nelegerea Teoremei lui Hall intuitiv i direct.

Fie G=(A

B, E) un graf bipartit i M*

E un cuplaj de cardinal maxim. Notm cu A0,

B0 mulimile vrfurilor M*-nesaturate din A, respectiv B : A0 := A- V(M), B0:= B- V(M*).

18

i cu P(A0), P(B0) mulimile lanurilor M*- alternante care au un capt n A0, respective B0:

P(A0) := {P| exist x A0, P este x-lan M*-alternant}, P(B0) := {P| exist y B0, P este y-lan M*-alternant}.

Notm **A1, B3 mulimile vrfurilor din A-A0, respectiv B, ale lanurilor din P(A0); ** A3,B1 mulimile vrfurilor din A, respectiv B-B0, ale lanurilor din P (B0). Notm de asemenea : A2= A- A0-A1-A3, B2= B B1- B3. Ordonm mulimile P(A0) i P(B0) cu relaia astfel : --- pentru X, Y P(A0): X Y E(X) E(Y); --- pentru X, Y P(B0): X Y E(X) E(Y);

Observaii : 1) Dac A0= atunci A1=B3=. 2) Dac B0= atunci B1=A3=. 3) Orice A0, A1-lan M*-alternant are ultima muchie n M* i orice A0,B3-lan M*alternant are ultima muchie n M = E(G)-M*. 4) Orice B0, B1-lan M*-alternant are ultima muchie n M* i orice B0,A3-lan M*alternant are ultima muchie n M*.

19

A0

A1

B3 A0 A1

B3

A3

B1

B0

20

A3

B1 Figura2.2.1

B0

2.3.2Lem a) P(A0) P(B0) = ; b) A0 A1= i B0 B1=; c) A0 A3= i B0 B3=; d) A1 A3= i B1 B3=; Demonstraie : a) Presupunem prin absurd c P(A0) P(B0) . Fie P P0 (A0) P(B0). Lanul P este M*-alternant deschis deoarece capetele sale, aparinnd mulimilor A0 i B0, sunt M*-nesaturate. Pe de alt parte, conform teoremei lui Berge, un astfel de lan nu exist, deoarece M* este un cuplaj de cardinal maxim n G. Deci P(A0) P(B0) = . b) Rezult direct din definiiile mulimilot A1 i B1;

21

c)Presupunem c A0 A3 .=> Exist un lan A0,B0 lan M*-alternant P (A0) P(B0), Contradicie. Analog se arat c B0 B3 = . d)Cu un argument analog obinem A1 A3 = i B1 B3 = .

2.3.3 Lem: a) M*induce o bijecie A1 b) M*induce o bijecie A3 c) M*induce o bijecie A2 M* B3;

M* B1; M* B2;

Demonstraie : a) Un lan L P(A0) are captul care nu este n A0 , M*-saturat , ntruct altfel cuplajul maximal M* ar conine un lan A0,B0-lan M*-alternant deschis, lucru contrazis de Teorema lui Berge.Prin urmare , un A0- lan M*-alternant maximal n raport cu relaia de ordine , L maxP(A0), are ultima sa muchie la o parcurgere ncepnd din A0 n M* ,adic captul care nu este n A0 se gsete n A1. Deci fiecare din lanurile L P(A0) induce prin cuplajul M* cte o bijecie V(P) A1
M*

V(P) B3;

Toate aceste bijecii sunt compatibile. Rezult c M* induce bijecia

V(L) A1
LP(A0

M*

V(L) B3 sau innd seama de definiiile mulimilor A1 i B3,


LP(A0)

A1

M*

B3; 22

b)Se demonstreaz analog pornind cu lanuri B0,A0 M* -alternante i aplicnd teorema lui Berge. c) Este o consecin a propritilor a) i b)(Figura 2.3.1).

A0

A1

A2

B3 A3

B2

B1 Figura 2.3.1

B0

2.3.4 Lem: a)NG(A0 A1) = B3; b) NG(B0 B3)= A3;

Demonstraie :

23

a) Avem NG(A0 A1) = NG(

LP(A0)

V(L) A)=

LP(A0)

NG(V(L) A) .

B3 =

LP(A0)

NL(V(L) A)

LP(A0)

NG(V(L) A) .

Pentru incluziunea invers artm c pentru orice vrf x A0 A1 avem NG(x) B3. Fie yNG(x). Vom arta c y B3 i demonstraia se va ncheia. Dac x A0 atunci [x, y] P(A0) i deci y B3. Dac x A1 s consider, un v, x* lan M -alternant L P(A0) cu v A0. Sunt posibile urmtoarele 2 cazuri : A0 A1 x

B3

A1

B3 Figura 2.3.2

1. yV(L). Atunci L := v L y B3. 2. y nu aparine lui V(L). Atunci L := L+[x, y]P(A0) i deci y B3. Punctul b) se demonstreaz ntr-un mod analog.

2.3.2 Enunarea i demonstraia teoremei


24

Teorem(Hall, 1935)
Pentru orice graf bipartit G=( A B, E) este adevrat echivalena : G admite un
cuplaj care satureaz A oricare ar fi X

A:|NG(X)||X|.

Demonstraie : => Fie M E un cuplaj care satureaz vrfurile din A i fie X Avem :|NG(X)||N[m](X)|=|X|. A.

<= Vom demonstra c un cuplaj de cardinal maxim M* E satureaz orice vrf din

A. S presupunem prin absurd c M* nu satureaz A. Aceasta nseamn, cu notaiile definite anterior c A0 . Pentru X = (A0 NG(X)| = |NG(A0 B0) avem conform lemei de la 2.2.3 :

B0) |=|B3|. Dar din Lema de la 2.3.2 avem c A1 se afl ntr-i bijecie cu

B3. => |B3|= |A1| < |A1|+ |A0|= |X|, contradicie. Deci M* satureaz orice vrf din A.

2.3.3 Corolal la Teorema lui Hall


Dac G este un graf k-regulat bipartit cu k>0 atunci G admite un cuplaj perfect. Acest corolal mai este cunoscut i sub numele de Teorema Cstoriei ntruct poate fi privit dintr-o perspectiv social astfel : dac fiecare fat dintr-un sat cunoate exact k biei , i fiecare biat cunoate exact k fete atunci fiecare fat se poate mrit cu un biat pe care-l cunoate i fiecare biat poate lua de soie o fat pe care o cunoate.

25

Continum cu demonstraia corolalului.

Demonstraie: Fie G=(X U Y, E) un graf bipartit k-regulat. ntruct G este k-regulat avem c k |X|= |E|=k|Y | => |X|=|Y|; Fie S X i definim S1,S2 mulimile muchiilor incidente nodurilor din S, respectiv N[G](S). Din definiia lui N[G](S) avem c S1 S2; => S2=k | N[G](S)|S1= k|S =>|NG(S)||S|. S fiind o mulime aleas arbitrar obinem c oricare ar fi S X |NG(S)||S|, deci conform teoremei lui Hall G admite un cuplaj ce satureaz A. Pe de alt parte am demonstrat mai devreme c |X|=|Y| =>G admite un cuplaj perfect.

2.4 Teorema lui Knig:

2.4.1 Lem Fie M un cuplaj ntr-un graf i K o transversal astfel nct |M|=|K|. Atunci M este cuplaj maxim iar K este transversala minim. Fie G=(V,E) un graf oarecare i M, K un cuplaj, respectiv transversal din G astfel nct |M|=|K|. Conform definiiei transversala K conine cel puin captul oricrei muchii din G, n particular din M. Deci |M||K| pentru orice cuplaj M i orice transversal K din G. Considerm M*, cuplajul maxim, respectiv transversala minim din G.Conform definiiei |M||M*||||K| Din ipotez |M|=|K| => |M*|=|M| i ||=|K| iar lema este demonstrat.

26

2.4.2 Enunarea i demonstrarea teoremei

Teorem(Knig, 1931) Pentru orice graf bipartit G = (A B, E) avem ||=|M*|. Demonstraie : => Avem ||
eM*

| e

1 =|M*|.
eM*

<= Cu notaiile din capitolul anterior definim K := A2 i |K|=|M*|. Deci || |K|=|M*|. A3 B3. K este o transversal

A0

A1

A2

A3

B3

B2

B1

B0

Figura 3.1.1 27

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 componentele impare din G-S. G iar G1, G2, ...Gn

28

Gi, i=1,n va conine cel puin un nod ui care se va cupla cu un nod vi din S ntruct nodurile din Gi nu se pot cupla toate ntre ele fiind numr par, ntre Gi i Gj cu ij nu exist muchii fiind componente conexe disjuncte. Cum {v1,v2...,vn} S avem o(G-S)=n=|{v1,v2...,vn}||S|

Componentele impare din G

Componentele pare

Figura 3.1.1 <= Presupunem c G=(V,E) satisface o(G-S)|S| pentru orice S 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*); G dar nu admite un cuplaj perfect. Atunci G este un graf parial al uni graf maximal G* ce nu admite

29

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 ilustrat n figura 3.1.2 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

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 M1 i M2 cuplajele perfecte n G*+xz i G*+yw, respectiv .

30

(b) M1 linie ngroat M2 linie curbat Figura 3.1.3

Fie H subgraful lui G* U {xz, yw}indus de M1M2 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 M1 n C , impreun cu muchiile lui M2 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 M2 ce nu se afl n poriunea yw...z a lui C constituie un cuplaj perfect n G*. Contradicie.

31

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.

32

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 G1,G2...Gn

componentele conexe impare din G-S i definim mi ca fiind numrul de muchii ce au un capt n Gi 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 mi este impar . G neconinnd muchii critice => mi1 , mi impar deci mi3 ,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
33

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.

34

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. 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.

35

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. 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 u1, u2...um frunze din T astfel nct s(ui)=s(uj) , i =1,m j=i,m-1 unde prin s(x) am notat nodul tat al lui x. Graful T-s(u1) va avea m+1 componente conexe: m noduri izolate i un arbore. Evident o(T-s(u1))m Din ipotez o(T-s(u1))=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 u1, u2...um noduri situate pe nivelul 2k+2 astfel nct s(ui)=s(uj) , i =1,m j=i,m-1. Graful T-s(u1) 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.

36

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(u1))m Din ipotez o(T-s(u1))=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

37

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.

Rezolvare Pentru a rezolva aceast problem modelm datele astfel Notm mulimea lucrtorilor cu X= (x1, x2....xn) i mulimea locurilor de munc cu Y = (y1, y2....yn). Construim , cu ajutorul acestora, graful bipartit G =(X Y, E) unde e =(xi, yj) E dac i numai dac lucrtorul xi este calificat pentru locul de munc yj. 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 :|NG(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 Malternant 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-

38

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 pe post de z, ocolind nodurile din mulimea Y care aparin deja lanului L. Dac lanul L construit pas cu pas este M-alternant deschis atunci este determinat (similar metodei folosite n demonstrarea teoremei lui Berge ) cuplajul M=ME(L) care satureaz din mulimea X un nod n plus fa de cuplajul anterior, dup care se reia procedul cu un nou cuplaj M pe post de M. n cazul n care lanul L nu este M-alternant deschis nseamn c mulimea S = V(L) X verific inegalitatea |NG(S)|<|S|, deci conform Teoremei lui Hall , graful nu admite un cuplaj perfect. Pentru o mai bun nelegere a algoritmului construim schema logic a acestuia i dm un exemplu de rulare. Figura3.2.1

START M cuplaj arbitrar

39

M:= M

Este X Saturat ?

DA

STOP M satureaz pe X

NU Exist z X M-nesaturat S:=z T:=

STOP |NG(S)|<| S|

N(S)=T ?

L:= L U zy DA M = M E(L) Este y Msaturat? NU Exist yN(S)\T L:= L U yz S:=S U z T:= T U y

NU Lan L=[z,..y] M-alternant deschis 3.3Exemplu de rulare al Algoritmului Ungar

DA Exist yz M

40

Fie Graful G=({x1,x2,x3,x4}U {y1,y2,y3,y4}, E) unde mulimea muchiilor este redat n imaginea de mai jos

Figura 3.3.1 Pornim cu M = x1y1;


X saturat ? NU: z = x2, S ={ x2}, T = N(S) = T ? NU : y = y2; L=[x2y2] y- M saturat ? NU : M= [x1y1, x2y2]; M = [x1y1, x2y2];

X saturat ? NU: z = x3, S ={ x3}, T = N(S) = T ? NU : y = y1; L=[x3y1] Y- M saturat ? DA: z=x1; L=[x3y1 , y1x1]; S ={ x3, x1}, T={ y1} N(S) = T ? NU : y = y3; L=[x3y1, y1x1, x1y3] Y- M saturat ?

41

DA: M=[x1y3, x2y2, x3y1]; M=[x1y3, x2y2, x3y1];

X saturat ? NU: z = x4, S ={ x4}, T = N(S) = T ? NU : y = y3; L=[x4y3] Y- M saturat ? DA: z=x1; L=[x4y3 , y3x1]; S ={ x4, x1}, T={ y3} N(S) = T ? NU : y = y1; L=[x4y3, y3x1,x1y1] Y- M saturat ? DA: z=x3; L=[x4y3 , y3x1,x1y1,y1x3]; S ={ x4, x1,x3}, T={y3, y1} N(S) = T ? NU: y = y2; L=[x4y3, y3x1,x1y1,y1x3, x3y2] Y- M saturat ? DA: z=x2; L=[x4y3 , y3x1,x1y1,y1x3,x3y2,y2x2]; S ={ x4, x1,x3,x2}, T={y3, y1,y2} N(S) = T ? NU: y = y4; L=[x4y3, y3x1,x1y1,y1x3, x3y2, y2x2,x2y4] Y- M saturat ? NU: M = [x4y3, x1y1, x3y2, x2y4];

42

X saturat ? DA : STOP

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 xi pentru locul de munc yj prin valoarea w(xi,yj)). Observm c, fr a restrmge generalitatea, aceast problem poate fi modelat cu ajutorul unui graf bipartit complet n care, dac lucrtorul xi nu este calificat pentru 43

locul de munc yj muchiei xiyj i vom asocia ponderea 0, n celelalte cazuri ponderea fiind strict pozitiv. 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)= maxyYw(xy), dac x X;

l(y)=0, dac x X;

(4.1.1)

Pentru o etichetare valid l vom nota cu El mulimea de muchii din G pentru care are loc egalitatea l(x)+l(y) = w(xy): El={xy E| l(x)+l(y) =
w(xy) }; i cu Gl graful generat de mulimea de muchii El. 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 Gl conine un cuplaj perfect M*, atunci M* este un cuplaj optim pentru graful G. Demonstraie: Presupunnd c Gl conine un cuplaj perfect M*, cum V(M*) = V(Gl)=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 Gl, 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
44

relaia anterioar cu inegalitate : w(e) =

eMw(e) vV*l(v). Comparnd obinem c

w(M*)w(M), deci M* este un cuplaj optim al grafului G. 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, Gl i alegem un cuplaj arbitrar al acestuia,M. Pentru acest cuplaj, aplicm algoritmul ungar n vederea determinrii unui cuplaj perfect n Gl, 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 Gl, nseamn c, aplicnd algoritmul ungar am ajuns n situaia NGl(S)=T i, n acest caz, efectum o reetichetare a nodurilor grafului G dup urmtoarea regul : -- calculm l= minxS, 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 Gl. Aceste trei operaii asigur apariia n graful Gl 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.

45

Pentru o mai bun nelegere a acestui algoritm ilustrm schema logic.

46

START Etichetare Valid l

Determinarea Gl, un cuplaj M n Gl

MM

Este x-M saturat n Gl ?

DA

STOP M este cuplaj optim

NU Exist zX Mnesaturat? Sz T

Calculul pentru l,l,Gl

DA

N(S)=T ? NU Exist yN(S)\T LL U zy SS U z T T U y

ll GlGl M = ME(L)

Exist yNGl \T

Este YM saturat

DA Exist yzM

LL U yz

NU Exist lan L=[z,..,y] M-alternant deschis

47

Capitolul VI
Aplicaie
Fie G = (X,U), # X = n 3 un graf complet nesimetric i fr bucle i
A = ( a ij ) nx

matricea valorilor arcelor corespunztoare grafului.

Se cere proiectarea unui algoritm care s execute operaiile: a)s genereze matricea B = (bij ) nn a valorilor AB minimale ale arcelor grafului utiliznd elementele matricei A = (aij ) nx . b)Utiliznd elementele matricei B = (bij ) nn anterior generate s se precizeze un circuit hamiltonian minimal c h i lungimea sa l h (valoarea sa minimal). Pentru algoritmul proiectat s se scrie un program corespunztor. Cazuri particulare: S se exemplifice textul temei pentru G= (X,U), # X = 7 , n care matricea A este: 0 28 31 A = 52 51 62 58 Descrierea algoritmului: Elementele
B = (bij ) nn n 3, A = (a ij ) nn

49 0 29 38 83 93 66

26 36 0 47 51 54 76

78 53 42 0 22 69 41

52 44 49 67 0 38 52

39 68 50 75 37 0 83

87 61 38 82 71 26 0

precizate,

pentru

generarea

matricei

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 Gp

48

asociat se numete cuplaj n graful G. Dac graful permutare Gp are o valoare extremal (minim sau maxim), atunci cuplajul respectiv se numete extremal. Fiind dat graful G= (X,U), # X = n 3 simetric sau nu, cu sau fr bucle i
A = ( a ij ) nx

matricea valorilor arcelor corespunztoare grafului algoritmul ungar algoritmul ungar pentru generarea cuplajelor minimale.

i propune s precizeze un cuplaj extremal al grafului G. Pentru a face o alegere vom descrie Algoritmul ungar are urmtoarele faze:
' Faza 1. Generarea matricei Alc = (aij ) nn 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 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 Al pe fiecare coloan a sa exist cel puin un element de valoare 0 atunci Alc = Al reprezint matricea zerourilor pe linii i pe coloane asociate grafului G. Dac n matricea Al exist cel puin o coloan valoare minim al coloanei respective. Procednd n mod analog cu toate coloanele matricei Al care au proprietatea enunat la sfritul prelucrrii din matricea Al se va obine matricea Alc 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.
2 Faza 2. Generarea matricei Acl = (a ij ) nn a zerourilor pe coloane i pe linii

i = ,n 1

a matricei A are toate elementele nenule, atunci din

fiecare element al liniei se scade elementul de valoare minim corespunztoare

j = ,n 1

n care toate elementele

sunt nenule, atunci din elementele coloanei respective se va scade elementul de

asociate matricei Ac . Dac

j , n 1

este o coloan arbitrar a matricei A ale 49

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 Ac a zerourilor pe coloane asociate grafului G. Matricea Ac are proprietatea c pe fiecare coloan a sa exist cel puin un element de valoare 0. Dac pe fiecare linie a matricei Ac exist cel puin un element de valoare 0, atunci Acl = Ac reprezint matricea zerourilor pe coloane i pe linii corespunztoare grafului G. Dac n matricea Ac exist cel puin o linie
i , n 1

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 Ac care au proprietatea enunat la sfritul prelucrrii, din matricea Ac se va obine matricea Acl a zerourilor pe coloane i pe linii corespunztoare grafului G.
0 Faza 3. Generarea matricei Az = (a ij ) nn a zerourilor grafului G. Dac graful G 0 1 1 este simetric atunci aij = min{ aij , a ji }, i j . Dac graful G este nesimetric, 0 1 2 atunci aij = min{ aij , aij }, i j . La sfritul execuiei acestor operaii se va obine 0 matricea Az = (a ij ) nn a zerourilor grafului G. Matricea Az 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 Az se caut cuplajele de valoare minim; ntr-un astfel de cuplaj trebuie s apar ct mai multe arce ale grafului crora n matricea Az le corespund elemente egale cu 0. Dac
b = max{ a ij A} ,
a ij = b a ij , j , i A =( a ij ) nn

a ii = ' , '

atunci

aplicnd

algoritmul ungar anterior descris pentru propunem const n urmtoarele:

la sfritul prelucrrii vor fi

precizate cuplajele maximale corespunztoare grafului G. Algoritmul pe care-l Se genereaz irul (l1, , ln) n care li, liniei i i irul (c1, , cn) n care cj, coloanei j din matricea A.
j = ,n 1 i = ,n 1

este cel mai mic element al

reprezint cel mai mic element al

50

Fie

m =m ax{m ax{

l i / i =1, n}, m ax{ c j / j =1, n}}

. 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 Al pe fiecare linie i pe fiecare coloan a sa exist cel puin dou elemente marcare cu A atunci B = Al reprezint matricea valorilor ABminimale asociate grafului G. n caz contrar, utiliznd elementele nemarcate cu A ale matricei A l se genereaz irul (l1, , ln) n care li ,
i = ,n 1

este cel mai mic element


j = ,n 1

nemarcat al liniei i din matricea Al i irul (c1, , cn) n care cj, mai mic element nemarcat al coloanei j din matricea Al. Fie
m' = m ax{m ax{ l i ' / i =1, n}, m ax{ c j ' / j =1, n}}

este cel

. n matricea Al 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 Al se va obine matricea
B = (bij ) nn

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
k anterior generat M L ( A) . Utiliznd elementele matricei M L ( A) se determin

toate drumurile avnd aceeai lungime maxim k n . 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 lh. Acestea vor fi circuitele hamiltoniene minimale asociate grafului G. Pentru generarea circuitelor hamiltoniene maximale asociate grafului G se aplic algoritmul anterior descris pentru elementele matricei precizate. Cazuri particulare:
A =( a ij ) nn

anterior

51

0 28 31 A = 52 51 62 58 Al : 1 1 2 3 4 5 6 7 A A B B 1 0 6

49 0 29 38 83 93 66

26 36 0 47 51 54 76

78 53 42 0 22 69 41

52 44 49 67 0 38 52

39 68 50 75 37 0 83

87 61 38 82 71 26 0

2 B A A 3 1 4 1 1 4

3 A A B B 2 2 4

4 2 6 1 B A 1 7 A

5 B B B 1 5 A B

6 A 1 6 B 2 3 A 3 1

7 35 9 A 30 19 A

m = 41 m= 52 dh = (5, 4, 2, 3, 1, 6, 7) l(dh) = A + A + A + A + A + A + A ch = (5, 4, 2, 3, 1, 6, 7, 5) lh = 6A + B = 224 Programul C: #include <stdio.h> #include <stdlib.h> #include <alloc.h>

52

#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; } } }

53

void PuneLitera(matrice *b,int A,int *k) { 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)||

54

((*k>b->a[p2][i])&&(b->a[p2][i]>ml))){ *k=b->a[p2][i]; } } 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;

55

if(*a!=NULL){ fprintf(stderr,"Hmm, matricea contine deja elemente?\n"); return; } 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;

56

GenerareML(&a,m); } void Citire(matrice *a) { 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"); } } }

57

} } int LungimeDrum(int *b,int n, matrice *a) { 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);

58

} void AdaugaDirect(list *p,int kp,list *q,int kq,ML *c) { int i,j; list *z; 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)

59

{ 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); } } } } 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;

60

} } return(*m); } void PuteriML(ML *m,int n,ML *q[MAXN],int skip) { int i; 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");

61

} } int main(void) { matrice a,b; ML *m[MAXN]; ML *q,*r; int k; 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); 62

k=MinimalML(r,&b); TiparireML(r); printf("Lh=%d\n",k); } return 0; }

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

63

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. 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/

64