2023-11-17 14:23:05 +00:00
[[algoritmo]] di [[consenso sincrono deterministico]].
2023-12-19 01:19:27 +00:00
## [[comportamento]]
2023-11-17 14:23:05 +00:00
> [!Summary]
> Ogni [[entità]] tiene traccia delle scelte e dei [[guasti di esecuzione di crash|crash]] che conosce.
>
> Ad ogni [[tick]], manda questi dati a tutte le altre, e aggiorna i propri con i dati che riceve.
## [[algoritmo corretto|Correttezza]]
> [!Success]
2023-12-19 01:19:27 +00:00
> Dopo tante iterazioni quante i [[guasto|guasti]] possibili **più una**, l'algoritmo termina.
> [!Note]
> L'iterazione extra è necessaria per garantire il consenso nel caso in cui le entità si guastino una ad una durante la propagazione del proprio messaggio.
2023-11-17 14:23:05 +00:00
## [[costo computazionale distribuito|Costo computazionale]]
| Costo | [[notazione O-grande]] |
|-|-|
| [[comunicazione]] | $O(Entities^2 \cdot Fallible)$ |
2023-12-19 01:19:27 +00:00
| [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]] | $O(Fallible)$ |
2023-11-17 14:23:05 +00:00
2023-12-19 01:19:27 +00:00
### [[comunicazione]]
2023-11-17 14:23:05 +00:00
Ad ogni [[tick]], ogni [[entità]] invia a tutte le altre un report:
$$
{\color{LightCoral} \sum_{Tick}^{Iterations}}
{\color{SpringGreen} \sum_{Entity}^{Entities}}
{\color{SkyBlue} (Entities - 1)}
$$
Cioè:
$$
{\color{LightCoral} (Fallible - 1)}
\cdot
{\color{SpringGreen} (Entities)}
\cdot
{\color{SkyBlue} (Entities - 1)}
$$
In [[notazione asintotica]]:
$$
\Large O({\color{SpringGreen} Entities} ^{\color{SkyBlue} 2} \cdot {\color{LightCoral} Fallible})
$$
2023-12-19 01:19:27 +00:00
### [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]]
2023-11-17 14:23:05 +00:00
Richiede il seguente numero di iterazioni da un [[tick]] ciascuna:
$$
Fallible + 1
$$
In [[notazione asintotica]]:
$$
\Large O(Fallible)
$$