2023-11-08 04:15:56 +00:00
[[algoritmo]] di [[leader election]] su [[anello]].
2023-11-08 18:28:09 +00:00
## [[Comportamento]]
2023-11-08 04:15:56 +00:00
> [!Summary]
>
2023-11-11 18:41:34 +00:00
> Ogni [[entità]] riceve identificatori dalla [[entità precedente in un anello|precedente]], tenendo traccia dell'identificatore minimo ricevuto, e inoltra alla [[entità successiva in un anello|successiva]] qualsiasi cambiamento al proprio minimo.
>
> Quando un'[[entità]] avrà ricevuto il suo stesso identificatore dalla [[entità precedente in un anello|precedente]], essa diventerà leader, e manderà un [[broadcast problem|broadcast]] di terminazione a tutte le altre.
2023-11-08 04:15:56 +00:00
## [[algoritmo corretto|Correttezza]]
2023-11-11 18:41:34 +00:00
> [!Success]
> È certo che l'identificatore minimo di tutto il [[sistema distribuito]] attraverserà tutte le [[entità]] in esso, fino a tornare al futuro [[leader]].
2023-11-08 04:15:56 +00:00
>
2023-11-11 18:41:34 +00:00
> Avendo l'[[anello]] un numero finito di [[nodo di un grafo|nodi]] al suo interno, eventualmente sarà trovato un [[leader]], che a quel punto farà terminare l'esecuzione con il [[broadcast problem|broadcast]].
2023-11-08 04:15:56 +00:00
## [[costo computazionale distribuito|Costo computazionale]]
2023-11-11 18:41:34 +00:00
| Costo | [[notazione O-grande]] | [[notazione Ω-grande]] |
|-|-|-|
| [[comunicazione]] | $O(Entities^2)$ | $\Omega(Entities)$ |
| [[tempo]] | ... | ... |
2023-11-08 04:15:56 +00:00
### [[Comunicazione]]
#### Caso peggiore
Il caso peggiore è quello in cui le [[entità]] sono [[iniziatori multipli|tutte iniziatrici]] e in ordine crescente di [[identificatore]].
2023-11-11 18:41:34 +00:00
Nel caso peggiore, il [[ritardo di comunicazione unitario|ritardo di comunicazione sarà unitario]], quindi avremo che:
2023-11-08 04:15:56 +00:00
1. il massimo sarà propagato per $1$ messaggio
2. il secondo massimo sarà propagato per $2$ messaggi
3. $\dots$
4. il minimo sarà propagato per $Entities$ messaggi
Totalizzando:
$$
2023-11-11 18:41:34 +00:00
\color{LightCoral} \sum_{Identifier=1}^{Entities} Identifier
2023-11-08 04:15:56 +00:00
$$
Ovvero:
$$
2023-11-11 18:41:34 +00:00
\color{LightCoral}
2023-11-08 04:15:56 +00:00
\frac
{Entities \cdot (Entities + 1)}
{2}
$$
2023-11-11 18:41:34 +00:00
In aggiunta, sarà necessaria anche un [[broadcast problem|broadcast]] di terminazione, che richiederà:
$$
\color{SkyBlue} Entities
$$
Per un totale di:
$$
{
\color{LightCoral}
\frac
{Entities \cdot (Entities + 1)}
{2}
}
+
{
\color{SkyBlue} Entities
}
$$
2023-11-08 04:15:56 +00:00
[[notazione asintotica|Asintoticamente]]:
$$
\Large O \left( Entities^2 \right)
$$
#### Caso migliore
2023-11-11 18:41:34 +00:00
Il caso migliore è quello in cui le [[entità]] sono [[risveglio multiplo|tutte iniziatrici]] e in ordine decrescente di [[identificatore]].
2023-11-08 04:15:56 +00:00
2023-11-11 18:41:34 +00:00
Avremo che:
2023-11-08 04:15:56 +00:00
1. il minimo sarà propagato per $Entities$ messaggi
2. tutti gli altri per $1$ messaggio
Totalizzando:
$$
2023-11-11 18:41:34 +00:00
\color{LightCoral}
2023-11-08 04:15:56 +00:00
Entities
+
\sum_{Identifier=2}^{Entities} 1
$$
2023-11-11 18:41:34 +00:00
Ovvero:
$$
\color{LightCoral} Entities + (Entities - 1)
$$
2023-11-08 04:15:56 +00:00
2023-11-11 18:41:34 +00:00
In aggiunta, sarà necessaria anche un [[broadcast problem|broadcast]] di terminazione, che richiederà:
$$
\color{SkyBlue} Entities
$$
Per un totale di:
$$
{
\color{LightCoral} Entities + (Entities - 1)
}
+
{
\color{SkyBlue} Entities
}
$$
2023-11-08 04:15:56 +00:00
Ovvero:
$$
2023-11-11 18:41:34 +00:00
3 \cdot Entities - 1
2023-11-08 04:15:56 +00:00
$$
[[notazione asintotica|Asintoticamente]]:
$$
\Large \Omega \left( Entities \right)
$$
### [[Tempo]]
#### Caso peggiore
Il caso peggiore è quello in cui l'[[entità]] [[iniziatore singolo|iniziatrice è unica]] e alla massima distanza possibile dal futuro [[leader]].
Essa dovrà svegliare il leader, richiedendo:
$$
\color{LightCoral} Entities-1
$$
E poi l'identificatore del leader dovrà viaggiare per tutto l'anello, richiedendo:
$$
\color{SkyBlue} Entities
$$
Per un totale di:
$$
{\color{LightCoral} Entities-1}
+
{\color{SkyBlue} Entities}
$$
Cioè:
$$
2 \cdot Entities - 1
$$
[[notazione asintotica|Asintoticamente]]:
$$
\Large O( Entities )
$$