La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Capitolo 13 Cammini minimi: Algoritmo di Dijkstra (*) Algoritmi e Strutture Dati.

Presentazioni simili


Presentazione sul tema: "Capitolo 13 Cammini minimi: Algoritmo di Dijkstra (*) Algoritmi e Strutture Dati."— Transcript della presentazione:

1 Capitolo 13 Cammini minimi: Algoritmo di Dijkstra (*) Algoritmi e Strutture Dati

2 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 2 I tre problemi sui cammini minimi Dato un grafo diretto G con pesi reali sugli archi, i tre problemi classici legati ai cammini minimi sono i seguenti: Cammino minimo tra due nodi: dati due nodi x e y in G, trovare un cammino minimo in G che congiunge x ed y. Cammini minimi a sorgente singola: dato un vertice s, detto sorgente, trovare i cammini minimi da s verso tutti i vertici da esso raggiungibili nel grafo G. Cammino minimo tra tutte le coppie di nodi: trovare un cammino minimo in G che congiunge ogni coppia di vertici x ed y di G.

3 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 Punto della situazione Algoritmo basato sullordinamento topologico: albero dei cammini minimi in grafi diretti aciclici. Complessità Θ(n+m) (con liste di adiacenza). Algoritmo di Bellman&Ford: albero dei cammini minimi in grafi diretti che non contengono cicli negativi. Complessità Θ(n·m) (con liste di adiacenza).

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

5 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 5 Notazione w(u,v): peso dellarco (u,v) del grafo pesato G=(V,E,w) w( ): costo di un cammino nel grafo, ovvero somma dei pesi di tutti gli archi del cammino uv : cammino minimo nel grafo tra i nodi u e v d uv : distanza nel grafo (ovvero lunghezza del cammino minimo) tra i nodi u e v D uv : sovrastima della distanza nel grafo tra i nodi u e v (cioè D uv d uv )

6 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 Estendere lalbero dei cammini minimi Lemma di Dijkstra (1959): Sia G=(V,E,w) (diretto o non diretto) con pesi non negativi, e sia T un sottoalbero dellalbero dei cammini minimi radicato in s che include s ma non include tutti i vertici raggiungibili da s. Sia (u,v) = arg min{d st + w(t,z) | (t,z) E, t T e z T}. Allora, (u,v) 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.

7 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 Per la minimalità dei sottocammini di un cammino minimo, il cammino da s a x deve essere minimo e avere quindi lunghezza d sx w( sv ) = w( sx ) + w(x,y) + w( yv ) = d sx + w(x,y) + w( yv ). Poiché (u,v) minimizza d st + w(t,z) per ogni t T e z T, allora: d sx + w(x,y) d su + w(u,v) 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)).

8 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 8 Approccio di Dijkstra I nodi da aggiungere progressivamente a T sono mantenuti in una coda di priorità, associati ad un unico arco che li connette a T. Se y è in coda con arco (x,y) associato, e se dopo aver aggiunto v a T troviamo un arco (v,y) tale che D sv +w(v,y) < D sx +w(x,y), allora rimpiazziamo (x,y) con (v,y), ed aggiorniamo D sy. Sia T il sottoalbero dei cammini minimi costruito sinora (allinizio T contiene solo il nodo sorgente). Supponiamo quindi che lalgoritmo abbia già trovato d su per ogni u T, e abbia invece una sovrastima D sv per ogni v T. Al passo successivo, seleziona il nodo v T che minimizza la quantità D sv :=d su +w(u,v) (si noti che D sv coinciderà con d sv per il lemma di Dijkstra), con u T; quindi, 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).

9 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 9 Pseudocodice Nota: T è un albero che contiene tutti i nodi già aggiunti alla soluzione (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 lalbero T considerato nel lemma di Dijkstra!

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

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

12 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 12 Tempo di esecuzione: implementazioni elementari Supponendo che il grafo G=(V,E,w) sia rappresentato tramite liste di adiacenza e che |V|=n ed |E|=m, e supponendo che G sia fortemente connesso rispetto ad s (e quindi mn-1), avremo n insert, n deleteMin e al più m decreaseKey nella coda di priorità C, al costo di: n·O(1) + n·O(n) + O(m)·O(1) = O(n 2 ) con array non ordinati n·O(n) + n·O(1) + O(m)·O(n) = O(m·n) con array ordinati n·O(1) + n·O(n) + O(m)·O(1) = O(n 2 ) con liste non ordinate n·O(n) + n·O(1) + O(m)·O(n) = O(m·n) con liste ordinate InsertDelMinDecKey Array non ord.O(1)Θ(|C|)=O(n)O(1) Array ordinatoO(|C|)=O(n)O(1)O(|C|)=O(n) Lista non ord.O(1)Θ(|C|)=O(n)O(1) Lista ordinataO(|C|)=O(n)O(1)O(|C|)=O(n)

13 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Osservazione sulla decreaseKey Ricordiamo che le complessità computazionali esposte per la decreaseKey sono valide supponendo di avere un puntatore diretto allelemento su cui eseguire loperazione. Come possiamo garantire tale condizione? Semplicemente inizializzando un puntatore tra il nodo v nellarray dei nodi della lista di adiacenza del grafo e lelemento nella coda di priorità associato al nodo v; tale puntatore viene inizializzato nella fase di inserimento di questultimo allinterno della coda. Copyright © The McGraw - Hill Companies, srl 13

14 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 14 Tempo di esecuzione: implementazioni efficienti n·O(log n) + n·O(log n) + O(m)·O(log n) = O(m·log n) utilizzando heap binari o binomiali n·O(1) + n·O(log n) * + O(m)·O(1) * = O(m + n·log n) utilizzando heap di Fibonacci (si osservi – e lo si dimostri limitatamente ai vari metodi presentati – che questa complessità computazionale è il miglior upper bound noto alla complessità del problema!) InsertDelMinDecKey Heap binario O(log n) Heap Binom. O(log n) Heap Fibon. O(1)O(log n) * (ammortizzata) O(1) * (ammortizzata) Supponendo che il grafo G=(V,E,w) sia rappresentato tramite liste di adiacenza e che |V|=n ed |E|=m, e supponendo che G sia fortemente connesso rispetto ad s (e quindi mn-1), avremo n insert, n deleteMin e al più m decreaseKey nella coda di priorità, al costo di:

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

16 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 Soluzione esercizio di approfondimento Applicare lalgoritmo di Dijkstra con sorgente s sul seguente grafo: s a c b d s a c b d s a c b d s a c b d s a c b d a c b d


Scaricare ppt "Capitolo 13 Cammini minimi: Algoritmo di Dijkstra (*) Algoritmi e Strutture Dati."

Presentazioni simili


Annunci Google