Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni AVL Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Riepilogo: alberi AVL Un albero AVL è un BST in cui ad ogni nodo la differenza tra laltezza del sottoalbero sinistro e laltezza del sottoalbero destro (detta fattore di bilanciamento) è al più pari ad 1 in valore assoluto (si osservi che la definizione non specifica come tale proprietà debba essere garantita e mantenuta nel caso in cui che il BST sia soggetto ad inserimenti e cancellazioni) Abbiamo dimostrato che, grazie a tale proprietà, un AVL con n nodi ha altezza h=Θ(log n) Dobbiamo far vedere come mantenere invariante la proprietà sui fattori di bilanciamento!
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Posso usare un albero AVL per implementare un dizionario? come implemento Insert(14)? -2 ! !
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Posso usare un albero AVL per implementare un dizionario? …e delete(25)? +2 ! 0 0
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 verso destra/sinistra sul nodo v/u Mantiene la proprietà di ordinamento totale Richiede tempo O(1) (vanno aggiornati i puntatori dei nodi coinvolti e i fattori di bilanciamento di u e v, e questo può essere fatto in tempo costante poiché manteniamo in ogni nodo le altezze dei sottoalberi radicati)
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 (v) = ± 2 (si noti che questo è il massimo sbilanciamento possibile a valle di un inserimento o di una cancellazione); allora, esiste un sottoalbero T di v nellAVL che lo sbilancia, e a seconda della posizione di T si hanno 4 casi: I quattro casi sono simmetrici a coppie (SS/DD e SD/DS) (v)=+2 (v)=-2
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Caso SS Laltezza di T(v) è h+3, laltezza di T(u) è h+2, laltezza di T 3 è h, e laltezza di T 1 è h+1 (v)=+2 e lo sbilanciamento è provocato da T 1 Si applica una rotazione semplice verso destra su v; 2 sottocasi possibili: (i) laltezza di T 2 è h laltezza dellalbero coinvolto nella rotazione passa da h+3 a h+2, e il fattore di bilanciamento di u e v diventa pari a 0 (ii) laltezza di T 2 è h+1 laltezza dellalbero coinvolto nella rotazione rimane pari a h+3, e il fattore di bilanciamento di u diventa pari a -1, mentre quello di v diventa pari a 1
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl …i due sottocasi del caso SS…
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Osservazioni sul caso SS Linserimento di un elemento nellAVL (ovvero, laggiunta di una foglia a un albero bilanciato) può provocare solo il caso (i) (perché altrimenti lAVL era già sbilanciato!) Invece, la cancellazione di un elemento dallAVL (che necessariamente fa diminuire laltezza di qualche sottoalbero) può provocare entrambi i casi (ad esempio, se cancellando un elemento ho abbassato laltezza di T 3 )
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Caso SD Laltezza di T(v) è h+3, laltezza di T(z) è h+2, laltezza di T 1 è h, laltezza di T 4 è h, e laltezza di T(w) è h+1 (v)=+2, e (z)=-1 cioè lo sbilanciamento è provocato dal sottoalbero destro di z Applicare due rotazioni semplici: una verso sinistra sul figlio sinistro del nodo critico (nodo z), laltra verso destra sul nodo critico (nodo v)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Caso SD Laltezza dellalbero dopo la rotazione passa da h+3 a h+2, poiché T 2 e T 3 sono alti al più h, e il fattore di bilanciamento di w diventa 0, mentre i fattori di bilanciamento di z e v sono 0 oppure ±1. Il caso SD può essere provocato sia da inserimenti (in T 2 o T 3 ), sia da cancellazioni che abbassano di 1 laltezza di T 4.