250 likes | 420 Views
Lezioni di Ricerca Operativa Corso di Laurea in Informatica ed Informatica Applicata Università di Salerno. Lezione n° 19: 12-13 Maggio 2008 Problema dell’albero dei cammini minimi. Anno accademico 2007 / 2008 Prof. Cerulli – Dott.ssa Gentili. Il problema dei cammini minini. G=(N,A).
E N D
Lezioni di Ricerca OperativaCorso di Laurea in Informatica ed Informatica Applicata Università di Salerno Lezione n° 19: 12-13 Maggio 2008 Problema dell’albero dei cammini minimi Anno accademico 2007/2008 Prof. Cerulli – Dott.ssa Gentili
Il problema dei cammini minini G=(N,A) destinazione sorgente p 40 7 9 1 2 cij = costo dell’arco (i,j) 15 35 9 10 1 44 21 xij = variabili decisionali 5 4 3 11 28 69 1 21 6 8 1 se xijp 7 5 xij = 7 0 se xijp
40 7 9 1 2 15 35 9 10 1 44 21 5 4 3 11 28 69 1 21 6 8 7 5 7 Modello matematico
40 7 9 1 2 15 35 9 10 1 44 21 5 4 3 11 28 69 1 21 6 8 7 5 7 Modello matematico
40 7 9 1 2 15 35 9 10 1 44 21 5 4 3 11 28 69 1 21 6 8 7 5 7 Modello matematico
Il problema dei cammini minini (varianti) • Uno ad uno • Uno a tutti • Tutti a tutti
Il problema dei cammini minini G=(N,A) sorgente T 40 7 9 1 2 15 35 9 10 1 44 21 5 4 3 11 28 69 1 21 6 8 7 5 7
Etichette dei nodi G=(N,A) d1 d2 d9 40 7 9 1 2 15 35 9 10 d4 1 44 21 d5 5 4 3 11 d3 28 69 1 21 6 8 d6 d8 7 5 7 d7
Algoritmo prototipo Passo 1:Inizializzazione. ds=0, Ps=NULL, dk=, Pk=s kN\{s}, Q={s}; Passo 2:Estrai un vertice x da Q (Q= Q \{x}) ed aggiorna quando possibile le etichette dei vertici in FS(x): yFS(x) se dx + cxy < dy allora dy =dx + cxy , Py= x e se y Q inseriscilo in Q (Q= Q {y}) (test di ottimalità)
Aggioramento delle etichette yFS(x) se dx + cxy < dy allora dy = dx + cxy e Py= x • x=4, y=5 d4 + c45 < d5 ? d5 = d4 + c45 e P5= 4 • x=4, y=2 d4 + c42 < d2 ? ………………… • x=4, y=9 • d4 + c49 < d9 ? • d9 = d4 + c49 e P9= 4 42 36 5 15 21 7 18 2 4 34 9 67 55
Algoritmo prototipo Passo 1:Inizializzazione. ds=0, Ps=NULL, dk=, Pk=s kN\{s}, Q={s}; Passo 2:Estrai un vertice x da Q (Q= Q \{x}) ed aggiorna quando possibile le etichette dei vertici in FS(x): yFS(x) se dx + cxy < dy allora dy =dx + cxy , Py= x e se y Q inseriscilo in Q (Q= Q {y}) (test di ottimalità) Passo 3:Fino a quando Q ripeti il passo 2 ;
Differenti implementazioni Gli algoritmi per l’SPT si distinguono per: • La politica di estrazione del nodo da Q (label setting e label correcting) • La struttura dati utilizzata per implementare Q
Algoritmo di Dijkstra (label setting) Dijkstra (G,s) Inizializzazione; (ds=0, Ps=NULL, dk=, Pk=s kN\{s} , Q={s}) while ( Q ){ x = Extract_min(Q); Test_ottimalità(x,y); con yFS(x); }
L’algoritmo di Dijkstra (label setting) G=(N,A) 7 Q 0 40 7 9 1 2 15 35 9 10 1 44 21 9 5 4 3 11 28 69 1 21 6 8 7 5 7 2 7 2 5 1 0 9 7
L’algoritmo di Dijkstra (label setting) G=(N,A) 7 47 Q 0 40 7 9 1 2 15 35 9 10 1 22 44 21 9 5 4 3 42 11 28 69 1 21 6 8 4 5 22 9 3 4 42 22 7 5 7 9 2 3 47 42 7 5 9 9 47
L’algoritmo di Dijkstra (label setting) G=(N,A) 7 47 Q 0 40 7 9 1 2 15 35 9 10 1 22 44 21 9 5 4 3 42 11 28 69 1 21 6 8 78 6 5 4 78 9 22 4 3 22 42 7 5 7 3 9 47 42 6 9 78 47
L’algoritmo di Dijkstra (label setting) G=(N,A) 7 47 Q 0 40 7 9 1 2 15 35 9 10 1 22 44 21 9 5 4 3 42 11 28 69 8 7 1 43 33 21 6 8 3 78 50 8 4 42 33 22 33 7 3 43 42 7 5 7 9 47 43 6 78 50
L’algoritmo di Dijkstra (label setting) G=(N,A) 7 47 Q 0 40 7 9 1 2 15 35 9 10 1 22 44 21 9 5 4 3 42 34 11 28 69 8 1 33 21 6 8 3 50 42 34 33 7 43 7 5 7 9 47 43 6 50
L’algoritmo di Dijkstra (label setting) G=(N,A) 7 47 44 Q 0 40 7 9 1 2 15 35 9 10 1 22 44 21 9 5 4 3 34 11 28 69 1 21 6 8 3 50 34 33 7 43 7 5 7 9 47 44 43 6 50
L’algoritmo di Dijkstra (label setting) G=(N,A) 7 44 Q 0 40 7 9 1 2 15 35 9 10 1 22 44 21 9 5 4 3 34 11 28 69 1 21 6 8 50 48 33 7 43 7 5 7 9 44 43 6 50 48
T 40 7 9 1 2 15 35 9 10 1 44 21 5 4 3 11 28 69 1 21 6 8 7 5 7 Il problema dei cammini minini
Albero dei Cammini minimi albero di copertura minimo SPT=22 5 2 5 10 15 0 4 6 1 11 7 3 7
5 2 5 10 15 0 4 6 1 11 7 3 7 Albero dei Cammini minimi albero di copertura minimo SPT=22 MST=21 2 5 10 4 6 1 11 7 3