Algoritmi Avanzati a.a.2014/2015 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 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.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.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.
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.2015/2016 Prof.ssa Rossella Petreschi
Lezione n°10 Prof.ssa Rossella Petreschi
Inserzione e Cancellazione
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Alberi di ricerca di altezza logaritmica
Analisi di sequenze di operazioni Union-Find
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
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
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Rappresentazione di alberi
Algoritmi Avanzati a.a.2010/2011 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 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 a.a.2013/2014 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
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ì!
Algoritmi e Strutture Dati
per rappresentare grafi
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
Algoritmi per il flusso nelle reti
Lezione n°6 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Introduzione agli Algoritmi e alle Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Ottimizzazione distribuita
Algoritmi Avanzati a.a. 2010/11
Alberi di ricerca Lezione n°4
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 a.a.2010/2011 Prof.ssa Rossella Petreschi
Unione per ranghi compressi
Transcript della presentazione:

Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°7 Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi 1

Visita in preorder 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 Fatto: nella numerazione in preorder (R,FS….FD), ogni nodo v viene numerato la prima volta che viene incontrato durante la visita, ovvero quando si arriva a v dal padre p(v). Dato il CDE di un albero T radicato in r, per ottenere la numerazione dei nodi in preorder sfruttando il Fatto, assegniamo valore 0 ad ogni arco (v,p(v)) che risale dal figlio al padre e valore +1 ad ogni arco (p(v), v) che scende dal padre al figlio. Sulla sequenza così ottenuta eseguiamo poi le somme prefisse. La numerazione in preorder è data da: v = r Pre(v) = 1  v  r Pre(v) = S(p(v),v) +1 Riprendendo l’esempio abbiamo: 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 Pre 6 4 3 7 2 9 8 1 5 2

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

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 v nel CDE calcoleremo: left(v) = indice dell’unico arco con left(u,v) = 1 right(v) = indice dell’unico arco con right(u,v) = 1 Notare: left(u,v) = right(u,v) = 1 sse v è una foglia. left(r)= 0

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

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).

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

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

L’operazione di rake Sia T un albero binario 0/2 radicato in r e sia u una foglia in T tale che p(u)  r. L’operazione Rake(u) trasforma T in T' eliminando u e p(u) e unendo il fratello di u al padre del padre. p f u n

Se T non è 0/2 Si possono aggiungere tanti nodi quanti ne servono per garantire la proprietà 0/2. Ciò richiede tempo costante con O(n) processori e incremento di occupazione di memoria lineare.

L’operazione di Contrazione Tramite ripetute applicazioni del rake vogliamo ridurre l’albero iniziale T in un albero di tre nodi: la radice e due foglie (quella più a sinistra e quella più a destra in T). Problema: bisogna evitare il rake concorrente di foglie con lo stesso padre o con padri adiacenti per evitare risultati inconsistenti: u u' u u' u u'

Soluzione Evitare il rake concorrente di foglie con lo stesso padre: dopo averle numerate da sinistra a destra, si esegue il rake in parallelo su foglie a numerazione alterna. Evitare il rake concorrente di foglie con padri adiacenti: fra le foglie a numerazione alterna selezionate, si eliminano prima quelle che sono figli sinistri e in seguito quelle che sono figli destri. u u' 7 6 6 u u' 7 8

Esempio Input: Passo 2.1 rake su q ed l Passo 2.2 rake su t ed p z d e f r s t o p m g n b i Albero risultante a q z d c e f r s t l o p h m g n b i Passo 2.2 rake su t ed p a s d e f r o g n b i Albero risultante Passo 1 calcola A 1 2 3 4 5 6 7 8 A q s t f l o p n 1 2 3 4 A s f o n Passo 2.3 aggiorna A

Esempio Passo 2.1 rake su o Passo 2.1 rake su nulla Passo 2.2 rake su f Albero risultante e i r Albero risultante d f n b a i a s n b 1 A n Passo 2.3 aggiorna A Passo 2.2 rake su s r Albero risultante Passo 2.1 rake su n e i a f n b r Albero risultante a b Passo 2.2 rake su nulla 1 2 A f n Passo 2.3 aggiorna A Passo 2.3 aggiorna A = 