1.4 KiB
algoritmo di broadcast problem che riduce il comunicazione rispetto al flooding v2.
[!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 tranne quello che gliel'ha inviato.
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!(!sender, msg);
state!(DONE);
},
}
DONE
Non fa niente.
algoritmo corretto
Vedi flooding v2.
costo computazionale distribuito
Comunicazione
Il costo computazionale è lo stesso del flooding v2, ma con un trasferimento in meno per ogni entità che non è il leader:
2 \cdot Channels - (Entities - 1)
In notazione asintotica, è sempre:
\Large O(Channels)
Spazio
Un multiplo del costo di comunicazione, sempre notazione asintotica a:
\Large O(Channels)
Tempo
Vedi flooding v2.