mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-29 13:24:17 +00:00
92 lines
No EOL
2 KiB
Markdown
92 lines
No EOL
2 KiB
Markdown
[[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]]
|
|
|
|
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?==
|
|
$$
|
|
|
|
$$ |