La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Capitolo 13 Cammini minimi: Algoritmo di Dijkstra; Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.

Presentazioni simili


Presentazione sul tema: "Capitolo 13 Cammini minimi: Algoritmo di Dijkstra; Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati."— Transcript della presentazione:

1 Capitolo 13 Cammini minimi: Algoritmo di Dijkstra; Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati

2 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 2 Algoritmo di Dijkstra (albero dei cammini minimi in grafi con pesi non negativi)

3 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 Estendere l’albero dei cammini minimi Lemma di Dijkstra (1959): Sia G=(V,E,w) diretto con pesi non negativi, e sia T un sottoalbero dell’albero dei cammini minimi radicato in s che include s ma non include tutti i vertici raggiungibili da s. Allora, l’arco (u,v) che minimizza la quantità d su + w(u,v) per ogni u  T e v  T, appartiene a un cammino minimo da s a v. Dim.: Supponiamo per assurdo che (u,v) non appartenga ad un cammino minimo da s a v, e quindi che d sv.

4 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 4 Per la minimalità dei sottocammini di un cammino minimo: w(  sv ) = w(  sy ) + w(  yv ) = d sx + w(x,y) + w(  yv ). Poiché (u,v) minimizza d su + w(u,v) per ogni u  T e v  T, allora: d su + w(u,v) ≤ d sx + w(x,y) e quindi: w(  sv ) ≥ d su + w(u,v) + w(  yv ) e poiché w(  yv ) ≥ 0, ne segue d sv ≡ w(  sv ) ≥ d su + w(u,v), assurdo (avevamo supposto d sv < d su + w(u,v)).□

5 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 5 Approccio di Dijkstra Nodi non ancora in T mantenuti in una coda con priorità, prestando attenzione ad avere un solo arco per ogni nodo y  T: se (x,y) è in coda quando analizziamo (v,y) dopo aver aggiunto v a T, e risulta D sv +w(v,y) < D sx +w(x,y), rimpiazziamo (x,y) con (v,y), ed aggiorniamo D sy Dato un nodo u in T, scegli un nodo v  T che minimizza la quantità D su +w(u,v)≡d su +w(u,v)= d sv, aggiungi v a T ed effettua il passo di rilassamento su ogni nodo y  T adiacente a v (per il quale cioè (v,y)  E).

6 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 Pseudocodice Nota: T è un albero che contiene tutti i nodi già scoperti (ovvero quelli per i quali è già stato trovato il cammino minimo da s), più i nodi correntemente contenuti nella coda di priorità, ciascuno connesso al rispettivo nodo padre; non va confuso con l’albero T considerato nel lemma di Dijkstra! 

7 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 Tempo di esecuzione Al più n insert, n deleteMin e m decreaseKey nella coda di priorità O(n log n+n log n+m log n)=O(m log n) utilizzando heap (binari o binomiali) O(n+n log n+m)=O(m+n log n) con heap di Fibonacci InsertDelMinDecKey Heap binario O(log n) Heap Binom. O(log n) Heap Fibon. O(1)O(log n)O(1)

8 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 8 Esempio (1/2)

9 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 9 Esempio (2/2)

10 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 10 Approfondimento Applicare l’algoritmo di Dijkstra con sorgente s sul seguente grafo: s a c b d

11 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 11 Algoritmo di Floyd e Warshall (cammini minimi tra tutte le coppie di nodi in grafi con cicli non negativi)

12 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 12 Approccio Elegante applicazione della tecnica della programmazione dinamica Supponiamo di enumerare i vertici di G da 1 a n, cioè V={v 1, v 2, … v n }. Un cammino minimo k-vincolato da x a y è un cammino di costo minimo tra tutti i cammini da x a y che usano come vertici intermedi un sottoinsieme (anche vuoto) dei vertici {v 1, v 2, … v k }. x=v y=v 4 v2v2 v3v3 Tra x e y, il cammino minimo: 0-vincolato è lungo +  1-vincolato è lungo +  2-vincolato è lungo 8; 3-vincolato è lungo 6; 4-vincolato (ovvero senza vincoli) è lungo 6. Idea di Floyd e Warshall: calcolare cammini minimi k- vincolati per k=1,…, n

13 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 13 Relazioni tra distanze vincolate  L’algoritmo calcola d xy dal basso verso l’alto, incrementando k da 0 a n Sia d xy il costo di un cammino minimo k-vincolato da x a y. Chiaramente, valgono le seguenti proprietà: –d xy = w(x,y) se (x,y)  E, +∞ altrimenti –d xv k = d xv k –d xy = d xy k 0 k-1 Per le proprietà di cui sopra e per la proprietà di minimalità dei sottocammini di cammini minimi, si ha: n k

14 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 14 Pseudocodice Tempo di esecuzione:  (n 3 )

15 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 15 Approfondimento Applicare l’algoritmo di Floyd e Warshall al seguente grafo: s a c b d


Scaricare ppt "Capitolo 13 Cammini minimi: Algoritmo di Dijkstra; Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati."

Presentazioni simili


Annunci Google