250 likes | 420 Views
dizionari. alberi bilanciati. dizionari. ADT che supportano le seguenti operazioni membership anche detta search insert delete o remove le liste e i BST sono dizionari. dizionari/2.
E N D
dizionari alberi bilanciati
dizionari • ADT che supportano le seguenti operazioni • membership • anche detta search • insert • delete • o remove • le liste e i BST sono dizionari ASD2002 - Alberi bilanciati
dizionari/2 • tutte le implementazioni finora considerate hanno almeno un’operazione di costo lineare w.c.t. (worst case time, tempo nel caso peggiore) • in molti casi un costo lineare è giudicato inaccettabile • strutture più efficienti? • alberi bilanciati • tavole hash ASD2002 - Alberi bilanciati
introduzione al bilanciamento • nozione intuitiva di bilanciamento • tutti i rami di un albero hanno approssimativamente la stessa lunghezza • ciascun nodo interno ha “molti” figli • caso ideale per un albero k-ario • ciascun nodo ha 0 o k figli • la lunghezza di due rami qualsiasi differisce di al più una unità ASD2002 - Alberi bilanciati
un albero binario perfettamente bilanciato di n nodi ha altezza 34 21 63 16 30 43 72 6 18 37 52 28 32 -1 foglia + 1 nodo interno +2 foglie bilanciamento perfetto • se ogni nodo ha 0 o 2 figli nf = ni +1 • nf = # foglie • ni = # nodi interni • n = nf + ni • le foglie sono circa il 50% dei nodi ASD2002 - Alberi bilanciati
bilanciamento perfetto/2 • facilmente generalizzabile ad alberi di arità k • costo di ricerca/inserimento/eliminazione O(log n) • ripetuti inserimenti/eliminazioni possono distruggere il bilanciamento • degrado delle prestazioni ASD2002 - Alberi bilanciati
bilanciamento in altezza • un albero è bilanciato in altezza se le altezze dei sottoalberi sinistro e destro di ogni nodo differiscono di al più un’unità • gli alberi bilanciati in altezza sono detti alberi AVL • da Adel’son-Vel’skii & Landis, primi proponenti ASD2002 - Alberi bilanciati
34 fattore di bilanciamento (FDB): altezza sottoalbero dx – altezza sottoalbero sx 21 63 16 30 43 72 +1 6 18 28 32 37 52 78 -1 3 29 57 0 fattore di bilanciamento in un albero bilanciato in altezza |FDB| 1, per ogni nodo ASD2002 - Alberi bilanciati
alberi AVL? ASD2002 - Alberi bilanciati
1 2 4 7 12 alberi di Fibonacci ASD2002 - Alberi bilanciati
AVLi +2 AVLi AVLi +1 alberi di Fibonacci/2 • alberi di Fibonacci • alberi bilanciati di altezza i col minimo numero di nodi • Relazioni • AVLi +2 = AVLi + AVLi +1 + 1 • Fi +2 = Fi + Fi +1 • AVLi = Fi +2 – 1 ASD2002 - Alberi bilanciati
alberi di Fibonacci/3 • un albero di Fibonacci ha tutti i fattori di bilanciamento dei nodi interni pari a ± 1 • è l’albero bilanciato più vicino alla condizione di non bilanciamento • un albero di Fibonacci con n nodi ha altezza < 1.44 lg(n +2) – 0.328 • dimostrato da Adel’son-Vel’skii & Landis • un AVL di n nodi ha altezza (lg n ) ASD2002 - Alberi bilanciati
inserimento in AVL • inserire nuovo nodo come in un BST “classico” • il nuovo nodo diviene una foglia • ricalcolare i fattori di bilanciamento che sono mutati in seguito all’inserimento • solo nel ramo interessato all’inserimento (gli altri fattori non possono mutare), dal basso verso l’alto • se nel ramo appare un fattore di bilanciamento pari a ±2 occorre ribilanciare • tramite “rotazioni” ASD2002 - Alberi bilanciati
rotazioni negli AVL • casi possibili • DD: inserimento nel sottoalbero destro di un figlio destro (del nodo che si sbilancia) • SD: inserimento nel sottoalbero sinistro di un figlio destro (del nodo che si sbilancia) • DS: inserimento nel sottoalbero destro di un figlio sinistro (del nodo che si sbilancia) • SS: inserimento nel sottoalbero sinistro di un figlio sinistro (del nodo che si sbilancia) • simmetrici a coppie • una rotazione (semplice o doppia) è sempre sufficiente ASD2002 - Alberi bilanciati
rotazione semplice (caso DD) • gli antenati di P non sono interessati all’inserimento perché in seguito alla rotazione recuperano il loro fattore di bilanciamento precedente ASD2002 - Alberi bilanciati
rotazione doppia (caso SD) • gli antenati di P non sono interessati all’inserimento ASD2002 - Alberi bilanciati
inserimento negli AVL/costo • passo 1: proporzionale all’altezza dell’albero (lg n ) • passo 2: proporzionale all’altezza dell’albero (lg n ) • passo 3: (1) in totale: (lg n ) ASD2002 - Alberi bilanciati
cancellazione negli AVL • cancellare nodo come in un BST “classico” • ricalcolare i fattori di bilanciamento che sono mutati in seguito alla cancellazione • solo nel ramo interessato all’inserimento (gli altri fattori non possono mutare), dal basso verso l’alto • per ogni nodo con fattore di bilanciamento pari a ±2 occorre operare una rotazione semplice o doppia • O(lg n ) rotazioni nel caso peggiore • più costoso dell’inserimento ASD2002 - Alberi bilanciati
rotazione semplice • eliminazione foglia da sottoalbero sinistro di P • il figlio destro ha FDB +1; a), b) e c) • il figlio destro ha FDB 0; d), e) ed f) ASD2002 - Alberi bilanciati
rotazione doppia • eliminazione foglia da sottoalbero sinistro di P • FDB(Q) = –1 e FDB(R)= –1; g), h) ed i) • rotazione R-Q (P resta a +2, R e Q vanno a +1) e rotazione P-R ASD2002 - Alberi bilanciati
rotazione doppia/2 • eliminazione foglia da sottoalbero sinistro di P • FDB(Q) = -1, FDB(R)=+1, j), k) ed l) • rotazione R-Q (P resta a +2, R va a +2 e Q va a 0) e rotazione P-R ASD2002 - Alberi bilanciati
cancellazione negli AVL/costo • nel caso peggiore occorre effettuare rotazioni (semplici o doppie) lungo tutto il ramo • passo 1: proporzionale all’altezza dell’albero (lg n ) • passo 2: proporzionale all’altezza dell’albero (lg n ) • passo 3: (lg n ) · (1) in totale: (lg n ) ASD2002 - Alberi bilanciati
AVL e dizionari • gli AVL consentono di realizzare dizionari in cui le tre operazioni • membership • insert • delete hanno costo O(lg n ) w.c.t. ASD2002 - Alberi bilanciati
cancellazione negli AVL/2 • gli alberi AVL possono essere estesi consentendo per ogni nodo un FDB limitato • se |FDB| 2 altezza 1.81lg n – 0.71 • se |FDB| 3 altezza 2.15lg n – 1.13 ASD2002 - Alberi bilanciati
cancellazione negli AVL/esempio • animazione tratta dal sito Web http://www.seanet.com/users/arsen/avltree.html ASD2002 - Alberi bilanciati