2.4 KiB
algoritmo di routing che sfrutta l'algoritmo di Dijkstra.
restrizioni al modello dei sistemi distribuiti aggiuntive
- restrizione di topologia
- canale di comunicazione con funzione costo non-negativo
Comportamento
[!Summary] Fintanto che non sono rimasti router fuori dallo spanning tree, ad ogni iterazione:
- il leader usa la tecnica di saturazione per alberi all'interno dello spanning tree costruito fino a quel momento per determinare il canale di comunicazione di costo minimo;
- il leader aggiunge allo spanning tree quel canale di comunicazione e il relativo router, notificandolo della cosa attraverso la route conosciuta;
- il router aggiunto notifica i vicini di un'entità della sua aggiunta all'albero, aspettando che tutti i vicini confermino l'operazione;
- il router notifica il leader della aggiunta completata.
Tip
Per ciascun router, il genitore nell'albero diventa il default gateway!
algoritmo corretto
[!Success] Deriva dalla algoritmo corretto dell'algoritmo di Dijkstra.
costo computazionale distribuito
Costo | notazione O-grande |
---|---|
comunicazione di routing | $O(Entities^2) |
tempo | ... |
Comunicazione di routing
Inizio
Ciascuna entità scambia informazioni con i propri vicini:
\color{LightCoral} 2 \cdot Channels
Iterazione singola
- La tecnica di saturazione per alberi costa:
4 \cdot Entities - 4
- L'andata della notifica di aggiunta costa:
Entities
- La notifica ai vicini di un'entità costa:
\mathrm{neighbours}(Entity)
- Il ritorno della notifica di aggiunta costa:
Entities
Sommando per tutte le iterazioni, abbiamo:
\sum_{Entity}^{Entities}
(4 \cdot Entities - 4)
+
(Entities)
+
(\mathrm{neighbours}(Entity))
+
(Entities)
Considerando che i vicini di un'entità di una entità non possono essere più dei router totali:
\sum_{Entity}^{Entities}
(4 \cdot Entities - 4)
+
(Entities)
+
(Entities)
+
(Entities)
Totale
In totale, dunque, avremo una notazione asintotica di:
O(Entities^2)
==C'è una dimostrazione diversa sulle slides, che non ho troppo capito perchè è tutta in notazione matematica.==