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

68 lines
1.4 KiB
Markdown

[[algoritmo]] di [[broadcast problem]] che riduce il [[comunicazione|numero di messaggi]] 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|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!(!sender, msg);
state!(DONE);
},
}
```
### `DONE`
Non fa niente.
## [[algoritmo corretto|Correttezza]]
Vedi [[flooding v2]].
## [[costo computazionale distribuito|Costo computazionale]]
### [[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](#Comunicazione), sempre [[notazione asintotica|asintotico]] a:
$$
\Large O(Channels)
$$
### [[Tempo]]
Vedi [[flooding v2]].