Docstoc

Algoritmi e Strutture Dati mod B

Document Sample
Algoritmi e Strutture Dati mod B Powered By Docstoc
					             Algoritmo di Ford-Fulkerson

FordFulkerson(G, s, t)
  G rete di flusso con capacità c(u,v)
  for “ogni uv  E[G]” do
     f(uv)  f(vu)  0
  while “esiste un cammino p da s a t in Gf” do
    “calcola c(p) = min{cf(uv) : uv arco di p}”
    for “ogni arco uv di p” do
       f(uv)  f(uv) + c(p)
       f(vu)  - f(uv)
  return f

              Ford Fulkerson                      1
                               u           12       v
Rete                 16                                     20
                s         10       4       9        7            t

                     13                                     4
                               x                    y
                                           14
Cammino aumentante
                               u       4   12       v
                     16                                     20
                 4                              4
                s         10       4       9        7            t

                     13                                     4
Nuovo flusso                   x                    y
                                                        4
                                       4   14
                                                                     2
                               u       4       12       v
Nuovo flusso        16                                              20
                4                                   4
               s         10        4           9        7                t

                    13                                              4
                               x                            4
                                       4                y
                                               14

                                           8
Rete residua                   u
                                           4
                                                        v
                    12                                              20
                         4                 4
               s          10       4                    7                t
                                               5
                                                                4
                    13                          4
                               x                        y
                                               10
                                                                             3
                                             8
Rete residua                    u
                                             4
                                                          v
                     12                                               20
                          4                  4
                 s         10       4                     7                t
                                                 5
                                                                  4
                     13                           4
                                x                         y
                                                 10
Cammino aumentante
                                u       4        12       v
                                                              7
                   16                                                 20
                 11 7                                 4
                 s    10            4            9        7                t
                                                          7           4
                     13
Nuovo flusso                    x                         y
                                                              4
                                        11       14                            4
                         u       4        12        v
Nuovo flusso                                            7
                 16                                             20
               11 7                             4
               s    10       4            9         7                t
                                                    7
                   13                                           4
                         x                              4
                                 11                 y
                                          14

                                      8
Rete residua             u
                                      4
                                                    v
                   5                                            13
                       11             4                 7
               s         3 11                                        t
                                          5         7
                                                            4
                   13                      11
                         x                          y
                                          3
                                                                     5
                                            8
Rete residua                   u
                                            4
                                                          v
                         5                                            13
                             11             4                 7
                 s             3 11                                        t
                                                5         7
                                                                  4
                         13                      11
                               x                          y
                                                3
Cammino aumentante
                               u       12       12        v
                                                              15
                   16                                           20
                 11                                   4
                 s    10           4            9         7                t
                     8             1                      7           4
                         13
Nuovo flusso                   x                          y
                                                              4
                                       11       14                         6
                             u        12       12        v
Nuovo flusso     16                                           15
                                                                20
               11                                    4
               s    10            4            9         7               t
                                  1                      7
                   8                                                 4
                       13                                    4
                              x                          y
                                      11       14

                                           12
Rete residua                 u                           v
                       5                                             5
                           11              4                 15
               s             11 3                                        t
                                               5         7
                           8                                     4
                   5                            11
                              x                          y
                                               3
                                                                             7
                                          12
Rete residua                u                       v
                      5                                          5
                          11              4                 15
                 s          11 3                                     t
                                              5     7
                          8                                  4
                      5                        11
                             x                      y
                                              3
Cammino aumentante
                             u       12       12    v
                                                             19
                   16                                          20
                 11
                 s    10         4            9         7            t
                     12          1                      7        4
                       13
Nuovo flusso                 x                      y
                                                            4
                                     11       14                         8
                         u       12    12    v
Nuovo flusso                                      19
                 16                                 20
               11
               s    10       4         9     7               t
               12            1               7
                 13                                      4
                         x                       4
                                 11          y
                                       14
                                      12
Rete residua             u                   v
                   5                                     1
                       11                        19
               s        11 3           9                     t
                                             7
                       12                            4
                   1                    11
                         x                   y
                                       3
                                                                 9
                                             Complessità di Ford Fulkerson




Complessità di Ford-Fulkerson.
Il for di inizializzazione:
  for “ogni uv  E[G]” do
     f(uv)  f(vu)  0
richiede tempo O(m).
Il test del ciclo while
  while “esiste un cammino p da s a t in Gf” do
richiede il calcolo della rete residua (tempo O(m)) e la
ricerca di un cammino aumentante (tempo O(n+m)
e.g. con BFS).
                                                                             10
Le istruzioni interne al ciclo while
     “calcola cf(p) = min{cf(uv) : uv arco di p}”
     for “ogni arco uv di p” do
       f(uv)  f(uv) + cf(p)
       f(vu)  - f(uv)
richiedono tempo O(n).
In totale ogni iterazione del ciclo while richiede
quindi tempo O(m) (per le ipotesi fatte n = O(m)).
Siccome queste istruzioni vengono ripetute per ogni
cammino aumentante la complessità è O(m k) dove
k è il numero di cammini aumentanti.
                                                    11
La complessità dipende da come si scelgono i
cammini aumentanti.
Se vengono scelti male la complessità può essere
anche molto elevata e in qualche caso l’algoritmo
può anche non terminare.
Vediamo qualche limite superiore per k.

Se le capacità sono intere il flusso aumenta ad ogni
passo di almeno una unità e quindi k ≤ | f | e la
complessità è O(m | f |).

                                                    12
              1000000   u   1000000

          s             1             t

              1000000       1000000
                        v



Se le capacità sono razionali il flusso aumenta ad
ogni passo di almeno 1/d con d minimo comune
multiplo dei denominatori. In questo caso la
complessità è O(m | f | d).

                                                     13
La situazione peggiore si ha quando le capacità sono
numeri reali.
In questo caso l’algoritmo può anche non terminare: il
flusso può aumentare ad ogni passo di una quantità
sempre minore senza mai raggiungere il massimo (e a
volte senza neppure convergere al massimo).
Vediamo un esempio:



                                                  14
                               10                   10
                      u                    x                  z
             10                                                   10
                              10                   10
        s         9       1         10-                10            t
             10               10                   10             10
                      v        10          y        10        w



                     
dove φ  1  5 2 è il rapporto aureo che sappiamo
soddisfa l’equazione φ -1  1 φ . Il flusso massimo è 20.


                                                                           15
                               10                   10
                      u                    x                  z
             10                                                   10
                              10                   10
         s        9       1         10-                10            t
             10               10                   10             10
                      v        10          y        10        w

La somma delle capacità tra due vertici è sempre 10.
Indichiamo una sola delle capacità complementari x e
10-x e la omettiamo quando vale 10.
                      u                    x                  z


         s                1                                           t


                      v                    y              w                16
        u           x             z

s           1                                t


        v           y             w

                              1
        u           x             z

s                       1/           1       t
                1                         1
    1
        v           y             w

                                                  17
                                    1
          u               x               z

s                             1/             1            t
                     1                               1
     1
          v               y               w


                                    1
          u               x               z
    1/
                                                     1/

s             1/                             1/2         t
                     1              1/              1
     1
          v               y               w
                    1/
                                                               18
                                           1
            u                 x                 z
      1/
                                                           1/

  s             1/                                 1/2         t
                          1               1/              1
       1
            v                 y                 w
                        1/

                       1/2                1
            u                 x                 z
      1/
                                                           1/+ 1/2

  s             1/3              1/2                         t
                          1               1/              1
1+1/2
            v                 y                 w
                        1/              1/2
                                                                       19
Procedendo in questo modo il flusso calcolato tende
al limite:
              n 1        
     lim n   1 φ   1 φ  φ  20
                     i          i    2

              i 0       i 0




                                                 20
Algoritmo di Edmonds-Karp.
                          Edmond Karp


Edmonds e Karp hanno scoperto che se si usa la
ricerca in ampiezza per trovare il cammino
aumentante la complessità dell’algoritmo di Ford-
Fulkerson risulta O(m2n).

Per dimostrare il limite O(m2n) cominciamo con
dimostrare che la distanza f(s,v) di un vertice v dalla
sorgente s nella rete residua non diminuisce quando
il flusso viene incrementato con il flusso di un
cammino aumentante.
                                                      21
Assumiamo per assurdo che incrementando f si
ottenga un flusso g tale che per qualche vertice v si
abbia g(s,v) < f(s,v).

Di tali vertici prendiamo quello con distanza g(s,v)
minima di modo che g(s,u) ≥ f(s,u) per ogni u tale
che g(s,u) < g(s,v).

Sia q un cammino minimo da s a v nella rete residua
Gg e sia u il vertice che precede v in q (il cammino
deve esistere perché g(s,v) < f(s,v)  ).

                                                    22
Siccome q è un cammino minimo e uv è il suo ultimo
arco avremo che g(s,v) = g(s,u) + 1.
Se in Gf vi è l’arco uv allora f(s,v)  f(s,u) + 1 per
la disuguaglianza triangolare e quindi
 f ( s , v )   f ( s , u)  1   g ( s , u)  1   g ( s , v )
assurdo.
Quindi Gf non conteneva l’arco uv e siccome esso è
comparso in Gg il cammino aumentante p doveva
contenere l’arco opposto vu.
                                                                      23
Siccome p è un cammino minimo da s a t in Gf anche
i suoi sottocammini sono cammini minimi e quindi
f(s,u) = f(s,v) + 1. Quindi
 f ( s , v )   f ( s , u)  1   g ( s , u)  1   g ( s , v )  2
 assurdo.
Quindi le distanze dalla sorgente nelle reti residue
non possono aumentare quando si aumenta il flusso
con il flusso di un cammino aumentante.


                                                                          24
Siamo ora in grado di mostrare che il numero k di
cammini aumentanti è minore o uguale di mn e
dunque la complessità è O(m k) = O(m2n).


Diciamo che un arco uv della rete residua Gf è critico
nel cammino aumentante p se uv è un arco di p e
c(uv) = c(p).




                                                    25
Ogni cammino aumentante contiene almeno un arco
critico e gli archi che possono diventare critici sono
gli archi in E più eventualmente gli archi opposti.


Se dimostriamo che uno stesso arco non può
diventare critico più di n/2 volte allora il numero
totale di archi critici e quindi il numero k di cammini
aumentanti è minore o uguale di
                        2m n/2 = mn

                                                    26
Dopo l’aumento del flusso un arco critico uv sparisce
dalla rete residua e può riapparire soltanto dopo che
sia stato trovato un successivo cammino aumentante
contenente l’arco opposto vu.

Quindi prima che l’arco uv possa ridiventare critico
bisogna che il suo opposto vu sia apparso come arco
di un cammino aumentante.



                                                  27
Quando uv è critico f(s,v) = f(s,u) + 1.
Quando, in seguito, l’arco opposto vu compare in un
cammino aumentante g(s,u) = g(s,v) + 1 e quando
l’arco uv ridiventa critico h(s,v) = h(s,u) + 1.

Ma le distanze non possono diminuire e quindi
             h ( s , v )   h ( s , u)  1
                            g ( s , u)  1
                          g ( s, v )  2
                          f ( s, v )  2
                                                 28
Siccome le distanze finite sono tutte minori di n e tra
due volte successive in cui l’arco uv diventa critico la
distanza (s,v) aumenta di 2 l’arco uv può diventare
critico al più n/2 volte.


La complessità di Ford-Fulkerson nella versione di
Edmonds-Karp è dunque O(m2n).




                                                     29
                             Massimo numero di coppie




Problema del massimo numero di coppie.
Un grafo non orientato G = (V,E) si dice bipartito se
i suoi vertici si possono ripartire in due sottoinsiemi
S e D tali che ogni arco abbia estremi appartenenti a
sottoinsiemi distinti (E  SD).
Se xy è un arco diciamo che x e y si possono
accoppiare.
Il problema chiede di trovare un insieme massimo di
coppie distinte.

                                                        30
31
Soluzione: trasformarlo in un problema di flusso!!

                                      1
                                   1
                          1                    1
                              1    1 1      1
                              1                      t
                     s              1      1
                              1
                                  1 1      1
                              1   1




                                                   32
Cammino aumentante       Nuovo flusso
nella rete residua
             1                     1
          1                     1
 1                   1   1                   1
     1    1 1            11     1 1      1
                 1
     1                     1    11
           1     1                      11
     1                     1
         1 1     1             1 1       1
     1   1                 1   1




                                             33
Cammino aumentante       Nuovo flusso
nella rete residua
             1                     1
          1                     1
 1                   1   1                       1
     1    1 1            11    11
                                       11   11
                 1
     1                   11
           1     1               1          11
     1                    1
         1 1     1             1 1           1
     1   1                1    1




                                                 34
Cammino aumentante       Nuovo flusso
nella rete residua
             1                  11

          1              11     1          11
 1                   1
     1    1 1            11    11
                                     11   11
                 1
     1                   11
           1     1               1        11
     1                    1
         1 1     1             1 1         1
     1   1                1    1




                                               35
            1                      11

         1                 11       1         11
1                   1
    1    1 1               11      11
                                        11   11
                1
    1                      11
          1     1                   1        11
    1                        1
        1 1     1                 1 1         1
    1   1                    1     1




Rete residua            Vertici raggiungibili da s
                        nella rete residua e archi
                        che intersecano il taglio
                                                   36
                       esercizio 50


Esercizio
Descrivere un algoritmo che dato un grafo orientato
aciclico pesato sugli archi ed un vertice s calcola i
cammini massimi da s ad ogni altro vertice.




                                                   37
                       esercizio 50


Esercizio
Descrivere un algoritmo che dato un grafo orientato
aciclico pesato sugli archi ed un vertice s calcola i
cammini massimi da s ad ogni altro vertice.

Soluzione
Un qualunque algoritmo che calcola i cammini
minimi del grafo G’ con w’(u,v)=-w(u,v) e calcola



                                                    38
      esercizio 51*


Esercizio
Sono date n task a1,...,an con tempi di esecuzione
t1,...,tn. Tali task si possono eseguire in parallelo
utilizzando un numero sufficiente di processori.
L’esecuzione deve però rispettare dei vincoli di
propedeuticità rappresentati mediante coppie aiaj il
cui significato è “ai deve essere finita prima di
iniziare l’esecuzione di aj”.
Descrivere un algoritmo efficiente che calcola il
tempo minimo necessario per eseguire tutte le task.

                                                        39
• MinMakespan(G)
   a1,…,an Topological_Sort(G)
  for i=1 to n
     fiti
   for i=2 to n
      for j=1 to i-1
        if (aj,ai) in E and fi<fj+ai
           fifj+ai
  return maxi(fi)

                                       40

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:3
posted:3/9/2012
language:
pages:40