limbaje algoritmi

54
Curs 9 Conectivitate: algoritmul lui Dijkstra. Ret ¸ele de transport: algoritmi de flux maxim Curs 9

description

limbaje algoritmi

Transcript of limbaje algoritmi

  • Curs 9Conectivitate: algoritmul lui Dijkstra.

    Retele de transport: algoritmi de flux maxim

    Curs 9

  • Continutul cursului

    1 Problema celor mai usoare cai de la un nod sursa ntr-undigraf ponderat

    Algoritmul lui Dijkstra

    2 Retele de transport si fluxuri

    Flux maximRetele reziduale, drumuri de crestereAlgoritmul Ford-FulkersonAplicatii

    Curs 9

  • Drumuri minime de la un nod sursa precizat

    Se da un digraf ponderat simplu G = (V ,E ) cuw : E 7 R+ si un nod sursa s V

    Se doreste pentru fiecare nod x V accesibil din s, o cea meausoara cale : s x , precum si greutatea ei w()

    Exemplu

    s

    x

    u

    y

    v10

    5

    2

    9

    1

    2 3 4 67

    [s] cu w([s]) = 0

    [s, x] cu w([s, x]) = 5

    [s, x , y ] cu w([s, x , y ]) = 7

    [s, x , u] cu w([s, x , u]) = 8

    [s, x , u, v ] cu w([s, x , u, v ]) = 9

    Observatie

    Problema poate fi rezolvata cu algoritmul lui Warshall:

    Calculeaza cele mai usoare cai existente pentru orice perechede noduriAre complexitatea O(|V |3) si calculeaza prea mult

    Exista un algoritm mai eficient, daca nodul sursa este fixat?

    Curs 9

  • Drumuri minime de la un nod sursa precizat

    Se da un digraf ponderat simplu G = (V ,E ) cuw : E 7 R+ si un nod sursa s V

    Se doreste pentru fiecare nod x V accesibil din s, o cea meausoara cale : s x , precum si greutatea ei w()

    Exemplu

    s

    x

    u

    y

    v10

    5

    2

    9

    1

    2 3 4 67

    [s] cu w([s]) = 0

    [s, x] cu w([s, x]) = 5

    [s, x , y ] cu w([s, x , y ]) = 7

    [s, x , u] cu w([s, x , u]) = 8

    [s, x , u, v ] cu w([s, x , u, v ]) = 9

    Observatie

    Problema poate fi rezolvata cu algoritmul lui Warshall:

    Calculeaza cele mai usoare cai existente pentru orice perechede noduriAre complexitatea O(|V |3) si calculeaza prea mult

    Exista un algoritm mai eficient, daca nodul sursa este fixat?

    Curs 9

  • Algoritmul lui DijkstraDescriere informala

    Propus de E. Dijkstra n 1956 pentru a rezolva problema anterioara

    1 Se atribuie

    o greutate tentativa d(x) pentru calea cea mai usoara la fiecare nod x .

    un nod precedent pi(x) fiecarui nod x pe calea cea mai usoara de la s la x .

    Initial avem d(x) =

    {0 daca x = s, daca x 6= s pi(x) =

    {nedef daca x = ss daca x 6= s

    unde nedef este o valoare speciala care indica inexistenta unui nod parinte.

    2 Creaza o multime Q de noduri nevizitate. Initial, Q := V , si tine evidenta unuinod curent crt.

    3 Alege crt :=nod din Q cu d(crt) = min{d(x) | x Q}, si elimina crt din Q.4 Pentru fiecare vecin x Q al lui crt actualizeaza valorile tenative ale lui d(x) sipi(x) astfel:

    Daca d(crt) + w((crt, x)) < d(x) atuncid(x) := d(crt) + w((crt, x)) si pi(x) := crt.

    Acest pas de actualizare se numeste pas de relaxare a arcului (crt, x) E .5 Daca Q = atunci stop, altfel goto 3.

    Curs 9

  • Algoritmul lui DijkstraPseudocod pentru operatiile auxiliare

    I InitializareInitOSursa(G , s)

    pentru fiecare v Vd(v) :=pi(v) := s

    d(s) := 0pi(s) := null

    I Pasul de relaxare a unui arc (u, v)Relaxeaza(u, v)Daca d(v) > d(u) + w((u, v))

    d(v) := d(u) + v((u, v))pi(v) := pi(u)

    s

    u

    v

    d(u)

    d(v)

    w((u, v))

    Curs 9

  • Algoritmul lui DijkstraPseudocod

    Dijkstra(G ,w , s)1 InitOSursa(G , s)2 Q := S3 while Q 6= 4 u :=ExtractMin(Q)5 for fiecare vecin v al lui u pentru care v 6 Q6 Relaxeaza(u, v)

    Complexitate temporala:

    B Algoritmul original: O(|V |2)B Algoritmul mbunatatit cu o coada cu prioritate minima:

    O(|E |+ |V | log |V |)

    Curs 9

  • Algoritmul lui DijkstraExemplu ilustrat: prima bucla while

    Conventie: Nodurile nemarcate nca (cele din Q) sunt albe;celelalte sunt cenusii

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :pi:s

    d :pi:s

    d :pi:s

    d :pi:s

    Configuratia produsa de InitializeSingleSource(G , s):

    Q = {s, x , y , u, v}Se selecteaza s = ExtractMin(Q)

    Se relaxeaza toate arcele care pleaca din s spre noduri nevizitatenca:

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :pi:s

    d :pi:s

    d :5pi:s

    d :pi:s

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :10pi:s

    d :pi:s

    d :5pi:s

    d :pi:s

    Curs 9

  • Algoritmul lui DijkstraExemplu ilustrat: a doua bucla while

    Se selecteaza si marcheaza x , si se relaxeaza toate arcele carepleaca din x spre noduri nemarcate:

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :8pi:x

    d :pi:s

    d :5pi:s

    d :pi:s

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :8pi:x

    d :14pi:x

    d :5pi:s

    d :pi:s

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :8pi:x

    d :14pi:x

    d :5pi:s

    d :7pi:x

    Curs 9

  • Algoritmul lui DijkstraExemplu ilustrat: a treia bucla while

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :8pi:x

    d :14pi:x

    d :5pi:s

    d :7pi:x

    Se selecteaza si marcheaza y , si se relaxeaza toate arcele carepleaca din y spre noduri nemarcate:

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :8pi:x

    d :13pi:y

    d :5pi:s

    d :7pi:x

    Curs 9

  • Algoritmul lui DijkstraExemplu ilustrat: a patra bucla while

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :8pi:x

    d :13pi:y

    d :5pi:s

    d :7pi:x

    Se selecteaza si marcheaza u, si se relaxeaza toate arcele carepleaca din u spre noduri nemarcate:

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :8pi:x

    d :9pi:u

    d :5pi:s

    d :7pi:x

    Curs 9

  • Algoritmul lui DijkstraExemplu ilustrat: a cincea bucla while

    s

    x

    u

    y

    v

    7

    10

    5

    2

    9

    1

    2 3 4 6d :0

    pi:nedef

    d :8pi:x

    d :9pi:u

    d :5pi:s

    d :7pi:x

    d(s) = 0

    d(x) = 5

    d(u) = 8

    d(y) = 7

    d(v) = 9

    pi(s) = nedef

    pi(x) = s

    pi(u) = x

    pi(y) = x

    pi(v) = u

    Se selecteaza si marcheaza v

    N-a mai ramas de relaxat nici un arc algoritmul se opreste.Din valorile lui pi si d putem extrage caile cele mai usoare:

    I la s: [s] cu greutatea w([s]) = d(s) = 0I la x : [s, x ] cu greutatea w([s, x ]) = d(x) = 5I la u: [s, x , u] cu greutatea w([s, x , u]) = d(u) = 8I la y : [s, x , y ] cu greutatea w([s, x , y ]) = d(y) = 7I la v : [s.x , u, v ] cu greutatea w([s, x , u, v ]) = d(v) = 9

    Curs 9

  • Arborele celor mai usoare cai de la un nod sursa

    Functia pi calculata de algoritmul lui Dijkstra determina un arboreGpi cu radacina s, n care fiecare nod x 6= s are parintele pi(x).Exemplu (Arborele Gpi pentru digraful simplu ponderat G ilustrat)

    s

    x

    u y

    v

    5

    23

    1

    Observatie

    Orice ramura a lui Gpi de la nodul sursa s la un nod x este o calecea mai usoara de la s la x .

    Curs 9

  • Referinte

    1 T. H. Cormen, C. E. Leiserson, R. L. Rivest. Sectiunea 25.2din Introduction to Algorithms. MIT Press, 2000.

    2 O implementare n C++ a algoritmului lui Dijkstra poate fidescarcata de pe pagina web a cursului (click aici)

    Curs 9

  • Retele de transport si fluxuriDefinitii intuitive (neformale)

    Retea de transport: Graf orientat n care muchiile modeleazafluxuri de materiale ntre noduri (litri de lichid,amperi de electricitate, etc.)

    Fiecare muchie are o capacitate maxima.Se doreste stabilirea unui flux de resurse de la unnod sursa (producatorul) la un nod destinatie(consumatorul).

    Flux debitul de deplasare a resurselor de-a lungulmuchiilor.

    Problema debitului maxim: Care este debitul maxim al unui flux deresurse de la sursa la destinatie, fara sa se violeze nici oconstrangere de capacitate maxima ale muchiilor?

    Curs 9

  • Retele de transportModel matematic

    Definitie (Retea de transport)

    Un graf orientat G = (V ,E ) n care fiecare muchie (u, v) E areo capacitate c(u, v) 0 si doua noduri speciale:

    o sursa s si

    o destinatie t.

    Daca (u, v) 6 E , se considera ca c(u, v) = 0.Scriem u v pentru a indica existenta unei cai de la u la v , sipresupunem ca fiecare nod v G este pe o cale de la s la t, adicaexista o cale s v t.

    Observatie

    O retea de transport este un graf conex, deci |E | |V | 1.

    Curs 9

  • Fluxuri

    Definitie

    Un flux n o retea de transport G este o functie f : V V Rcare satisface 3 conditii:

    Restrictie de capacitate: Pentru toti u, v V , f (u, v) c(u, v).Antisimetrie: pentru toti u, v V , f (u, v) = f (v , u).Conservarea fluxului: Pentru toti u V {s, t},

    vV

    f (u, v) = 0.

    f (u, v) se numeste fluxul net de la nodul u la v . Valoarea fluxuluif este |f | =vV f (s, v), adica, fluxul total de retea care pleacadin sursa.

    Problema fluxului maxim

    Se da o retea de transport G cu sursa s si destinatia t,

    Sa se gaseasca un flux cu valoare maxima de la s la t.

    Curs 9

  • Retele de transport si fluxuriNotiuni auxiliare

    Fluxul pozitiv de retea care intra ntr-un nod v esteuV

    f (u,v)>0

    f (u, v)

    Fluxul pozitiv de retea care pleaca dintr-un nod v esteuV

    f (v ,u)>0

    f (v , u)

    Din conservarea fluxului rezulta ca pentru orice nod v 6 {s, t}:fluxul pozitiv care intra n v = fluxul pozitiv care pleaca din v .

    Curs 9

  • Exemplu de retea de transport

    s

    v1

    v2

    v3

    v4

    t16

    13

    10 4

    12

    14

    7

    20

    4

    9

    (a)

    s

    v1

    v2

    v3

    v4

    t11/

    16

    8/13

    10 1/4

    12/12

    11/14

    7/7

    15/20

    4/4

    4/9

    (b)

    (a) Retea de transport G = (V ,E ) cu muchiile etichetate cucapacitatile lor. Sursa este s, destinatia este t.

    (b) Un flux f n reteaua de transport G cu valoarea |f | = 19.Sunt indicate doar fluxurile pozitive. Daca f (u, v) > 0,muchia (u, v) este etichetata cu f (u, v)/c(u, v). (Notatia cu/ separa fluxul de capacitate; nu reprezinta mpartire.) Dacaf (u, v) 0, muchia (u, v) este etichetata doar cu capacitateaei.

    Curs 9

  • Retele de transportStergerea tuturor fluxurilor negative de retea regula de anulare

    Daca v1 v2 > 0 atunci

    x y x y

    v1/c1

    v2/c2

    (v1 v2)/c1

    v2

    anulare

    Doar fluxurile pozitive de retea reprezinta transporturi ce auloc.

    Aplicatii ale regulii de anulare

    elimina fluxurile negative de retea.nu violeaza cele 3 restrictii ale retelelor de transport:

    1 constrangerea de capacitate2 antisimetria3 conservarea fluxului

    Curs 9

  • Surse si destinatii multiple

    O problema de debit maxim poate avea surse multiples1, . . . , sm si destinatii multiple t1, . . . , tn.

    O astfel de problema poate fi redusa la o problema echivalentacu o singura sursa si o singura destinatie:

    adauga o supersursa s si o superdestinatie tadauga muchii orientate (s, si ) cu c(s, si ) = pentru i = 1..madauga muchii orientate (tj , t) cu c(tj , t) = pentru j = 1..n

    Exemplu

    s1

    s2

    s3

    s4

    s5

    s1

    s2

    s3

    s4

    t1

    t2

    t3

    10

    12

    5

    8

    14

    7

    11

    2

    3

    15

    6

    20

    13

    18

    Curs 9

  • Surse si destinatii multiple

    O problema de debit maxim poate avea surse multiples1, . . . , sm si destinatii multiple t1, . . . , tn.

    O astfel de problema poate fi redusa la o problema echivalentacu o singura sursa si o singura destinatie:

    adauga o supersursa s si o superdestinatie tadauga muchii orientate (s, si ) cu c(s, si ) = pentru i = 1..madauga muchii orientate (tj , t) cu c(tj , t) = pentru j = 1..n

    Exemplu

    s1

    s2

    s3

    s4

    s5

    s1

    s2

    s3

    s4

    t1

    t2

    t3

    10

    12

    5

    8

    14

    7

    11

    2

    3

    15

    6

    20

    13

    18

    s

    s1

    s2

    s3

    s4

    s5

    s1

    s2

    s3

    s4

    t1

    t2

    t3

    t

    10

    12

    5

    8

    14

    7

    11

    2

    3

    15

    6

    20

    13

    18

    Curs 9

  • Operatii cu fluxuriConventii de notatie

    Se presupun date:

    o retea de transport G = (V ,E )o functie f de la V V la Rmultimile de noduri X ,Y (adica, X V , Y V )nodul u V .

    Atunci

    f (X ,Y ) reprezinta sumaxX

    yY

    f (x , y).

    f (u,X ) reprezinta sumaxX

    f (u, x).

    f (Y , u) reprezinta sumayY

    f (y , u).

    X u reprezinta multimea X {u}.Remarca. Daca f este un flux pentru G = (V ,E ) atuncif (u,V ) = 0 pentru toti u V {s, t}. Acest fapt rezulta dinconservarea fluxului f (V {s, t},V ) = 0.

    Curs 9

  • Proprietati ale retelelor de transport

    Lema

    Fie G = (V ,E ) o retea de transport si f un flux n G . Dacax ,Y ,Z V atunci

    f (X ,X ) = 0

    f (X ,Y ) = f (Y ,X )Daca X Y = atunciI f (X Y ,Z ) = f (X ,Z ) + f (Y ,Z ), siI f (Z ,X Y ) = f (Z ,X ) + f (Z ,Y )

    Se observa ca:

    |f | = f (s,V ) cf. definitiei= f (V ,V ) f (V s,V ) cf. lemei precedente= f (V ,V s) cf. lemei precedente= f (V , t) + f (V ,V {s, t}) cf. lemei precedente= f (V , t) cf. conservarii fluxului

    Curs 9

  • Operatii cu fluxuri

    Definitie

    Daca f1, f2 sunt fluxuri n o retea de transport G iar R, atuncisuma fluxurilor f1 si f2 este functia f1 + f2 de la V V la Rdefinita de

    (f1 + f2)(u, v) := f1(u, v) + f2(u, v) pentru toti u, v V .

    produsul scalar f1 este fluxul definit de functia de la V Vla R astfel ncat

    ( f1)(u, v) := f1(u, v) pentru toti u, v V .

    Curs 9

  • Operatii cu fluxuriExemple

    s

    v1

    v2

    v3

    v4

    t11/

    16

    8/13

    10 1/4

    12/12

    11/14

    7/7

    15/20

    4/4

    4/9

    (a) G si f1

    s

    v1

    v2

    v3

    v4

    t1/1

    6

    6/13

    10 1/4

    2/12

    9/14

    7/7

    5/20

    2/4

    4/9

    (b) G si f2

    s

    v1

    v2

    v3

    v4

    t12/

    16

    14/13

    10 1/4

    14/12

    20/14

    7/7

    20/20

    6/4

    4/9

    (c) G si f1 + f2

    s

    v1

    v2

    v3

    v4

    t.5/

    16

    3/13

    5 .5/4

    1/12

    4.5/14

    3.5/7

    2.5/20

    1/4

    2/9

    (d) G si f2 cand =12

    Curs 9

  • Operatii cu fluxuriExemple

    s

    v1

    v2

    v3

    v4

    t11/

    16

    8/13

    10 1/4

    12/12

    11/14

    7/7

    15/20

    4/4

    4/9

    (a) G si f1

    s

    v1

    v2

    v3

    v4

    t1/1

    6

    6/13

    10 1/4

    2/12

    9/14

    7/7

    5/20

    2/4

    4/9

    (b) G si f2

    s

    v1

    v2

    v3

    v4

    t12/

    16

    14/13

    10 1/4

    14/12

    20/14

    7/7

    20/20

    6/4

    4/9

    (c) G si f1 + f2

    s

    v1

    v2

    v3

    v4

    t.5/

    16

    3/13

    5 .5/4

    1/12

    4.5/14

    3.5/7

    2.5/20

    1/4

    2/9

    (d) G si f2 cand =12

    Curs 9

  • Operatii cu fluxuriExemple

    s

    v1

    v2

    v3

    v4

    t11/

    16

    8/13

    10 1/4

    12/12

    11/14

    7/7

    15/20

    4/4

    4/9

    (a) G si f1

    s

    v1

    v2

    v3

    v4

    t1/1

    6

    6/13

    10 1/4

    2/12

    9/14

    7/7

    5/20

    2/4

    4/9

    (b) G si f2

    s

    v1

    v2

    v3

    v4

    t12/

    16

    14/13

    10 1/4

    14/12

    20/14

    7/7

    20/20

    6/4

    4/9

    (c) G si f1 + f2

    s

    v1

    v2

    v3

    v4

    t.5/

    16

    3/13

    5 .5/4

    1/12

    4.5/14

    3.5/7

    2.5/20

    1/4

    2/9

    (d) G si f2 cand =12

    Curs 9

  • Operatii cu fluxuriIntrebari

    Un flux trebiue sa satisfaca 3 constrangeri: restrictia de capacitate,antisimetria si conservarea fluxului.

    1 Care proprietati nu sunt pastrate de sumele de flux?

    2 Care proprietati nu sunt pastrate de produsul scalar al fluxului?

    3 Sa se arate ca daca f1, f2 sunt fluxuri si 0 1, atunci f1 + (1 ) f2 este flux.

    Curs 9

  • Retele reziduale

    Ipoteze: G = (V ,E ): retea de transport; f : flux n G .

    capacitatea reziduala a unei muchii (u, v) estecf (u, v) := c(u, v) f (u, v).retea reziduala a lui G indusa de f este reteaua de transportGf = (V ,Ef ) unde Ef = {(u, v) V V | cf (u, v) > 0}, iarcapacitatea fiecarei muchii (u, v) este cf (u, v).

    Exemplu

    s

    v1

    v2

    v3

    v4

    t11/

    16

    8/13

    10 1/4

    12/12

    11/14

    7/7

    15/20

    4/4

    4/9

    (a) G si f

    s

    v1

    v2

    v3

    v4

    t

    5

    11

    5

    8

    11 3

    12

    11

    3

    7

    5

    15

    4

    5

    4(b) Gf

    Remarca. In general, |Ef | 2 |E |.Curs 9

  • Fluxuri n retele rezidualeProprietati

    Fie G o retea de transport, f un flux n G , si reteaua reziduala Gf . Daca

    f este un flux n Gf atunci f + f este flux n G cu valoarea|f + f | = |f |+ |f |.Demonstratie.

    Antisimetria are loc deoarece (f + f )(u, v) = f (u, v) + f (u, v) =f (v , u) f (v , u) = (f (v , u) + f (v , u)) = (f + f )(v , u).Pentru constrangerile de capacitate se observa caf (u, v) cf (u, v) pentru toti u, v V , deci (f + f )(u, v) =f (u, v) + f (u, v) f (u, v) + (c(u, v) f (u, v)) = c(u, v).Pentru conservarea fluxului observam ca

    vV(f + f )(u, v) =

    vV

    (f (u, v) + f (u, v))

    =vV

    f (u, v) +vV

    f (u, v) = 0 + 0 = 0.

    In final avem ca|f + f | =

    vV

    (f + f )(s, v) =vV

    (f (s, v) + f (s, v)) =vV

    f (s, v) +vV

    f (s, v) = |f | + |f |.

    Curs 9

  • Drumuri de crestere

    Un drum de crestere al unei retele de transport G si a unui flux feste o cale simpla de la s la t n reteaua reziduala Gf .

    Exemplu (Drum de crestere)

    s

    v1

    v2

    v3

    v4

    t

    5

    11

    5

    8

    11 3

    12

    11

    3

    7

    5

    15

    4

    5

    4

    Observatii.

    Fiecare muchie (u, v) a unui drum de crestere admite un fluxnet pozitiv suplimentar fara ca sa violeze capacitatea muchiei.

    In acest exemplu am fi putut trimite cel putin 4 unitati n plusde la s la t de-a lungul drumului de crestere marcat, fara aviola vreo restrictie de capacitate (Remarca: capacitateareziduala minima pe drumul de crestere marcat este 4).

    Curs 9

  • Drumuri de crestere (continuare)

    Capacitatea reziduala a unui drum de crestere p este data de

    cf (p) := min{cf (u, v) | (u, v) este pe p}.

    Lema

    Fie G = (V ,E ) o retea de transport cu un flux f , p un drum decrestere n Gf , si fp : V V R definit de

    fp(u, v) :=

    cf (p) daca (u, v) este pe p,cf (p) daca (v , u) este pe p,

    0 n celelalte cazuri.Atunci fp este un flux n Gf cu valoarea |fp| = cf (p) > 0.

    Corolar

    Fie G = (V ,E ) o retea de transport cu fluxul f , si p un drum decrestere n Gf . Fie fp fluxul definit ca n lema precedenta. Atuncif + fp este un flux n G cu valoarea |f | = |f |+ |fp| > |f |.

    Curs 9

  • Metoda Ford-Fulkerson

    Produce un flux maxim pentru o retea de transport G :

    Ford-Fulkerson-Method(G , s, t)1 initializeaza fluxul f cu 02 while exista un drum de crestere p3 creste fluxul f de-a lungul lui p4 return f

    Metoda Ford-Fulkerson este corecta deoarece are locurmatorul rezultat:

    Un flux este maxim daca si numai daca reteaua luireziduala nu contine drumuri de crestere.

    . Vom demonstra acest lucru.

    Notiuni auxiliare: taietura, capacitate a unei taieturi.

    Curs 9

  • Metoda Ford-Fulkerson

    Produce un flux maxim pentru o retea de transport G :

    Ford-Fulkerson-Method(G , s, t)1 initializeaza fluxul f cu 02 while exista un drum de crestere p3 creste fluxul f de-a lungul lui p4 return f

    Metoda Ford-Fulkerson este corecta deoarece are locurmatorul rezultat:

    Un flux este maxim daca si numai daca reteaua luireziduala nu contine drumuri de crestere.

    . Vom demonstra acest lucru.

    Notiuni auxiliare: taietura, capacitate a unei taieturi.

    Curs 9

  • Taieturi

    Definitie

    O taietura (S ,T ) a unei retele de transport G = (V ,E ) este opartitie a lui V n S si T = V S astfel ncat s S si t T .Fluxul net de-a lungul taieturii (S ,T ) este f (S ,T ). Capacitateataieturii (S ,T ) este c(S ,T ).

    Exemplu

    s

    v1

    v2

    v3

    v4

    t11/

    16

    8/13

    10 1/4

    12/12

    11/14

    7/7

    15/20

    4/4

    4/9

    S T

    S = {s, v1, v2}T = {v3, v4, t}

    f (S ,T ) = f (v1, v3)+f (v2, v3)+f (v2, v4) = 12+(4)+11 = 19c(S ,T ) = c(v1, v3) + c(v2, v4) = 12 + 14 = 26

    Curs 9

  • Proprietati ale taieturilor

    Lema

    Fluxul net de-a lungul oricarei taieturi (S ,T ) este f (S ,T ) = |f |.

    Corolar

    Pentru orice flux f si orice taietura (S ,T ) avem |f | c(S ,T ).

    Teorema (Flux maxim taietura minima)

    Daca f este un flux n o retea de transport G = (V ,E ) cu sursa ssi destinatia t, atunci conditiile urmatoare sunt echivalente:

    1 f este un flux maxim n G .

    2 Gf nu contine drumuri de crestere.

    3 |f | = c(S ,T ) pentru o taietura (S ,T ) a lui G .

    Curs 9

  • Teorema flux maxim taietura minima

    (1) (2) Prin contradictie: Presupunem ca f este flux maximn G si ca Gf are n drum de crestere p. Atunci f + fpar fi un flux G cu valoare strict mai mare decat |f |,contradictie.

    (2) (3) Presupunem ca Gf nu are drum de crestere de la s lat. Fie S = {v V | exista un drum de la s la v nGf } si T = V S . Atunci (S ,T ) este taieturadeoarece s S si t 6 S . Pentru orice pereche denoduri (u, v) S T avem v(u, v) = c(u, v)deoarece n caz contrar (u, v) Ef si v S . Rezultaca |f | = f (S ,T ) = c(S ,T ).

    (3) (1) Stim ca |f | c(S ,T ) pentru toate taieturile (S ,T )ale lui G . Din conditia |f | = c(S ,T ) rezulta ca feste flux maxim.

    Curs 9

  • Algoritmul Ford-Fulkerson de baza

    Ford-Fulkerson(G , s, t)1 for fiecare muchie (u, v) a lui G2 f (u, v) := 03 f (v , u) := 04 while drum p de la s la t n Gf5 cf := min{cf (u, v) | (u, v) este n p}6 for fiecare muchie (u, v) n p7 f (u, v) := f (u, v) + cf (p)8 f (v , u) := f (u, v)

    Curs 9

  • Algoritmul Ford-Fulkerson de bazaExemplu ilustrat

    s

    v1

    v2

    v3

    v4

    t16

    13

    10 4

    12

    14

    7

    20

    4

    9(a)

    Retea reziduala Gf cudrum de crestere (linia 4)

    s

    v1

    v2

    v3

    v4

    t4/1

    6

    13

    10 4

    4/12

    4/14

    7

    20

    4/4

    4/9

    Flux net ce rezulta dinadaugarea lui fp la f

    s

    v1

    v2

    v3

    v4

    t12

    4

    13

    10 4

    8

    4

    10

    4

    7

    20

    4

    5

    4(b) s

    v1

    v2

    v3

    v4

    t11/

    16

    13

    7/10 4

    4/12

    11/14

    7/7

    7/20

    4/4

    4/9

    s

    v1

    v2

    v3

    v4

    t5

    11

    13

    3 11

    8

    4

    3

    11

    7

    13

    7

    4

    5

    4(c) . . . . . . . . .

    Exercitiu: sa se deseneze grafurile pentru pasii ramasi ai algoritmului lui

    Ford-Fulkerson.Curs 9

  • Algoritmul Ford-Fulkerson de bazaAnaliza complexitatii

    Timpul de executie depinde de felul cum se calculeaza drumulde crestere p n linia 4 a algoritmului.

    Ipoteza: toate muchiile au numere ntregi ca si capacitati(adica 0,1,2,. . . ).

    Daca capacitatile sunt numere rationale, le putem nlocui cunumere ntregi facand o operatie de scalare corespunzatoare.

    O implementare directa a algoritmului Ford-Fulkersondureaza O(E |f |) unde f este fluxul maxim gasit dealgoritm.

    Motiv: bucla while din liniile 4-8 se executa de cel mult |f |ori deoarece valoarea fluxului creste cu cel putin 1 de fiecaredata.

    Curs 9

  • Algoritmul Ford-Fulkerson de bazaAnaliza complexitatii

    Timpul de executie depinde de felul cum se calculeaza drumulde crestere p n linia 4 a algoritmului.

    Ipoteza: toate muchiile au numere ntregi ca si capacitati(adica 0,1,2,. . . ).

    Daca capacitatile sunt numere rationale, le putem nlocui cunumere ntregi facand o operatie de scalare corespunzatoare.

    O implementare directa a algoritmului Ford-Fulkersondureaza O(E |f |) unde f este fluxul maxim gasit dealgoritm.

    Motiv: bucla while din liniile 4-8 se executa de cel mult |f |ori deoarece valoarea fluxului creste cu cel putin 1 de fiecaredata.

    Curs 9

  • Algoritmul Ford-Fulkerson de bazaAnaliza complexitatii

    Timpul de executie depinde de felul cum se calculeaza drumulde crestere p n linia 4 a algoritmului.

    Ipoteza: toate muchiile au numere ntregi ca si capacitati(adica 0,1,2,. . . ).

    Daca capacitatile sunt numere rationale, le putem nlocui cunumere ntregi facand o operatie de scalare corespunzatoare.

    O implementare directa a algoritmului Ford-Fulkersondureaza O(E |f |) unde f este fluxul maxim gasit dealgoritm.

    Motiv: bucla while din liniile 4-8 se executa de cel mult |f |ori deoarece valoarea fluxului creste cu cel putin 1 de fiecaredata.

    Curs 9

  • Algoritmul Ford-Fulkerson de bazaAnaliza complexitatii

    Timpul de executie depinde de felul cum se calculeaza drumulde crestere p n linia 4 a algoritmului.

    Ipoteza: toate muchiile au numere ntregi ca si capacitati(adica 0,1,2,. . . ).

    Daca capacitatile sunt numere rationale, le putem nlocui cunumere ntregi facand o operatie de scalare corespunzatoare.

    O implementare directa a algoritmului Ford-Fulkersondureaza O(E |f |) unde f este fluxul maxim gasit dealgoritm.

    Motiv: bucla while din liniile 4-8 se executa de cel mult |f |ori deoarece valoarea fluxului creste cu cel putin 1 de fiecaredata.

    Curs 9

  • Analiza complexitatiiUn exemplu care dureaza (E |f |)

    s

    u

    v

    t100

    0000

    1000000

    1

    1000000

    100000

    0

    (a)

    s

    u

    v

    t

    999999

    1

    1000000

    1

    1000000

    999999

    1

    (b)

    s

    u

    v

    t

    999999

    1

    999999

    11

    9999991

    999999

    1

    (c)

    Un flux maxim f n reteaua de transport (a) are|f | = 2000000. A alegere proasta de drum de crestere cucapacitatea 1 este marcata cu rosu.(b) si (c) ilustreaza retelele reziduale produse dupa crestereacu drumul de crestere marcat cu rosu.

    Complexitatea algoritmului se mbunatateste daca p n linia 4se calculeaza folosind o cautare n latime care garanteaza ca peste o cale cea mai scurta de la s la t n reteaua reziduala, ncare fiecare muchie are o distanta unitara (greutate) algoritmul Edmonds-Karp cu complexitatea O(|V | |E |2).

    Curs 9

  • Analiza complexitatiiUn exemplu care dureaza (E |f |)

    s

    u

    v

    t100

    0000

    1000000

    1

    1000000

    100000

    0

    (a)

    s

    u

    v

    t

    999999

    1

    1000000

    1

    1000000

    999999

    1

    (b)

    s

    u

    v

    t

    999999

    1

    999999

    11

    9999991

    999999

    1

    (c)

    Un flux maxim f n reteaua de transport (a) are|f | = 2000000. A alegere proasta de drum de crestere cucapacitatea 1 este marcata cu rosu.(b) si (c) ilustreaza retelele reziduale produse dupa crestereacu drumul de crestere marcat cu rosu.Complexitatea algoritmului se mbunatateste daca p n linia 4se calculeaza folosind o cautare n latime care garanteaza ca peste o cale cea mai scurta de la s la t n reteaua reziduala, ncare fiecare muchie are o distanta unitara (greutate) algoritmul Edmonds-Karp cu complexitatea O(|V | |E |2).

    Curs 9

  • Aplicatii si extensiiAplicatia 1: Cuplaje n grafuri bipartite

    Fie B = (V ,E ) un graf bipartit ntre submultimile V1 si V2 ale luiV .

    Definitie (cuplaj, cuplaj maxim)

    Un cuplaj n B este o multime de muchii C E cu proprietatea caoricare 2 muchii din C nu au un capat comun. Cuplajul C estemaxim daca are un numar maxim de muchii.

    Calculul unui cuplaj maxim n B = (V1 V2,E ) se poate faceastfel:

    1 Extindem B cu 2 noduri noi: s (sursa) si t (destinatie), apoicu arcuri cu capacitatea 1 de la s la toate nodurile din V1, side la toate nodurile din V2 la t. Toate muchiile lui G seorienteaza de la V1 la V2, cu capacitatea 1.

    2 Se calculeaza un flux maxim de la s la t.

    Curs 9

  • Aplicatii si extensiiAplicatia 1: Cuplaje n grafuri bipartite

    Construirea unei retele de flux pentru un graf bipartit:

    Exemplu

    x1

    x2

    x3

    x4

    x5

    y1

    y2

    y3

    y4

    s t

    Cuplaj maxim C = {(x2, y1), (x3, y2), (x4, y4), (x5, y3)}

    Teorema

    Fie G reteaua de flux construita pentru un graf bipartit B = (V1 V2,E )si f un flux maxim n G . Atunci multimea muchiilor (u, v) ale lui f cu

    u V1, v V2 si f (u, v) = 1 este un cuplaj maxim n B.

    Curs 9

  • Aplicatii si extensiiAplicatia 1: Cuplaje n grafuri bipartite

    Construirea unei retele de flux pentru un graf bipartit:

    Exemplu

    x1

    x2

    x3

    x4

    x5

    y1

    y2

    y3

    y4

    s t

    Cuplaj maxim C = {(x2, y1), (x3, y2), (x4, y4), (x5, y3)}

    Teorema

    Fie G reteaua de flux construita pentru un graf bipartit B = (V1 V2,E )si f un flux maxim n G . Atunci multimea muchiilor (u, v) ale lui f cu

    u V1, v V2 si f (u, v) = 1 este un cuplaj maxim n B.

    Curs 9

  • Aplicatii si extensiiAplicatia 1: Cuplaje n grafuri bipartite

    Construirea unei retele de flux pentru un graf bipartit:

    Exemplu

    x1

    x2

    x3

    x4

    x5

    y1

    y2

    y3

    y4

    s t

    Cuplaj maxim C = {(x2, y1), (x3, y2), (x4, y4), (x5, y3)}

    Teorema

    Fie G reteaua de flux construita pentru un graf bipartit B = (V1 V2,E )si f un flux maxim n G . Atunci multimea muchiilor (u, v) ale lui f cu

    u V1, v V2 si f (u, v) = 1 este un cuplaj maxim n B.

    Curs 9

  • Aplicatii si extensiiAplicatia 1: Cuplaje n grafuri bipartite

    Construirea unei retele de flux pentru un graf bipartit:

    Exemplu

    x1

    x2

    x3

    x4

    x5

    y1

    y2

    y3

    y4

    s t

    Cuplaj maxim C = {(x2, y1), (x3, y2), (x4, y4), (x5, y3)}

    Teorema

    Fie G reteaua de flux construita pentru un graf bipartit B = (V1 V2,E )si f un flux maxim n G . Atunci multimea muchiilor (u, v) ale lui f cu

    u V1, v V2 si f (u, v) = 1 este un cuplaj maxim n B.Curs 9

  • Aplicatii si extensiiAplicatia 2: Flux maxim de cost minim

    Problema

    G = (V ,E ): retea de transport n care muchiile (u, v) au asociate,pe langa o capacitate, si un cost unitar cost(u, v) 0.Un flux maxim de cost minim n G este un flux maxim f n Gpentru care suma

    (u,v)Ef (u, v) cost(u, v)

    este minima.

    Curs 9

  • Aplicatii si extensiiAplicatia 2: Flux maxim de cost minim

    Solutie: Adaptare a algoritmului Edmonds-Karp

    Se asociaza costuri la toate muchiile din retelele reziduale aleunui flux f :

    muchia (u, v) are costul cost(u, v) daca c(u, v) > f (u, v) nreteaua originalamuchia (u, v) are costul cost(u, v) daca f (u, v) < 0 nreteaua originala

    In loc de drum cel mai scurt de la sursa s la destinatia t, secauta un drum p de la s la t cu cost minim n reteauareziduala.

    p poate fi gasit cu algoritmul lui Bellman-Ford.

    Apoi, fluxul va fi incrementat pe drumul p cu valoareamaxima posibila (=minimul diferentelor dintre capacitate siflux pentru fiecare arc de pe drum).

    Curs 9

  • Bibliografie

    Capitolul 27 din

    T. H. Cormen, C. E. Leiserson, R. L. Rivest. Introduction toAlgorithms. MIT Press, 2000.

    Curs 9