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

Slides:



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

Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 22/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
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 19/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
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 Lezione del 08/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Avanzati a.a.2012/2013 Prof.ssa Rossella Petreschi Albero Ricoprente Lezione n°9.
Prog21 Alberi binari (radicati e ordinati) Il figlio destro della radice La radice Il figlio sinistro della radice Il padre del nodo 5.
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Prof.ssa Rossella Petreschi Lezione del 29 /10/2014 del Corso di Algoritmica Lezione n°8.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Somme prefisse Lezione n°2.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi L’ausilio delle occorrenze Circuiti di ordinamento Lezione n°5.
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
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Analisi di sequenze di operazioni Union-Find
Lezione n°9 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Lezione n°7 Prof.ssa Rossella Petreschi
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Rappresentazione di alberi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati 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
Lezione n°4 Prof.ssa Rossella Petreschi
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
Rappresentazione di alberi
Algoritmi per il flusso nelle reti
Lezione n°6 Prof.ssa Rossella Petreschi
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Lezione n°14 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Ottimizzazione distribuita
Algoritmi Avanzati a.a. 2010/11
Algoritmi e Strutture Dati
Alberi di ricerca Lezione n°4
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
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Unione per ranghi compressi
Transcript della presentazione:

Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi Algoritmi elementari di ordinamento Lezione n°6 Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi 1

Livello di un vertice CDE h e c b i a d g f 1 -1 S 2 3 4 v a b c d e f Fatto: Il livello di un nodo è quello del padre aumentato di 1, ovvero quello di un figlio diminuito di 1. Per calcolare il livello di ciascun nodo nell’albero assegniamo valore +1 ad ogni arco discendente e valore -1 ad ogni arco ascendente. Eseguite le somme prefisse, si ha: v = r l(v) = 0  v  r l(v) = S(p(v),v) Riprendendo l’esempio abbiamo: CDE h e c b i a d g f 1 -1 S 2 3 4 v a b c d e f g h i l(v) 3 2 1 4 AA 2010-2011

Occorrenza sinistra e destra Anche per individuare la prima e l’ultima occorrenza di un nodo nel CDE di un albero radicato, sfruttiamo il vettore delle somme prefisse S calcolato nello stesso modo del calcolo dei livelli dei nodi. Per ogni arco (u,v) nel CDE calcoleremo: left(e) = 1 sse S(e.pred) < S(e) right(e) = 1 sse S(e.next) < S(e) Per ogni nodo u nel CDE calcoleremo: left(u) = indice dell’unico arco con left(u,v) = 1 right(u) = indice dell’unico arco con right(v,u) = 1 Notare: left(u,v) = right(u,v) = 1 sse v è una foglia. left(r)= 0 AA 2010-2011

Esempio left e right Consideriamo l’albero in figura e il suo CDE,radicato nel nodo h h e h c b c i a d a i g c f c h I valori left e right associati all’arco (u,v) identificano rispettivamente la prima e l’ultima visita del nodo v nel Cammino di Eulero. c h g e f b i d a CDE h,e e,h h,c c,b b,c c,i i,a a,d d,a a,i i,g g,i i,c c,f f,c c,h 1 -1 S 2 3 4 left right AA 2010-2011

Visita inorder La visita inorder (FS,R,FD) è definita soltanto su alberi binari, perché è necessario poter distinguere tra figlio sinistro e figlio destro di ogni nodo. Nelle nostre strutture dati non abbiamo tale informazione quindi assumeremo che l’albero 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 nell’occorrenza intermedia tra il primo ed il secondo figlio (left = right = 0). Si da 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) è l’arco in cui v è stato conteggiato: left(u,v) = right(u,v). AA 2010-2011

Esempio di visita inorder c g a b e d f CDE g,a a,g g,c c,b b,f f,b b,d d,b b,c c,e e,c c,g left 1 right S 2 3 4 5 6 7 v a b c d e f g inorder 1 4 6 5 7 3 2 AA 2010-2011

LCA CDE Sliv 1 2 3 4 left right c h g e f b i d a lca(a,f)=c La computazione del minimo antecedente comune (lca) di ogni nodo si basa sulle seguenti osservazioni: u è antecedente di v sse left(u) < left(v) < right(u) u e v sono confrontabili (nessuno è antecedente dell’altro) sse right(v) < left(u) oppure right(u) < left(v) se u e v sono confrontabili, lca(u,v) è il vertice di livello più basso compreso tra right(u) e left(v) Esempio: c h g e f b i d a lca(a,f)=c right(a) left(f) CDE h,e e,h h,c c,b b,c c,i i,a a,d d,a a,i i,g g,i i,c c,f f,c c,h Sliv 1 2 3 4 left right AA 2010-2011

Discendenti di un nodo CDE h e c b i a d g f 1 S 2 3 4 5 6 7 8 v a b c 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 Tv 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 Tv è esattamente quello di Post(v) mentre il minimo può essere trovato in corrispondenza dell’arco (p(v),v). Il numero di discendenti della radice è |Tr| = n per ogni altro nodo il valore è |Tv| = S(v,p(v)) - S(p(v),v) CDE h e c b i a d g f 1 S 2 3 4 5 6 7 8 v a b c d e f g h i |Tv| 2 1 7 9 4 AA 2010-2011

Come ordinare nel Parallelo Utilizziamo il comparatore, ossia un circuito di confronto con due ingressi e due uscite il cui valore è la coppia di valori in input ordinati in modo ascendente. I circuiti formati da comparatori, se opportunamente combinati, costituiscono un'architettura in grado di ordinare n valori di input. x y min(x,y) max(x,y) 9 5 2 7 9 9

Insertion Sort Due architetture per implementare l'insertion sort (tra 8 valori in input): Questa macchina utilizza una versione seriale dell'algoritmo di complessità O(n2) (indicata dalla profondità del circuito, ossia il numero di porte che vengono attraversate in tempi differenti). È possibile ottenere una complessità O(n) ottimizzando lo scheduling dei comparatori e parallelizzando l'algoritmo. 10 10

Sulla monotonicità Se un circuito di ordinamento trasforma la sequenza di input a = (a1, a2, …, an) nella sequenza di output b = (b1, b2, …, bn), allora per ogni funzione monotona crescente f, il circuito trasforma la sequenza di input f(a) = (f(a1), f(a2), …, f(an)) nella sequenza di output f(b)=(f(b1), f(b2), …, f(bn)). Tale proprietà è facilmente verificata da un singolo comparatore e per induzione la si può provare per un intero circuito di ordinamento. x y min(x,y) max(x,y) f(x) f(y) min(f(x), f(y))) = f(min(x,y)) max(f(x), f(y))) = f(max(x,y)) 11 11

Principio 0/1 Teorema (principio 0/1): se un circuito combinatorio di ordinamento lavora correttamente per qualunque input costruito sull'alfabeto {0,1} allora lavora correttamente per qualunque input costruito su di un qualsiasi alfabeto finito A. Dim: supponiamo per assurdo che il circuito ordini tutte le sequenze costruite sull'alfabeto {0,1} correttamente, ma che esista una sequenza di input di numeri arbitrari a = (a1, a2, …, an) contenente elementi ai e aj tali che ai < aj mentre il circuito pone aj prima di ai nella sequenza di output. Definiamo una funzione f monotona crescente come: f(x) = 0 se x <= ai f(x) = 1 se x > ai dal lemma precedente segue che il circuito sistema f(aj) prima di f(ai) nella sequenza di output quando f(a) è l'input. Ma poiché f(aj) = 1 mentre f(ai) = 0, neghiamo l'ipotesi giungendo ad un assurdo. 12 12

Sequenze bitoniche Una Sequenza Bitonica è una sequenza che può essere divisa in due sottosequenze monotone, una crescente e l'altra decrescente o viceversa. Sono bitoniche le due sequenze: m(S) = (min{s1,sn+1}, min{s2,sn+2}, …, min{sn,s2n}) M(S) = (max{s1,sn+1}, max{s2,sn+2}, …, max{sn,s2n}) ottenute dalla sequenza bitonica S = s1, s2, …, s2n Sfruttando la definizione di m(S) ed M(S) e le relative proprietà si può ottenere una definizione ricorsiva per le sequenze bitoniche che ci permette di realizzare un primo algoritmo di ordinamento che opera ricorsivamente secondo lo schema: S = 1 3 8 9 6 5 5 4 S1 = m(S) = 1 3 5 4 S2 = M(S) = 6 5 8 9 S3 = m(S1) = 1 3 S4 = M(S1) = 5 4 S5 = m(S2) = 6 5 S6 = M(S2) = 8 9 13 45 56 89 Complessità O(log(n)). 13 13

Sequenze pulite Una sequenza binaria si dice pulita se è composta interamente da 0 o da 1. Se S è bitonica almeno una delle due sottosequenze bitoniche m(S) e M(S) è pulita (diretta conseguenza del fatto che la cardinalità di {0,1} è due). In figura è presentato un circuito di ordinamento, di profondità logaritmica, per sequenze 0/1 bitoniche (ad ogni passo rendiamo pulita metà della sequenza). 1 14 14

Circuito di fusione Il circuito di fusione fonde due sequenze ordinate costruite sullo stesso alfabeto sfruttando il fatto che, date due sequenze ordinate entrambe crescenti (o decrescenti) x e y, la sequenza che si ottiene concatenando x con z=“y rovesciata” è bitonica (l’inversione della stringa y si realizza semplicemente variando le connessioni). La profondità del circuito è logaritmica e il numero di comparatori ad ogni passo è n/2. 1 15 15

Circuito di ordinamento In figura è riportato un circuito di ordinamento che realizza l’ordinamento connettendo iterativamente diversi circuiti di fusione (la base di questa costruzione sta nel fatto che ogni sequenza di due elementi è bitonica). Poiché concateniamo un numero logaritmico di circuiti di fusione, otteniamo una profondità del circuito O(log2 n). 1 16 16

Applicando il teorema di Brent Il circuito di ordinamento, O, è un circuito combinatorico di profondità d = O(log2 n), di dimensione pari al numero di comparatori c = O(n log2 n), fan in e fan out limitati. Per il Teorema di Brent, l’algoritmo di ordinamento che lavora su O può essere simulato da una algoritmo che lavora su una PRAM EREW con N processori in tempo O(c / p + d), ovvero O((n log2 n) / p + log2 n). Quando p = O(n) si ha che la complessità temporale dell'ordinamento su una PRAM EREW è O(log2 n) e il costo O(n log2 n). 17 17