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

62
Esercizio Trovare il percorso minimo da b ad ogni altro vertice c 4 2 1 4 3 4 4 e f d b a 5 1 1 0 4 2 3 5 8 c 4 2 1 4 3 4 4 e f d b a 5 1 1

Transcript of 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...

Page 1: 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.

Esercizio

• Trovare il percorso minimo da b ad ogni altro vertice

c

42

1 4

3

4

4

ef

d

b

a5

11

0 4

2

3 5

8

c

42

1 4

3

4

4

ef

d

b

a5

11

Page 2: 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.

0u

1

1

v w x

ts0

3 -5

2

11

1 1

u

1

1

v w x

ts0

1

1

3 -5

2

11

1 1

1

u

1

1

v w x

ts0

1 4

1

3

3 -5

2

11

1 11

u

1

1

v w x

ts0

1 2

1

3

3 -5

2

11

1 12

Page 3: 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.

u

1

1

v w x

ts0

1 2

1

3

3 -5

2

11

1 12

u

1

1

v w x

ts0

1 2

1

3

3

3 -5

2

11

1 13

u

1

1

v w x

ts0

1 2

1

3

4

3 -5

2

11

1 1

3

u

1

1

v w x

ts0

1 2

1

3

3

3 -5

2

11

1 1

Page 4: 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.

u

1

1

v w x

ts0

0 -1

1

-2

3

3 -5

2

11

1 1

u

1

1

v w x

ts0

1 2

1

3

3

3 -5

2

11

1 1

Soluzione di Dijkstra Soluzione Ottimale

Problems with Dijkstra’s Algorithm

Page 5: 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.

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

Page 6: 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.

u

1

1

v w x

ts0

3 -5

2

11

1 1

u

1

1

v w x

ts0

1

1

3 -5

2

11

1 1

u

1

1

v w x

ts0

1 4

1

3

3 -5

2

11

1 1

u

1

1

v w x

ts0

1 2

1

-2

3

3 -5

2

11

1 1

Page 7: 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.

u

1

1

v w x

ts0

1 2

1

-2

3

3 -5

2

11

1 1

u

1

1

v w x

ts0

0 -1

1

-2

3

3 -5

2

11

1 1

u

1

1

v w x

ts0

1 -1

1

-2

3

3 -5

2

11

1 1

Page 8: 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.

Bellman-Ford: correttezza

Teorema: Se eseguiamo l’algoritmo 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 l’algoritmo ritorna TRUE, d[v] = (s,v) per tutti i vertici v in V e il grafo dei predecessori Gp è l’albero dei percorsi minimi;

• se esistono cicli negativi raggiungibili da s, allora l’algoritmo ritorna FALSE.

Page 9: 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.

Bellman-Ford: correttezza

Lemma 8: Se eseguiamo l’algoritmo 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.

Page 10: 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.

Bellman-Ford: correttezza

Dimostrazione: Sia v un vertice raggiungibile da s e p=<v0,v1,…,vk> un percorso minimo tra s e v (v0=s e vk=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[vi] = (s,vi) dopo i passi sugli archi di G e che poi non cambia più.

Poiché vengono fatte esattamente |V|-1 passi dall’algoritmo, questo è sufficiente a dimostrare il lemma.

Page 11: 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.

Bellman-Ford: correttezza

Dimostrazione: Sia v un vertice raggiungibile da s e p=<v0,v1,…,vk> un percorso minimo tra s e v (v0=s e vk=v).

Per induzione su k dimostriamo che d[vi] = (s,vi) dopo i passi sugli archi di G e che poi non cambia più.

Base: d[v0] = 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[vi-1] = (s,vi-1) dopo il passo i-1.

Si rilassa l’arco (vi-1,vi) al passo i e per il Lemma 5 concludiamo che d[vi] = (s,vi) da allora in poi.

Page 12: 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.

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 dell’algoritmo di Bellman-Ford vale d[v] < .

Dimostrazione: Simile al Lemma 8 precedente.

Page 13: 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.

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 Gp

è un albero dei percorsi minimi. L’algoritmo 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 dell’algoritmo (dopo il while) è verificato, perciò ritorna TRUE.

Page 14: 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.

Contraddizione!

Bellman-Ford: correttezza

Dimostrazione teorema:caso 2: Ci sono cicli negativi raggiungibili da s, e sia

p=<v0,v1,…,vk> uno di tali cicli (v0 = vk).

Allora w(vi-1,vi ) < 0 i=1…k

Supponiamo che l’algoritmo ritorni TRUE. Allora d[vi] d[vi-1] + w(vi-1,vi ) per i = 1,…,k Sommando le disuguaglianze lungo il ciclo si ha

d[vi ] d[vi-1 ] + w(vi-1,vi ) i=1…k i=1…k i=1…k k

Ma come per il Lemma 6 otterremo che

0 w(vi-1,vi ) i=1…k k

Page 15: 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.

• Trovare il percorso minimo da u ad ogni altro vertice

Esercizio

0

w

6

7

9

5

-4

xy

v

u8 7

-2

-3

2 4

0

7 -2

w

6

7

9

5

-4

xy

v

u8 7

-2

-3

Page 16: 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.

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=(dij ) contenente la distanza minima tra i vertici i e j.

Page 17: 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.

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 l’algoritmo di Dijkstra |V| volte (ma solo se i pesi sono non-negativi)

• Eseguire l’algoritmo di Bellman-Ford |V| volte

Page 18: 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.

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 l’algoritmo di Dijkstra |V| volte (ma solo se i pesi sono non-negativi)

• Eseguire l’algoritmo di Bellman-Ford |V| volte

O(|V|3)

O(|V|2|E|) O(|V|4)grafo denso

O(|V||E| log|V|)o

Page 19: 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.

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 = (wij ) di dimensione nn, così definita:

E(i,j)ejiseE(i,j)ejisejidipeso

jisewij

),(

0

Page 20: 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.

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=(dij ) contenente la distanza minima tra i vertici i e j.

ijejise

ijejisejijise

d ij da ileraggiungib ènon

da ileraggiungib è

),(0

Page 21: 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.

Grafi: Percorsi minimi

Una tabella P=(pij ) contenente il predecessore di j lungo il percorso minimo da i a j.

ijejiseNilj

keijejisek

jiseNil

pij

da ileraggiungib ènon

minimo percorso il lungo di

repredecesso il è da ileraggiungib è

• 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=(dij ) contenente la distanza minima tra i vertici i e j.

Page 22: 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.

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 ottima “bottom-up”

Cotruzione di una soluzione ottima.

Page 23: 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.

Carattedizzazione della soluzione ottima

Struttura della soluzione ottima.

Data la matrice W = (wij ) 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.

Page 24: 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.

Carattedizzazione della soluzione ottima

Struttura della soluzione ottima.

Data la matrice W = (wij ) 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) + wm j

Page 25: 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.

Definizione ricorsiva della soluzione ottima

• dij(k) = il peso del percorso minimo tra i vertici

vi e vj usando al più k archi.• Vogliamo calcolare dij

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

jisejised ij

0)0(

Page 26: 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.

Definizione ricorsiva della soluzione ottima

• dij(k) = il peso del percorso minimo tra i vertici

vi e vj usando al più k archi.• Vogliamo calcolare dij

(|V|-1) per tutte le coppie i,j. • Supponiamo di avere a disposizione la matrice dij

(k-1) dei

percorsi minimi contenenti al più k-1 archi.• Il percorso minimo di tra vj e vj , o contiene k-1 archi e ha

costo dij(k-1),

• o contiene k archi e sarà composto da un percorso minimo di k-1 archi più un nodo vm con un arco a vi

e dal passo sappiamo che in tal caso il costo sarà dij(k) =

dim(k-1) + wm j

Page 27: 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.

Definizione ricorsiva della soluzione ottima

• dij(k) = il peso del percorso minimo tra i vertici

vi e vj usando al più k archi.• Vogliamo calcolare dij

(|V|-1) per tutte le coppie i,j.

mj

kim

nm

kij

kij wddd )1(

1

)1()( min,min

mjk

imnm

wd

)1(

1min

Poiché wjj=0, quindi se

m=j, dij(k-1) =dij

(k-1) + wj j

Page 28: 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.

Definizione ricorsiva della soluzione ottima

• Come si calcolano i costi effettivi dei percorsi minimi?

• Quante matrici D(k) = (dij(k)) dobbiamo calcolare?

• Per quale valore di k otteniamo in D(k) i pesi (costi) dei percorsi minimi?

mj

kim

nm

kij

kij wddd )1(

1

)1()( min,min

mjk

imnm

wd

)1(

1min

Poiché wjj=0, quindi se

m=j, dij(k-1) =dij

(k-1) + wj j

Page 29: 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.

Definizione ricorsiva della soluzione ottima

• Come si calcolano i costi effettivi dei percorsi minimi?

• Quante matrici D(k) = (dij(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) = dij(|V|-1) = dij

(|V|) = dij(|V|+1) = ...

Page 30: 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.

Calcolo del valore della soluzione ottima

• L’algoritmo riceve in ingresso la matrice W =

(wij ) 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) = (dij

(k)).• La matrice D(|V|-1) conterrà i pesi dei percorsi

minimi.• La matrice D(|1) = W

Page 31: 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.

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

mjk

imnm

kij wdd

)1(

1

)( min

(n T(Extend_Shst_Path))

Page 32: 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.

Calcolo del valore della soluzione ottima

Extend_Shst_Paths(D,W:matrice) n = righe[D] “Sia D’ una nuova matrice nn” 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,dim+wmj) 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 mjk

imnm

kij wdd

)1(

1

)( min

(n3)

Page 33: 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.

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

mjk

imnm

kij wdd

)1(

1

)( min

(n4)

Page 34: 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.

0-524

043

102

8301

4321

k=1

7

-4

5

65 0

-5v1

v2

v3

v4

v5

2

4

-46

8

3

7

1

v2

v4

v5

7

1v1

v3

v4

v56

v1

v2

v3

v2

v3

4

v1

v5

v4

v1

v3

v4

2-5

v2

v5

v1 v2

v3

v5

v4

v1

v3

8

v2

3

v5

-4v4

Page 35: 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.

0-524

043

102

8301

4321

k=1

7

-4

5

65 00-5-124

5043

1-4032

28301

4321

k=2

-2

11

7

-4

5

6185 0

v1

v3

v4

2-5

v2

v5

-4

v1

v2

v3

v4

v5

2

4

-46

-58

3

7

1

v2

v4

v5

7

1v1

v3

v4

v56

v1

v2

v3

v2

v3

4

v1

v5

v4

v1 v2

v3

v5

v4

v1

v3

8

v2

3

v5

-4 v4

6

41

7

2-5

2-5

Page 36: 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.

0-5-124

5043

1-4032

28301

4321

k=2

-2

11

7

-4

5

6185 0

v1

v2

v3

v4

v5

2

4

-46

-58

3

7

1

v1 v2

v3

v5

v4

v1

v3

8

v2

3

v5

-4 v4

6

v1

v3

v4

2-5

v2

v5

-4

4

v2

v3

4

v1

v5

v4

1

7

7

v2

v4

v5

1v1

v3

2-5

v4

v56

v1

v2

v3

2-5

0-5-124

50473

1-4032

2-3301

4321

k=3

-2

11

-1

-4

5

61585 0

8 -5

-4 7

2

4

Page 37: 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.

v1

v2

v3

v4

v5

2

4

-46

-58

3

7

1

v1 v2

v3

v5

v4

v1

v3

v4

2-5

v2

v5

-4

4

0-5-124

50473

1-4032

2-3301

4321

k=3

-2

11

-1

-4

5

61585 0

v1

v3

v2

3

v5

-4 v4

6

-5

v2

v4

v5

1v1

v3

2-5

-4v2

v3

4

v1

v5

v4

1

7

2

v4

v56

v1

v2

v3

2-5

4

0-5-124

50473

1-4032

2-3101

4321

k=4

-2

3

-1

-4

5

61585 0

-4 7

34

Page 38: 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.

Calcolo del valore della soluzione ottima

• Possiamo migliorare il tempo di esecuzione dell’algoritmo?

• In effetti vengono calcolate più matrici di quelle necessarie, o meglio matrici inutili.

D(1) = D(0) W = W D(2) = D(1) W = W2

D(3) = D(2) W = W3

D(4) = D(3) W = W4

D(n-1) = D(n-2) W = Wn-1

Page 39: 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.

Calcolo del valore della soluzione ottima• Possiamo migliorare il tempo di esecuzione

dell’algoritmo?• 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) = W2

D(3) = D(2) W = W3

D(4) = D(3) W = D(2) W W = D(2) D(2) = W4

D(2k) = D(k) D(k) = W2k

Come il prodotto di matrici, anche l’estensione è una operazione associativa

Page 40: 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.

Calcolo del valore della soluzione ottima

• Possiamo migliorare il tempo di esecuzione dell’algoritmo?

• In effetti vengono calcolate più matrici di quelle necessarie, o meglio matrici inutili.

• Cosa possiamo fare?

D(1) = D(0) W22 = W2 D(2) = D(1) D(1) = W2

D(4) = D(2) D(2) = W4

D(8) = D(4) D(4) = W8

D(2log n-1) = D(2log n-2) D(2log n-2) = W 2log n-1

Page 41: 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.

Calcolo del valore della soluzione ottima

• Cosa possiamo fare?

D(1) = D(0) W22 = W2 D(2) = D(1) D(1) = W2

D(4) = D(2) D(2) = W4

D(8) = D(4) D(4) = W 8

D(2log n-1) = D(2log n-2) D(2log n-2) = W 2log n-1

• Il fatto che dij(n-1) = dij

(n) = dij(n+1) = ... ci assicura che

poiché 2log(n-1) > n -1, allora D(2log n-1) = D(n-1). • Quindi possiamo fermarci non appena il valore di k

= 1,2,4,8,… supera n -1.

Page 42: 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.

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 (n3log n)

Page 43: 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.

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

Page 44: 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.

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

Page 45: 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.

Carattedizzazione della soluzione ottima

Consideriamo i vertici intermedi di un percorso semplice p=<v1, v2 ,…, vl >.

Cioè l’insieme dei vertici {v2 ,v3 ,…, vl-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}?

Page 46: 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.

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

Page 47: 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.

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

Page 48: 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.

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

ki j p1 p2

Allora p può essere scomposto in due percorsi p1 e p2 che si

congiungono in k (ikj) p2p1

Per la sottostruttura, p1 e p2 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 p1 né di p2, e w(p) = w(p1) + w(p2) = (i,k) + (k,j)

Page 49: 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.

Definizione ricorsiva della soluzione ottima

• dij(k) = il peso del percorso minimo tra i vertici

vi e vj con vertici intermedi solo tra v1, v2, …, vk.

• Vogliamo calcolare dij(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.

ijij wd )0(

Page 50: 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.

Definizione ricorsiva della soluzione ottima

• dij(k) = il peso del percorso minimo tra i vertici i e

j usando solo {1,2,…,k} come possibili ver-tici intermedi.

• Vogliamo calcolare dij(n) per tutte le coppie i,j.

• Supponiamo di avere a disposizione la matrice dij(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 dij

(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 dij

(k) = dik(k-1) + dkj

(k-1) .

Page 51: 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.

Definizione ricorsiva della soluzione ottima

• dij(k) = il peso del percorso minimo tra i vertici vi e

vj usando solo v1, v2, …, vk come possibili vertici intermedi.

• Vogliamo calcolare dij(n) per tutte le coppie i,j.

1,min

0)1()1()1(

)(

kseddd

ksewd k

kjk

ikk

ij

ijkij

Notate che ora l’indice k delle matrici è anche l’indice

del vertice intermedio

Page 52: 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.

Definizione ricorsiva della soluzione ottima

• Come si calcolano i costi effettivi dei percorsi minimi?

• Quante matrici D(k) = (dij(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) = dij(n) = dij

(n+1) = dij(n+2) = ...

Page 53: 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.

Calcolo del valore della soluzione ottima

• L’algoritmo riceve in ingresso la matrice W =

(wij ) 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) = (dij

(k)).

• La matrice D(n) conterrà i pesi dei percorsi minimi.

• La matrice D(0) = W

Page 54: 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.

Calcolo del valore della soluzione ottima

j k

i

k

k-1

j

i

k

)1()1()1()( ,min kkj

kik

kij

kij dddd per k

1

Page 55: 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.

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

(n3)

)1()1()1()( ,min kkj

kik

kij

kij dddd

Page 56: 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.

0-524

043

102

8301

4321

k=0

7

-4

5

65 0

-5v1

v2

v3

v4

v5

2

4

-46

8

3

7

1

v2

v4

v5

7

1v1

v3

v4

v56

v1

v2

v3

v2

v3

4

v1

v5

v4

v1

v3

v4

2-5

v2

v5

v1 v2

v3

v5

v4

v1

v3

8

v2

3

v5

-4 v4

Page 57: 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.

0-524

043

102

8301

4321

k=0

7

-4

5

65 00-5524

043

102

8301

4321

k=1

-2

7

-4

5

65 0

3

v1

v3

v4

2-5

v2

v5

-4

v1

v2

v3

v4

v5

2

4

-46

-58

3

7

1

v2

v4

v5

7

1v1

v3

v4

v56

v1

v2

v3

v2

v3

4

v1

v5

v4

v1 v2

v3

v5

v4

v1

v3

8

v2

3

v5

-4 v4

Page 58: 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.

v1

v2

v3

v4

v5

2

4

-46

-58

3

7

1

0-5524

043

102

8301

4321

k=1

-2

7

-4

5

65 0

v1

v3

v4

2-5

v2

3

v5

-4

0-5524

5043

102

48301

4321

k=2

-2

11

7

-4

5

65 0

v1

v3

8

v2

3

v5

-4 v4

1

7

1

v2

v3

4

v5

v4

v1

v2

v4

v5

7

1v1

v3

v4

v56

v1

v2

v3

v1 v2

v3

v5

v4

Page 59: 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.

-5v1

v2

v3

v4

v5

2

4

-46

8

3

7

1

0-5524

5043

102

48301

4321

k=2

-2

11

7

-4

5

65 0

v1

v3

8

v2

3

v5

-4 v4

1

v2

v3

4

v5

7v4

1v1

v2

v4

v5

7

1v1

v3

v4

v56

v1

v2

v3

0-5-124

5043

102

48301

4321

k=3

-2

11

7

-4

5

65 0

v2

v5

-4

v1

v3

v4

2-5

3

4

3

v1 v2

v3

v5

v4

Page 60: 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.

-5v1

v2

v3

v4

v5

2

4

-46

8

3

7

1 v1

v3

8

v2

3

v5

-4 v4

1

v2

v4

v5

7

1v1

v3

v4

v56

v1

v2

v3

0-5-124

5043

102

48301

4321

k=3

-2

11

7

-4

5

65 0

v2

v5

-4

v1

v3

v4

2-5

4

0-5-124

50473

1-4032

4-1301

4321

k=4

-2

3

-1

-4

5

61585 0

-58

v5

v2

v3

4

7v4

1v1

2

7-4

2-5

2 -5

4

v1 v2

v3

v5

v4

7-4

Page 61: 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.

v1

v2

v3

v4

v5

2

4

-46

-58

3

7

1

0-5-124

50473

1-4032

4-1301

4321

k=4

-2

3

-1

-4

5

61585 0

v2

v1

v33

v5

-4 v4

1-5

2v5

v2

v3

4

v4

1v1

2-4

0-5-124

50473

1-4032

2-3101

4321

k=5

-2

3

-1

-4

5

61585 0

43

6

1

v1 v2

v3

v4

v5

v1v4

v56

v2

v3

2 -5

4

v4

v56

v1

v2

v3

v2

v5

-4

v1

v3

v4

2-5

4

v3

v2

v4

v5

1v12

-5

-4

Page 62: 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.

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