2 KiB
algoritmo iterativo di routing che sfrutta la visita breadth-first.
Funzionamento
Distanze a relazione
Consideriamo due entità vicine nel sistema distribuito:
\def \varSource {{\color{LimeGreen} Source}}
\def \varA {{\color{DarkGoldenrod} Entity_A}}
\def \varB {{\color{Goldenrod} Entity_B}}
\Large
\varA\ \textrm{neighbours}\ \varB
Misuriamo la distanza di \varA
dalla sorgente \varSource
:
\Large
\textrm{Distance}_{\varSource}(\varA)
Confrontiamola con la distanza di \varB
, notando che ci si può trovare in tre casi:
\Large
\textrm{Distance}{\varSource}(\varA) = \begin{cases}
\textrm{Distance}{\varSource}(\varB)-1\
\textrm{Distance}{\varSource}(\varB)\
\textrm{Distance}{\varSource}(\varB)+1
\end{cases}
Albero parziale
Definiamo un albero parziale, che ad ogni iterazione conterrà i nodi a distanza Iterazione - 1
, e poi esploriamo i nodi vicini fino a raggiungere i nodi a distanza Iterazione
.
stato di un'entità
SOURCE
: il leaderUNKNOWN
: una entità non parte dell'albero parzialeEXPLORED
: una entità parte dell'albero parziale
Comportamento
SOURCE
==...==
UNKNOWN
==...==
EXPLORED
==...==
costo computazionale distribuito
Ogni iterazione dell'algoritmo è divisa in tre fasi:
- broadcast
- explore
- convergecast
Definiamo il numero di nodi all'inizio di ogni iterazione come \def \varNi {{\color{salmon} Nodes_{Iteration}}} \varNi
.
Definiamo l'iterazione attuale come \def \varIter {{\color{Blue} Iteration_{Current}}} \varIter
.
Comunicazione
==...==
Spazio
==...==
Tempo
Per ogni iterazione, abbiamo che:
Fase | Costo |
---|---|
broadcast | \varIter - 1 |
explore | 2 |
convergecast | \varIter - 1 |
In totale, avremo allora che il costo di tempo per una certa iterazione sarà:
(\varIter - 1) + 2 + (\varIter - 1) = 2 \cdot \varIter
Allora, il costo per l'intero algoritmo sarà:
==quale?==