Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 15/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 Visita inorder La visita inorder (FS,R,FD) è definita soltanto su alberi binari, ed è necessario poter distinguere tra figlio sinistro e figlio destro di ogni nodo. Nelle nostre strutture dati non abbiamo tale informazione quindi assumeremo che lalbero abbia la proprietà 0/2 (ciascun nodo ha esattamente 0 o 2 figli). Per ottenere la numerazione inorder ciascuna foglia viene conteggiata in corrispondenza della sua unica occorrenza (left=right=1) nel CDE, mentre i nodi interni vengono conteggiati nelloccorrenza intermedia tra il primo ed il secondo figlio (left=right=0). Si da quindi valore 1 a tutti gli archi tali che left=right e si eseguono le somme prefisse S. v inorder(v) = S(u,v) dove (u,v) è larco in cui v è stato conteggiato: left(u,v)=right(u,v).
Algoritmi Paralleli e Distribuiti a.a. 2008/09 4 vabcdefg inorder Esempio di visita inorder CDE g,aa,gg,cc,bb,ff,bb,dd,bb,cc,ee,cc,g left right S c g a be df
Algoritmi Paralleli e Distribuiti a.a. 2008/09 5 LCA La computazione del minimo antecedente comune (lca) di ogni nodo si basa sulle seguenti osservazioni*: 1. u è antecedente di v sse left(u) < left(v) < right(u) 2. u e v sono confrontabili (nessuno è antecedente dellaltro) sse right(v) < left(u) oppure right(u) < left(v) 3.se u e v sono confrontabili, lca(u,v) è il vertice di livello più basso compreso tra right(u) e left(v) Esempio: CDE h,ee,hh,cc,bb,cc,ii,aa,dd,aa,ii,gg,ii,cc,ff,cc,h S liv left right lca(a,f)=c right(a) left(f) c h g e f b i da
Algoritmi Paralleli e Distribuiti a.a. 2008/09 6 Discendenti di un nodo Fatto: Sia dato un albero T con i nodi numerati in postorder. Il numero dei nodi nel sottoalbero radicato in un nodo v (incluso) è dato dalla differenza tra il massimo ed il minimo valore che i nodi in T v hanno nella numerazione, ovvero è dato dalla differenza del numero di nodi visitati prima di ritornare a p(v) e il numero di nodi visitati prima di raggiungere v. Con la numerazione in postorder il massimo valore in T v è esattamente quello di Post(v) mentre il minimo può essere trovato in corrispondenza dellarco (p(v),v). Il numero di discendenti della radice è|T r | = n per ogni altro nodo il valore è|T v | = S(v,p(v)) - S(p(v),v) CDEhehcbciadaigicfc S vabcdefghi |T v |
Algoritmi Paralleli e Distribuiti a.a. 2008/09 7 Ear Decomposition Dato un grafo non orientato G e P 0 ciclo semplice in G, una Ear Decomposition è una partizione ordinata dellinsieme degli archi E = P 0 P 1 P 2 … P k tale che 1 i k P i è un cammino semplice in cui entrambi gli estremi (e solo gli estremi) appartengono a P 0 … P i-1. Non è unica: Se 1 i k P i non è un ciclo (gli estremi sono distinti) allora la decomposizione si dice aperta (vedi secondo esempio). P0P0 P0P0 P1P1 P2P2 P3P3 P0P0 P1P1 P2P2 P3P3
Algoritmi Paralleli e Distribuiti a.a. 2008/09 8 Quali grafi ammetto una Ear Decomposition? G è privo di ponti EAR Decomposition G è biconnesso EAR Decomposition aperta NO P0P0 P1P1 P2P2 P3P3 SI P0P0 P1P1
Algoritmi Paralleli e Distribuiti a.a. 2008/09 9 Dato G si consideri un suo spanning tree T. Esistono m-n+1 archi di G non in T, ciascuno dei quali induce un ciclo se viene aggiunto a T. Questa è una copertura del grafo tramite cicli, non una Ear Decomposition: infatti due cicli possono condividere degli archi. È necessario rompere i cicli per ottenere una Ear Decomposition. Ear e Spanning Tree e1e1 e2e2 e3e3 e4e4 e6e6 e7e7 e8e8 e9e9 e 10 e5e
Algoritmi Paralleli e Distribuiti a.a. 2008/09 10 Etichettare gli archi Etichettiamo ogni arco e=(u,v) in G-T nel seguente modo: label(e) = Livello e lca sono da intendersi in T, aggiungiamo lindice dellarco per disambiguare ed avere tutte etichette distinte. Poi etichettiamo gli archi in T assegnando a ciascun arco e=(u,v) in T la minima etichetta associata ad una arco e' non in T che induce un ciclo contente e. e T lcalabel(e) (2,1)3 (1,8)4 (3,5)3 (7,8)8 (7,6)4 e T label(e) (3,2) (3,4) (4,1) (4,8) (4,5) (8,9) (9,7) (5,6)
Algoritmi Paralleli e Distribuiti a.a. 2008/ P e8 P e9 P e2 P e10 P e4 Risultato Ordinando gli archi rispetto a label(e) si ottiene la Ear Decomposition come sequenza ordinata di cammini disgiunti. elabel(e) (4,5) (3,5) (3,4) (4,1) (3,2) (2,1) (8,9) (5,6) (9,7) (7,6) (4,8) (1,8) (7,8) P e8 P e9 P e2 P e10 P e4