mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-22 18:44:17 +00:00
47 lines
No EOL
1.5 KiB
Markdown
47 lines
No EOL
1.5 KiB
Markdown
[[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 messaggio
|
|
- `SLEEPING`: quelli che non mandano il messaggio
|
|
- `DONE`: 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|arco]] della [[rete di comunicazione]]:
|
|
- $1$ normalmente
|
|
- $2$ 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|Diametro]] della [[rete di comunicazione]].
|
|
|
|
Quindi, l'algoritmo è in $O(nodi)$.
|
|
|
|
## Osservazioni
|
|
|
|
C'è [[terminazione locale]], ma non [[terminazione globale]]: non si sa [[termination detection problem|il momento in cui il messaggio è stato propagato a tutti i nodi]]!
|
|
|
|
L'algoritmo è efficiente negli [[albero|alberi]], non nei [[grafo completo|grafi completi]]:
|
|
#TODO Al minimo richiede $n - 1$ messaggi, e quindi $\Omega(nodi)$. |