La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Esercizio Trovare il percorso minimo da b ad ogni altro vertice c 4 2 14 3 4 4 ef d b a 5 1 1 04 2 35 8 c 4 2 14 3 4 4 ef d b a 5 1 1.

Presentazioni simili


Presentazione sul tema: "Esercizio Trovare il percorso minimo da b ad ogni altro vertice c 4 2 14 3 4 4 ef d b a 5 1 1 04 2 35 8 c 4 2 14 3 4 4 ef d b a 5 1 1."— Transcript della presentazione:

1 Esercizio Trovare il percorso minimo da b ad ogni altro vertice c ef d b a c ef d b a 5 1 1

2 0 u 1 1 vwx ts u 1 1 vwx ts u 1 1 vwx ts u 1 1 vwx ts

3 u 1 1 vwx ts u 1 1 vwx ts u 1 1 vwx ts u 1 1 vwx ts

4 u 1 1 vwx ts u 1 1 vwx ts Soluzione di Dijkstra Soluzione Ottimale Problems with Dijkstras Algorithm

5 Algoritmo di Bellman-Ford Inizalmente, d[s] = 0 e d[u] = per u s Vengono fatte |V| - 1 passate Ad ogni passata, applica il rilassamento ad ogni arco Bellman_Ford(G,s) Inizializza(G,s,d) for i = 1 to |V|-1 do for each arco (u,v) in E do relax(u,v,w) for each arco (u,v) in E do if d[v] > d[u] + w(u,v) then return FALSE return TRUE Tempo = O(|V||E|)

6 u 1 1 vwx ts u 1 1 vwx ts u 1 1 vwx ts u 1 1 vwx ts

7 u 1 1 vwx ts u 1 1 vwx ts u 1 1 vwx ts

8 Bellman-Ford: correttezza Teorema: Se eseguiamo lalgoritmo di Bellman- Ford su un grafo pesato orientato G = (V, E), con funzione di peso w: E che mappa archi in pesi a valori reali, e un vertice sorgente s: se non esistono cicli negativi raggiungibili da s, allora lalgoritmo ritorna TRUE, d[v] = (s,v) per tutti i vertici v in V e il grafo dei predecessori G p è lalbero dei percorsi minimi; se esistono cicli negativi raggiungibili da s, allora lalgoritmo ritorna FALSE.

9 Bellman-Ford: correttezza Lemma 8: Se eseguiamo lalgoritmo di Bellman- Ford su un grafo pesato orientato G = (V, E), con funzione di peso w: E che mappa archi in pesi a valori reali, e un vertice sorgente s e non esistono cicli negativi raggiungibili da s, allora alla terminazione d[v] = (s,v) per tutti i vertici v in V.

10 Bellman-Ford: correttezza Dimostrazione: Sia v un vertice raggiungibile da s e p= un percorso minimo tra s e v (v 0 =s e v k =v). Poiché p deve essere semplice, non può avere più di |V|-1 archi (cioè k |V|-1). Per induzione su k dimostriamo che d[v i ] = (s,v i ) dopo i passi sugli archi di G e che poi non cambia più. Poiché vengono fatte esattamente |V|-1 passi dallalgoritmo, questo è sufficiente a dimostrare il lemma.

11 Bellman-Ford: correttezza Dimostrazione: Sia v un vertice raggiungibile da s e p= un percorso minimo tra s e v (v 0 =s e v k =v). Per induzione su k dimostriamo che d[v i ] = (s,v i ) dopo i passi sugli archi di G e che poi non cambia più. Base: d[v 0 ] = d[s] = 0 = (s,s) e il Lemma 4 garanti- sce che non cambia più. Induzione: Assimuamo che valga per i-1 cioè che d[v i-1 ] = (s,v i-1 ) dopo il passo i-1. Si rilassa larco (v i-1,v i ) al passo i e per il Lemma 5 concludiamo che d[v i ] = (s,v i ) da allora in poi.

12 Bellman-Ford: correttezza Corollario 3: Sia G = (V, E) un grafo pesato orientato con funzione di peso w: E che mappa archi in pesi a valori reali, e s un vertice sorgente. Allora, per ogni nodo v S, esiste un percorso da s a v se e solo se alla terminazione dellalgoritmo di Bellman-Ford vale d[v] <. Dimostrazione: Simile al Lemma 8 precedente.

13 Bellman-Ford: correttezza Dimostrazione teorema: caso 1: Non ci sono cicli negativi raggiungibili da s Allora per ogni v V vale d[v] = (s,v) infatti, se v è raggiungibile da s Lemma 8 se v non è raggiungibile da s Corollario 3 Da questo e dal Lemma 7 sappiamo inoltre che G p è un albero dei percorsi minimi. Lalgoritmo restituisce TRUE poiché, per ogni (u,v) E, vale che d[v] = (s,v) e per Lemma 2, d[v] = (s,v) (s,u) + w(u,v) = d[u] + w(u,v) Quindi nessuno dei controlli dellalgoritmo (dopo il while) è verificato, perciò ritorna TRUE.

14 Contraddizione! Bellman-Ford: correttezza Dimostrazione teorema: caso 2: Ci sono cicli negativi raggiungibili da s, e sia p= uno di tali cicli (v 0 = v k ). Allora w(v i-1,v i ) < 0 i=1…k Supponiamo che lalgoritmo ritorni TRUE. Allora d[v i ] d[v i-1 ] + w(v i-1,v i ) per i = 1,…,k Sommando le disuguaglianze lungo il ciclo si ha d[v i ] d[v i-1 ] + w(v i-1,v i ) i=1…k i=1…k i=1…k k Ma come per il Lemma 6 otterremo che 0 w(v i-1,v i ) i=1…k k

15 Trovare il percorso minimo da u ad ogni altro vertice Esercizio 0 w xy v u w xy v u

16 Grafi: Percorsi minimi Percorsi minimi da una singola sorgente Trovare il percoso minimo dalla sorgente s ad ogni altro vertice Percorsi minimi per tutte le coppie Trovare il percoso minimo tra tutte le coppie di vertici Input: G = (V, E) un grafo orientato e w: E una funzione di peso. Output: per ogni coppia di vertici i,j V il percorso minimo tra i e j. Una tabella D=(d ij ) contenente la distanza minima tra i vertici i e j.

17 Grafi: Percorsi minimi Percorsi minimi da una singola sorgente Trovare il percoso minimo dalla sorgente s ad ogni altro vertice Percorsi minimi per tutte le coppie Trovare il percoso minimo tra tutte le coppie di vertici Eseguire lalgoritmo di Dijkstra |V| volte (ma solo se i pesi sono non-negativi) Eseguire lalgoritmo di Bellman-Ford |V| volte

18 Grafi: Percorsi minimi Percorsi minimi da una singola sorgente Trovare il percoso minimo dalla sorgente s ad ogni altro vertice Percorsi minimi per tutte le coppie Trovare il percoso minimo tra tutte le coppie di vertici Eseguire lalgoritmo di Dijkstra |V| volte (ma solo se i pesi sono non-negativi) Eseguire lalgoritmo di Bellman-Ford |V| volte O(|V| 3 ) O(|V| 2 |E|) O(|V| 4 ) grafo denso O(|V||E| log|V|) o

19 Grafi: Percorsi minimi Percorsi minimi per tutte le coppie Trovare il percoso minimo tra tutte le coppie di vertici Input: G = (V, E) un grafo orientato w: E una funzione di peso Il grafo può allora essere rappresentato come una matrice di adiacenza W = (w ij ) di dimensione n n, così definita:

20 Grafi: Percorsi minimi Percorsi minimi per tutte le coppie Trovare il percoso minimo tra tutte le coppie di vertici Output: per ogni coppia di vertici i,j V il percorso minimo tra i e j. Una tabella D=(d ij ) contenente la distanza minima tra i vertici i e j.

21 Grafi: Percorsi minimi Una tabella P=(p ij ) contenente il predecessore di j lungo il percorso minimo da i a j. Percorsi minimi per tutte le coppie Trovare il percoso minimo tra tutte le coppie di vertici Output: per ogni coppia di vertici i,j V il percorso minimo tra i e j. Una tabella D=(d ij ) contenente la distanza minima tra i vertici i e j.

22 Percorsi minimi: con matrici Programmazione Dinamica ¶ Caratterizzare la struttura di una soluzione ottima · Definire ricorsivamente il valore di una soluzione ottima ¸ Calcolare il valore di una soluzione ottimabottom-up ¸ Cotruzione di una soluzione ottima.

23 Carattedizzazione della soluzione ottima Struttura della soluzione ottima. Data la matrice W = (w ij ) di adiacenza del grafo pesato, consideriamo il percorso minimo p tra i vertici i e j. Suppimiano che p contenga al più k archi. Assumendo che non esistano cicli negativi, k sarà allora finito. Se i = j, allora p ha peso 0 e nessun arco.

24 Carattedizzazione della soluzione ottima Struttura della soluzione ottima. Data la matrice W = (w ij ) di adiacenza del grafo pesato, consideriamo il percorso minimo p tra i vertici i e j. Suppimiano che p contenga al più k archi. Assumendo che non esistano cicli negativi, k sarà allora finito. p Se i j, allora p sarà della forma i m j dove p contiene al più k-1 archi ed è un percorso minimo tra i e m (Lemma 1). Ma allora (Corollario 2) (i,j) = (i,m) + w m j

25 Definizione ricorsiva della soluzione ottima d ij (k) = il peso del percorso minimo tra i vertici v i e v j usando al più k archi. Vogliamo calcolare d ij (|V|-1) per tutte le coppie i,j. Iniziamo a calcolare il caso base, qundo non abbiamo alcun vertice a disposizione per formare percorsi, cioè quando k=0.

26 Definizione ricorsiva della soluzione ottima d ij (k) = il peso del percorso minimo tra i vertici v i e v j usando al più k archi. Vogliamo calcolare d ij (|V|-1) per tutte le coppie i,j. Supponiamo di avere a disposizione la matrice d ij (k-1) dei percorsi minimi contenenti al più k-1 archi. Il percorso minimo di tra v j e v j, o contiene k-1 archi e ha costo d ij (k-1), o contiene k archi e sarà composto da un percorso minimo di k-1 archi più un nodo v m con un arco a v i e dal passo sappiamo che in tal caso il costo sarà d ij (k) = d im (k-1) + w m j

27 Definizione ricorsiva della soluzione ottima d ij (k) = il peso del percorso minimo tra i vertici v i e v j usando al più k archi. Vogliamo calcolare d ij (|V|-1) per tutte le coppie i,j. Poiché w jj =0, quindi se m=j, d ij (k-1) = d ij (k-1) + w j j

28 Definizione ricorsiva della soluzione ottima Come si calcolano i costi effettivi dei percorsi minimi? Quante matrici D (k) = (d ij (k) ) dobbiamo calcolare? Per quale valore di k otteniamo in D (k) i pesi (costi) dei percorsi minimi? Poiché w jj =0, quindi se m=j, d ij (k-1) = d ij (k-1) + w j j

29 Definizione ricorsiva della soluzione ottima Come si calcolano i costi effettivi dei percorsi minimi? Quante matrici D (k) = (d ij (k) ) dobbiamo calcolare? Per quale valore di k otteniamo in D (k) i pesi (costi) dei percorsi minimi? Se, come da ipotesi, il grafo non contiene cicli di peso negativo, allora ogni percorso minimo sarà un percorso semplice con al più |V|-1 archi. E quindi (i,j) = d ij (|V|-1) = d ij (|V|) = d ij (|V|+1) =...

30 Calcolo del valore della soluzione ottima Lalgoritmo riceve in ingresso la matrice W = (w ij ) di adiacenza del grafo pesato. Viene quindi calcolata una sequenza di matrici D (0) = D (1) = D (2) = … = D (|V|-1), dove per k=1,2,…,|V|-1 abbiamo D (k) = (d ij (k) ). La matrice D (|V|-1) conterrà i pesi dei percorsi minimi. La matrice D (|1) = W

31 Calcolo del valore della soluzione ottima Slow_All_Pair_Shst_Paths(W:matrice) n = righe[W] D (1) = W for k = 2 to n-1 do D (k) = Extend_Shst_Paths(D (k-1),W) return D (n-1) La procedura Extend_Shst_Paths è la proce- dura che, date le matrici D (k-1) e W calcola la matrice D (k) secondo la fomula (n T(Extend_Shst_Path))

32 Calcolo del valore della soluzione ottima Extend_Shst_Paths(D,W:matrice) n = righe[D] Sia D una nuova matrice n n for i = 1 to n do for j = 1 to n do d ij = for k = 1 to n do d ij = min( d ij,d im +w mj ) return D La procedura Extend_Shst_Paths è la procedura che, date le matrici D (k-1) e W calcola la matrice D (k) secondo la fomula (n 3 )

33 Calcolo del valore della soluzione ottima Slow_All_Pair_Shst_Paths(W:matrice) n = righe[W] D (1) = W for k = 2 to n-1 do D (k) = Extend_Shst_Paths(D (k-1),W) return D (n-1) La procedura Extend_Shst_Paths è la proce- dura che, date le matrici D (k-1) e W calcola la matrice D (k) secondo la fomula (n 4 )

34 k= v1v1 v2v2 v3v3 v4v4 v5v v2v2 v4v4 v5v5 7 1 v1v1 v3v3 v4v4 v5v5 6 v1v1 v2v2 v3v3 v2v2 v3v3 4 v1v1 v5v5 v4v4 v1v1 v3v3 v4v v2v2 v5v5 v1v1 v2v2 v3v3 v5v5 v4v4 v1v1 v3v3 8 v2v2 3 v5v5 -4 v4v4

35 k= k= v1v1 v3v3 v4v v2v2 v5v5 -4 v1v1 v2v2 v3v3 v4v4 v5v v2v2 v4v4 v5v5 7 1 v1v1 v3v3 v4v4 v5v5 6 v1v1 v2v2 v3v3 v2v2 v3v3 4 v1v1 v5v5 v4v4 v1v1 v2v2 v3v3 v5v5 v4v4 v1v1 v3v3 8 v2v2 3 v5v5 -4 v4v

36 k= v1v1 v2v2 v3v3 v4v4 v5v v1v1 v2v2 v3v3 v5v5 v4v4 v1v1 v3v3 8 v2v2 3 v5v5 -4 v4v4 6 v1v1 v3v3 v4v v2v2 v5v v2v2 v3v3 4 v1v1 v5v5 v4v v2v2 v4v4 v5v5 1 v1v1 v3v v4v4 v5v5 6 v1v1 v2v2 v3v k=

37 v1v1 v2v2 v3v3 v4v4 v5v v1v1 v2v2 v3v3 v5v5 v4v4 v1v1 v3v3 v4v4 2 v2v2 v5v k= v1v1 v3v3 v2v2 3 v5v5 v4v v2v2 v4v4 v5v5 1 v1v1 v3v v2v2 v3v3 4 v1v1 v5v5 v4v v4v4 v5v5 6 v1v1 v2v2 v3v k=

38 Calcolo del valore della soluzione ottima Possiamo migliorare il tempo di esecuzione dellalgoritmo? In effetti vengono calcolate più matrici di quelle necessarie, o meglio matrici inutili. D (1) = D (0) W = W D (2) = D (1) W = W 2 D (3) = D (2) W = W 3 D (4) = D (3) W = W 4 … D (n-1) = D (n-2) W = W n-1

39 Calcolo del valore della soluzione ottima Possiamo migliorare il tempo di esecuzione dellalgoritmo? In effetti vengono calcolate più matrici di quelle necessarie, o meglio matrici inutili. D (1) = D (0) W = W D (2) = D (1) W = D (1) D (1) = W 2 D (3) = D (2) W = W 3 D (4) = D (3) W = D (2) W W = D (2) D (2) = W 4 … D (2k) = D (k) D (k) = W 2k Come il prodotto di matrici, anche lestensione è una operazione associativa

40 Calcolo del valore della soluzione ottima Possiamo migliorare il tempo di esecuzione dellalgoritmo? In effetti vengono calcolate più matrici di quelle necessarie, o meglio matrici inutili. Cosa possiamo fare? D (1) = D (0) W 2 2 = W 2 D (2) = D (1) D (1) = W 2 D (4) = D (2) D (2) = W 4 D (8) = D (4) D (4) = W 8 … D (2 log n-1 ) = D (2 log n-2 ) D (2 log n-2 ) = W 2 log n-1

41 Calcolo del valore della soluzione ottima Cosa possiamo fare? D (1) = D (0) W 2 2 = W 2 D (2) = D (1) D (1) = W 2 D (4) = D (2) D (2) = W 4 D (8) = D (4) D (4) = W 8 … D (2 log n-1 ) = D (2 log n-2 ) D (2 log n-2 ) = W 2 log n-1 Il fatto che d ij (n-1) = d ij (n) = d ij (n+1) =... ci assicura che poiché 2 log(n-1) > n -1, allora D (2 log n-1 ) = D (n-1). Quindi possiamo fermarci non appena il valore di k = 1,2,4,8,… supera n -1.

42 Calcolo del valore della soluzione ottima Fast_All_Pair_Shst_Paths(W:matrice) n = righe[W] D (1) = W k = 1 whilo k < n-1 do D (2 k) = Extend_Shst_Paths(D (k),D (k) ) k = 2 k return D (k) Il tempo di esecuzione sarà quindi (n 3 log n)

43 Calcolo del valore della soluzione ottima Una volta che abbiamo calcolato la matrice delle distanze minime D = D (n-1), come pos- siamo ricostruire i percorsi minimi ? In altre parole come possiamo calcolare la matrice dei predecessori P = P (n-1) ? Si possono usare essenzialmente due metodi: Calcolare una sequenza di matrici dei predecessori P (k) per k=1,…,n-1 mentre calcoliamo D (k) Calcolare P direttamente da D (Esercizio )

44 Algoritmo di Floyd-Warshall Altro algoritmo di Programmazione Dinamica I pesi possono essere anche negativi, ma si assume sempre che non ci siano cicli negativi Si differenzia dal precedente per il tipo di sottostruttura della soluzione che utilizza e quindi per la nozione di sottoproblema. Miglioramento del tempo di esecuzione

45 Carattedizzazione della soluzione ottima Consideriamo i vertici intermedi di un percorso semplice p=. Cioè linsieme dei vertici {v 2,v 3,…, v l-1 }. Se {1, 2,…, n} sono i vertici del grafo, prendia- mone un sottoinsieme {1, 2,…, k}. Per ogni coppia di vertici i,j consideriamo i per- corsi che hanno i vertici solo in {1, 2,…, k}. Sia inoltre p il percorso di peso minimo (e quindi anche semplice) tra di essi. Che relazione cè tra p e il percorso minimo tra i e j che ha i vertici solo in {1, 2,…, k-1}?

46 Carattedizzazione della soluzione ottima Che relazione cè tra p e il percorso minimo tra i e j che ha i vertici solo in {1, 2,…, k-1}? La relazione dipenderà dal fatto che k sia o meno un vertice intermedio del nuovo percorso minimo p! Abbiamo cioè due casi: k non è un vertice intermedio di p k è un vertice intermedio di p

47 Carattedizzazione della soluzione ottima Che relazione cè tra p e il percorso minimo tra i e j che ha i vertici solo in {1, 2,…, k-1}? Abbiamo cioè due casi: k non è un vertice intermedio di p k è un vertice intermedio di p Allora tutti i vertici di p percorsi sono contenuti in {1, 2,…, k-1}. Quindi, un percorso minimo tra i e j contenente solo vertici in {1, 2,…, k-1} è anche un percorso minimo tra i e j contenente solo vertici in {1, 2,…, k}.

48 Carattedizzazione della soluzione ottima Che relazione cè tra p e il percorso minimo tra i e j che ha i vertici solo in {1, 2,…, k-1}? Abbiamo cioè due casi: k non è un vertice intermedio di p k è un vertice intermedio di p k i jp1p1 p2p2 Allora p può essere scomposto in due percorsi p 1 e p 2 che si congiungono in k (i k j) p2p2 p1p1 Per la sottostruttura, p 1 e p 2 sono percorsi minimi da i a k e da k a j con vertici in {1, 2,…, k-1}. Infatti k non è un vertice intermedio né di p 1 né di p 2, e w(p) = w(p 1 ) + w(p 2 ) = (i,k) + (k,j)

49 Definizione ricorsiva della soluzione ottima d ij (k) = il peso del percorso minimo tra i vertici v i e v j con vertici intermedi solo tra v 1, v 2, …, v k. Vogliamo calcolare d ij (n) per tutte le coppie i,j. Iniziamo a calcolare il caso base, qundo non abbiamo vertici intermedi a disposizione per formare percorsi, cioè quando k=0.

50 Definizione ricorsiva della soluzione ottima d ij (k) = il peso del percorso minimo tra i vertici i e j usando solo {1,2,…,k} come possibili ver- tici intermedi. Vogliamo calcolare d ij (n) per tutte le coppie i,j. Supponiamo di avere a disposizione la matrice d ij (k-1) dei percorsi minimi che contengono solo vertici in {1,…,k-1}. Allora il percorso minimo di tra i e j, o non contiene il vertice intermedio k, e ha quindi peso d ij (k-1), o contiene k e sarà perciò composto dalla concatena- zione del percorso minimo tra i e k e quello tra k e j. Il peso sarà quindi d ij (k) = d ik (k-1) + d kj (k-1).

51 Definizione ricorsiva della soluzione ottima d ij (k) = il peso del percorso minimo tra i vertici v i e v j usando solo v 1, v 2, …, v k come possibili vertici intermedi. Vogliamo calcolare d ij (n) per tutte le coppie i,j. Notate che ora lindice k delle matrici è anche lindice del vertice intermedio

52 Definizione ricorsiva della soluzione ottima Come si calcolano i costi effettivi dei percorsi minimi? Quante matrici D (k) = (d ij (k) ) dobbiamo calcolare? Per quale valore di k otteniamo in D (k) i pesi (costi) dei percorsi minimi? Se, come da ipotesi, il grafo non contiene cicli di peso negativo, allora ogni percorso minimo sarà un percorso semplice con al più vertici intermedi in {1,2,…,n} E quindi (i,j) = d ij (n) = d ij (n+1) = d ij (n+2) =...

53 Calcolo del valore della soluzione ottima Lalgoritmo riceve in ingresso la matrice W = (w ij ) di adiacenza del grafo pesato. Viene quindi calcolata una sequenza di matrici D (0) = D (1) = D (2) = … = D (n), dove per k=0,1,2,…,n abbiamo D (k) = (d ij (k) ). La matrice D (n) conterrà i pesi dei percorsi minimi. La matrice D (0) = W

54 Calcolo del valore della soluzione ottima jk i k k-1 j i k per k 1

55 Calcolo del valore della soluzione ottima Floyd_Warshall(D,W:matrice) n = righe[D] D (0) = W for k = 1 to n do for i = 1 to n do for j = 1 to n do d (k) ij = min( d (k-1) ij,d (k-1) ik +d (k-1) kj ) return D (n) Calcola la sequenza di n matrici D (1), D (2),…, D (n) secondo la formula (n 3 )

56 k= v1v1 v2v2 v3v3 v4v4 v5v v2v2 v4v4 v5v5 7 1 v1v1 v3v3 v4v4 v5v5 6 v1v1 v2v2 v3v3 v2v2 v3v3 4 v1v1 v5v5 v4v4 v1v1 v3v3 v4v v2v2 v5v5 v1v1 v2v2 v3v3 v5v5 v4v4 v1v1 v3v3 8 v2v2 3 v5v5 -4 v4v4

57 k= k= v1v1 v3v3 v4v v2v2 v5v5 -4 v1v1 v2v2 v3v3 v4v4 v5v v2v2 v4v4 v5v5 7 1 v1v1 v3v3 v4v4 v5v5 6 v1v1 v2v2 v3v3 v2v2 v3v3 4 v1v1 v5v5 v4v4 v1v1 v2v2 v3v3 v5v5 v4v4 v1v1 v3v3 8 v2v2 3 v5v5 -4 v4v4

58 v1v1 v2v2 v3v3 v4v4 v5v k= v1v1 v3v3 v4v v2v2 3 v5v k= v1v1 v3v3 8 v2v2 3 v5v5 -4 v4v v2v2 v3v3 4 v5v5 v4v4 v1v1 v2v2 v4v4 v5v5 7 1 v1v1 v3v3 v4v4 v5v5 6 v1v1 v2v2 v3v3 v1v1 v2v2 v3v3 v5v5 v4v4

59 -5 v1v1 v2v2 v3v3 v4v4 v5v k= v1v1 v3v3 8 v2v2 3 v5v5 -4 v4v4 1 v2v2 v3v3 4 v5v5 7 v4v4 1 v1v1 v2v2 v4v4 v5v5 7 1 v1v1 v3v3 v4v4 v5v5 6 v1v1 v2v2 v3v k= v2v2 v5v5 -4 v1v1 v3v3 v4v v1v1 v2v2 v3v3 v5v5 v4v4

60 v1v1 v2v2 v3v3 v4v4 v5v v1v1 v3v3 8 v2v2 3 v5v5 v4v4 1 v2v2 v4v4 v5v5 7 1 v1v1 v3v3 v4v4 v5v5 6 v1v1 v2v2 v3v k= v2v2 v5v5 -4 v1v1 v3v3 v4v k= v5v5 v2v2 v3v3 4 7 v4v4 1 v1v v1v1 v2v2 v3v3 v5v5 v4v4 7 -4

61 v1v1 v2v2 v3v3 v4v4 v5v k= v2v2 v1v1 v3v3 3 v5v5 v4v v5v5 v2v2 v3v3 4 v4v4 1 v1v k= v1v1 v2v2 v3v3 v4v4 v5v5 v1v1 v4v4 v5v5 6 v2v2 v3v v4v4 v5v5 6 v1v1 v2v2 v3v3 v2v2 v5v5 -4 v1v1 v3v3 v4v v3v3 v2v2 v4v4 v5v5 1 v1v1 2 -4

62 Calcolo del valore della soluzione ottima Una volta che abbiamo calcolato la matrice delle distanze minime D = D (n), come pos- siamo ricostruire i percorsi minimi ? In altre parole come possiamo calcolare la matrice dei predecessori P = P (n) ? Si possono usare essenzialmente due metodi: Calcolare una sequenza di matrici dei predecessori P (k) per k=1,…,n mentre calcoliamo D (k) Calcolare P direttamente da D (Esercizio )


Scaricare ppt "Esercizio Trovare il percorso minimo da b ad ogni altro vertice c 4 2 14 3 4 4 ef d b a 5 1 1 04 2 35 8 c 4 2 14 3 4 4 ef d b a 5 1 1."

Presentazioni simili


Annunci Google