Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi

Slides:



Advertisements
Presentazioni simili
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 22/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Advertisements

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 Lezione del 05/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 28/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 19/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°10.
Algoritmi Avanzati a.a. 2011/12 Lezione del 02/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°9.
Algoritmi Avanzati a.a.2012/2013 Prof.ssa Rossella Petreschi Albero Ricoprente Lezione n°9.
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Come generare un MST in un sistema distribuito Lezione n°13.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Algoritmi Avanzati a.a. 2010/11 Lezione del 18/04/2011 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. EMANUELE FUSCO.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Somme prefisse Lezione n°2.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Cammini minimi in grafi:
Inserzione e Cancellazione
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
La funzione Path e le forme a cespuglio
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Lezione n°17 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Lezione n°15 Prof.ssa Rossella Petreschi
B-alberi e alberi autoaggiustanti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
La gestione degli insiemi disgiunti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
K4 è planare? E K3,3 e K5 sono planari? Sì!
Lezione n°11 Prof.ssa Rossella Petreschi
Lezione n°12 Prof.ssa Rossella Petreschi
ABBINAMENTO Lezione n°13
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi per il flusso nelle reti
Algoritmi per il flusso nelle reti
Lezione n°6 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a. 2010/11
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Cammini di costo minimo su un grafo pesato
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a. 2010/11
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Cammini minimi in grafi:
Transcript della presentazione:

Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi Lezione n°8 Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi 1

Albero delle espressioni Data un’espressione aritmetica, si associ alle foglie di un albero binario 0/2 le costanti dell’espressione e ai nodi interni le operazioni binarie. Le operazioni necessarie per generare il risultato alla radice si eseguono in parallelo su ogni nodo, livello per livello, con costo O(n log n), se l’albero delle espressioni è bilanciato, (esempio a sx). Si noti che se l’albero non è bilanciato (esempio a dx), il tempo parallelo richiesto può addirittura essere lineare. a  (b + (c  (d + (e  (f + (g  h)))))) ((a + b)  (c  d)) + ((e  f) + (g + h)) g h  f + e d c b a a b + c d  e f g h

Valutare una espressione Idea: se l’albero non è bilanciato, per mantenere il tempo parallelo logaritmico, ci si accontenta che ogni nodo faccia solo un computo parziale prima di essere considerato completamente visitato. Il computo parziale al nodo v è dato da avX+bv con av e bv costanti e X indeterminata che rappresenta il valore non noto della sottoespressione al nodo v. Ogni nodo è caratterizzato dalla etichetta (av,bv), inizialmente pari a (1,0).

Invariante val(u) = (av val(v) + bv)  (aw val(w) + bw) Si consideri il nodo u interno all’albero delle espressioni. Ad u è associato l’operatore   {+, } e l’etichetta (au,bu), ai figli di u, v e w, sono associate le etichette (av,bv), (aw,bw), rispettivamente. Il valore della sottoespressione calcolata in u è dato da: val(u) = (av val(v) + bv)  (aw val(w) + bw) Si noti che au e bu non appaiono nel calcolo di val(u) ma saranno presenti nel calcolo di val(p(u)).

Algoritmo per valutare un’espressione Input: T albero delle espressioni tale che ogni nodo v conosce il padre p(v) e il fratello fr(v) Output: val(T) = val(T'), T' risultato della contrazione Passo 1: si assegni l’etichetta (1,0) a tutti i nodi di T Passo 2: si applichi l’algoritmo di contrazione con l’aggiunta della condizione che ogni singola operazione di rake preservi l’invariante Passo 3: su T' di radice r con operatore  e foglie u e v contenenti le costanti cu e cv, rispettivamente, si calcoli: val(T') = (au cu + bu)  (av cv + bv) = val(T) Il tempo totale di questo algoritmo dipende dal passo 2, dato che i passi 1 e 3 richiedono tempo parallelo costante.

Come l’operazione di rake preserva l’invariante L’operazione di rake applicata ad una foglia u con fratello w, elimina u e p(u). Al fine di mantenere la validità dell’invariante, il contributo di u e p(u) al computo totale (ovvero au, ap(u), bu, bp(u)) deve essere conglobato in w (ovvero in aw e bw). Poiché val(p(u)) = (aucu+bu) p(u) (awX+bw), il contributo di p(u) al computo di val(p(p(u))) è dato da: ap(u)val(p(u)) + bp(u) = ap(u) ((aucu+bu) p(u) (awX+bw)) + bp(u) da cui si possono calcolare i nuovi valori per w: Quindi il passo 2 resta dominato dal costo computazionale del rake. (ap(u),bp(u))  (aw,bw) w cu p(u) = + p(u) =  a'w = ap(u) aw ap(u) (aucu+bu)  aw b'w = ap(u) (aucu+bu+bw) + bp(u) ap(u) (aucu+bu)  bw + bp(u) (au,bu) (aw',bw') w

Esempio di calcolo d’espressione Input: albero che corrisponde all’espressione inizialmente (av, bv) = (1,0) per ogni nodo ((2+(3(4+5)))3)+(((5+2)2)+(7(1+1))) = 115 2  + 3 7 4 5 1

Esempio di calcolo d’espressione Si numerano le foglie e si esegue il rake su quelle di numerazione dispari, prima su quelle che sono figli sinistri e poi su quelle che sono figli destri. 2  + 3 7 4 5 1 6 8 9 2 + 3  7 4 5 1 6 8 (1,5) (1,1) (3,0) (2,10) 2 + 3  7 4 1 6 8 (1,1) (3,15)

Esempio di calcolo d’espressione + + (1,14)  +   + 3 2  + 3 7 1 2 2 (2,10) 3 2 4 7 1 2 4 4 (1,1) 1 1 (3,15) 4 (1,1) (3,15) + + (1,14) (3,81) (1,14)   2  (1,27) 2 3 7 1 7 1 1 2 (1,1) 2 (1,1) + + (3,81) (7,21) (3,81) (1,14) 2 1 2  7 1 (3  2 + 81) + (7  1 + 21) = 115 1 (1,1)

Minimo Albero Ricoprente Sia G=(V,E) un grafo connesso non orientato e w:ER una funzione costo degli archi di G. Definiamo inoltre m:VV nel seguente modo: m(u)=v sse (u,v) è l’arco di costo minimo incidente su u. Un albero ricoprente (ST) di G=(V,E) è un albero T=(V,E') tale che E'E. Un minimo albero ricoprente (MST) di G=(V,E) è un albero ricoprente T=(V,E') di costo minimo. Il costo di un albero è la somma dei costi degli archi che lo compongono: w(T)=eT w(e).

Unicità del MST Il MST è unico sse ogni arco ha un costo distinto. Tale condizione può essere forzata disambiguando eventuali costi uguali: si aggiunge al costo l’indice dell’arco cui appartiene: w'(e) = <w(e),e> a b d c e <1,e1> <6,e2> <2,e3> <5,e6> <2,e7> <5,e4> <2,e5> <3,e8> <1,e9> a b d c e <1,e1> <2,e3> <2,e5> <1,e9> Si noti che tra <2,e5> e <2,e7> viene scelto <2,e5> Nel seguito i costi verranno sempre disambiguati considerando gli archi indicizzati in base al loro ordine lessicografico.

Proprietà Lemma1. Tutti gli archi (u,m(u))MST. Dimostrazione. Sia G=(V,E) un grafo, w una funzione di costo su G e T il MST di G. Assumiamo per assurdo che esista un vV tale che (v,m(v))T.Consideriamo il cammino da v a m(v) in T sia (v,x) il primo arco in tale cammino. Il costo di tale arco è sicuramente maggiore di quello dell’arco (v,m(v)), per definizione di m(v). Sia T' = T - (v,x)  (v,m(v)). T' è un albero ricoprente per G e il suo costo w(T')=w(T)-w(v,x)+(v,m(v)) è minore di quello di T, il che contrasta con il fatto che T è il MST di G, quindi v non può esistere.

Strategie per MST Prim: si parte da T = un singolo vertice e si costruisce incrementalmente il MST aggiungendo l’arco di costo minimo tra T e G-T. Kruskal: si parte da una foresta di nodi isolati e, considerando tutti gli archi in ordine di costo crescente, si aggiunge ciascun arco solo se non induce un ciclo. Sollin: si parte da una foresta di nodi isolati, si aggiungono tutti gli archi (u,m(u)) e si itera (sugli archi che uniscono le varie componenti connesse) fino ad ottenere un albero.

Esempio 1 A partire dal grafo Prim inizia con T=({a},). Poi inserisce, passo dopo passo, gli archi (a,g), (g,e), (a,b), (b,d), (b,f) e (d,c). L’albero ricoprente generato è: d c b 1 2 a f e g 3 4 d c b 1 a f e g 2

Esempio 2 Kruskal genera il medesimo MST analizzando gli archi nel seguente ordine (quelli che inducono cicli vengono scartati): e w(e) induce un ciclo? (a,g) 1 no (b,d) (b,f) (c,d) (d,f) si (e,g) (a,b) 2 (a,c) (f,g) (e,f) 3 (b,g) 4 d c b 1 a f e g 2

Esempio 3 Sollin inizialmente considera i seguenti archi: In seguito considera gli archi tra le due componenti connesse: v m(v) costo a g 1 b d c e f d c b 1 a f e g ed ottiene: d c b 1 a f e g 2 V m(V) costo arco originale C1 C2 2 (a,b)

Strategia per il parallelo Sia Prim che Kruskal sono inerentemente sequenziali in quanto la scelta fatta ad ogni passo dipende strettamente da tutto ciò che si è fatto nei passi precedenti. L’idea di Sollin invece (ad ogni iterazione) lavora su tutti i vertici senza richiedere un ordine specifico, quindi si presta meglio ad essere utilizzata in un contesto di calcolo parallelo. Si noti però che se i costi non fossero distinti con Sollin si potrebbero introdurre cicli di lunghezza ≥ 3: u m(u) a b c b a c 1 b a c

MST nel parallelo Input: G grafo non orientato connesso pesato, con pesi distinti Output: l’unico MST Idea: partendo da frammenti costituiti da singoli nodi, ad ogni passo ogni frammento cerca di unirsi con un altro frammento (formando meganodi) attraverso lo spigolo di costo minimo ad esso incidente. Si ripete finché la foresta non si riduce ad un albero.

Stelle ed alberi radicati Albero Radicato Stella Radicata

Pseudoforesta Si definisce pseudoforesta un grafo orientato in cui ogni vertice ha grado uscente minore od uguale ad uno. In altre parole, pseudoforesta è un insieme di alberi (e stelle) orientati radicati, ciascuno contenente un ciclo. Una pseudoforesta può essere vista come una funzione d:VV. vV, (v,d(v)) è l’unico arco uscente da v in G. v d(v) 1 14 2 13 3 20 4 21 5 10 6 7 8 9 11 12 18 15 16 17 19 18 14 1 12 4 13 8 2 11 17 7 15 21 6 20 3 10 19 5 16 9

Come fare Identificare l’adiacente di costo minimo Rappresentare e identificare opportunamente i meganodi Fondere i meganodi avendo presente le limitazioni sul costo (tempo, processori, complessità dei messaggi) che si vuole ottenere

Come generare i meganodi Per generare i meganodi: ogni nodo v seleziona il proprio vicino. Ogni ciclo nella pseudo foresta o è un loop o contiene due archi. In ogni singolo albero il vertice di numerazione minima appartenente all’unico ciclo sarà usato come radice. tramite la tecnica del salto del puntatore, ogni albero della foresta è ridotto ad una stella. In tal modo ogni meganodo è identificato dalla radice della stella ed ogni nodo conosce il nome del meganodo a cui appartiene semplicemente leggendo il nome della radice della propria stella. 4 13 8 12 11 17 7 15 21 4 13 8 12 11 17 7 15 21 4 13 8 12 11 17 7 15 21

Grafo ridotto Una volta che al passo k-esimo si sono individuati tutti i meganodi del grafo su cui si sta operando, bisogna costruire il nuovo grafo ridotto su cui si opererà al passo (k+1)-esimo. Il nuovo grafo avrà nk+1 meganodi e tanti spigoli quanti sono quelli che uniscono i meganodi, ovvero quegli spigoli di G che uniscono vertici appartenenti a stelle differenti. Per calcolare nk+1 bisogna numerare tutti i meganodi utilizzando la tecnica delle somme prefisse.

Strutture dati per MST Input: il grafo G rappresentato come matrice di adiacenza pesata W. W[i,j] = w(i,j) se (i,j)E altrimenti W[i,j] = . Output: MST di G rappresentato tramite liste di adiacenza Altre variabili: nk: numero di nodi del grafo al passo k (n0 = n) Wk: matrice di adiacenza del grafo al passo k (W0 = W) mk(v): adiacente di v t.c. (u,mk(u)) è l’arco di costo minimo incidente su u (nel grafo al passo k)

Algoritmo per MST Begin k = 0 while Wk contiene archi do mk(u) = v t.c. min Wk(u,v) Aggiungi (u,mk(u)) al MST Crea la pseudoforesta corrispondente Esegui il salto del puntatore su mk(v) Numera i meganodi Costruisci Wk+1 k = k+1 end

Esempio 12 6 Grafo di partenza rappresentato tramite matrice W0 Passo 0: meganodi iniziali = nodi isolati Aggiungendo (u,m(u)) uV 6 1 3 3 2 2 1 4 5 5 11 7 1 13 2 3 4 2 3 4 2 1 1 4 8 9 10 11 13 1 2 6 8 9 7 12 4 3 5 10

Esempio Dopo il salto del puntatore rimangono 4 meganodi La matrice di adiacenza W1 del grafo ridotto è: (nella tabella sono riportati il costo minimo di un arco tra due meganodi e l’identificatore di tale arco nel grafo iniziale) 11 13 1 2 6 8 9 7 12 4 3 5 10 1 2 3 4 1 2 3 4 - 2, (1,2) 4, (4,5)  5, (7,11)

Dopo il salto del puntatore rimane 1 solo meganodo Esempio Passo 1: 4 meganodi isolati, aggiungendo (u,m(u)) u in W1 Dopo il salto del puntatore rimane 1 solo meganodo La matrice di adiacenza è vuota quindi al passo 2 l’algoritmo termina. Il MST risultante è: 1 1 2 3 2 3 4 4 12 6 1 3 3 2 2 1 5 5 11 7 1 13 2 2 3 4 2 1 1 4 8 9 10

Costo dell’algoritmo Al generico passo k, una componente connessa di n' > 1 nodi, può originare al più n'/2 meganodi. Quindi dopo O(log n) iterazioni del ciclo while l’algoritmo termina. Ciascuna iterazione richiede tempo logaritmico: La ricerca del minimo adiacente per ciascun nodo v richiede O(log n) tempo su PRAM EREW, se invece si assume una PRAM ERCW (con scrittura del minimo o priorità al processore di indice minimo) il costo è O(1). Il salto del puntatore per ridurre a stelle la pseudoforesta richiedere tempo logaritmico su PRAM CREW. La numerazione dei meganodi richiede tempo logaritmico con somme prefisse su PRAM EREW.

Costo dell’algoritmo Si deve prestare attenzione nella generazione della matrice Wk+1 da utilizzare al passo successivo: tra due meganodi si dovrà porre un arco il cui peso è pari al minimo tra tutti gli archi che collegano i nodi di un meganodo ai nodi dell’altro. Tale operazione si può eseguire in O(log n) tempo su una PRAM EREW simulando una scrittura concorrente. Si dovrà inoltre tenere traccia dell’arco del grafo originale a cui tale costo si riferisce, al fine di poterlo correttamente inserire nel MST. Se adoperiamo una PRAM con n2 processori, uno per ogni elemento della matrice di adiacenza,l’algoritmo richiede quindi O(log2 n) tempo su una PRAM CREW con n2 processori. Con vari tecnicismi si può raffinare l’algoritmo e ridurre costo, assunzioni sul modello e/o numero di processori.

Oltre il MST Lo stesso algoritmo si può applicare per trovare uno ST (non minimo) di un grafo. Se il grafo non è pesato si usano pesi tutti pari ad 1 (disambiguati con l’indice dell’arco). Se il grafo non è connesso l’algoritmo genera una foresta ricoprente di costo minimo. Quindi si può anche utilizzare per identificare le componenti connesse di un grafo (problema della connettività di un grafo).