Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii e Landis)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Riepilogo ABR Le operazioni di inserimento e cancellazione descritte precedentemente possono linearizzare un ABR. Es. - Supponiamo di introdurre un elemento con chiave minore della chiave minima dellABR, poi un altro elemento con chiave ancora minore, e cosi via … Siamo interessati a mantenere lalbero bilanciato (vogliamo cioè che per ogni nodo interno, le altezze dei sottoalberi sinistro e destro associati siano approssimativamente uguali) Le varie operazioni hanno infatti un tempo di esecuzione T(n) = O(h) h = altezza dellalbero e intuitivamente un albero bilanciato, a parità di altezza, contiene un maggior numero di nodi (ovvero, a parità di nodi, ha una minore altezza!)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Definizioni Alberi AVL: alberi binari di ricerca bilanciati in altezza Un albero si dice bilanciato in altezza se ogni nodo v ha |fattore di bilanciamento| 1 Fattore di bilanciamento di un nodo v = altezza del sottoalbero sinistro di v – altezza del sottoalbero destro di v
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Altezza di alberi AVL Idea della dimostrazione: considerare, tra tutti gli AVL di altezza h, quelli con il minimo numero di nodi n h (detti alberi di Fibonacci) Si può dimostrare che un albero AVL con n nodi ha altezza O(log n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Gli alberi di Fibonacci Si ha quindi: n h =1+n h-1 +n h-2 =F h+3 -1, ovvero n h = O(F h )=O( h ), cioè h=O(log n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Implementazione delle operazioni Loperazione search procede come in un BST Ma inserimenti e cancellazioni potrebbero sbilanciare lalbero Manteniamo il bilanciamento tramite opportune rotazioni
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Rotazione di base Mantiene la proprietà di ricerca Richiede tempo O(1)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Ribilanciamento tramite rotazioni Le rotazioni sono effettuate su nodi sbilanciati Sia v un nodo con fattore di bilanciamento 2 Esiste un sottoalbero T di v che lo sbilancia A seconda della posizione di T si hanno 4 casi: I quattro casi sono simmetrici a coppie
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Caso SS Applicare una rotazione semplice verso destra su v Laltezza dellalbero coinvolto nella rotazione passa da h+3 a h+2
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Caso SD Applicare due rotazioni semplici: una rotazione sinistra sul figlio del nodo critico, e poi una rotazione destra sul nodo critico Laltezza dellalbero coinvolto nella rotazione passa da h+3 a h+2
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl insert(S, z) 1.Crea un nuovo nodo u con chiave key[z] 2.Inserisci u come in un BST 3.Ricalcola i fattori di bilanciamento dei nodi nel cammino dalla radice a u: sia v il più profondo nodo con fattore di bilanciamento pari a ±2 (nodo critico) 4.Esegui una rotazione opportuna su v Oss.: un solo ribilanciamento è sufficiente, poiché laltezza del sottoalbero coinvolto diminuisce di 1 e quindi i nodi più in alto tornano al vecchio fattore di bilanciamento
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl delete(S,k) 1.Cancella il nodo associato a k come in un BST 2.Ricalcola i fattori di bilanciamento dei nodi nel cammino dalla radice al padre del nodo eliminato fisicamente (che potrebbe essere il successore del nodo associato a k) 3.Ripercorrendo il cammino dal basso verso lalto, esegui lopportuna rotazione semplice o doppia sui nodi sbilanciati Oss.: potrebbero essere necessarie O(log n) rotazioni
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Cancellazione con rotazioni a cascata
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Classe AlberoAVL
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Tutte le operazioni hanno costo O(log n) poiché laltezza dellalbero è O(log n) e ciascuna rotazione richiede solo tempo costante Costo delle operazioni
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Mantenere il bilanciamento sembra cruciale per ottenere buone prestazioni Esistono vari approcci per mantenere il bilanciamento: –Tramite rotazioni –Tramite fusioni o separazioni di nodi (alberi 2-3, B-alberi ) In tutti questi casi si ottengono tempi di esecuzione logaritmici nel caso peggiore E anche possibile non mantenere in modo esplicito alcuna condizione di bilanciamento, ed ottenere tempi logaritmici ammortizzati su una intera sequenza di operazioni (alberi auto-aggiustanti) Riepilogo