Sei sulla pagina 1di 15

Algoritmi di routing statici

Questi algoritmi, sono eseguiti solamente all'avvio della


rete, e le decisioni di routing a cui essi pervengono sono
poi applicate senza più essere modificate.
Alcuni algoritmi statici sono:

shortest path routing (routing


basato sul percorso più breve)

flooding

flow-based routing
shortest path routing
- routing basato sul percorso più breve -

sink tree : l’insieme dei cammini ottimali da tutte le sorgenti


ad una destinazione.

(a) Esempio di rete (b) Un sink tree per il router B


Il principio di ottimalità e i sink tree forniscono un modello per
misurare gli algoritmi di routing.
Ogni router della rete ha in memoria un grafo (Sink tree) dove:
· i nodi rappresentano i router;
· gli archi rappresentano le linee punto-punto.

I sink tree sono calcolati all'avvio della rete da un host di gestione


che:
· applica al grafo un algoritmo (ad esempio l’algoritmo ideato da
Dijkstra nel 1959) per il calcolo del cammino minimo fra ogni
coppia di nodi;
· invia tali informazioni a tutti i router.
Il cammino minimo viene calcolato sulla base della grandezza
che si vuole minimizzare (peso).
Tipicamente è:
· il numero di hop, cioè di archi, da attraversare;
· la lunghezza dei collegamenti;
· il tempo medio di trasmissione.

(Come esempio possiamo considerare un automobilista che può


scegliere il suo itinerario in funzione del numero minimo di
chilometri da percorrere oppure per arrivare nel minore tempo
possibile).
Algoritmo di Dijkstra

Con questo algoritmo ogni nodo è associato a un’etichetta


(racchiusa tra parentesi) che riporta la sua distanza dal nodo
d’origine lungo il miglior percorso conosciuto.

Inizialmente, ovvero all’avvio della rete, nessun percorso è


noto, perciò tutti i nodi sono etichettati con un simbolo che
rappresenta l’infinito.

Mano a mano che l’algoritmo procede e si trovano i percorsi, le


etichette cambiano rispecchiando i percorsi migliori. Inizialmente
tutte le etichette sono provvisorie, e quando si scopre che
rappresenta il percorso più breve possibile dall’origine a quel
nodo viene resa permanente smettendo di modificarla.
Algoritmo di Dijkstra

Lo scopo è quindi trovare il percorso minimo (più corto, più


veloce, più economico…) tra due punti, uno di partenza e uno di
arrivo.
Con questo metodo è possibile:
•ottenere il percorso minimo tra un punto di partenza e uno di
arrivo
•Ottenere il percorso minimo tra un punto di partenza e tutti gli
altri punti della rete.

Una buona schematizzazione per i problemi di percorso minimo


deve includere tutti i possibili collegamenti tra i nodi (ed i relativi
costi) e deve essere fissato un nodo di partenza e un peso
(la grandezza che si vuole minimizzare).
Algoritmo di Dijkstra

Esempio: consideriamo un problema in cui si vuole calcolare il


percorso minimo tra casa e il posto di lavoro.
Schematizziamo tutti i possibili percorsi ed il relativo tempo di
percorrenza (supponendo di voler calcolare il percorso più breve in
fatto di tempo di percorrenza). I nodi A, B, C, D, E indicano le
città per cui è possibile passare.
Algoritmo di Dijkstra
Dobbiamo ora assegnare ad ogni nodo un valore (etichetta),
seguendo alcune regole:
· Ogni nodo ha all'inizio etichetta (che indichiamo con “inf”);
· Il nodo di partenza (in questo caso “casa”) ha etichetta 0
(ovvero dista zero da se stesso);
· Ogni volta si sceglie il nodo con etichetta minore e lo si rende
definitivo si aggiornano i nodi adiacenti;
· L’etichetta di un nodo è dato dalla somma dell’etichetta del
nodo precedente + il costo del collegamento;
· Non si aggiornano le etichette dei nodi resi definitivi;
· Le etichette definitive indicano la distanza di quel nodo da
quello di partenza;
· Quando si aggiorna l’etichetta di un nodo si lascia quella
minore (essendo un problema di percorso minimo).
Algoritmo di Dijkstra
In questa rete sono indicate anche le etichette.
Seguendo le regole appena fissate consideriamo il nodo con
etichetta minore (“casa”) e lo rendiamo definitivo (colorandolo di
rosso) ed aggiorniamo tutti i nodi adiacenti sommando l'attuale
valore dell’etichetta (ovvero zero) al costo del percorso.

Aggiorniamo le etichette:
nel caso di A, etichetta
infinito diventa etichetta 2.
Ricordando che l’etichetta
minore è sempre preferibile.

Vediamo come si è aggiornata la rete:


Algoritmo di Dijkstra

Bisogna ora considerare il nodo non definitivo (ovvero quelli scritti in nero)
con etichetta minore (il nodo A). Lo si rende definitivo e si aggiornano le
etichette dei nodi adiacenti B e C. Indichiamo con una freccia da dove
proviene l’etichetta dei nodi resi definitivi.
Algoritmo di Dijkstra

Il nodo con etichetta minore ora è C, lo si rende definitivo e si


aggiornano quelli adiacenti D ed E senza renderli definitivi
Algoritmo di Dijkstra

Va notato come il nodo D abbia ora etichetta 6 in quanto 6 è minore di 8


e quindi lo si aggiorna. Se avessimo avuto un valore maggiore di quello
che già c’era lo avremmo lasciato invariato. Rendiamo definitivo il nodo
D e aggiorniamo il grafico (il nodo E diventa 9):
Algoritmo di Dijkstra

Il nodo con etichetta minore restante è B e lo si rende definitivo


aggiornando di conseguenza il grafico (Ufficio diventa 13):
Algoritmo di Dijkstra

Resta da considerare il nodo E ed aggiornare “ufficio”.


Algoritmo di Dijkstra

Seguendo all'indietro le frecce si ottiene il percorso minimo che


dista casa da ufficio, che dista (come indicato dall’etichetta) “10”.

Bisogna notare come questo


algoritmo ci dà non solo la
distanza minima tra il punto
di partenza e quello di arrivo
ma anche la distanza
minima di tutti i nodi da
quello di partenza.

Potrebbero piacerti anche