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/6 - Routing/min-hops routing.md

2.4 KiB

algoritmo di routing che sfrutta la breadth-first search.

restrizioni al modello dei sistemi distribuiti aggiuntive

Comportamento

[!Summary] Ad ogni iterazione:

  1. il leader invia un broadcast;
  2. le foglia di un albero che lo ricevono chiedono ai loro vicini di un'entità se sono già nell'albero;
  3. i vicini di un'entità che rispondono di no oppure con un altra domanda diventano le nuove foglia di un albero, notificando il loro nuovo genitore della cosa;
  4. ogni router attende che tutti i suoi figli abbiano completato l'operazione, poi notifica il genitore, fino ad arrivare alla radice.

algoritmo corretto

[!Success] Essendo tutti i router a distanza finita dal leader, eventualmente saranno aggiunti tutti allo spanning tree, terminando cosí l'algoritmo.

costo computazionale distribuito

Costo notazione O-grande
comunicazione di routing O(Entities^2 + Channels)
tempo ...

Comunicazione di routing

Singola iterazione

  1. Il broadcast problem iniziale costa, nel caso peggiore:
    Entities
  2. L'esplorazione costa, nel caso peggiore:
    \mathrm{neighbours}(Entity)
  3. Le risposte all'esplorazione costano, nel caso peggiore:
    \mathrm{neighbours}(Entity)
  4. Il messaggio di termine iterazione costa, nel caso peggiore:
    Entities

Per un totale di: (Entities) + (\mathrm{neighbours}(Entity)) + (\mathrm{neighbours}(Entity)) + (Entities)

Ovvero: 2 \cdot Entities + 2 \cdot \mathrm{neighbours}(Entity)

Totale

Il numero totale di iterazione dipende dal diametro di un grafo della rete di comunicazione, cioè: \sum_{Iteration}^{\mathrm{diameter}} (2 \cdot Entities + 2 \cdot \mathrm{neighbours}(Entity))

Visto che ogni canale di comunicazione avrà esattamente una andata-e-ritorno di esplorazione, possiamo portarlo fuori dalla sommatoria, sostituendolo con 2 \cdot Channels: 4 \cdot Channels + \sum_{Iteration}^{\mathrm{diameter}} (2 \cdot Entities)

Nel caso peggiore, il diametro di un grafo è pari al numero totale di router, quindi: 4 \cdot Channels + 2 Entities^2

In notazione asintotica: \Large O(Entities^2 + Channels)