La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

Presentazioni simili


Presentazione sul tema: "1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso."— Transcript della presentazione:

1 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso peso totale ma anche i pesi dei singoli archi sono a due a due gli stessi. In altre parole se w 1 w 2... w n è la lista ordinata dei pesi degli archi di T e w' 1 w' 2... w' n è la lista ordinata dei pesi degli archi di T' allora w i = w' i per ogni i. Esercizio 46

2 2 Soluzione w 1 w 2... w i... w n E(T) : a 1 a 2... a i... a n w 1 w 2... w i... w n E(T) : a 1 a 2... a i... a n Se ai=ai per ogni i abbiamo finito. Altrimenti, sia i il primo indice per cui ai ai Mostriamo che wi=wi. Supponiamo wi>wi ai T non puo stare prima di ai perche sono tutti uguali non puo stare dopo ai perche wiwi altrimenti w(T-aj+ai)

3 Simmetricamente non puo essere wii, aj=ai. Allora scambio ai e aj 2) wi=wi e ai T quindi se aggiungo ai a T ottengo un ciclo tale ciclo ha un arck aj che non e in T tale arco non puo avere peso wi altrimenti scambiandoli otterrei un labero di peso inferiore deve essere wj=wi=wi scambio ai e aj e poi rimpiazzo ai con ai 3

4 4 Cammini minimi Sia G = (V,E) un grafo orientato ai cui archi è associato un peso w(uv). Cammini minimi Il peso di un cammino p = v 0,v 1,...,v k è la somma dei pesi degli archi che lo costituiscono.

5 5 Il peso di un cammino minimo da un vertice u ad un vertice v è definito nel seguente modo: Un cammino minimo da u a v è un cammino p da u a v di peso w(p) = (u,v). Nel problema dei cammini minimi viene appunto richiesto di calcolare i cammini minimi.

6 6 1) Cammini minimi da ununica sorgente a tutti gli altri vertici. 2) Cammini minimi da ogni vertice ad ununica destinazione. 3) Cammini minimi da ununica sorgente ad ununica destinazione. 4) Cammini minimi da ogni vertice ad ogni altro vertice. Vi sono quattro versioni del problema:

7 7 Noi risolveremo la prima istanza. La seconda istanza si risolve simmetricamente. La terza si può risolvere usando la soluzione della prima (non si conosce a tuttora alcun algoritmo che risolva la terza istanza in tempo asintoticamente migliore della prima). La quarta si può risolvere usando la soluzione della prima per ogni vertice del grafo ma in genere si può fare di meglio.

8 8 Archi di peso negativo. In alcuni casi il peso degli archi può anche essere negativo. Questo non crea problemi nella ricerca dei cammini minimi da una sorgente s a meno che non ci siano cicli di peso negativo raggiungibili da s. Se u è raggiungibile da s con un cammino che passa per un vertice v di un ciclo negativo allora esistono cammini da s a u di pesi sempre minori e il peso di un cammino minimo (s,u) non è definito. In questo caso poniamo (s,u) = -.

9 9 5 s

10 10 Sottostruttura ottima dei cammini minimi. Se il cammino p 1k = v 1,...,v k è minimo sono minimi anche tutti i sottocammini p ij = v i,...,v j, 1 i j k. Dimostrazione. Se esistesse un cammino q ij di peso minore di p ij sostituendo in p 1k il sottocammino p ij con q ij si otterrebbe un cammino q 1k da v 1 a v k di peso minore di p 1k. Impossibile se p 1k è minimo. Sottostruttura ottima

11 11 Cicli. Abbiamo visto che un cammino minimo non può contenere un ciclo negativo. Non può contenere neppure un ciclo positivo, altrimenti rimuovendo il ciclo otterremmo un cammino di peso inferiore. Può contenere un ciclo di peso zero ma rimuovendo tale ciclo otteniamo ancora un cammino minimo. Possiamo quindi limitarci a considerare cammini minimi semplici. Quindi lunghezza n-1.

12 12 Rappresentazione dei cammini minimi. In genere ci interessa calcolare non solo i pesi dei cammini minimi ma anche i cammini minimi stessi. Siccome i cammini minimi hanno sottostruttura ottima possiamo rappresentarli con un albero dei cammini minimi G' = (V',E') che è un albero radicato in s con V' insieme dei vertici raggiungibili da s e tale che per ogni v V' lunico cammino da s a v in G' è un cammino minimo in G.

13 13 Grafo dei predecessori. Gli algoritmi per cammini minimi mantengono un campo π[v] che punta al vertice precedente in un cammino minimo da s a v. I campi π[v] definiscono il sottografo dei predecessori: alla fine dellalgoritmo G π deve essere un albero di cammini minimi.

14 14 Tecnica del rilassamento. Gli algoritmi che studieremo usano la tecnica del rilassamento. Aggiungiamo ad ogni vertice v del grafo un campo d[v] che durante tutta lesecuzione dellalgoritmo è un limite superiore per (s,v) mentre alla fine è uguale a (s,v). Tecnica del rilassamento

15 15 Linizializzazione dei campi π[v] e d[v] è la stessa per tutti gli algoritmi. Inizializza(G, s) G grafo pesato sugli archi for ogni v V[G] do π[v] nil d[v] d[s] 0

16 16

17 17 Il rilassamento rispetto ad un arco uv consiste nel controllare se allungando il cammino da s a u con larco uv è possibile trovare un cammino da s a v migliore di quello trovato finora. Rilassa(uv) if d[v] > d[u] + w(uv) then d[v] d[u] + w(uv) π[v] u

18 18 Disuguaglianza triangolare. Per ogni arco uv Proprietà dei cammini minimi e del rilassamento Inoltre, dopo linizializzazione ed un numero qualsiasi di rilassamenti valgono le seguenti: Vertici non raggiungibili. Se v non è raggiungibile da s allora d[v] = (s,v) =. Limite superiore. d[v] (s,v) e non appena d[v] diventa uguale a (s,u) esso non cambia più.

19 19 Convergenza. Se u precede v in un cammino minimo e d[u] = (s,u) prima del rilassamento dellarco uv, allora d[v] = (s,v) dopo tale rilassamento. Rilassamento del cammino. Se p = v 0,...,v k è un cammino minimo da s = v 0 a v k e si esegue una sequenza di rilassamenti durante la quale vengono rilassati gli archi di p nellordine v 0 v 1,...,v k-1 v k allora d[v k ] = (s,v k ). Sottografo dei predecessori. Quando d[v] = (s,v) per ogni vertice v, lalbero dei predecessori è un albero dei cammini minimi.

20 20 Algoritmo di Bellman-Ford CammMinimiBellmanFord(G, s) G grafo pesato sugli archi Inizializza(G, s) for i 1 to n - 1 do for ogni uv E[G] do Rilassa(uv) for ogni uv E[G] do if d[v] > d[u] + w(uv) then return false return true true sse non ci sono cicli di peso negativo

21 21 u/ s/0 y/ x/ v/ u/6 x/7 ordine archi: uv ux uy vu xv xy yv ys su sx v/11 y/2 v/4u/2 y/-2

22 22 Complessità. La complessità dellalgoritmo di Bellman-Ford è O(m n). Correttezza. Supponiamo dapprima che non ci siano cicli negativi raggiungibili da s. Se v non è raggiungibile da s sappiamo che d[v] = (s,v) = e questo rimane vero anche dopo tutti i rilassamenti effettuati nel primo ciclo for. Se v è raggiungibile da s esiste un cammino minimo da s a v di lunghezza minore o uguale ad n-1.

23 23 Il primo ciclo for rilassa tutti gli archi per n-1 volte. Quindi la sequenza dei rilassamenti contiene come sottosequenza i rilassamenti degli archi del cammino minimo nellordine dal primo allultimo. Pertanto alla fine vale d[v] = (s,v). per ogni vertive v e quindi il secondo ciclo for termina e lalgoritmo ritorna true. Per la disuguaglianza triangolare

24 24 Supponiamo ci sia un ciclo negativo v 0,...,v k con v k = v 0 raggiungibile da s e supponiamo per assurdo che lalgoritmo ritorni true. Questo è possibile soltanto se per ogni i = 1,…,k Sommando su tutti gli i si ottiene Le prime due sommatorie sono uguali e la terza è il peso del ciclo che è negativo. Assurdo.

25 25 Esercizio Modificare lalgoritmo di Bellman e Ford in modo che esso ponga d[v] = - per ogni vertice v che è raggiungibile da s con un cammino che contiene un ciclo negativo. esercizio 49 CammMinimiBellmanFord(G, s) G grafo pesato sugli archi Inizializza(G, s) for i 1 to n - 1 do for ogni uv E[G] do Rilassa(uv) for ogni uv E[G] do if d[v] > d[u] + w(uv) then d[v] - return true

26 26 Cammini minimi in DAG Cammini minimi in grafi aciclici. Rilassando gli archi di un grafo aciclico in ordine topologico possiamo calcolare i cammini minimi in tempo O(n + m). Lalgoritmo è il seguente: CammMinimiDAG(G, s) G grafo diretto aciclico pesato sugli archi OrdinamentoTopologico(G, OrdTop) Inizializza(G, s) for i 1 to n - 1 do u OrdTop[i] for ogni v Adj[u] do Rilassa(uv)

27 27 r/ 25 3 s/ t/ u/ v/ x/ t/2u/6v/6x/4v/5x/3

28 28 Complessità. La complessità dellalgoritmo è O(n + m). Correttezza. Sia v un vertice qualsiasi raggiungibile da s e sia s = u 0, u 1,..., u k = v un cammino minimo da s a v. Lalgoritmo rilassa gli archi del cammino nellordine u 0 u 1, u 1 u 2,..., u k-1 u k e quindi alla fine d[v] = (s,v).

29 29 Algoritmo di Dijkstra Grafo orientato pesato con pesi non negativi Lalgoritmo di Dijkstra mette i vertici in una coda con priorità Q ordinata rispetto a d[v]. Algoritmo di Dijkstra CammMinimiDijkstra(G, s) G grafo pesato sugli archi Inizializza(G, s) Q V[G] while not Empty(Q) do u ExtractMin(Q) for ogni v Adj[u] do Rilassa(uv)

30 30 Il rilassamento può diminuire d[v]. Siccome v è inserito in una coda con priorità per diminuire il valore di d[v] dobbiamo effettuare una chiamata a DecreaseKey. La procedura Rilassa diventa quindi: Rilassa(uv) if d[v] > d[u] + w(uv) then DecreaseKey(v, d[u]+w(uv) ) π[v] u

31 31 u/ s/0 y/ x/ v/ s/0 u/10 x/5 u/8 y/7 v/14 y/7 v/13 u/8 v/9

32 32 Complessità. Escludendo le operazioni sulla coda Q lalgoritmo richiede tempo O(n + m). Sulla coda vengono eseguite n operazioni Insert, n operazioni ExtractMin e al più m operazioni DecreaseKey. Se implementiamo la coda Q con un mucchio binomiale le operazioni sulla coda richiedono tempo O((n + m) log n). Se usiamo mucchi di Fibonacci richiedono tempo O(n log n + m).

33 33 Correttezza. Dobbiamo mostrare che alla fine d[v] = (s,v) per ogni vertice v. Per far questo ci basta mostrare che d[v] = (s,v) quando il vertice viene estratto dalla coda Q. Infatti ogni vertice viene prima o poi estratto dalla coda e dal momento in cui d[v] = (s,v) il valore di d[v] non può più cambiare.

34 34 Assumiamo, per assurdo, che u sia il primo vertice estratto dalla coda per cui d[u] (s,u) e sia S linsieme dei vertici estratti prima di u. Siccome il primo vertice estratto dalla coda è la sorgente s e d[s] = 0 = (s,s) linsieme S contiene s e quindi u s. Per la proprietà del limite superiore d[u] (s,u) e quindi d[u] > (s,u). Dunque (s,u) < ed esiste un cammino minimo p da s a u.

35 35 Sia y il primo vertice del cammino p che non appartiene ad S, sia x il vertice precedente e suddividiamo il cammino p in un cammino p 1 da s a x, larco xy e il cammino p 2 da y a u. s xy u S p1p1 p2p2

36 36 Quando il vertice x è stato estratto da Q avevamo che d[x] = (s,x) e siccome a quel punto è stato rilassato larco xy anche d[y] = (s,y). Siccome y precede u nel cammino minimo p e non ci sono archi di peso negativo avremo che (s,u) (s,y) e quindi: d[u] (s,u) (s,y) = d[y] Ma u è il vertice estratto dalla coda e quindi d[u] = (s,u) = (s,y) = d[y] Assurdo.

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 51 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*

39 39 Esercizio Una scatola rettangolare a d dimensioni è definita dalle dimensioni x 1, x 2,..., x d dei suoi lati. La scatola X di lati x 1, x 2,..., x d puo essere racchiusa nella scatola Y di lati y 1, y 2,..., y d se esiste una permutazione degli indici 1,2,...,d tale che x (1) y 1, x (2) y 2,..., x (d) y d. esercizio 52

40 40 a)verificare che la relazione essere racchiudibile è transitiva. b)trovare un metodo efficiente per testare se una scatola è racchiudibile in unaltra scatola. c)trovare un algoritmo efficiente che dato un insieme di n scatole S 1, S 2,..., S n a d dimensioni, calcola la più lunga sequenza S i 1, S i 2,..., S i k di scatole racchiudibili una nellaltra.


Scaricare ppt "1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso."

Presentazioni simili


Annunci Google