• Non ci sono risultati.

Il Metodo di Dijkstra

N/A
N/A
Protected

Academic year: 2021

Condividi "Il Metodo di Dijkstra"

Copied!
12
0
0

Testo completo

(1)

Claudio Arbib

Università dell’Aquila

Ricerca Operativa

Il Metodo di Dijkstra

(2)

Il metodo di Dijkstra

• Il metodo di Dijkstra consente di calcolare il sottografo Z costituito da tutti gli (s, u)-cammini di peso minimo in un grafo G = (V, E) per uV, dove s è un vertice fissato di G

• Indicata con yu* la distanza del nodo u da s (cioè il peso del più breve (s, u)-cammino), il metodo procede attraverso la costruzione incrementale dell’insieme S dei nodi a distanza nota

• Il metodo si arresta quando yu* è stata calcolata per ogni uV, ovvero, nel caso di calcolo di (s, t)-cammino ottimo, quando si è calcolata yt*. La correttezza del metodo è

garantita se cuv > 0 per ogni uvE

(3)

Codifica del metodo di Dijkstra

1) Inizializzazione. S := {s}, ys* := 0; Z := ;

2) Calcolo dei vicini. Sia R(S) l’insieme dei nodi di V–S raggiungibili da S con un solo arco,

R(S) := {vV–S: uvE, uS};

3) Distanza provvisoria. Si associa a ogni vR(S) una distanza provvisoria yv calcolata come

yv := minuS{yu* + cuv}

4) Distanza definitiva. Si sceglie il nodo w di R(S) con minima distanza provvisoria, e la si rende

definitiva:

yw* := minvR(S){yv} = yu* + cuw

5) Aggiornamento di S e Z. S := S {w}; Z := Z {uw}

6) Criterio di Arresto. Se S = V (o se w = t)

l’algoritmo termina, altrimenti si ripete il passo 2.

(4)

Esempio

1) Inizializzazione. S := {s}, ys* := 0;

s

3 2

1

13 t

9

1

14 5

2 10

S

0

(5)

Esempio

2) Calcolo dei vicini. Sia R(S) l’insieme dei nodi di V–S raggiungibili da S con un solo arco,

R(S) := {vV–S: uvE, uS};

s

3 2

1

t

1

14 5

2 10

0 13

9

S

R(S)

(6)

Esempio

3) Distanza provvisoria. Si associa a ogni vR(S) una distanza provvisoria yv calcolata come

yv := minuS{yu* + cuv}

s

3 2

1

t

1

14 5

2 10

0 13

9

S

13

R(S) 9

(7)

Esempio

4) Distanza definitiva. Si sceglie il nodo w di R(S) con minima distanza provvisoria, e la si rende

definitiva:

yw* := minvR(S){yv} = yu* + cuw

s

3 2

1

t

1

14 5

2 10

0 13 13

9

9

S

R(S) 9

(8)

Esempio

5) Aggiornamento di S e Z. S := S {w}; Z := Z {uw}

s

3 2

1

t

1

14 5

2 10

0 13

9

9

S

9

6) Criterio di Arresto. Se S = V (o se w = t)

l’algoritmo termina, altrimenti si ripete il passo 2.

(9)

Esempio

s

3 2

1

t

1

14 5

2 10

0 13

9

9

S

9

2) Calcolo dei vicini. Sia R(S) l’insieme dei nodi di V–S raggiungibili da S con un solo arco,

R(S) := {vV–S: uvE, uS};

R(S)

3) Distanza provvisoria.

Si associa a ogni vR(S) una distanza provvisoria yv calcolata come

yv := minuS{yu* + cuv} 11

4) Distanza definitiva. Si sceglie il nodo w di R(S) con minima distanza

provvisoria, e la si rende definitiva:

yw* := minvR(S){yv} 11

(10)

Esempio

s

3 2

1

t

1

14 5

10

0 13

9

9

S

9

5) Aggiornamento di S e Z. S := S {w}; Z := Z {uw}

6) Criterio di Arresto. Se S = V (o se w = t)

l’algoritmo termina, altrimenti si ripete il passo 2.

11

2

2) Calcolo dei vicini. Sia R(S) l’insieme dei nodi di V–S raggiungibili da S con un solo arco, … …

(11)

Correttezza del metodo

Teorema Per ogni sV, il vettore {y

u*

}

uV

calcolato dal metodo di Dijkstra fornisce le distanze da s di tutti i nodi uV.

Dimostrazione Per induzione.

Anzitutto, siccome cuv > 0, la distanza di s da se stesso è ys* = 0.

Indichiamo ora con Sk l’insieme S calcolato all’iterazione k, e supponiamo che la distanza di u da s sia yu* per ogni s Sk.

Facciamo vedere che, se w è il nodo aggiunto a Sk all’iterazione k + 1, yw* rappresenta correttamente la distanza di w da S.

(12)

Correttezza del metodo

… segue dimostrazione

Supponiamo per assurdo che esista un (s, w)-cammino P di lunghezza d < yw*.

Poiché P inizia in Sk e termina fuori da Sk, esiste un arco abP con aSk, bR(Sk).

Siccome wR(Sk) e, dal passo 4 dell’algoritmo, yw* := minv∈R(S

k){yv} si ha

(1) yw* < yb.

Poiché d’altronde cuv > 0 ∀uvE, gli archi di P da b a w avranno un peso complessivo > 0, ossia

(2) yb < d

Dalle (1) e (2) si perviene allora a yw* < d, contraddizione.

Riferimenti

Documenti correlati

parole, e in accordo con un’implementazione preferita, al segnale ottenuto da una trasformazione temporale del video ad un certo livello di risoluzione spaziale (detto livello

Su di essi considereremo, poi, funzioni base “ Piece-Wise-Linear” nel caso di giunzione tra due elementi Wire (nodi); funzioni “ Roof-Top” nel caso di giunzione tra due elementi a

A tal proposito si esca per return (cf. [3]) se la derivata prima si annulla in una iterazione ponendo flag uguale a 1 o se il valore assoluto dello step `e minore della

(traccia: ci sono 4 configurazioni possibili (disegnarle); le tangenti alla curva grafico stanno sempre sopra o sotto la curva, la successione {x n } `e monotona e limitata, quindi

Poich`e questi strumenti hanno una resistenza interna, non misureremo le quantit`a relative alla resistenza in esame ,R x , ma a combinazioni di R x con le resistenze interne

Risolvere graficamente la disequazione data equivale a determinare la ascisse dei punti della semicirconferenza che hanno ordinata minore di quella dei corrispondenti punti di

nella matematizzazione galileana della natura, la realt` a viene idealizza- ta sotto la guida della nuova matematica; in termini moderni, essa diventa a sua volta una molteplicit`

L'impatto delle reazioni cutanee da radioterapia nel paziente affetto da cancro del distretto testa-collo sembra di.. notevole entità nell'esperienza di trattamento delle