Calcolare un cammino minimo
Download
Report
Transcript Calcolare un cammino minimo
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 uT e vT 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 uT e vT 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 uT e vT 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 uT e
vT
• 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