La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Algoritmo di Ford-Fulkerson 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.

Presentazioni simili


Presentazione sul tema: "1 Algoritmo di Ford-Fulkerson 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."— Transcript della presentazione:

1 1 Algoritmo di Ford-Fulkerson 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 G f do calcola c(p) = min{c f (uv) : uv arco di p} for ogni arco uv di p do f(uv) f(uv) + c(p) f(vu) - f(uv) return f

2 2 Cammino aumentante u s y x v t Rete u s y x v t Nuovo flusso

3 3 u s y x v t Nuovo flusso u s y x v t Rete residua

4 4 Cammino aumentante u s y x v t Rete residua u s y x v t Nuovo flusso 7 7 7

5 5 u s y x v t u s y x v t Rete residua

6 6 Cammino aumentante u s y x v t Rete residua u s y x v t Nuovo flusso

7 7 u s y x v t Nuovo flusso u 5 11 s y x v t Rete residua

8 8 Cammino aumentante u 5 11 s y x v t Rete residua u s y x v t Nuovo flusso

9 9 u s y x v t Nuovo flusso u 1 11 s y x v t Rete residua

10 10 Complessità di Ford-Fulkerson. Il for di inizializzazione: for ogni uv E[G] do f(uv) f(vu) 0 richiede tempo O(m). Complessità di Ford Fulkerson Il test del ciclo while while esiste un cammino p da s a t in G f 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).

11 11 calcola c f (p) = min{c f (uv) : uv arco di p} for ogni arco uv di p do f(uv) f(uv) + c f (p) f(vu) - f(uv) Siccome queste istruzioni vengono ripetute per ogni cammino aumentante la complessità è O(m k) dove k è il numero di cammini aumentanti. Le istruzioni interne al ciclo while richiedono tempo O(n). In totale ogni iterazione del ciclo while richiede quindi tempo O(m) (per le ipotesi fatte n = O(m)).

12 12 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 lalgoritmo 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 |).

13 13 u s v 1 t 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).

14 14 La situazione peggiore si ha quando le capacità sono numeri reali. In questo caso lalgoritmo 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:

15 15 dove è il rapporto aureo che sappiamo soddisfa lequazione. Il flusso massimo è u s v t x y z w

16 16 1 u s v t x y z 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 u s v t x y z w

17 17 1 u s v t x y z w 1 1/ u s v t x y z w

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

19 / 1/ 2 1/ u s v t x y z w 1 1+1/ / 1/ + 1/ 2 1/ 3 1/ 2 u s v t x y z w

20 20 Procedendo in questo modo il flusso calcolato tende al limite:

21 21 Algoritmo di Edmonds-Karp. Edmonds e Karp hanno scoperto che se si usa la ricerca in ampiezza per trovare il cammino aumentante la complessità dellalgoritmo di Ford- Fulkerson risulta O(m 2 n). Per dimostrare il limite O(m 2 n) 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. Edmond Karp

22 22 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). Sia q un cammino minimo da s a v nella rete residua G g e sia u il vertice che precede v in q (il cammino deve esistere perché 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).

23 23 Siccome q è un cammino minimo e uv è il suo ultimo arco avremo che g (s,v) = g (s,u) + 1. Se in G f vi è larco uv allora f (s,v) f (s,u) + 1 per la disuguaglianza triangolare e quindi assurdo. Quindi G f non conteneva larco uv e siccome esso è comparso in G g il cammino aumentante p doveva contenere larco opposto vu.

24 24 Siccome p è un cammino minimo da s a t in G f anche i suoi sottocammini sono cammini minimi e quindi f (s,u) = f (s,v) + 1. Quindi assurdo. Quindi le distanze dalla sorgente nelle reti residue non possono aumentare quando si aumenta il flusso con il flusso di un cammino aumentante.

25 25 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(m 2 n). Diciamo che un arco uv della rete residua G f è critico nel cammino aumentante p se uv è un arco di p e c(uv) = c(p).

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

27 27 Dopo laumento del flusso un arco critico uv sparisce dalla rete residua e può riapparire soltanto dopo che sia stato trovato un successivo cammino aumentante contenente larco opposto vu. Quindi prima che larco uv possa ridiventare critico bisogna che il suo opposto vu sia apparso come arco di un cammino aumentante.

28 28 Quando uv è critico f (s,v) = f (s,u) + 1. Quando, in seguito, larco opposto vu compare in un cammino aumentante g (s,u) = g (s,v) + 1 e quando larco uv ridiventa critico h (s,v) = h (s,u) + 1. Ma le distanze non possono diminuire e quindi

29 29 Siccome le distanze finite sono tutte minori di n e tra due volte successive in cui larco uv diventa critico la distanza (s,v) aumenta di 2 larco uv può diventare critico al più n/2 volte. La complessità di Ford-Fulkerson nella versione di Edmonds-Karp è dunque O(m 2 n).

30 30 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. Massimo numero di coppie

31 31

32 32 Soluzione: trasformarlo in un problema di flusso!! s t

33 33 Cammino aumentante nella rete residua Nuovo flusso

34 34 Cammino aumentante nella rete residua Nuovo flusso

35 35 Cammino aumentante nella rete residua Nuovo flusso

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

37 37 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. esercizio 50

38 38 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 esercizio 50

39 39 Esercizio Sono date n task a 1,...,a n con tempi di esecuzione t 1,...,t n. Tali task si possono eseguire in parallelo utilizzando un numero sufficiente di processori. Lesecuzione deve però rispettare dei vincoli di propedeuticità rappresentati mediante coppie a i a j il cui significato è a i deve essere finita prima di iniziare lesecuzione di a j. Descrivere un algoritmo efficiente che calcola il tempo minimo necessario per eseguire tutte le task. esercizio 51*

40 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


Scaricare ppt "1 Algoritmo di Ford-Fulkerson 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."

Presentazioni simili


Annunci Google