2023-11-01 21:23:31 +00:00
[[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à|Stati]]
- `SOURCE` : il [[leader]]
- `UNKNOWN` : una [[entità]] non parte dell'albero parziale
- `EXPLORED` : una [[entità]] parte dell'albero parziale
## [[Comportamento]]
### `SOURCE`
==...==
### `UNKNOWN`
==...==
### `EXPLORED`
==...==
## [[costo computazionale distribuito|Costo computazionale]]
2023-11-05 04:15:02 +00:00
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$.
2023-11-01 21:23:31 +00:00
### [[Comunicazione]]
==...==
### [[Spazio]]
==...==
### [[Tempo]]
2023-11-05 04:15:02 +00:00
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?==
$$
$$