cuplaj maxim de valoare minima intr-un graf bipartit

Upload: bogdan-mihai-timofte

Post on 03-Jun-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/12/2019 Cuplaj MAXIM de Valoare Minima Intr-un Graf Bipartit

    1/3

    G I n f o n r .

    1 5 / 3 - m a r t

    i e 2 0 0 5

    38

    f o c u s

    Un fel de cupluri...

    CuplajMAXIM

    de valoareMINIM ntr-un GRAFBIPARTIT

    Ilie Vieru

    n cadrul acestui articol vom prezenta un algoritm interesant pentrudeterminarea cuplajului maxim de cost minim ntr-un graf bipartit. nmomentul de fa algoritmul este sub tipar i la prestigioasa revistMathematics Magazine.

    Sunt cunoscute problemele n care sesolicit asocierea optim a elemente-lor unei mulimi A = {a1, a2, ...,an} cuelementele mulimiiB= {b1, b2, ...,bm}, n condiiile unor limitri ale posibi-litilor de asociere.

    n general, fiecare asociere posi-bilai b j aduce un anumit efect(cost, profit etc.) pe care l presupu-nem cunoscut.

    Limitrile asupra asocierilor n-seamn: un elementai din A poate fi asociat

    doar cu anumite elemente dinB ireciproc;

    n final, fiecrui element din A i s-aasociat cel mult un element dinB ireciproc.

    Asocierea optim nseamn gsi-rea unui cuplaj maxim ntr-un graf bipartit i presupune, de obicei, douobiective: s se determine maximul de asocieri; suma efectelor asocierilor s fie op-

    tim (maxim sau minim).

    Dintre problemele practice carese reduc la a determina un cuplaj ma-xim de valoare optim, amintim [1]:

    repartizarea muncitorilor unei sec-ii pe utilaje n funcie de pregtireai preferinele muncitorilor dar ide complexitatea mainilor;

    repartizarea angajailor pe posturi; formarea grupelor de lucru dup afi-

    nitile dintre membrii colectivului; transferarea unor informaii ntr-un

    grup.

    ObservaiePresupunem cunoscute definiiile cuprivire la graf bipartit, cuplaj, cuplajmaxim, valoarea cuplajului([1], [2],[4]).

    n anul 1931 Kniga formulatteorema prezentat n continuare.

    TeoremNumrul maxim de muchii ale unuicuplaj ntr-un graf bipartitG = ( A B, U ) este .

    n anul 1955, bazndu-se pe teo-rema lui Knig, H.W. Kuhna elabo-rat un algoritm cunoscut sub denu-mirea dealgoritmul ungar cu ajuto-rul cruia se poate determina un cu-plaj maxim de valoare minim ntr-un

    graf bipartit pentru | A| = |B| =n. Else bazeaz pe observaia prezentat n continuare.

    ObservaieDac se adun (sau se scade) acelainumr la toate valorile muchiilor,atunci nu se schimb ierarhia cupla- jelor maxime.

    Algoritmul pornete de la matri-cea ptratic , unde:

    Acest algoritm, este laborios, greude implementat, dei are complexita-te polinomial ([1]).

    Pentru determinarea cuplajuluibipartit maxim se poate folosi i me-toda Ford-Fulkersonpentru grafulbipartitG = ( X = A B, U ), ntr-untimp polinomial n | X | i |U |.

    Soluia const n construirea uneireele de transport n care fluxurilereprezint cuplajele.

    Graful iniial se completeaz cu nc dou vrfuris (sursa) it (desti-

    =

    ].,[muchiaexistnudac,];,[muchiaexistdac

    ],,[muchieivaloarea

    ji ji

    jimij

    ( ) n jiijmM = ,1

    ( )( )C U C A AC

    +

    min

  • 8/12/2019 Cuplaj MAXIM de Valoare Minima Intr-un Graf Bipartit

    2/3

    f o c u s

    GI nf onr .1

    5 / 3 -m ar t i e2

    0 0 5

    39

    naia), legate de vrfurile din A, res-pectivB ca n exemplul de la p. 517din [2].

    Se presupune c fiecare muchieare o capacitate pozitiv. n acest con-text se aplic algoritmul Ford-Fulker-sonobinndu-se soluia optim.

    n continuare v propun un algo-ritm original, rapid i foarte uor deimplementat. Pentru aceasta pornimde la cteva elemente de algebrsuperioar. Se tie c pentru a calculavaloarea determinantului asociat uneimatrice avem formula:

    unde reprezintsignaturapermutrii, iar fiecare din termeniisumei reprezint cte un produs cunelemente ale matricei A, n aa fel n-ct ele epuizeaz toate liniile i toatecoloanele matricei.

    Cu alte cuvinte, nu exist n niciun termen al sumei doi factori aflaipe aceeai linie sau aceeai coloan amatricei.

    Presupunem mai nti c avem| A| = |B| =n. n acest caz va trebui sdeterminm ntr-un mod asemntordefiniiei prezentate anterior terme-nul de va-loare minim, reinnd n acelai timpi permutarea care l-a generat.

    Introducem notaia:

    Astfel putem scrie expresia:

    Cu alte cuvinte, Ak+1se obinedin Ak prin bordare la dreapta i joscu elementele corespunztoate coloa-neik + 1, respectiv ale linieik + 1.

    Atam matricei An vectorul dedecizie , cu semnificaia:

    d i = j0 unde aij0 reprezint termenulde pe liniai ales la un pask (1 i, j0 k) n sumaSn, i k n. De aseme-nea, construim vectorul ,

    care memoreaz permutarea inversataat permutriid , adicvd i = i, saud v j = j (1 i, j0 k).

    Iterativ construim: A1 = (a11);d 1 = 1;S1 =a11; v1 = 1.Presupunem construite cele patru

    iruri pn n pasulk, k 1.Pentru pasulk + 1 ntreaga con-

    strucie urmrete: obinerea elementuluiSk+1 cu valoa-

    re minim, n sensul definiiei, cutermeni din matricea Ak+1folosindrezultatele obinute pn la pasulk;

    actualizarea vectorilor (d 1, d 2, ...,d k),respectiv (v1, v2, ...,vk).

    La acest pas se disting trei situaii: laSk se adaugak+1,k+1, caz n careefectum urmtoarele operaii:Sk+1=Sk +ak+1,k+1; d k+1= 1;vk+1= 1.

    Sk+1se formeaz adugnd termeniiai,k+1i ak+1, j pentru care avemd i = j,caz n care efectum operaiile:Sk+1=Sk - aij +ai,k+1+ak+1, j; d i =k + 1;d k+1= j; vk+1= i;v j =k + 1.

    Sk+1se formeaz adugnd termeniiai,k+1i ak+1, j pentru care avemd i j,caz n care se efectueaz operaiile:Sk+1=Sk - ai,d i - av j, j +av j,d i +ai,k+1+ak+1, j; d v j =d i;vd i =v j; d i =k + 1;vk+1= i; d k+1= j; v j =k + 1.

    n finalSn reprezint valoarea mi-nim a cuplajului maxim: (1,d 1), ...,(n, d n).

    Pentrun = | A| < |B| = m, algorit-mul parcurge urmtorii pai: se aplic algoritmul anterior i se

    determinSn, d n, vn; pentru valorile j cuprinse ntren + 1

    i m avem dacl i0 < 0, atunci se efectueaz urmtoa-rele actualizriSn =Sn + l i0; d i0 = j.

    ObservaieSoluia se exprim la fel ca n cazulalgoritmului prezentat anterior (cndmulimile A i Bau acelai numr deelemente).

    Pentrun = |B| < | A| = m, algorit-mul parcurge urmtorii pai: se aplic algoritmul anterior i se

    determinSn, d n, vn; pentru valorilei cuprinse ntren + 1

    im avem dac

    l j0 < 0, atunci se efectueaz urmtoa-

    rele actualizriSn =Sn + l j0; d v j0 = 0;v j0 = i;d i = j0.

    Observaien acest caz, la afiarea vectorului dedecizii ([3]), se poate parcurge irulpe coloane: (v1, 1), ..., (vn, n), sau seselecteaz acele linii, cresctor dupi, pentru cared i > 0.

    Algoritmul urmrete la fiecarepask optimizarea funciei obiectivi de aceea putem spune c se nca-

    dreaz n strategia generalGreedy.Urmrind etapele prezentate, sepoate demonstra, folosind cunotinede nivelul clasei a XI-a teorema careurmeaz.

    TeoremAlgoritmul prezentat determin uncuplaj maxim cu valoare minim.

    ExempluLa o secie au fost angajai ase lu-crtori pentru a lucra pe ase maini.

    n urma unor probe de lucru s-audeterminat numereleaij care repre-zint riscul pe care i-l asum patro-nul angajnd lucrtoruli pentru alucra pe maina j.

    Rezultatele au fost nregistrate nmatricea urmtoare:

    Ne propunem s determinmrepartizarea optim a angajailor pecele ase maini astfel nct riscul to-tal s fie minim.

    Pentru aceasta vom aplica algo-ritmul prezentat, artnd valorile ob-inute la fiecare pas.

    .

    501344184425 604036384115

    64731861458701612629018132390692429523914274317

    =k A

    ;min ,,10 jv jini j jaal =

    { ;min ,,10 id i jinii aal =

    ( ) niivv = 1

    ( ) niid d = 1

    .|\|

    1,11,1

    1,1

    1

    =+++

    ++

    kkk

    kk

    k

    aa

    a A A

    .

    21

    22221

    11211

    =

    kkkk

    k

    k

    k

    aaa

    aaaaaa

    A

    L

    MOMM

    L

    L

    ( ) ( ) ( )nndef

    n aaaS ,2,21,1 L=

    ( ) ( ) m1

    ( ) ( ) ( ) ( ) ( ),1 ,2,21,1

    =nS

    nnm

    def

    aaa A

    L

    ( ) n jiija A = ,1

  • 8/12/2019 Cuplaj MAXIM de Valoare Minima Intr-un Graf Bipartit

    3/3

    G I n f o n r .

    1 5 / 3 - m a r t

    i e 2 0 0 5

    40

    f o c u s

    Pasul #1

    S1 = 17; d 1 = 1; v1 = 1.

    Pasul #2

    S2 =S1 +a22= 41; d 2 = 2; v2 = 2.

    Pasul #3

    S3 =S2 +a13+a31- a11= 69; d 1 = 3; v1 = 3; v3 = 1; d 3 = 1.

    Pasul #4

    S4 =S3 +a14+a43- a13= 62; d 1 = 4; v4 = 1; d 4 = 3; v3 = 4.

    Pasul #5

    S5 =S4 +a14+a43- a13= 75; d 3 = 5; v5 = 3; d 5 = 1; v1 = 5.

    Pasul #6

    S6 =S5 +a26+a63- a22- a43+a42= 90;

    d 2 = 6; v6 = 2; d 4 = 2; v2 = 4; d 6 = 3; v3 = 6.

    Rezultatuln final vom obine:

    Aadar, ordinea lucrtorilor pemaini va fi: (1, 4), (2, 6), (3, 5), (4,2), (5, 1),(6, 3).

    AplicaieAcest algoritm poate fi utilizat pen-tru a rezolva problemaCulori , pro-pus spre rezolvare la runda #04 aediiei 2004/2005 a concursului deprogramareBursele Agora.

    Bibliografie:1.E. Tignescu, D. Mitru, Bazele

    cercetrii operaionale, EdituraAcademiei de Studii Economice,Bucureti, 1999;

    2.T. H. Cormen, C. E. Leiserson, R.R. Rivest, Introducere n algo-ritmi, Editura Computer LibrisAgora, Cluj-Napoca, 2000;

    3.I. Vieru, Rolul deciziei n progra-marea dinamic , GInfo 10/3, Edi-tura Agora Media, Trgu Mure,2000;

    4.I. Tomescu, Combinatoric iteoria grafurilor , Editura Universi-tii Bucureti, 1978.

    .

    5013444425606470

    52

    40363841791861458

    126290182390692939274317

    18

    13

    15

    1624

    14

    = A

    ;

    5013441844256064701352

    4036384179181458

    126290182390692939274317

    156

    1624

    14

    6

    = A

    ;

    403638411579181458

    161262902390692939274317

    6

    2414

    185

    = A

    ;

    1861458126290906929144317

    1824

    27

    4

    = A

    ;62901869292743

    2417

    3

    = A

    ;242943172 = A

    ( );171 = A xemplu d e i mplementare

    voi d cal cul ( ) {d[1] = 1;v[1] = 1;s = a[1] [ 1] ;

    f or ( k = 2; k = a[k ] [k ] ) {s += a[k][ k] ;d[k ] = k;v[k ] = k;

    }el se {

    s += l i 0;i f ( c0 == j 0) {

    d[ i 0] = k;d[k] = c0;v[c0] = k;v[ k] = i 0;

    }el se {

    d[ i 0] = k;v[ k] = i 0;d[u0] = j 0;v[ j 0] = u0;d[k ] = c0;

    v[c0] = k;}}

    }

    pr i nt f (" S= %d\ n" , s ) ;f or ( i = 1; i