1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-22 18:44:17 +00:00
appunti-steffo/9 - Algoritmi distribuiti/3 - Computazione distribuita/2 - Broadcast/flooding broadcast v3.md

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)$.