1.5 KiB
Algoritmo di broadcast, migliore rispetto a flooding broadcast v2.
Ogni entità manda l'informazione a tutti i suoi vicini che non gliel'hanno mandato, ma solo se non l'ha già fatto.
Stato
INITIATOR
: quello che manda il messaggioSLEEPING
: quelli che non mandano il messaggioDONE
: quelli non hanno mandato il messaggio, ma l'hanno ricevuto e inoltrato
comportamento
INITIATOR
Se ricevo il messaggio non faccio niente.
SLEEPING
Se ricevo il messaggio lo propago ai miei vicini eccetto quello che me l'ha mandato e passo a DONE
.
DONE
Se ricevo il messaggio non faccio niente.
costo computazionale distribuito
Spazio
Abbiamo massimo 2
messaggi per ogni arco di un grafo della rete di comunicazione:
1
normalmente2
se i due nodi che l'arco connette si mandano messaggi a vicenda
Quindi, l'algoritmo è in O(archi)
, ovvero O(nodi)
, e in particolare:
#TODO La formula formattata bene.
Tempo (unitario uniforme per messaggio)
diametro di un grafo della rete di comunicazione.
Quindi, l'algoritmo è in O(nodi)
.
Osservazioni
C'è terminazione locale, ma non terminazione globale: non si sa termination detection problem!
L'algoritmo è efficiente negli albero, non nei grafo completo:
#TODO Al minimo richiede n - 1
messaggi, e quindi \Omega(nodi)
.