La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi

Presentazioni simili


Presentazione sul tema: "Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi"— Transcript della presentazione:

1 Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Ear Decomposition Lezione n°13 Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi 1

2 Ear Decomposition Dato un grafo non orientato G e P0 ciclo semplice in G, una Ear Decomposition è una partizione ordinata dell’insieme degli archi E = P0P1P2…Pk tale che 1ik Pi è un cammino semplice in cui entrambi gli estremi (e solo gli estremi) appartengono a P0…Pi-1. Non è unica: Se 1ik Pi non è un ciclo (gli estremi sono distinti) allora la decomposizione si dice aperta (vedi secondo esempio). P0 P1 P2 P3 P0 P1 P2 P3 P0 AA

3 Quali grafi ammetto una Ear Decomposition?
G è privo di ponti   EAR Decomposition G è biconnesso   EAR Decomposition aperta SI P0 P1 NO P0 P1 P2 P3 AA

4 Ear e Spanning Tree 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. 4 3 1 2 5 8 9 6 7 e2 e3 4 3 1 2 5 8 9 6 7 e1 e6 e4 e7 e8 e10 e9 e5 AA

5 label(e) = <level(lca(u,v)),e>
Etichettare gli archi Etichettiamo ogni arco e=(u,v) in G-T nel seguente modo: label(e) = <level(lca(u,v)),e> Livello e lca sono da intendersi in T, aggiungiamo l’indice dell’arco 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 label(e) (3,2) <0,e8> (3,4) <0,e2> (4,1) (4,8) <1,e4> (4,5) (8,9) (9,7) (5,6) eT lca label(e) (2,1) 3 <0,e8> (1,8) 4 <1,e9> (3,5) <0,e2> (7,8) 8 <2,e10> (7,6) <1,e4> AA

6 Risultato Ordinando gli archi rispetto a label(e) si ottiene la Ear
Decomposition come sequenza ordinata di cammini disgiunti. e label(e) (4,5) <0,e2> (3,5) (3,4) (4,1) <0,e8> (3,2) (2,1) (8,9) <1,e4> (5,6) (9,7) (7,6) (4,8) (1,8) <1,e9> (7,8) <2,e10> 4 3 1 2 5 8 9 6 7 Pe2 Pe2 Pe8 Pe8 Pe9 Pe4 Pe10 Pe4 Pe9 Pe10 AA

7 Calcolo di label(e)  eT
Dopo aver calcolato label(e)  e  T si definisca: f(v) = min{label(v,u) : (v,u)  T}  vT È possibile verificare che per ogni arco e=(v, p(v))T il valore label(e) sarà il minimo valore f(u) tra i nodi u appartenenti al sottoalbero Tv radicato in v. Il calcolo del minimo nel sottoalbero si può realizzare, tramite la tecnica del salto del puntatore, in tempo O(log n) su una PRAM CRCW (con scrittura del valore minimo) con n processori. L’assegnamento di f(v) v richiede O(1) e m processori sullo stesso modello. Il costo è quindi O((n+m) log n) su PRAM CRCW o, simulando la scrittura concorrente, O((n+m) log2 n) su PRAM CREW. AA

8 Algoritmo Ear Decomposition
Input: G privo di ponti rappresentato come sequenza di archi begin T = spanning tree di G calcola TDE; radica T in qualunque nodo; calcola level(v) vT for each  e=(u,v)  T pardo Pe: calcola lca(u,v) label(e) = <level(lca(u,v)), e> for each  e  T pardo Pe: label(e) = min{ label(e') : e'T  e  ciclo indotto da e' in T } ordina gli archi rispetto a label(e) end AA

9 Analisi La costrizione dello ST (dando costo 1 a tutti gli archi) costa O(n2 log2 n) su PRAM CREW. Il calcolo del TDE, il radicamento dell’albero e il calcolo del livello per ogni nodo richiedono un costo O(n log n) su PRAM EREW. Il calcolo del lca con la tecnica del TDE richiede un costo pari a O(n log n) su PRAM EREW. (*) Il calcolo di label(e)  eT si è visto che costa O((n+m) log2n) su PRAM CREW. L’ordinamento richiede O(n log n) su PRAM EREW. La complessità totale dell’algoritmo è pari a quella del calcolo dello ST: O(n2 log2 n) su PRAM CREW (*) Abbiamo visto esplicitamente come calcolare il lca di una singola coppia di nodi in tempo log n con n processori su PRAM EREW. Precalcolando opportune strutture dati per trovare il minimo in ogni intervallo di un vettore (Range Minimum Query) ogni processore può calcolare il lca di una coppia di nodi in tempo costante su PRAM CREW. AA


Scaricare ppt "Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi"

Presentazioni simili


Annunci Google