Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoFedele Zamboni Modificato 10 anni fa
1
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 15/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI
2
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).
3
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).
4
Algoritmi Paralleli e Distribuiti a.a. 2008/09 4 vabcdefg inorder1465732 Esempio di visita inorder CDE g,aa,gg,cc,bb,ff,bb,dd,bb,cc,ee,cc,g left101110100100 right100010110111 110011101100 S122234556777 c g a be df
5
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 1012123432321210 left1011011100100100 right1001000110110111 lca(a,f)=c right(a) left(f) c h g e f b i da
6
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 0100100011011011 S0111222234456678 vabcdefghi |T v |217111194
7
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
8
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
9
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 4 3 1 2 5 8 9 6 7 e1e1 e2e2 e3e3 e4e4 e6e6 e7e7 e8e8 e9e9 e 10 e5e5 4 3 1 2 5 8 9 6 7
10
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)
11
Algoritmi Paralleli e Distribuiti a.a. 2008/09 11 4 3 1 2 5 8 9 6 7 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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.