1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-23 02:44:17 +00:00
appunti-steffo/9 - Algoritmi distribuiti/3 - Computazione distribuita/5 - Leader election/leader election su anello as-far-as-it-can.md

146 lines
3.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[[algoritmo]] di [[leader election]] su [[anello]].
## [[Comportamento]]
> [!Summary]
>
> 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.
## [[algoritmo corretto|Correttezza]]
> [!Success]
> È certo che l'identificatore minimo di tutto il [[sistema distribuito]] attraverserà tutte le [[entità]] in esso, fino a tornare al futuro [[leader]].
>
> 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]].
## [[costo computazionale distribuito|Costo computazionale]]
| Costo | [[notazione O-grande]] | [[notazione Ω-grande]] |
|-|-|-|
| [[comunicazione]] | $O(Entities^2)$ | $\Omega(Entities)$ |
| [[tempo]] | ... | ... |
### [[Comunicazione]]
#### Caso peggiore
Il caso peggiore è quello in cui le [[entità]] sono [[iniziatori multipli|tutte iniziatrici]] e in ordine crescente di [[identificatore]].
Nel caso peggiore, il [[ritardo di comunicazione unitario|ritardo di comunicazione sarà unitario]], quindi avremo che:
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:
$$
\color{LightCoral} \sum_{Identifier=1}^{Entities} Identifier
$$
Ovvero:
$$
\color{LightCoral}
\frac
{Entities \cdot (Entities + 1)}
{2}
$$
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
}
$$
[[notazione asintotica|Asintoticamente]]:
$$
\Large O \left( Entities^2 \right)
$$
#### Caso migliore
Il caso migliore è quello in cui le [[entità]] sono [[risveglio multiplo|tutte iniziatrici]] e in ordine decrescente di [[identificatore]].
Avremo che:
1. il minimo sarà propagato per $Entities$ messaggi
2. tutti gli altri per $1$ messaggio
Totalizzando:
$$
\color{LightCoral}
Entities
+
\sum_{Identifier=2}^{Entities} 1
$$
Ovvero:
$$
\color{LightCoral} Entities + (Entities - 1)
$$
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
}
$$
Ovvero:
$$
3 \cdot Entities - 1
$$
[[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 )
$$