Cammini Minimi. Algoritmo di Dijkstra

Похожие документы
Problema del cammino minimo

Visite in Grafi BFS e DFS

Grafi (orientati): cammini minimi

Algoritmi e strutture dati

Cammini minimi. Definizioni. Distanza fra vertici. Proprietà dei cammini minimi. Algoritmi e Strutture Dati

Cammini minimi in grafi:

Grafi: visita generica

Minimo albero di copertura

Cammini minimi fra tutte le coppie

Problemi, istanze, soluzioni

Sommario. Rappresentazione dei grafi. Ordinamento topologico. Visita in ampiezza Visita in profondità

Esempi. non. orientato. orientato

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

COMPLEMENTI DI SHORTEST-PATH. ASD Fabrizio d'amore

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Grafi diretti. Un grafo diretto (o grafo orientato) G è una coppia (V,E) dove. V è u n i n s i e m e d i nodi (o vertici);

Progettazione di Algoritmi

Progettazione di Algoritmi

Introduzione ai grafi

2.2 Alberi di supporto di costo ottimo

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Grafi: definizioni e visite

Alberi di copertura. Mauro Passacantando. Dipartimento di Informatica Largo B. Pontecorvo 3, Pisa

Grafi pesati Minimo albero ricoprente

Algoritmi e Strutture Dati

2.2 Alberi di supporto di costo ottimo

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Problema dell albero di cammini minimi (SPT, Shortest Path Tree) o problema dei cammini minimi :

11.4 Chiusura transitiva

Grafi e reti di flusso

Strutture dati per insiemi disgiunti

Algoritmo basato su cancellazione di cicli

Introduzione. Il routing permette la comunicazione tra due nodi differenti anche se non sono collegati direttamente

Algoritmi e Strutture Dati

Il problema del commesso viaggiatore

Introduzione ai grafi. Introduzione ai grafi p. 1/2

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 20 giugno 2014

4c. Esercizi sul livello di Rete Instradamento in Internet

In questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114

Esercizi di Algoritmi e Strutture Dati

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Fondamenti di Internet e Reti

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

Gestione della produzione e della supply chain Logistica distributiva

Progettazione di Algoritmi

Algoritmi e Strutture Dati (Mod. B) Algoritmi su grafi Ricerca in profondità (Depth-First Search) Parte III

Possibile applicazione

Dati e Algoritmi I (Pietracaprina) Esercizi svolti sui Grafi

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Progettazione di Algoritmi

Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte)

Routing IP. IP routing

METODI DELLA RICERCA OPERATIVA

ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I

GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi!

Makespan con set-up dipendenti dalla sequenza. 1/s jk /C max

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Problemi di ordinamento

Progettazione di algoritmi

Progettazione di algoritmi

Programmazione dinamica

«Sciente e Tecnologie dei Beni Culturali»

Routing. Forwarding e routing

Esame di Ricerca Operativa del 08/01/13. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare:

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

Parte V: Rilassamento Lagrangiano

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla

4.1 Localizzazione e pianificazione delle base station per le reti UMTS

Heap e code di priorità

Транскрипт:

Cammini Minimi Algoritmo di Dijkstra

Cammino in un grafo Dato un grafo G=(V,E), un Cammino (Percorso) in G è un insieme di vertici v 1, v 2,.., v k tali che (v i, v i+1 ) E v 1 v 2 v 3 v k In un grafo orientato si farà riferimento a cammini diretti Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 2

Connettività in grafi non orientati Due vertici u,v sono connessi in un grafo non orientato se esiste un cammino che collega u e v Un grafo è connesso se per ogni coppia di vertici u e v, u e v sono connessi Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 3

Connettività in grafi orientati Due vertici u e v sono connessi in un grafo orientato se esiste un cammino diretto che collega u a v Un grafo diretto è fortemente connesso se per ogni coppia (u,v), esiste un cammino da u a v e da v ad u Un grafo è debolmente connesso se per ogni coppia (u,v), esiste un cammino da u a v (o viceversa) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 4

Costo di un cammino Sia G = (V,E) un grafo orientato ai cui archi è associato un costo W(u,v). Il costo di un cammino p = (v 0,v 1,...,v k ) è la somma dei costi degli archi che lo costituiscono W( p) = k W i = ( v v 1 i 1, i ) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 5

Costo di un cammino minimo Il costo minimo del cammino da un vertice u ad un vertice v è definito nel seguente modo: min {W(p)} se esistono cammini p da u a v δ(u,v) = altrimenti Un cammino minimo da u a v è un cammino p da u a v di costo W(p) = δ(u,v) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 6

Varie versioni del problema 1 Nel problema dei cammini minimi viene richiesto di calcolare i cammini minimi in un grafo orientato Vi sono quattro versioni del problema: Cammini minimi da un'unica sorgente a tutti gli altri vertici (Single Source Shortest Paths) Cammini minimi da ogni vertice ad un'unica destinazione (Single Destination Shortest Paths) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 7

Varie versioni del problema 2 Cammini minimi da un'unica sorgente ad un unica destinazione (Single-Pair Shortest Path) Cammini minimi da ogni vertice ad ogni altro vertice (All Pairs Shortest Paths) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 8

Risoluzione dei vari problemi Noi risolveremo la prima istanza La seconda istanza si risolve simmetricamente La terza si può risolvere usando la soluzione della prima Non si conosce ancora un algoritmo che risolva la terza istanza in tempo asintoticamente migliore della prima La quarta istanza si può risolvere usando la soluzione della prima per ogni vertice del grafo In genere si può fare di meglio Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 9

Esempio di applicazione Si supponga di voler determinare il percorso più breve (in termini di chilometri) che collega due luoghi A e B Se si modella la carta stradale su cui compaiono A e B come un grafo in cui: I vertici sono gli incroci Gli archi sono i tratti di strada tra incroci successivi I pesi degli archi sono le distanze in chilometri di ciascun arco Il problema si riconduce a quello dell'identificazione del cammino minimo dal vertice corrispondente ad A al vertice corrispondente a B Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 10

Esempio di cammino minimo 12 v 1 v 2 s 16 4 10 9 3 2 t 13 v 3 9 v 4 14 cammino minimo Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 11

Note Nel caso di grafi non pesati, l'identificazione dell'albero dei cammini minimi può essere eseguita tramite la procedura di visita in ampiezza Non vogliamo calcolare solo il costo dei cammini minimi, ma anche i cammini minimi stessi Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 12

Archi di costo negativo Nel grafo orientato ci potrebbero essere anche archi di costo negativo Questi archi potrebbero creare dei problemi nell individuazione dei cammini minimi Vi potrebbero essere dei cicli di costo negativo raggiungibili da s Se un vertice u è raggiungibile da s tramite un cammino p che passa per un vertice appartenente ad un ciclo di costo negativo, allora esisteranno cammini da s a u di costo sempre minore costo minimo di cammino δ(s,u) non è definito Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 13

Esempio u s c 7 a -10 2 b Nel caso di cicli negativi si pone δ(s,u)= Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 14

Archi di costo positivo Supporremo che il grafo orientato avrà solo archi di costo positivo In questo caso il cammino di lunghezza minima non contiene cicli Dimostrazione? Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 15

Teorema: Sottostruttura ottimale Se p è un cammino minimo da u a v, allora ogni sotto-cammino di p èanche un cammino minimo In altre parole: Se il cammino p = (v 0,v 1,...,v k ) è minimo allora sono minimi anche tutti i sottocammini p ij = (v i,...,v j ). Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 16

Dimostrazione Se esistesse un cammino q da v i a v j di costo minore di p ij allora sostituendo nel cammino p il sottocammino p ij con il cammino q si otterrebbe un cammino da v 0 a v k di costo minore di p Impossibile se p è minimo v 0 v i X v j v k q Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 17

Scomposizione dei costi di un cammino minimo Se p è un cammino minimo da s ad un vertice v ed u è il vertice che precede v nel cammino allora δ(s,v) = δ(s,u) + W(u,v) Dimostrazione: Dipende dalla sottostruttura ottima: δ(s,v) = W(p) = δ(s,u) + W(u,v) s p' Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 18 u v

Limite superiore per i costi di cammino minimo Per ogni arco (u,v) vale la disuguaglianza: δ(s,v) δ(s,u) + W(u,v) Dimostrazione Se u non è raggiungibile da s allora δ(s,u) = e δ(s,v) + W(u,v) banalmente Se u è raggiungibile da s allora δ(s,u) + W(u,v) è il costo di un cammino da s a v ed è quindi maggiore o uguale di δ(s,v) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 19

Rappresentazione dei cammini minimi 1 In genere ci interessa calcolare non solo i costi dei cammini minimi dalla sorgente s ad ogni vertice del grafo ma anche i cammini minimi stessi Dato un vertice u con π[u] indichiamo il predecessore di u nel cammino da s a u Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 20

Rappresentazione dei cammini minimi 2 G=(V,E) s V s = sorgente Definiamo G π =(V π,e π ) il sottografo predecessore di G con V π ={v V: π[v] NIL} {s} E π ={(π[v],v) E : v V π -{s}} Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 21

Sottografo predecessore Un sottografo predecessore G π è uno shortestpaths tree per G se V π è costituito da tutti i vertici di G raggiungibili da s G π forma un albero con radice s il cammino semplice da s a v in G π coincide con il cammino minimo da s a v in G Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 22

Tecnica del rilassamento L algoritmo che studieremo per risolvere il problema dei cammini minimi usa la tecnica del rilassamento Dettagli a breve Ad ogni vertice v del grafo associamo un campo d[v] che rappresenta una stima di δ(s,v) Durante l esecuzione dell algoritmo è un limite superiore per δ(s,v) [d[v] δ(s,v)]; mentre alla fine sarà uguale a δ(s,v) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 23

Idea dell algoritmo 1 I valori d[v] e π[v] vengono aggiornati mediante la cosiddetta tecnica del rilassamento degli archi quando viene rilassato l arco (u,v) si verifica se è possibile ottenere un cammino più breve di quello di costo d[v] attraversando l arco (u,v) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 24

Rilassamento di un arco Il rilassamento rispetto ad un arco (u,v) consiste nel controllare se è possibile migliorare il cammino finora trovato per v aggiungendo al cammino trovato per u l arco (u,v). Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 25

Idea dell algoritmo 2 Rilassamento di un arco RELAX(u, v, w) if d[u] + w(u, v) < d[v] then d[v] d[u] + w(u, v) π[v] u //predecessore di u sul cammino di costo d[v] Inizializzazione INITIALIZE-SINGLE-SOURCE(G, s) for each vertex v V[G] d[v] π[v] nil d[s] 0 Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 26

Effetto del rilassamento Dopo aver eseguito RELAX(u, v, w) vale la disuguaglianza d[v] d[u] + W(u,v) Se d[v] > d[u] + W(u,v) prima del rilassamento, allora viene posto d[v] = d[u] + W(u,v) Se d[v] d[u] + W(u,v) prima del rilassamento, allora non viene fatto nulla Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 27

Idea dell algoritmo 3 Si esegue INITIALIZE-SINGLE-SOURCE(G, s) Ogni arco (u,v) viene rilassato eseguendo RELAX(u, v, w) L algoritmo termina quando i valori di d coincidono con i pesi dei cammini minimi Si noti che se ad un certo punto d[u]=δ(s,u), allora nessuna successiva invocazione di RELAX può modificare d[u] Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 28

Come scegliamo gli archi? L ordine in cui gli archi vengono rilassati dipende dal tipo di algoritmo Alcuni algoritmi rilassano ciascun arco più volte Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 29

Nota Si può provare che qualsiasi algoritmo che esegua l inizializzazione ed una sequenza di rilassamenti per cui alla fine d[v] = δ(s,v) per ogni vertice v calcola correttamente i cammini minimi Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 30

Algoritmi per SSSP Vi sono due algoritmi classici di questo tipo, uno dovuto a Dijkstra ed uno dovuto a Bellman-Ford L algoritmo di Dijkstra richiede che i pesi degli archi non siano negativi mentre quello di Bellman-Ford funziona anche nel caso generale Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 31

Algoritmo di Dijkstra 1 Input: grafo direzionato G=(V,E) con archi di peso maggiore o uguale a 0 un vertice s che rappresenta la sorgente L algoritmo mantiene Per ogni u V, i valori d[u] e π[u] S: insieme di vertici per cui è stato già determinato un cammino minimo Per ogni u S si ha d[u]=δ(s,u) Q: coda a priorità che contiene i vertici che non sono in S Per ogni u Q, la chiave che determina la priorità di u è d[u] Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 32

Algoritmo di Dijkstra 2 I vertici adiacenti a quelli in S formano una frontiera tra i vertici per cui si conosce un cammino minimo e tutti gli altri vertici Ogni volta viene inserito in S il vertice della frontiera che ha il valore di d più piccolo (scelta greedy) e vengono rilassati tutti gli archi uscenti da esso Ogni arco è rilassato esattamente una volta Output: π: sottografo predecessore, d: pesi dei cammini minimi da s a tutti gli altri vertici Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 33

Algoritmo di Dijkstra 3 Per ogni vertice u di S è già noto il cammino minimo da s ad u S s Resto del grafo frontiera Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 34

Pseudocodice dell algoritmo di Dijkstra DIJKSTRA(G,w,s) 1 INITIALIZE-SINGLE-SOURCE(G, s) 2 S 3 Q V[G] 4 while Q 5 do u Extract-Min(Q) 6 S S {u} 7 for each v Adj[u] 8 do RELAX(u,v,w) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 35

Passo dell algoritmo di Dijkstra I valori nei vertici indicano i valori di d S s 0 4 6 min(4+5, ) = 9 5 8 1 3 min(4+8, ) = 12 Per ogni nodo u della frontiera, d[u] contiene la lunghezza di un percorso passante solo per vertici in S Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 36

Passo dell algoritmo di Dijkstra I valori nei vertici indicano i valori di d S s 0 4 6 5 8 1 3 9 12 Per ogni nodo u della frontiera, d[u] contiene la lunghezza di un percorso passante solo per vertici in S Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 37

Passo dell algoritmo di Dijkstra I valori nei vertici indicano i valori di d S s 0 4 6 5 8 1 3 min(9, 6+1) = 7 9 12 min(12, 6+3) = 9 Per ogni nodo u della frontiera, d[u] contiene la lunghezza di un percorso passante solo per vertici in S Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 38

Passo dell algoritmo di Dijkstra I valori nei vertici indicano i valori di d S s 4 8 5 1 7 6 3 9 Per ogni nodo u della frontiera, d[u] contiene la lunghezza di un percorso passante solo per vertici in S Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 39

Correttezza dell algoritmo S u s Sia u il vertice della frontiera con il più piccolo valore di d. Un qualsiasi cammino minimo da s ad u attraversa solo vertici in S Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 40

Correttezza dell algoritmo di Dijkstra 1 S u s x Sia u il vertice della frontiera con il più piccolo valore di d. Qualsiasi cammino da s ad u che attraversa qualche vertice in V-S ha lunghezza maggiore di d[u] in quanto deve passare attraverso qualche altro vertice x della frontiera con d[x] d[u] per poi raggiungere u Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 41

Correttezza dell algoritmo di Dijkstra 2 p' Sia s v un percorso minimo da s a v. Se prima della chiamata a RELAX(u,v,w) si ha d[u]= δ(s,u), allora dopo la chiamata si ha d[v]= δ(s,v). Dimostrazione u d[v] d[u]+w(u,v) Per effetto di RELAX(u,v,w) = δ(s,u)+w(u,v) = δ(s,v) Per la sottostruttura ottimale Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 42

Correttezza dell algoritmo di Dijkstra 3 Teorema: Quando u viene inserito in S si ha d[u] = δ(s,u). Idea della dimostrazione: Da quanto illustrato nelle due slide precedenti segue che esiste un cammino minimo tra s ed u che attraversa solo vertici di S: S s z u Siccome d[z] = δ(s,z), allora il risultato della slide precedente implica che dopo RELAX(z,u,w) (eseguita quando z viene aggiunto ad S) risulta d[u] = δ(s,u) (e π[u] = z). Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 43

Complessità dell algoritmo di Dijkstra Il tempo di esecuzione dipende da come è implementata la coda a priorità Q Per l analisi considereremo tre diverse implementazioni di Q Mediante un array Mediante binary heap Mediante Fibonacci Heap INITIALIZE-SINGLE-SOURCE(G, s) richiede tempo O(V) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 44

Q implementata con array Inizializzazione di Q Tempo O(V) per inserire i vertici nell array Analisi del ciclo di while V operazioni Extract-Min (linea 5) Ciascuna richiede tempo O(V) in quanto occorre cercare il minimo V aggiornamenti di S Ciascuna richiede tempo costante Un totale di O(E) iterazioni del ciclo di for (linee 4-8) in quanto la lista di adiacenza di ciascun vertice u viene scandita esattamente una volta (quando u è inserito in S) RELAX(u,v,w) sulla linea 8 richiede tempo costante Tempo totale: O(V 2 + E )=O(V 2 ) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 45

Q implementata con binary heap Inizializzazione di Q effettuata mediante una Build-Heap che costruisce un heap con V elementi in tempo O(V) Analisi del ciclo di while V operazioni Extract-Min - Ciascuna richiede tempo O(log V) V aggiornamenti di S - Ciascuna richiede tempo costante Un totale di O(E) iterazioni del ciclo di for (linee 4-8) in quanto la lista di adiacenza di ciascun vertice u viene scandita esattamente una volta (quando u è inserito in S) RELAX(u,v,w) sulla linea 8 : L aggiornamento di d[v] è effettuata eseguendo DECREASE- KEY(Q,v,d[u]+w(u,v)) che richiede tempo O(log V) L aggiornamento di π[v] richiede tempo costante Tempo totale: O(Vlog V + E log V) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 46

Q implementata con Fibonacci heap Inizializzazione di Q effettuata mediante V Make-Heap e V-1 Union in tempo O(V) Analisi del ciclo di while V operazioni Extract-Min - Ciascuna richiede tempo O(log V) V aggiornamenti di S- Ciascuna richiede tempo costante Un totale di O(E) iterazioni del ciclo di for (linee 4-8) in quanto la lista di adiacenza di ciascun vertice u viene scandita esattamente una volta (quando u è inserito in S) RELAX(u,v,w) sulla linea 8 : L aggiornamento di d[v] è effettuata eseguendo DECREASE- KEY(Q,v,d[u]+w(u,v)) che richiede tempo ammortizzato O(1) L aggiornamento di π[v] richiede tempo costante Tempo totale: O(Vlog V + E) Prof. Carlo Blundo Laboratorio di Algoritmi e Strutture Dati 47