2023-11-01 21:23:31 +00:00
[[algoritmo]] di [[broadcast problem]] che risolve l'incorrettezza del [[flooding v1]].
2023-11-05 04:15:02 +00:00
> [!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.
2023-11-01 21:23:31 +00:00
## [[Comportamento]]
### `LEADER`
All'[[impulso spontaneo|inizio dell'algoritmo]], invia il suo messaggio:
```rust
spontaneously! {
send!(*, Message {...});
state!(DONE);
}
```
Se lo riceve indietro, non fa niente:
```rust
on_receive! {
_ => {},
}
```
### `SLEEPING`
Se riceve il messaggio, lo inoltra a tutti i suoi vicini, poi passa allo stato `DONE` :
```rust
on_receive! {
_ => {
send!(*, msg);
state!(DONE);
},
}
```
### `DONE`
2023-11-05 04:15:02 +00:00
Non fa niente.
2023-11-01 21:23:31 +00:00
## [[algoritmo corretto|Correttezza]]
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|Costo computazionale]]
### [[Comunicazione]]
Attraverso ogni [[canale di comunicazione|canale]] passeranno al massimo due [[messaggio|messaggi]]:
- $0$, se l'algoritmo termina prima che il [[canale di comunicazione|canale]] sia esplorato
- $1$, se l'[[entità]] di destinazione non è ancora stata scoperta
- $2$, se entrambe le [[entità]] connesse sono scoperte contemporaneamente
Dunque, i [[messaggio|messaggi]] trasferiti saranno:
$$
2 \cdot Channels
$$
Che, in [[notazione asintotica]], è:
$$
\Large O(Channels)
$$
### [[Spazio]]
Un multiplo del [costo di comunicazione ](#Comunicazione ), sempre [[notazione asintotica|asintotico]] a:
$$
\Large O(Channels)
$$
### [[Tempo]]
Coincide con il lower bound del [[broadcast problem]].