2.5 KiB
algoritmo di spanning tree construction.
Comportamento
[!Summary] Le entità del grafo vengono visitate sequenzialmente attraverso una depth-first search.
In ogni momento, a solo una entità è permesso eseguire codice, e questo permesso è tracciato attraverso un token metaforico.
Il leader viene inizializzato a LEADER
, le altre entità vengono inizializzate a IDLE
.
LEADER
Inizia possedendo il token metaforico.
Inizia la visita inviando il token metaforico al primo vicini di un'entità non visitato con il tag Forward
, diventando VISITED
.
IDLE
In attesa di ricevere il token metaforico.
Quando riceve il token Forward
:
- memorizza il mittente come genitore;
- procede con la visita inviando il token metaforico al primo suo vicini di un'entità non visitato con il tag
Forward
; - diventa
VISITED
.
VISITED
Ha già ricevuto il token metaforico in precedenza.
Se lo riceve con il tag Forward
, lo rimanda al mittente con il tag AlreadyVisited
.
Se lo riceve con il tag AlreadyVisited
, invia il token metaforico al prossimo vicini di un'entità non visitato con il tag Forward
.
Se lo riceve con il tag Backward
, aggiunge all'albero il mittente, e poi invia il token metaforico al prossimo vicini di un'entità non visitato con il tag Forward
.
Se riceve nuovamente il token metaforico, e non ha altri vicini da visitare, restituisce il token metaforico al genitore, poi diventa DONE
.
DONE
Non fa nient'altro.
algoritmo corretto
[!Success]
Dato che:
- Tutte le entità tranne il leader inviano
Finished
una sola volta.- Un
Forward
e unBackward
arco di un grafo le due entità coinvolte.Allora, il grafo risultante è un albero grafo connesso.
costo computazionale distribuito
Costo | notazione O-grande |
---|---|
comunicazione | O(Channels) |
tempo | O(Channels) |
Comunicazione
Tutti i canale di comunicazione vengono visitati due volte, uno da Token::Forward
, e uno da Token::BackEdge
o Token::Finished
:
2 \cdot Channels
In notazione asintotica, è:
\Large O(Channels)
Tempo
Essendo la visita del grafo sequenziale, il tempo richiesto coincide con il costo di comunicazione:
2 \cdot Channels
In notazione asintotica, è:
\Large O(Channels)