mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-22 18:44:17 +00:00
85 lines
No EOL
3.3 KiB
Markdown
85 lines
No EOL
3.3 KiB
Markdown
[[algoritmo]] [[algoritmo Las Vegas|Las Vegas]] di [[consenso asincrono non-deterministico]].
|
||
|
||
## [[restrizioni al modello dei sistemi distribuiti|Restrizioni]] aggiuntive
|
||
|
||
- **[[restrizione di tempo|Tempo]]**
|
||
- ***[[terminazione ignorata]]***
|
||
|
||
## [[comportamento]]
|
||
|
||
> [!Summary]+ Summary ma non troppo
|
||
> Tutte le [[entità]] partono che si trovano al *round 1*, poi avanzano di un round per ogni iterazione completata.
|
||
>
|
||
> I [[messaggio|messaggi]] ricevuti appartenenti a un *round* precedente al proprio sono scartati; quelli appartenenti a un *round* successivo al proprio sono archiviati per uso futuro.
|
||
>
|
||
> Ad ogni *round*, ogni entità:
|
||
> 1. fa [[broadcast problem|broadcast]] `Mine` del suo valore e *round* attuale
|
||
> 2. aspetta di ricevere tutti i [[messaggio|messaggi]] `Mine` garantiti, cioè $\frac{Entities}{2}$
|
||
> 3. fa [[broadcast problem|broadcast]] `Propose` di un valore:
|
||
> 1. se tutti i [[messaggio|messaggi]] ricevuti avevano lo stesso valore, propone quello
|
||
> 2. se i [[messaggio|messaggi]] ricevuti avevano valori diverso, invia `null`
|
||
> 4. aspetta di ricevere tutti i [[messaggio|messaggi]] `Propose` garantiti, cioè $\frac{Entities}{2}$
|
||
> 5. determina come procedere:
|
||
> 1. se tutti i `Propose` che ha ricevuto avevano lo stesso valore non-`null`, termina con quello
|
||
> 2. se tutti i `Propose` che ha ricevuto erano `null`, cambia il proprio valore a un valore casuale e inizia il round successivo
|
||
> 3. altrimenti, cambia il proprio valore a un valore casuale tra quelli non-`null` che ha ricevuto e inizia il round successivo
|
||
|
||
## [[algoritmo corretto|Correttezza]]
|
||
|
||
> [!Success]
|
||
> Avendo ricevuto almeno $\frac{Entities}{2}$ `Propose` uguali, c'è la certezza che almeno uno di essi fosse da un'[[entità]] non-[[guasto|guasta]].
|
||
|
||
## [[costo computazionale distribuito|Costo computazionale]]
|
||
|
||
| Costo | [[notazione O-grande]] |
|
||
|-|-|
|
||
| [[comunicazione]] stimata | ... |
|
||
| [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]] stimato | $O(2^n)$ |
|
||
|
||
### [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]] stimato
|
||
|
||
> [!Quote] Fonti
|
||
> - [Correctness Proof of Ben-Or’s Randomized Consensus Algorithm](https://ecommons.cornell.edu/bitstream/handle/1813/7336/98-1682.pdf?sequence=1)
|
||
|
||
#### Costo di un round
|
||
|
||
Ad ogni *round* vengono effettuati 2 [[broadcast problem|broadcast]], per un tempo di:
|
||
$$
|
||
2
|
||
$$
|
||
|
||
#### Numero di round
|
||
|
||
##### Quando si riesce a proporre qualcosa
|
||
|
||
Un'[[entità]] non può ricevere `Proposal` per il valore non di maggioranza.
|
||
|
||
Pertanto, potrà ricevere o tutte `Proposal` nulle, o almeno una `Proposal` per il valore di maggioranza.
|
||
|
||
Se questa `Proposal` viene inviata, prevarrà su tutte le nulle, adattando a quel valore tutte le altre non-nulle, e garantendo che venga scelta al *round* successivo.
|
||
|
||
##### Quando non si propone nulla
|
||
|
||
La probabilità che tutte le [[entità]] si adattino casualmente o per una proposta allo lo stesso valore ad ogni round è come minimo:
|
||
|
||
$$
|
||
\frac{1}{2^{Entities}}
|
||
$$
|
||
|
||
[[prove ripetute|Ripetendo la prova]] ad ogni *round*, si viene a determinare una [[distribuzione geometrica]], per cui il numero stimato di $Round$ richiesto per terminare è:
|
||
|
||
$$
|
||
2^n
|
||
$$
|
||
|
||
#### Unendo le cose
|
||
|
||
Combinando le due cose, abbiamo che il costo di tempo stimato è:
|
||
$$
|
||
2 \cdot 2^n
|
||
$$
|
||
|
||
Ovvero, in [[notazione asintotica]]:
|
||
$$
|
||
\Large O\left(2^n\right)
|
||
$$ |