Capitolo 13 Cammini minimi: Algoritmo di ordinamento topologico, di Dijkstra, e di Floyd e Warshall Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 2 Algoritmo di ordinamento topologico (per cammini minimi a sorgente singola in grafi aciclici)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 Ordinamento topologico Funzione : V {1, … n} tale che (u)< (v) se esiste un cammino da u a v in G Esiste se e solo se G è aciclico
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 4 Calcolo di un ordinamento topologico Tempo di esecuzione: O(n + m)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 5 Cammini minimi in grafi aciclici Tempo di esecuzione: O(n + m) Eseguire i rilassamenti in ordine topologico
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 Algoritmo di Dijkstra (per cammini minimi a sorgente singola in grafi con costi non negativi)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 Estendere l’albero dei cammini minimi 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à d su +w(u,v) appartiene a un cammino minimo da s a v
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 8 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) Dato un nodo u in T, scegli un nodo v T che minimizza la quantità d su +w(u,v), aggiungi v a T ed effettua il passo di rilassamento D sy d sv +w(v,y) per ogni y T.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 9 Pseudocodice
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 10 Tempo di esecuzione Al più n insert, n deleteMin e m decreaseKey O(m log n) utilizzando heap (binari o binomiali) O(m+n log n) utilizzando heap di Fibonacci
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 11 Esempio (1/2)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 12 Esempio (2/2)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 13 Algoritmo di Floyd e Warshall (per cammini minimi tra tutte le coppie in grafi con cicli non negativi)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 14 Approccio Elegante applicazione della tecnica della programmazione dinamica Un cammino minimo k-vincolato da x a y è un cammino di costo minimo tra tutti i cammini da x a y che usano solo i vertici {v 1, v 2, … v k } Idea di Floyd e Warshall: calcolare cammini minimi k-vincolati per k=1,…,n
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 15 Relazioni tra distanze vincolate Sia d xy il costo di un cammino minimo k-vincolato da x a y. Risulta: k d xy =w(x,y) se (x,y) E, +∞ altrimenti 0 d xy =d xy n L’algoritmo calcola d xy dal basso verso l’alto, incrementando k da 1 a n
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 Pseudocodice Tempo di esecuzione: O(n 3 )
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 17 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) –Ordinamento topologico: cammini minimi a sorgente singola, 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(n 3 )