Algoritmo di Ford-Fulkerson

Slides:



Advertisements
Presentazioni simili
Premessa: si assume di aver risolto (correttamente
Advertisements

Flusso Massimo Applicazione di algoritmi
Algoritmi e Strutture dati Mod B
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Strutture dati per insiemi disgiunti
Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
Sistema di riferimento sulla retta
6. Catene di Markov a tempo continuo (CMTC)
Frontespizio Economia Monetaria Anno Accademico
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Algoritmi e Strutture Dati
Cammini minimi con una sorgente
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Cammini minimi con sorgente singola
6. Catene di Markov a tempo continuo (CMTC)
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
Ordini Parziali - Reticoli
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Algoritmi e Strutture Dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Flusso Massimo Applicazione di algoritmi
Flusso Massimo Applicazione Algoritmi Esercizio 1 Sia dato la seguente rete di flusso, in cui la sorgente è il nodo 1 e la destinazione è il nodo 6. I.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Algoritmi e Strutture Dati (Mod. B)
Trovare il percorso minimo da b ad ogni altro vertice
Algoritmi e Strutture Dati
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Algoritmi greedy Gli algoritmi greedy in genere non sono esatti, cioè determinano soluzioni non necessariamente ottime Per il problema dell’albero ricoprente.
Num / 36 Lezione 9 Numerosità del campione.
1 Algoritmo di Ford-Fulkerson s t G: Valore del flusso = 0 0 flusso capacità
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Elementi di Informatica di base
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Radix-Sort(A,d) // A[i] = cd...c2c1
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi su grafi I grafi sono strutture dati che vengono usate estensivamente in informatica. Ci sono migliaia di problemi computazionali che sono importanti.
Prof. Cerulli – Dott.ssa Gentili
LE SAI LE TABELLINE? Mettiti alla prova!.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
14 marzo 2002 Avvisi:.
Cammini minimi da un sorgente
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Flusso Massimo Applicazione di algoritmi
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Flusso di Costo Minimo Applicazione di algoritmi: Cammini Minimi Successivi (SSP) Esercizio 1 Sia data la seguente rete di flusso, in cui i valori riportati.
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Cammini minimi in grafi:
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi per il flusso nelle reti
Algoritmi per il flusso nelle reti
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Transcript della presentazione:

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

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

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

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

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

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

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

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

Nuovo flusso Rete residua u 20 12 16 s y x v 13 10 7 4 14 9 t 11 1 19 5 12 19

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

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.

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

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

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:

10 10 u x z 10 10 10 10 s 9 1 10-  t 10 10 10 10 10 v y w 10 10 dove è il rapporto aureo che sappiamo soddisfa l’equazione . Il flusso massimo è 20.

10 10 u x z 10 10 10 10 s 9 1 10-  t 10 10 10 10 10 v y w 10 10 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. 1  u s v t x y z w

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

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

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

Procedendo in questo modo il flusso calcolato tende al limite:

Algoritmo di Edmonds-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). Edmond Karp 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.

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)  ).

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 assurdo. Quindi Gf non conteneva l’arco uv e siccome esso è comparso in Gg il cammino aumentante p doveva contenere l’arco opposto vu.

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 assurdo. Quindi le distanze dalla sorgente nelle reti residue non possono aumentare quando si aumenta il flusso con il flusso di un cammino aumentante.

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

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

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.

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

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

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.

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

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

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

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

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

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.

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

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.

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)