La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi e Strutture Dati

Presentazioni simili


Presentazione sul tema: "Algoritmi e Strutture Dati"— Transcript della presentazione:

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

2 (albero dei cammini minimi in grafi con pesi non negativi)
Algoritmo di Dijkstra (albero dei cammini minimi in grafi con pesi non negativi) 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à dsu+ 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 dsv< dsu+w(u,v). Allora, dsv è la lunghezza di un cammino minimo da s a v che non passa per (u,v), e quindi dovrà passare per (x,y), con xT e yT. Sia quindi sv = <s,…,x,y,…,v>. Copyright © The McGraw - Hill Companies, srl

4 Per la minimalità dei sottocammini di un cammino minimo:
w(sv) = w(sy) + w(yv) = dsx+ w(x,y) + w(yv). Poiché (u,v) minimizza dsu+ w(u,v) per ogni uT e vT, allora: dsu+ w(u,v) ≤ dsx+ w(x,y) e quindi: w(sv) ≥ dsu+ w(u,v) + w(yv) e poiché w(yv) ≥ 0, ne segue dsv ≡ w(sv) ≥ dsu+ w(u,v), assurdo (avevamo supposto dsv < dsu+ w(u,v)). □ Copyright © The McGraw - Hill Companies, srl

5 Approccio di Dijkstra Dato un nodo u in T, scegli un nodo vT che minimizza la quantità Dsu+w(u,v)≡dsu+w(u,v)= dsv, 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). 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 Dsv+w(v,y) < Dsx+w(x,y) , rimpiazziamo (x,y) con (v,y), ed aggiorniamo Dsy 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! Copyright © The McGraw - Hill Companies, srl

7 O(n+n log n+m)=O(m+n log n) con heap di Fibonacci
Tempo di esecuzione Al più n insert, n deleteMin e m decreaseKey nella coda di priorità Insert DelMin DecKey Heap binario O(log n) Heap Binom. Heap Fibon. O(1) 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 Copyright © The McGraw - Hill Companies, srl

8 Esempio (1/2) Copyright © The McGraw - Hill Companies, srl

9 Esempio (2/2) Copyright © The McGraw - Hill Companies, srl

10 Approfondimento Applicare l’algoritmo di Dijkstra con sorgente s sul seguente grafo: s 5 1 a b 3 4 5 c d 1 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) 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={v1, v2, … vn}. 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 {v1, v2, … vk}. v2 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. 7 1 x=v1 y=v4 4 2 v3 Idea di Floyd e Warshall: calcolare cammini minimi k-vincolati per k=1,…, n Copyright © The McGraw - Hill Companies, srl

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

14 Pseudocodice Tempo di esecuzione: (n3)
Copyright © The McGraw - Hill Companies, srl

15 Approfondimento Applicare l’algoritmo di Floyd e Warshall al seguente grafo: s 5 -1 a b 3 -4 5 c d -1 Copyright © The McGraw - Hill Companies, srl


Scaricare ppt "Algoritmi e Strutture Dati"

Presentazioni simili


Annunci Google