Cammini minimi Moreno Marzolla

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Algoritmi e Strutture Dati
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.
Algoritmi e Strutture Dati
Cammini minimi con sorgente singola
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 7 - Tabelle hash Alberto Montresor Università di Trento This work is licensed under the Creative.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 13 Cammini minimi: Algoritmo di ordinamento topologico, di Dijkstra, e di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: algoritmo di Dijkstra Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Cammini minimi fra tutte le coppie:
Cammini minimi in grafi:
Capitolo 13 Cammini minimi: algoritmo di Dijkstra Algoritmi e Strutture Dati.
Tecniche Algoritmiche/1 Divide et Impera Moreno Marzolla
Statistiche d'ordine Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Minimum Spanning Tree Moreno Marzolla
Algoritmi di Visita di Grafi Moreno Marzolla
Tecniche Algoritmiche/2 Programmazione Dinamica Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Code con priorità Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Union-Find Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Cammini minimi in grafi:
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Logica binaria Moreno Marzolla
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Lezione n°15 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Cammini minimi tra tutte le coppie
Algoritmi e Strutture Dati
Il problema del cammino minimo
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Lezione n°14 Reti di flusso Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
K4 è planare? E K3,3 e K5 sono planari? Sì!
Lezione n°11 Prof.ssa Rossella Petreschi
Lezione n°12 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
ABBINAMENTO Lezione n°13
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi per il flusso nelle reti
Algoritmi per il flusso nelle reti
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Cammini di costo minimo su un grafo pesato
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Usi (meno scontati) della visita DFS
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Cammini minimi in grafi:
Grafi e problem solving
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Il problema del flusso nelle reti
Algoritmi e Strutture Dati
Transcript della presentazione:

Cammini minimi Moreno Marzolla

Algoritmi e Strutture Dati2 Copyright © 2010, 2011, Moreno Marzolla, Università di Bologna, Italy ( This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Algoritmi e Strutture Dati3 Definizione del problema ● Consideriamo un grafo orientato G=(V, E) in cui ad ogni arco e  E sia associato un costo w(e) ● Il costo di un cammino π=(v 0, v 1,... v k ) che connette il vertice v 0 con v k è definito come ● Data una coppia di vertici v 0 e v k, vogliamo trovare (se esiste) il cammino π v0 vk * di costo minimo tra tutti i cammini che vanno da v 0 a v k

Algoritmi e Strutture Dati4 Applicazioni dei cammini minimi

Algoritmi e Strutture Dati5 Applicazioni dei cammini minimi (oops!) ● Cammino più breve tra Haugesund e Trondheim Nel Nel 2010

Algoritmi e Strutture Dati6 Diverse formulazioni del problema ● Single-source shortest path – Determinare i cammini minimi da un vertice sorgente s a tutti i vertici raggiungibili da s ● All-pairs shortest paths – Determinare i cammini minimi tra ogni coppia di vertici u, v tali che esista un cammino da u a v ● Cammino minimo fra una singola coppia di vertici u e v – Determinare esclusivamente il cammino minimo π uv * – Nessun algoritmo conosciuto è in grado di risolvere il problema del cammino minimo fra una singola coppia senza risolvere anche il problema dei cammini minimi da singola sorgente

Algoritmi e Strutture Dati7 Osservazione / 1 ● Il problema del MST è un problema differente – Es: il cammino minimo che collega h e i è (h, i) oppure (h, g, i) di peso 7 – In questo caso il cammino minimo non è un sottoinsieme del MST a b h i c g d f e

Algoritmi e Strutture Dati8 Osservazione / 2 ● In quali situazioni non esiste un cammino minimo? – Quando i vertici non sono connessi – Quando ci sono cicli di costo negativo a b cde a b cde Non esiste alcun cammino che connette a con e È sempre possibile trovare un cammino di costo inferiore che connette a con e

Algoritmi e Strutture Dati9 Proprietà (sottostruttura ottima) ● Sia G=(V, E) un grafo orientato con funzione costo w; allora ogni sottocammino di un cammino minimo in G è a sua volta un cammino minimo in G ● Dimostrazione – Consderiamo un cammino minimo π xy * da x a y – Siano i e j due nodi intermedi – Dimostriamo che il sottocammino di π xy * che collega i e j è un cammino minimo tra i e j xijy

Algoritmi e Strutture Dati10 Proprietà (sottostruttura ottima) ● Supponiamo per assurdo che esista un cammino P' tra i e j di costo strettamente inferiore a P ● Ma allora potremmo costruire un cammino tra x e y di costo inferiore a π xy *, il che è assurdo perché avevamo fatto l'ipotesi che π xy * fosse il cammino di costo minimo xijy P P' xijy w(P') < w(P)

Algoritmi e Strutture Dati11 Esistenza ● Sia G=(V, E) un grafo orientato con funzione peso w. Se non ci sono cicli negativi, allora fra ogni coppia di vertici connessi in G esiste sempre un cammino minimo ● Dimostrazione – Possiamo sempre trasformare un cammino in un cammino semplice (privo di cicli) – Ogni volta che si rimuove un ciclo, il costo diminuisce (o resta uguale), perché non ci sono cicli negativi xiyxiy

Algoritmi e Strutture Dati12 Nota ● D'ora in poi, assumiamo che nel grafo G non esistano cicli di lunghezza negativa

Algoritmi e Strutture Dati13 Albero dei cammini minimi ● Sia s un vertice prefissato di un grafo orientato pesato G=(V, E). Allora esiste un albero T che contiene i vertici raggiungibili da s tale che ogni cammino in T sia un cammino minimo – Grazie alla proprietà di sottostruttura ottima, è sempre possibile far “crescere” un albero parziale T' fino a includere tutti i vertici raggiungibili s s v v u u è il primo vertice in T' procedendo “a ritroso” nel cammino π sv *

Algoritmi e Strutture Dati14 Distanza tra vertici in un grafo ● Sia G=(V, E) un grafo orientato con funzione costo w. La distanza d xy tra x e y in G è il costo di un cammino minimo che li connette; +  se tale cammino non esiste ● Nota: d vv = 0 per ogni vertice v ● Nota: Vale la disuguaglianza triangolare

Algoritmi e Strutture Dati15 Condizione di Bellman ● Per ogni arco (u, v) e per ogni vertice s, vale la seguente disuguaglianza ● Dimostrazione – Dalla disuguaglianza triangolare si ha – Ma risulta anche da cui la tesi

Algoritmi e Strutture Dati16 Trovare cammini minimi ● Dalla condizione di Bellman si può dedurre che l'arco (u, v) fa parte del cammino minimo π sv * se e solo se

Algoritmi e Strutture Dati17 Tecnica del rilassamento ● Supponiamo di mantenere una stima D xy ≥ d xy della lunghezza del cammino minimo tra x e y ● Effettuiamo dei passi di “rilassamento”, riducendo progressivamente la stima finché si ha D xy = d xy if (D xv + w(π vy ) < D xy ) then D xy := D xv + w(π vy )

Algoritmi e Strutture Dati18 Algoritmo di Bellman e Ford ● Consideriamo un cammino minimo inizialmente ignoto π s vk * = (s, v 1,... v k ) ● Sappiamo che da cui partendo da D ss = 0, potremmo effettuare i passi di rilassamento seguenti

Algoritmi e Strutture Dati19 Algoritmo di Bellman e Ford ● Problema: noi non conosciamo gli archi del cammino minimo π s vk * né il loro ordine, quindi non possiamo fare il rilassamento nell'ordine corretto ● Però se facciamo per ogni arco (u,v) sicuramente includeremo anche il primo passo di rilassamento “corretto” if (D su + w(u,v) < D sv ) then D sv := D su + w(u,v)

Algoritmi e Strutture Dati20 Algoritmo di Bellman e Ford ● Ad ogni passo consideriamo tutti gli m archi del grafo (u,v) ed effettuiamo (se necessario) l'operazione di rilassamento ● Dopo n iterazioni (tante quanti sono i vertici del grafo) siamo sicuri di aver calcolato tutti i valori D s vk corretti if (D su + w(u,v) < D sv ) then D sv := D su + w(u,v)

Algoritmi e Strutture Dati21 Algoritmo di Bellman e Ford algoritmo BellmanFord(G, s)→distanze inizializza D tale che D sv := +  se v ≠ s D ss := 0 for i := 1 to n do for each (u,v)  E do if ( D su + w(u,v) < D sv ) then D sv := D su + w(u,v) endif endfor ● Costo computazionale: O(nm)

Algoritmi e Strutture Dati22 Algoritmo di Dijkstra ● Consente di calcolare i cammini minimi da singola sorgente nel caso in cui gli archi abbiano costo ≥ 0 – Il grafo può contenere cicli, che per l'ipotesi sopra non possono avere lunghezza negativa Edsger W. Dijkstra, (1930—2002)

Algoritmi e Strutture Dati23 Lemma (Dijkstra) ● Sia G=(V, E) un grafo orientato con funzione costo w; i costi devono essere ≥0. Se T è un albero di cammini minimi radicato in s, ma che non include tutti i vertici raggiungibili da s, allora l'arco (u, v) con u  V(T) e v  V(T) che minimizza la quantità d su + w(u,v) appartiene ad un cammino minimo da s a v

Algoritmi e Strutture Dati24 T Dimostrazione ● Supponiamo per assurdo che (u,v) non appartenga ad un cammino minimo tra s e v – quindi d su + w(u,v) > d sv ● Quindi deve esistere π sv * che porta da s in v senza passare per (u,v) con costo inferiore a d su + w(u,v) s uv xy dsxdsx dsudsu 1

Algoritmi e Strutture Dati25 T Dimostrazione ● Per il teorema di sottostruttura ottima, il cammino π sv * si scompone in π sy * e π yv * ● Quindi d sv = d sx + w(x,y) + d yv s uv xy dsxdsx dsudsu π sy * π yv * 2

Algoritmi e Strutture Dati26 T Dimostrazione ● Per ipotesi (lemma di Dijkstra), l'arco (u,v) è quello che, tra tutti gli archi che collegano un vertice in T con uno non ancora in T, minimizza la somma d su + w(u,v) ● In particolare: d su + w(u,v) ≤ d sx + w(x,y) s uv xy dsxdsx dsudsu π sy * π yv * 3

Algoritmi e Strutture Dati27 Riassumiamo ● Da (1) abbiamo d su + w(u,v) > d sv ● Da (2) abbiamo d sv = d sx + w(x,y) + d yv ● Da (3) abbiamo d su + w(u,v) ≤ d sx + w(x,y) ● Combinando (1) (2) e (3) otteniamo Assurdo!

Algoritmi e Strutture Dati28 Algoritmo di Dijkstra generico algoritmo DijkstraGenerico(G, s)→albero inizializza D tale che D sv := +  se v ≠ s D ss := 0 T := albero formato dal solo vertice s while (T ha meno di n nodi) do Trova l'arco (u,v) incidente su T con D su + w(u,v) minimo D sv := D su + w(u,v) rendi u padre di v in T endfor

Algoritmi e Strutture Dati29 Esempio A B D CE F G

Algoritmi e Strutture Dati30 Esempio 0 ∞ ∞ ∞∞ ∞ ∞

Algoritmi e Strutture Dati31 Esempio 0 ∞ ∞ ∞∞ ∞ ∞

Algoritmi e Strutture Dati32 Esempio 0 7 ∞ ∞∞ ∞ ∞

Algoritmi e Strutture Dati33 Esempio 0 7 ∞ ∞∞ ∞ ∞

Algoritmi e Strutture Dati34 Esempio 0 7 ∞ 1313 ∞ ∞ ∞

Algoritmi e Strutture Dati35 Esempio 0 7 ∞ 1313 ∞ ∞ ∞

Algoritmi e Strutture Dati36 Esempio 0 7 ∞ ∞ ∞

Algoritmi e Strutture Dati37 Esempio 0 7 ∞ ∞ ∞

Algoritmi e Strutture Dati38 Esempio 0 7 ∞ ∞

Algoritmi e Strutture Dati39 Esempio 0 7 ∞ ∞

Algoritmi e Strutture Dati40 Esempio 0 7 ∞

Algoritmi e Strutture Dati41 Esempio 0 7 ∞

Algoritmi e Strutture Dati42 Esempio

Algoritmi e Strutture Dati43 Algoritmo di Dijkstra Vi ricorda qualcosa?

Algoritmi e Strutture Dati44 Algoritmo di Dijkstra algoritmo Dijkstra(Grafo G=(V,E), nodo s)→albero for each u in V do D su :=  endfor T := albero formato dal solo nodo s CodaPriorita S; D ss := 0; S.insert(s,0); while (not S.isEmpty()) do u := S.deleteMin(); for each (u,v)  E do if (D sv =  ) then S.insert(v,D su + w(u,v)); D sv := D su + w(u,v); rendi u padre di v in T; else if (D su + w(u,v) < D sv )) then S.decreaseKey(v,D su + w(u,v)); D sv := D su + w(u,v); rendi u nuovo padre di v in T; endif endfor endwhile return T; Rendi D su +w(u,v) il nuovo costo di v

Algoritmi e Strutture Dati45 Analisi dell'algoritmo di Dijkstra ● È pressoché identico all'algoritmo di Prim, e quindi ha lo stesso costo computazionale – O(m log n) nel caso peggiore ● Osservazione – Con un minimo di “astuzia” e una implementazione più efficiente della coda di priorità è possibile implementare l'algoritmo di Dijkstra in tempo O(m + n log n) – Vedere libro di testo (sezione ) per i dettagli

Algoritmi e Strutture Dati46 Osservazione ● Notare che la dimostrazione di correttezza funziona perché si assume che i pesi dei cammini (in particolare, degli archi) non possono mai essere negativi ● Esempio di funzionamento errato – Il cammino minimo da a→c non è (a,c) ma (a,b,c) che ha costo complessivo 1! a b c ∞ ∞ ∞

Algoritmi e Strutture Dati47 Domanda ● Sia G=(V, E) un grafo orientato con archi pesati, anche con pesi negativi; supponiamo che in G non esistano cicli negativi. Supponiamo di incrementare i pesi di tutti gli archi di una costante C in modo che tutti i pesi risultanti siano non negativi. ● L'algoritmo di Dijkstra applicato ai nuovi pesi restituisce l'albero dei cammini minimi anche per i pesi originali?

Algoritmi e Strutture Dati48 Risposta: NO a b c ∞ ∞ ∞ a b c Aggiungo 4 ai pesi degli archi a b c 9 8 0

Algoritmi e Strutture Dati49 Algoritmo di Floyd e Warshall ● Si può applicare a grafi orientati con costi arbitrari (anche negativi), purché non ci siano cicli negativi – Basato sulla programmazione dinamica ● Sia V={v 1, v 2, … v n } ● Sia d xy k la minima distanza per andare dal vertice x al vertice y, in cui si usano solo vertici in {v 1, v 2, … v k } (oltre eventualmente x e y) ● La soluzione complessiva è d xy n per ogni coppia di vertici x e y – All-pair shortest paths

Algoritmi e Strutture Dati50 Algoritmo di Floyd e Warshall ● Per andare da x a y usando solo vertici intermedi in {v 1, … v k } (sempre che ciò sia possibile), ho due alternative – Non passo mai per v k. La distanza in tal caso è d xy k-1 – Passo per v k. Per la proprietà di sottostruttura ottima, la distanza in tal caso è d x vk k-1 + d vk y k-1 ● Quindi

Algoritmi e Strutture Dati51 Inizializzazione ● Posso calcolare d xy 0 come d xy 0 = minima distanza per andare da x a y senza passare per altri nodi intermedi

Algoritmi e Strutture Dati52 Algoritmo di Floyd e Warshall algoritmo FloydWarshall( G=(V,E) )→distanze inizializza D xy 0 for k := 1 to n do for each x, y  V do D xy k := D xy k-1 ; if (D x vk k-1 + D vk y k-1 < D xy k ) then D xy k := D x vk k-1 + D vk y k-1 ; // rilassamento endif enefor endfor return D n ● Costo: tempo O(n 3 ), spazio O(n 3 )

Algoritmi e Strutture Dati53 Esempio A B D CE F G D = A B C D E F G A Inf Inf Inf B Inf 0 6 Inf Inf Inf Inf C Inf Inf 0 Inf 1 Inf Inf D Inf Inf 10 0 Inf Inf Inf E Inf Inf Inf Inf F Inf Inf Inf Inf Inf 0 4 G Inf Inf Inf Inf Inf Inf 0

Algoritmi e Strutture Dati54 Esempio D = Inf Inf Inf Inf 0 6 Inf Inf Inf Inf Inf Inf 0 Inf 1 Inf Inf Inf Inf 10 0 Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf 0 4 Inf Inf Inf Inf Inf Inf 0 D = A B C D E F G A B Inf 0 6 Inf C Inf Inf 0 Inf D Inf Inf E Inf Inf Inf Inf F Inf Inf Inf Inf Inf 0 4 G Inf Inf Inf Inf Inf Inf