Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 12/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI
Algoritmi Paralleli e Distribuiti a.a. 2008/09 2 Le variabili Per ogni nodo p: Fram(p) nome del frammento a cui p appartiene. Liv(p) valore del livello del frammento a cui p appartiene. Per ogni arco (p, q): Stato p (q) accettato se è stato inserito nel MST. Per ogni frammento f: w(f) minimo fra i costi degli archi uscenti da f (è sufficiente ad identificare univocamente larco perché assumiamo costi distinti).
Algoritmi Paralleli e Distribuiti a.a. 2008/09 3 Complessità di comunicazione Teorema: lalgoritmo per la determinazione del MST in un sistema distribuito richiede complessità di comunicazione O(n log n + m). Dim: ad ogni livello O(n) messaggi in totale sono inviati lungo gli spigoli dellalbero. Ci sono inoltre O(m) messaggi addizionali in fase di inizializzazione, necessari affinchè ogni nodo possa conoscere quali sono gli identificativi dei propri vicini.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 4 Spigolo di costo minimo del frammento Quando due frammenti si combinano (o quando uno viene assorbito in un altro) bisogna che tutti i nodi del nuovo frammento aggiornino le loro variabili e che lintero frammento identifichi il proprio arco uscente di costo minimo. Tutto avviene tramite una operazione di broadcast con eco così suddivisa: si propagano le nuove informazioni a tutti i nodi; ciascun nodo v individua larco (v,u) di costo minimo tra quelli uscenti dal frammento; tramite leco si trasmettono al nodo che identifica il frammento i minimi parziali; il nodo identificatore individua il minimo assoluto (x,y). Tale valore sarà poi ritrasmesso a tutti i nodi del frammento; in questo modo, il nodo x potrà mandare una richiesta di connessione al frammento ad esso adiacente.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 5 Complessità temporale Lemma: Il livello di un frammento non eccede mai O(log n) Dim: Per l > 0, un frammento di livello l si forma soltanto quando due frammenti di livello l-1 si fondono, quindi un frammento di livello l contiene almeno 2 l nodi, ne consegue lasserto, dato che n 2 l, per ogni l. Come conseguenza del Lemma e del fatto che le operazioni ad ogni livello richiedono tempo O(n) si ha: Teorema: lalgoritmo per la determinazione del MST in un sistema distribuito richiede complessità temporale O(n log n)
Algoritmi Paralleli e Distribuiti a.a. 2008/09 6 Algoritmo per il MST distribuito begin// inizialmente init = V P i init :inizializza tutte le variabili trova larco (i,y) di costo minimo poni stato i (y) = accettato send ad y richiesta di connessione repeat P i :receive messaggio M dal mittente q if M è una richiesta di connessione then if liv(q) > liv(i) then non fare nulla else if liv(q) < liv(i) then assorbi fram(q) in fram(i) send a q richiesta di ridefinizione R{liv(i), fram(i)} else if q = y e liv(q) = liv(i) e w(fram(i))=w(fram(q)) then combina fram(q) con fram(i) send a q richiesta di ridefinizione R{liv(i)+1, min(q,i)} else if M è una richiesta di ridefinizione then aggiorna tutte le variabili relative a i con i valori ricevuti da R send R a tutti gli appartenenti al vecchio frammento di i trova lo arco (x,y) di costo minimo uscente dal nuovo frammento if i = x then poni stato i (y) = accettato // solo il nodo x contatta y send ad y richiesta di connessione until rimane un solo frammento end
Algoritmi Paralleli e Distribuiti a.a. 2008/09 7 Esempio left e right Consideriamo lalbero in figura e il suo CDE, considerandolo radicato nel nodo h h e h c b c i a d a i g c f c h Su tale albero otteniamo i seguenti vettori: Ribadiamo che i valori left e right associati allarco (u,v) identificano rispettivamente la prima e lultima visita del nodo v nel Cammino di Eulero. CDE h,ee,hh,cc,bb,cc,ii,aa,dd,aa,ii,gg,ii,cc,ff,cc,h S left right c h g e f b i da
Algoritmi Paralleli e Distribuiti a.a. 2008/09 8 Occorrenza sinistra e destra Per individuare la prima e lultima occorrenza di un nodo nel CDE di un albero radicato, sfruttiamo il vettore delle somme prefisse S che serve per calcolare il livello dei nodi. Per ogni arco (u,v) nel CDE calcoleremo due valori booleani, left e right, che determineranno se, in corrispondenza di tale arco, si ha la prima e/o lultima apparizione del nodo v. Se larco che precede e=(u,v) ha associato un livello minore di quello di e, allora siamo in corrispondenza della prima occorrenza di v: left(e) = 1 sse S(e.pred) < S(e) Se larco che segue e ha livello minore di e allora sarà lultima occorrenza di v: right(e) = 1 sse S(e.next) < S(e) Nota: left(u,v) = right(u,v) = 1 sse v è una foglia È possibile definire, per ogni nodo, left(u) come lindice nel CDE dellunico arco (u,v) con left(u,v)=1. Idem per right(v). Si assuma left(r)=0.