Documente Academic
Documente Profesional
Documente Cultură
Lucrare de Licen
Cuplaje n Grafuri
autor
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
4.Problema Asocierii
37
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.
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).
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
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.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.
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.
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
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
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.
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.
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);
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!
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*
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 = .
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;
V(L) A1
LP(A0
M*
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
Demonstraie :
23
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.
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.
25
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.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
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
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 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
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.
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
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.
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 :
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.
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
39
M:= M
Este X Saturat ?
DA
STOP M satureaz pe X
STOP |NG(S)|<| S|
N(S)=T ?
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
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
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 :
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
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
46
MM
DA
NU Exist zX Mnesaturat? Sz T
DA
ll GlGl M = ME(L)
Exist yNGl \T
Este YM saturat
DA Exist yzM
LL U yz
47
Capitolul VI
Aplicaie
Fie G = (X,U), # X = n 3 un graf complet nesimetric i fr bucle i
A = ( a ij ) nx
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
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
j = ,n 1
j , n 1
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
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
50
Fie
m =m ax{m ax{
. 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
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
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
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