30.06.2013 Views

Leader (and sub Leader) Election per uniformare e ... - Automatica

Leader (and sub Leader) Election per uniformare e ... - Automatica

Leader (and sub Leader) Election per uniformare e ... - Automatica

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Il numero di messaggi generati da ogni<br />

processo alla fase 0 e’ 2 (tali messaggi devono<br />

poi anche tornare al mittente), sono quindi<br />

4ntoken <strong>per</strong> questa fase. Per l > 0, un processo<br />

invia il token di fase l se ha ricevuto entrambi<br />

i token di fase l − 1, cio’ avviene se il token<br />

non ‘e stato rimosso da nessun processo che<br />

si trova a distanza 2l − 1. Questo implica<br />

che <strong>per</strong> ciascun gruppo di 2l − 1 + 1 processi<br />

consecutivi, al piu’ un processo passera’ alla<br />

n<br />

fase sucessiva l. In tutto saranno 2l−1 <br />

i +1<br />

processi che passeranno alla fase successiva.<br />

Allora il numero<br />

di messaggi prodotti in ogni<br />

fase e’: 4 2l <br />

n · 2l−1 <br />

≤ 8n.<br />

+1<br />

Questo <strong>per</strong>che’ alla fase l i token viaggiano <strong>per</strong><br />

una distanza 2l e il numero di fasi e’ ⌈logn⌉ + 1<br />

(compresa la fase 0), quindi il numero totale<br />

di messaggi e’:<br />

M(n) = 8n(1 + ⌈logn⌉) = O(n ⌈logn⌉). Nel<br />

caso di cella di memoria vi e’ informazione<br />

completa.<br />

In letteratura e’ noto che <strong>per</strong> gli algoritmi<br />

comparativi il limite inferiore <strong>per</strong> il numero di<br />

messaggi e’ proprio:<br />

M(s) = θ(n ⌈logn⌉).<br />

9.7.10 Algoritmo 2HS [anello bidirezionale]<br />

Questo algoritmo <strong>per</strong>mette di trovare<br />

sia il leader che il sottoleader, si basa<br />

sull’algoritmo HS appena illustrato e<br />

consiste fondamentalmente in due passate<br />

di quest’ultimo; la prima individua il leader e<br />

la seconda il sottoleader.<br />

La dimostrazione della correttezza del<br />

funzionamento e’ banale e discende da<br />

quella dell’algoritmo HS. In pratica si<br />

applica due volte l’algoritmo HS ma nella<br />

seconda volta <strong>per</strong>o’ si fa tacere il nodo<br />

leader individuato nella passata precedente<br />

(oppure puo’ semplicemente fare da eco<br />

ritrasmettendo i messaggi che riceve).<br />

Complessita’ temporale e numero di messaggi<br />

saranno rispettivamente il doppio di quelle<br />

dell’algoritmo HS. T (n) = Θ(n)<br />

M(n) = 2(n ⌈logn⌉).<br />

Anche in questo caso si ripongono in modo<br />

del tutto analogo le problematiche dell’algoritmo<br />

2LCR sulle discrepanze temporali.<br />

9.7.11 Algoritmo 2HS-smart [anello<br />

bidirezionale]<br />

Anche <strong>per</strong> quanto riguarda una variazione intelligente<br />

e meno dispendiosa dell’algoritmo<br />

HS e’ necessario che tutti i nodi abbiano due<br />

celle di memoria,ogni nodo inizializzera’ la<br />

prima con il valore del proprio uj e la seconda<br />

con zero. seguiranno poi le trasmissioni ed i<br />

confronti<br />

• se ui > ucella1 allora j rilascia il token e<br />

pone ucella2 = ucella1 e ucella1 = ui,<br />

• se ui = ucella1 allora j e ui = uj rilascia il<br />

token,<br />

• se ui = ucella1 allora j e ui = uj ha ricevuto<br />

il proprio token (ha <strong>per</strong>corso tutto lanello)<br />

e si dichiara leader.<br />

• se ui < ucella1ui < ucella2 allora j rimuove il<br />

token,<br />

• se ui < ucella1ui > ucella2 allora j rilascia il<br />

token e pone ucella2 = ui,<br />

• se ui < ucella1ui = ucella2 e ui = uj allora j<br />

rilascia il token,<br />

• se ui < ucella1ui = ucella2 e ui = uj allora j<br />

ha ricevuto il proprio token (ha <strong>per</strong>corso<br />

tutto lanello) e si dichiara sottoleader<br />

La complessita’<br />

9.7.12 Algoritmi HS e derivati con funzionali<br />

dipendenti da piu’ nodi [anello bidirezionale]<br />

Anche in questo caso basta introdurre una<br />

fase preliminare in modo che ad ogni nodo<br />

giungano i valori degli x nodi vicini che <strong>and</strong>ranno<br />

ad influenzare il suo UID, gli algoritmi<br />

funzionano analogamente e senza problemi<br />

9.7.13 Algoritmo Flood Max [rete connessa]<br />

Sia G = (V, E) un grafo connesso che rappresenta<br />

una rete generica, in cui V sia l’insieme<br />

dei nodi ed E l’insieme degli archi. Sia<br />

diam(G) = d. Si considera che ad ogni nodo<br />

sia associato un UID come abbiamo fatto in<br />

precedenza, l’agoritmo Flood Max si propone<br />

di eleggere come leader il nodo con maggior<br />

UID. Ogni processo mantiene in una cella di<br />

memoria il maggior UID che ha visto. Inizialmente<br />

mantiene il proprio, ad ogni transizione<br />

42

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!