Alberi Bilanciati di Ricerca Damiano Macedonio Uniersità Ca' Foscari di Venezia mace@unie.it
Copyright 2009, 2010 Moreno Marzolla, Uniersità di Bologna (http://www.moreno.marzolla.name/teaching/asd2010/) Modifications Copyright c 2012, Damiano Macedonio, Uniersità Ca' Foscari di Venezia This work is licensed under the Creatie Commons Attribution-NonCommercial- ShareAlike License. To iew a copy of this license, isit http://creatiecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creatie Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. Algoritmi e Strutture Dati 2
Introduzione Abbiamo isto che in un ABR è possibile inserire, rimuoere e indiiduare nodi data la corrispondente chiae in tempo O(h) con h=altezza dell'albero Un albero binario completo con n nodi ha altezza h=θ(log n) Tuttaia, inserimenti e rimozioni di nodi possono sbilanciare l'albero Domanda: indiiduare una sequenza di n inserimenti in un ABR inizialmente uoto tali che al termine, l'albero risultante abbia altezza Θ(n) Il nostro obbiettio: mantenere bilanciato un ABR, anche a seguito di inserimenti/rimozioni di nodi Algoritmi e Strutture Dati 3
Alberi AVL Un albero AVL è un albero di ricerca (quasi) bilanciato Un albero AVL con n nodi supporta le operazioni insert(), delete(), lookup() con costo O(log n) nel caso pessimo Adelson-Velskii, G.; E. M. Landis (1962). "An algorithm for the organization of information". Proceedings of the USSR Academy of Sciences 146: 263 266 Georgy Maximoich Adelson-Velsky (1922 ) http://chessprogramming.wikispaces.com/georgy+adelson-velsky Algoritmi e Strutture Dati 4 Egenii Mikhailoich Landis (1921 1997) http://en.wikipedia.org/wiki/yegeniy_landis
Alcune definizioni Fattore di bilanciamento Il fattore di bilanciamento β() di un nodo è dato dalla differenza tra l'altezza del sottoalbero sinistro e del sottoalbero destro di : β() = altezza(sin()) altezza(des()) Bilanciamento in altezza Un albero si dice bilanciato in altezza se le altezze dei sottoalberi sinistro e destro di ogni nodo differiscono al più di uno In altre parole, un albero è bilanciato in altezza se per ogni suo nodo, si ha β() 1 Definizione: un albero AVL è un ABR bilanciato in altezza Algoritmi e Strutture Dati 5
Esempio β()=0 β()=-3 Algoritmi e Strutture Dati 6
Esempio β()=0 β(t)=2 t Algoritmi e Strutture Dati 7
Altezza di un albero AVL Per alutare l'altezza di un albero AVL, consideriamo gli alberi più sbilanciati che si possano costruire Alberi di Fibonacci T 0 T 1 T 2 T 3 T n T n-1 T n-2 Algoritmi e Strutture Dati 8
Altezza di un albero Fibonacci Consideriamo un albero di Fibonacci di altezza h. Sia n h il numero dei nodi Per costruzione si ha Dimostriamo che n h =n h 1 n h 2 1 n h =F h 3 1 oe F n è l'n-esimo numero di Fibonacci Algoritmi e Strutture Dati 9
Altezza di un albero Fibonacci Base: h=0 n 0 = 1 F 3 = 2 Passo induttio T 0 n h =F h 3 1 n h = n h 1 n h 2 1 = F h 2 1 F h 1 1 1 = F h 2 F h 1 1 = F h 3 1 Algoritmi e Strutture Dati 10
Altezza di un albero di Fibonacci Quindi ricapitolando: un albero di Fibonacci di altezza h ha F h+3 1 nodi Ricordiamo che da cui otteniamo F h = h, 1.618 n h =F h 3 1= h e possiamo quindi concludere che h= logn h Algoritmi e Strutture Dati 11
Conclusione Poiché... l'albero di Fibonacci con n nodi è quello che tra tutti gli alberi AVL con n nodi ha altezza massima; l'altezza di un albero di Fibonacci con n nodi è proporzionale a (log n)...si conclude che: l'altezza di un albero AVL con n nodi è O(log n) Algoritmi e Strutture Dati 12
Mantenere il bilanciamento La ricerca in un albero AVL iene effettuata come in un generico ABR Inserimenti e rimozioni inece richiedono di essere modificati per mantenere il bilanciamento dell'albero Esempio 9 Inserimento del alore 6 9 8 13 8 13 7 7 β() > 1 6 Algoritmi e Strutture Dati 13
Rotazioni L'operazione fondamentale per ribilanciare l'albero è la rotazione semplice Domanda: dimostrare che la rotazione semplice presera la proprietà d'ordine degli ABR Uso come perno u u T3 Uso u come perno T1 T1 T2 T2 T3 Algoritmi e Strutture Dati 14
Rotazioni Supponiamo che a seguito di un inserimento o cancellazione, una parte dell'albero sia sbilanciata Abbiamo quattro casi (simmetrici due a due) SS (Sinistro-Sinistro) SD (Sinistro-Destro) DD (Destro-Destro) DS (Destro-Sinistro) Algoritmi e Strutture Dati 15
Ribilanciamento: rotazione SS Si applica una rotazione semplice erso destra su Ha costo O(1) +2 0 u u h+2 T3 h h+1 T1 h+1 T1 T2 T2 T3 Algoritmi e Strutture Dati 16
Ribilanciamento: rotazione SD (non funziona!) Non si ribilancia! +2-2 u u h+2 T3 h h T1 h+2 T1 T2 T2 T3 Algoritmi e Strutture Dati 17
Ribilanciamento: rotazione SD primo passo z w w T4 z T4 T1 T2 T3 T1 T2 T3 Algoritmi e Strutture Dati 18
Ribilanciamento: rotazione SD secondo passo w w z T1 z T2 T3 T4 T1 T2 T3 T4 Algoritmi e Strutture Dati 19
Ribilanciamento: rotazione SD -1 z +2 caso 1 Rotazione doppia: la prima a sinistra con perno z, la seconda a destra con perno w T4 h 0 w h T1 T2 h-1 T3 0 z -1 h T1 h-1 T2 T3 T4 h Algoritmi e Strutture Dati 20
Ribilanciamento: rotazione SD caso 2-1 z +2 Rotazione doppia: la prima a sinistra con perno z, la seconda a destra con perno w T4 h 0 w h T1 T2 h-1 T3 1 z 0 h T1 h-1 T2 T3 T4 h Algoritmi e Strutture Dati 21
Alberi AVL: Inserimento Si inserisce il nuoo alore come per gli ABR Si ricalcolano tutti i fattori di bilanciamento mutati Al più il ricalcolo riguarderà un cammino dalla foglia appena inserita fino alla radice, quindi ha costo O(log n) Se un nodo presenta fattore di bilanciamento ±2 (nodo critico), occorre ribilanciare l'albero mediante una delle rotazioni iste Nota: in caso di inserimento, il nodo critico è unico Costo complessio: O( log n ) Algoritmi e Strutture Dati 22
Alberi AVL: Rimozione Si rimuoe il nodo come per gli ABR Si ricalcolano tutti i fattori di bilanciamento mutati Al più il ricalcolo riguarderà un cammino dal padre del nodo eliminato fino alla radice, quindi ha costo O(log n) Per ogni nodo con fattore di bilanciamento ±2, occorre ribilanciare l'albero mediante una delle rotazioni iste Nota: nel caso della rimozione, possono comparire più nodi con fattori di bilanciamento ±2 Costo complessio: O( log n ) Algoritmi e Strutture Dati 23
Esempio: cancellazione con rotazioni a cascata 8 3 2 5 13 11 16 1 4 6 9 12 14 19 7 10 15 17 20 18 Algoritmi e Strutture Dati 24
Applicare rotazione a sinistra su 3 8 3 2 5 13 11 16 4 6 9 12 14 19 7 10 15 17 20 18 Algoritmi e Strutture Dati 25
Applicare rotazione a sinistra su 8 8 5 13 3 6 11 16 2 4 7 9 12 14 19 10 15 17 20 18 Algoritmi e Strutture Dati 26
Albero ribilanciato 13 8 16 5 11 14 19 3 6 9 12 15 17 20 2 4 7 10 18 Algoritmi e Strutture Dati 27
Alberi AVL: Riassunto search( Key k ) O( log n ) nel caso peggiore insert( Key k, Item t ) O( log n ) nel caso peggiore delete( Key k ) O( log n ) nel caso peggiore Algoritmi e Strutture Dati 28