Sei sulla pagina 1di 7

Reti di Telecomunicazioni

R. Bolla, L. Caviglione, F. Davoli

  Algoritmo di Dijkstra
  Esempio e confronto con Bellman-Ford
  Versione distribuita dell’algoritmo di Bellman
-Ford (Vector Distance)

31.2
  L’algoritmo di Bellman-Ford itera sul numero
di archi attraversati da un percorso.
  L’algoritmo di Dijkstra itera sulla lunghezza
del percorso.

31.3

  Sia P un insieme di nodi e Di la distanza minima


“stimata” dal nodo 1.
  Fissando inizialmente
P = {1}, D1 = 0, Dj = dj1 per tutti i j ≠ 1
  I passi dell’algoritmo di Dijkstra sono
1 Trova i ∉ P tale che
Di = minj ∉ P {Dj }
e poni P ← P ∪ {i}. Se P contiene tutti i nodi
l’algoritmo è completato.
2 Per tutti i j ∉ P, poni Dj ← min{Dj, dji + Di}
e torna al passo 1
31.4
Bellman-
3 Ford
2 3
1 2
1 1 1 6
4 4 5 4
1
dij = dji
Dijkstra
∀ (i, j) 3
2 3
1 2
1 1 1 6
4 4 5 4
1
31.5

1 Bellman-
D2 = 1 2
3
3 Ford
1 2
1 1 1 6
4 4 5 4
1
D4 = 4 1
Dijkstra
D2 = 1 2
3
3 D3 = 4
1 2
P = {1, 2}
1 1 1 6
4 4 5 4
D4 = 4 1 D5 = 2
31.6
2 2 Bellman-
D2 = 1 2
3
3 D3 = 4 Ford
1 2
1 1 1 6
4 4 5 4
2 2
D4 = 4 1 D5 = 2
Dijkstra
D2 = 1 2
3
3 D3 = 3
1 2
P = {1, 2, 5}
1 1 1 6 D6 = 6
4 4 5 4
D4 = 3 1 D5 = 2
31.7

3 3 Bellman-
D2 = 1 2
3
3 D3 = 3 Ford
1 2
3
1 1 1 6 D6 = 6
4 4 5 4
3 3
D4 = 3 1 D5 = 2
Dijkstra
D2 = 1 2
3
3 D3 = 3
1 2
P = {1, 2, 3,
4, 5} 1 1 1 6 D6 = 5
4 4 5 4
D4 = 3 1 D5 = 2
31.8
4 4 Bellman-
D2 = 1 2
3
3 D3 = 3 Ford
1 2
4
1 1 1 6 D6 = 5
4 4 5 4
4 4
D4 = 3 1 D5 = 2
Dijkstra
D2 = 1 2
3
3 D3 = 3
1 2
P = {1, 2, 3,
4, 5, 6} 1 1 1 6 D6 = 5
4 4 5 4
D4 = 3 1 D5 = 2
31.9

Sia N il numero dei nodi e A quello degli archi.

  Nel caso peggiore, l’algoritmo di Bellman-Ford compie N-1


iterazioni, ciascuna su N-1 nodi, con al più N-1 alternative per
nodo, il che porterebbe a complessità O(N3). In realtà, si può
mostrare che la complessità è O(mA), con m numero di
iterazioni per la convergenza (massimo numero di archi in un
percorso minimo).
  L’algoritmo di Dijkstra è O(N2). Anche in questo caso però la
complessità può essere considerevolmente ridotta con l’uso di
strutture dati appropriate.

[Data una funzione qualsiasi f(n) e una φ(n)>0, f=O(φ) significa che
f<cφ, con c indipendente da n per i valori di n in questione.]
31.10
  L’iterazione dell’algoritmo di Bellman-Ford può
essere eseguita ad ogni nodo i in parallelo con gli
altri.
  Se le iterazioni fossero eseguite in modo sincrono
(simultaneamente ad ogni nodo), scambiando ad
ogni iterazione i risultati con i vicini, partendo dalle
condizioni iniziali Di0 = ∞ per tutti gli i ≠ 1 e D10 = 0,
l’algoritmo convergerebbe in al più N-1 passi.

31.11

  La realizzazione sincrona presenterebbe


però grosse difficoltà di inizializzazione, ri
-inizializzazione in caso di variazioni e
realizzazione.
  Fortunatamente, anche una versione
asincrona (e con condizioni iniziali
qualsiasi!) dell’algoritmo distribuito
converge.

31.12
  Nella versione asincrona, ogni nodo i esegue
l’iterazione
Di ← minj ∈N (i) {dij + Dj }
(dove N(i) è l’insieme dei nodi adiacenti ad i), usando le
stime Dj più recenti ricevute dai vicini e trasmettendo Di
ai propri vicini.

  Non è necessaria una inizializzazione con particolari


valori di Dj .

31.13

  Come si possono classificare le tecniche di


instradamento?
  Quali proprietà dovrebbero avere? Sapreste
illustrarle con qualche esempio?
  Descrivete l’algoritmo di Bellman-Ford, nella
versione centralizzata e distribuita.
  Descrivete l’algoritmo di Dijkstra.

31.14