2.1 KiB
algoritmo di leader election su anello.
Comportamento
[!Summary] Effettua iterazioni in cui ogni entità che potrebbe diventare potenzialmente leader diffonde il proprio identificatore a tutte le altre entro una certa distanza.
CANDIDATE
All'inizio di ogni iterazione, invia e fa inoltrare il proprio identificatore ai vicini (in entrambe le direzioni) a distanza 2^{Iteration}
.
Se il messaggio raggiunge la distanza massima senza incontrare un identificatore minore, viene rimandato indietro.
Se il CANDIDATE
riceve indietro il suo identificatore da entrambe le direzioni, allora passa all'iterazione successiva.
Se il CANDIDATE
riceve indietro il suo identificatore da entrambe le direzioni, ma in direzione scambiate, allora esso diventa il leader.
DEFEATED
Sapendo sicuramente di non essere il leader, si limita a inoltrare messaggi.
costo computazionale distribuito
Costo | notazione O-grande |
---|---|
comunicazione | O(Entities \cdot \log (Entities)) |
tempo | ... |
Comunicazione
Il caso peggiore per le iterazioni sono le iterazioni intermedie (che non sono la prima o l'ultima o il broadcast di terminazione). ==Perchè?==
Ad ogni iterazione intermedia, ogni candidato invia e riceve su ogni lato:
\color{Gold} 2 ^ {Iteration_1}
Sommando andata e ritorno:
{\color{Gold} 2} \cdot 2 ^ {Iteration_1}
Sommando i due lati:
{\color{Gold} 2} \cdot 2 \cdot 2^{Iteration_1}
I
CANDIDATE
si dimezzano ad ogni iterazione; considerando le iterazioni indicizzazione a 1, sommandoli si ottiene che:
{\color{Gold} \mathrm{floor} \left(
\frac{Entities}{2^{Iteration_1 - 1} + 1}
\right)}
\cdot 2 \cdot 2 \cdot 2 ^ {Iteration_1}
Pertanto, in notazione asintotica abbiamo:
O(Entities \cdot Iteration)
Il numero di iterazioni è pari al logaritmo in base 2 del numero di entità del sistema distribuito:
\color{Gold} \mathrm{ceil} \left(
\log (Entities)
\right)
Quindi, la notazione asintotica finale sarà:
\large O(Entities \cdot {\color{Gold} \log (Entities)})