1.8 KiB
algoritmo di broadcast problem che risolve l'incorrettezza del flooding v1.
[!Summary] Il leader invia il suo messaggio iniziale a tutti i vicini, e, se è la prima volta che lo ricevono, loro lo inoltrano a loro volta ai loro vicini.
Comportamento
LEADER
All'impulso spontaneo, invia il suo messaggio:
spontaneously! {
send!(*, Message {...});
state!(DONE);
}
Se lo riceve indietro, non fa niente:
on_receive! {
_ => {},
}
SLEEPING
Se riceve il messaggio, lo inoltra a tutti i suoi vicini, poi passa allo stato DONE
:
on_receive! {
_ => {
send!(*, msg);
state!(DONE);
},
}
DONE
Non fa niente.
algoritmo corretto
Per via dell'ipotesi di grafo connesso, tutte le entità riceveranno eventualmente il messaggio inviato.
Con la ricezione del messaggio, eventualmente tutte le entità diventeranno DONE
, raggiungendo terminazione locale.
costo computazionale distribuito
Comunicazione
Attraverso ogni canale di comunicazione passeranno al massimo due messaggio:
0
, se l'algoritmo termina prima che il canale di comunicazione sia esplorato1
, se l'entità di destinazione non è ancora stata scoperta2
, se entrambe le entità connesse sono scoperte contemporaneamente
Dunque, i messaggio trasferiti saranno:
2 \cdot Channels
Che, in notazione asintotica, è:
\Large O(Channels)
Spazio
Un multiplo del costo di comunicazione, sempre notazione asintotica a:
\Large O(Channels)
Tempo
Coincide con il lower bound del broadcast problem.