Algoritmi e Strutture Dati
Grafi e Cammini minimi
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Definizioni
• Sia G=(V,E) un grafo orientato con costi w sugli
archi; w: E→R.
• Il costo di un cammino p=<v0,v1,v2,… ,vk> è dato da:
• Un cammino minimo tra una coppia di vertici x,y
è un cammino di costo minore o uguale a quello
di ogni altro cammino tra gli stessi vertici.
2
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà dei cammini minimi
• Sottostruttura ottima: ogni sottocammino di un cammino minimo
è anch’esso minimo
– Questa proprietà permette di applicare tecniche di programmazione Greedy
e Dinamica, assicurando soluzioni ottime:
• a partire da sottocammini minimi si perviene a cammini minimi.
• In generale potrebbe esistere più di un cammino minimo tra una
stessa coppia di vertici.
– A noi interesserà uno qualunque
• Nel caso di grafi orientati con pesi reali, si potrebbero avere cicli
caratterizzati da un costo negativo; in tal caso la soluzione ottima
potrebbe essere -∞ (cicli infiniti !!!!)
– Non vengono mai considerati grafi con cicli aventi costo minore di zero
3
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Distanza fra vertici
• Sia G=(V,E) un grafo orientato con costi w
sugli archi; w: E→R.
• La distanza dxy tra due vertici x e y in G è:
– il costo di un cammino minimo tra da x a y,
– o +∞ se i due vertici x e y non sono connessi
• Caso Particolare: la distanza di un vertice da se
stesso è 0
4
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Distanza fra vertici
• Disuguaglianza triangolare: per ogni x, y e z in
V vale sempre la relazione:
• Condizione di Bellman: per ogni arco (u,v) in E
e per ogni vertice s in V, vale:
5
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Calcolare un cammino minimo
• Obiettivo: calcolare il cammino minimo <v0, v1,.., vk>, con v0=x e
vk=y
• Un arco (u,v) appartiene ad un cammino minimo tra s e v se e solo
se la condizione di Bellman vale con l’eguaglianza: dsu+w(u,v)=dsv
O(δout*k)
O(n*k) caso peggiore
6
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmi per il Calcolo del
Cammino Minimo
•Ci sono diverse varianti
Sorgente/Destinazione
 Cammino minimo tra una singola coppia
 Cammini minimi a sorgente singola (da un vertice a tutti gli altri)
 Cammini minimi tra tutte le coppie
Tipologia di Grafo
 Cammini minimi per generico grafo orientato con funzione costo reale
 Cammini minimi per grafi orientati aciclici con funzione costo reale
 Cammini minimi per generico grafo orientato ma con funzione costo
maggiore o uguale a zero
7
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Alberi di Cammini Minimi
• Come memorizzare i cammini minimi a partire da
una sorgente s ?
• Soluzione ovvia: liste di vertici, una lista per ogni
destinazione
– Spazio: (n cammini di lunghezza max O(n) = O(n2))
• Soluzione migliore: I cammini minimi da un vertice
s a tutti gli altri vertici del grafo possono essere
rappresentati tramite un albero radicato in s, detto
albero dei cammini minimi
– Spazio: vettore/lista di O(n) elementi
8
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Alberi di Cammini Minimi
• Esempio: Vettore di n elementi
*
A
B
A
C
A
B
C
D
E
E
F
E
G
• Si basa sul Lemma che ogni sottocammino di un
cammino minimo è esso stesso un cammino minimo
9
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Tecnica del Rilassamento
• Tutti gli algoritmi che vedremo nel seguito si basano
sulla tecnica del rilassamento
• Si parte da stime per eccesso delle distanze Dxy ≥ dxy
• Si aggiornano le stime, decrementandole
progressivamente fino a renderle esatte.
• Aggiornamento delle stime basato sul seguente passo
di rilassamento:
10
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmo di Bellman e Ford
• Algoritmo generico per qualunque grafo orientato
G=(V,E) con funzione costo w: E→R
• Calcola Cammini Minimi a Sorgente singola
11
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Approccio di Bellman e Ford
Sia p =< s,v1,v2,… ,vk > un cammino minimo.
Se fossimo in grado di eseguire i passi di
rilassamento nell’ordine seguente:
in k passi avremmo la soluzione. Purtroppo non
conosciamo l’ordine giusto, essendo p ignoto
12
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Approccio di Bellman e Ford
• Esegue n passate
• In ciascuna passata rilassa tutti gli archi
• Dopo la j-esima passata, i primi j rilassamenti
corretti sono stati certamente eseguiti
• Esegue però molti rilassamenti inutili!
13
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Approccio di Bellman e Ford
Pseudocodice
Tempo di esecuzione: O(n m)
14
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Variante dell’Algoritmo di Bellman e
Ford per Grafi Aciclici
• Si applica per cammini minimi a sorgente singola
• Sfrutta il fatto che non vi sono cicli, dunque se esiste
un cammino da u a v, non può esistere il cammino da v
au
• Sulla base di questa proprietà, l’algoritmo “rilassa” gli
archi sulla base di un precedente ordinamento
topologico
– Ogni arco viene rilassato solo una volta !
15
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Ordinamento topologico
• Funzione s: V  {1, … n} tale che s(u)< s(v) se esiste un cammino
da u a v in G
• Esiste solo e solo se G è aciclico
• Si costruisce a partire da un vertice che non ha archi entranti
• L’ordinamento topologico non è unico !!!
16
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Calcolo di un ordinamento topologico
Tempo di esecuzione: O(n+m)
17
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Variante dell’Algoritmo di Bellman e
Ford per Grafi Aciclici
•Eseguire i rilassamenti in ordine topologico
•Ogni arco viene rilassato solo una volta !
Tempo di esecuzione: O(n+m)
18
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmo di Dijkstra
Calcolo dei cammini minimi:
• a sorgente singola
• in grafi orientati G=(V,E) ciclici (può
contenere cicli)
• Gli archi devono avere costi non negativi,
ossia ad ogni arco è associata la funzione
costo w: E → R+  {0}
19
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Principio di Funzionamento: Estensione
dell’albero dei cammini minimi
Lemma: Se T è un albero dei cammini minimi radicato
in s che non include tutti i vertici raggiungibili da s,
l’arco (u,v) tale che uT e vT che minimizza la
quantità dsu+w(u,v) appartiene a un cammino minimo da
sav
20
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Approccio di Dijkstra
• Si suppone che ogni vertice sia raggiungibile da s
• All’inizio l’albero T contiene solo s
• Si applica per (n-1) volte:
– Scegli un arco (u,v) con uT e vT che minimizza la quantità
Dsu+w(u,v), effettua il passo di rilassamento Dsv  Dsu+w(u,v),
ed aggiungilo a T
algoritmo DijkstraGenerico(grafo G, vertice s) → T
inizializza D tale che Dsv=+∞ per v≠s e Dss=0
T←albero formato solo da s
while (T ha meno di n nodi) do
trova l’arco (u,v) incidente su T con Dsu+w(u,v) minimo
Dsv  Dsu+w(u,v)
{rilassamento}
rendi u padre di v in T
return T
21
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio (1/2)
22
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio (2/2)
23
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Implementazione con Code con
Priorità
• Operazione cruciale: selezione dell’arco (u,v)
con uT e vT che minimizza la quantità
Dsu+w(u,v)
• Per ogni nodo u, significa fare m calcoli O(m)
• Totale complessità O(m*n), eccessiva!!!!
• Soluzione: uso code con priorità; complessità
varia da O(m*logn) a O(m+n*logn)
24
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Implementazione con Code con
Priorità
• Uso della coda di priorità Min per gestire l’arco (u,v) con uT e
vT
• Si preferisce mantenere vertici invece che archi (al più n
elementi in coda)
– la coda memorizzerà solo il vertice v, che minimizza la quantità
Dsu+w(u,v)
– il valore di ogni elemento della coda è il vertice v
– La priorità di ogni elemento della coda è la quantità Dsu+w(u,v)
• Se il vertice v già esiste in coda e trovo un altro arco (u,v) per
cui la quantità Dsu+w(u,v) diminuisce, allora devo aggiornare la
priorità dell’elemento v
– Si usa una funzione delle code di priorità Min: DecreaseKey
25
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Pseudocodice
26
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Tempo di esecuzione
Al più:
• n insert, n*O(log n)
• n deleteMin, n*O(log n)
• (m-n) decreaseKey, (m-n)*O(log n)
• O(m log n) utilizzando heap
• O(m+n log n) utilizzando heap di Fibonacci (DecreaseKey O(1))
27
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmo di Floyd e Warshall
• Algoritmo generico per qualunque grafo orientato
G=(V,E) con funzione costo w: E→R
• Calcola Cammini Minimi tra tutte le coppie
• Tempo di esecuzione: O(n3)
28
Copyright © 2008 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati 2/ed
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Riepilogo
• Algoritmi classici per il calcolo di distanze (e quindi
di cammini minimi), basati sulla tecnica del
rilassamento:
– Bellman e Ford: cammini minimi a sorgente singola, grafi
diretti senza cicli negativi, tempo O(nm)
• Grafi diretti aciclici: tempo O(n+m)
– Dijkstra: cammini minimi a sorgente singola, grafi diretti
senza pesi negativi, tempo O(m+n log n)
– Floyd e Warshall: cammini minimi tra tutte le coppie in
tempo O(n3)
29
Copyright © 2008 - The McGraw - Hill Companies, srl