La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Cammini minimi con una sorgente Problema dei cammini minimi Varianti e archi negativi Sottostruttura ottima di un cammino minimo Algoritmo di Dijkstra.

Presentazioni simili


Presentazione sul tema: "Cammini minimi con una sorgente Problema dei cammini minimi Varianti e archi negativi Sottostruttura ottima di un cammino minimo Algoritmo di Dijkstra."— Transcript della presentazione:

1 Cammini minimi con una sorgente Problema dei cammini minimi Varianti e archi negativi Sottostruttura ottima di un cammino minimo Algoritmo di Dijkstra Complessità dellalgoritmo Rappresentazione dei cammini minimi

2 Problema dei cammini minimi Input: un grafo G=(V,E) orientato e pesato, con una funzione peso w: E R, che associa ad ogni arco in E un peso a valore nei reali. 3 2 5 6 1 4 3 8 1 -3 3 6 9 4 3 2 5 6 1 4 1 1 1 1 1 1 1 1 1

3 Problema dei cammini minimi Il peso di un cammino p= è la somma dei pesi degli archi che lo costituiscono. LU PT FI PO MC PI 20 50 20 60 35 25 LI SI GR AR 50 70 65 2015 35 40 p1= = 15 min + 50 min = 65 min p2 = = 15 min + 35 min + 40 min = = 90 min p3 = = 160 min

4 Problema dei cammini minimi Il peso di un cammino minimo dal vertice u al vertice v è definito da: Un cammino minimo dal vertice u al vertice v è definito come un qualunque cammino p con peso w(p) = δ(u,v). Può non essere unico! 3 2 5 6 1 4 3 8 1 -2 3 3 9 3 δ(6,1) = 7 p 1 = w(p 1 ) = 7 p 2 = w(p 2 ) = 9 p 3 = w(p 3 ) = 9 p 4 = w(p 4 ) = 7

5 Vari problemi Problema di cammini minimi con sorgente singola: si vuole trovare un cammino minimo da un dato vertice sorgente s ad ogni vertice v in V. Problema di cammini minimi con destinazione singola: si vuole trovare da ogni vertice v in V un cammino minimo ad un dato vertice destinazione t. Problema di cammini minimi tra una coppia: si vuole trovare un cammino minimo da u a v. Problema di cammini minimi tra tutte le coppie: determinazione di un cammino minimo per ogni coppia di vertici u e v.

6 Archi con pesi negativi Un possibile problema può essere rappresentato dalla presenza di pesi negativi sugli archi e di cicli che contengano archi con pesi negativi. Se il peso di un ciclo è negativo, allora tutti i nodi raggiungibile dal ciclo hanno un cammino minimo infinitamente negativo (-). 3 2 5 6 1 4 3 8 1 -2 3 3 -7 9 3 Ciclo negativo. Ogni volta che compio un giro diminuisco il peso del cammino che passa per il ciclo. δ(6,1) = -

7 Sottostruttura ottima di un cammino minimo Sottocammini di cammini minimi sono cammini minimi Dato un grafo G=(V,E) con funzione peso w:E R, sia p= un cammino minimo da v 1 a v k. Per ogni i e j tali che 1 i j k, ha che il sottocammino p ij = è un cammino minimo. 1i w(p ij )=δ(i,j) jk p ij Dato un altro sottocammino da i a j p ij, necessariamente w( p ij ) w( p ij ), altrimenti il cammino minimo passa per p ij.

8 Sottostruttura ottima di un cammino minimo Di conseguenza: Si supponga che un cammino minimo p da una sorgente ad un vertice v passi per larco (u,v) con peso w(u,v). Il peso del cammino minino da s a v è δ(s,v) = δ(s,u) + w(u,v). i δ(s,u) uv Più in generale, se esiste un arco (u,v), allora si ha: δ(s,v) δ(s,u) + w(u,v). w(u,v) cammino minimo tra u e v δ(s,v) = δ(s,u) + w(u,v).

9 Algoritmo di Dijkstra Lalgoritmo di Dijkstra risolve il problema dei cammini minimi con sorgente singola su un grafo orientato e pesato G=(V,E) nel caso in cui tutti i pesi degli archi siano non negativi. Ci sono due insiemi: S: dove d[v] = δ(s,v), quindi un cammino minimo tra s e v è stato determinato. Q = V-S: una coda a priorità dove d[v] ha il valore del cammino con peso minore finora scoperto. Allinizio, S contiene solo s, d[s]=0, mentre Q=V-{s} con d[v]=.

10 Algoritmo di Dijkstra DIJKSTRA(G,w,s) 1. for ogni vertice u in V[G] // inizializzazione di ogni vertice 2. do d[u] 3. p[u] NIL 4. d[s] 0 // si comincia dal vertice s 5.Q V[G] // coda a priorità 6.S Ø// insiemi dei cammini minimi trovati 7. while QØ// termina quando la coda Q è vuota 8. do u EXTRACT-MIN(Q)// prendi il cammino in Q più piccolo 9. S S U {u} // inserisci u in S 10. for ogni vertice v in Adj[u]// aggiorna cammini minimi in Q con v adiacente a u 11. do if d[v] > d[u] + w(u,v) 12. then d[v] d[u] + w[u,w] 13. p[v] u

11 Esempio v s u (a) 0 5 10 1 3 2 9 2 46 7 y x v s u (b) 0 5 10 5 10 1 3 2 9 2 46 7 y x v s u (c) 0 5 814 57 10 1 3 2 9 2 46 7 y x v s u (d) 0 5 813 57 10 1 3 2 9 2 46 7 y x v s u (e) 0 5 89 57 10 1 3 2 9 2 46 7 y x v s u (f) 0 5 89 57 10 1 3 2 9 2 46 7 y x

12 Se si esegue un lalgoritmo di Dijkstra su un grafo orientato e pesato G=(V,E) nel caso in cui tutti i pesi degli archi siano non negativi, allora al termine vale d[v] = δ(s,v) per ogni v in V. Dimostrazione Supponiamo per assurdo che u sia il primo vertice ad entrare in S tale che d[u] δ(s,u). Prendiamo un cammino minimo da s a u, che può essere decomposto in sxyu, con x in S, y in Q e (x,y) arco di G. Correttezza algoritmo x s y u S Può essere s = x o y = u p1p1 p2p2

13 Si ha anche d[y] = δ(s,y) = δ(s,x) + w(x,y), perché sottocamino di un cammino minimo. Inoltre d[y] = δ(s,y) δ(s,u) d[u]. Nellalgoritmo u viene scelto prima di y ( EXTRACT-MIN(Q) ), quindi deve valere luguaglianza: d[y] = δ(s,y) = δ(s,u) = d[u]. ASSURDO! δ(s,u) d[u]. Correttezza algoritmo x s y u S d[x] = δ(s,x) x è entrato prima di u in S. p1p1 p2p2

14 Complessità Si consideri che la coda con priorità Q come un array lineare: Inizzializzazione tempo O(|V|) EXTRACT-MIN(Q): ricerca del minimo in Q. Bisogna vedere tutti i valori in Q, richiede tempo O(|V|) EXTRACT-MIN(Q) viene eseguito per ogni vertice quindi il tempo totale è O(|V|x|V|) = O(|V| 2 ) Come in BFS vengono, si esamina la lista di adiacenza di ogni vertice v, che entra solo una volta in S. La somma di tutte liste di adiacenze è |E|. Il tempo totale dellalgoritmo di Dijkstra è O(|V|+|E|+|V| 2 ).

15 Come nella visita in ampiezza (BFS), lalgoritmo Dijkstra definisce un sottografo dei predecessori Tp=(Vp,Ep). Lalbero che ne segue contiene i cammini minimi individuati da s ad ogni vertice raggiungibile v. Nota: questo vale solo al termine dellalgoritmo. Rappresentazione dei cammini minimi v s u 0 5 89 57 10 1 3 2 9 2 46 7 y x v s u 0 5 89 57 1 3 2 y x Tp=(Vp,Ep)


Scaricare ppt "Cammini minimi con una sorgente Problema dei cammini minimi Varianti e archi negativi Sottostruttura ottima di un cammino minimo Algoritmo di Dijkstra."

Presentazioni simili


Annunci Google