1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-22 10:44:17 +00:00
appunti-steffo/9 - Algoritmi distribuiti/3 - Computazione distribuita/3 - Spanning tree/traversal protocol.md

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:

  1. memorizza il mittente come genitore;
  2. procede con la visita inviando il token metaforico al primo suo vicini di un'entità non visitato con il tag Forward;
  3. 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:

  1. Tutte le entità tranne il leader inviano Finished una sola volta.
  2. Un Forward e un Backward 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)