Sei sulla pagina 1di 13

Algoritmi e Strutture Dati

Alberi di ricerca

Luigi Laura

Algoritmi e strutture dati Luigi Laura

Dizionari
Gli alberi di ricerca sono usati per realizzare in
modo efficiente il tipo di dato dizionario

2 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Alberi binari di ricerca


(BST = binary search tree)

3 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

Definizione

Albero binario che soddisfa le seguenti propriet


ogni nodo v contiene un elemento elem(v) cui
associata una chiave chiave(v) presa da un dominio
totalmente ordinato
le chiavi nel sottoalbero sinistro di v sono tutte
chiave(v)
le chiavi nel sottoalbero destro di v sono tutte
chiave(v)

4 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Esempi

Albero binario di Albero binario


ricerca NON di ricerca

5 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

search(chiave k) -> elem


Traccia cammino nellalbero partendo da radice:
su ogni nodo, usa propriet di ricerca per decidere
se proseguire nel sottoalbero sinistro o destro

6 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

insert(elem e, chiave k)

1. Crea un nuovo nodo u con


elem = e e chiave = k
1. Cerca la chiave k nellalbero, identificando
cos il nodo v che diventer padre di u
2. Appendi u come figlio sinistro/destro di v in
modo che sia mantenuta la propriet di ricerca

7 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

Ricerca del massimo

8 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Ricerca del predecessore

9 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

delete(elem e)
Sia u il nodo contenente lelemento e da cancellare:

1) u una foglia: rimuovila

2) u ha un solo figlio:

10 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

delete(elem e)
3) u ha due figli: sostituiscilo con il predecessore
(v) e rimuovi fisicamente il predecessore (che
ha un solo figlio)

11 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

Costo delle operazioni

Tutte le operazioni hanno costo O(h)


dove h laltezza dellalbero
O(n) nel caso peggiore (alberi molto
sbilanciati e profondi)

12 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Alberi AVL
(Adelson-Velskii e Landis)

13 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

Definizioni

Fattore di bilanciamento di un nodo v


= | altezza sottoalbero sinistro di v -
altezza sottoalbero destro di v |
Un albero si dice bilanciato in altezza se ogni
nodo v ha fattore di bilanciamento 1

Alberi AVL =
alberi binari di ricerca bilanciati in altezza

14 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Altezza di alberi AVL


Si pu dimostrare che un albero AVL con n nodi
ha altezza O(log n)
Idea della dimostrazione: tra
tutti gli AVL di altezza h,
consideriamo quelli con
minimo numero di nodi nh
(alberi di Fibonacci)

Si ha: nh= 1 + nh-1 + nh-2 = Fh+3-1


15 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

Implementazione delle operazioni

Loperazione search procede come in un BST

Ma inserimenti e cancellazioni potrebbero


sbilanciare lalbero

Manteniamo il bilanciamento tramite


opportune rotazioni

16 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Rotazione di base

Mantiene la propriet di ricerca


Richiede tempo O(1)

17 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

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)

18 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Rotazione SS
Applicare una rotazione semplice verso destra
su v
Laltezza dellalbero coinvolto nella rotazione
passa da h+3 a h+2

19 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

Rotazione SD
Applicare due rotazioni semplici: una sul
figlio del nodo critico, laltra sul nodo critico
Laltezza dellalbero coinvolto nella rotazione
passa da h+3 a h+2

20 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

insert(elem e, chiave k)
1. Crea un nuovo nodo u con elem=e e chiave=k
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
N.B.: una sola rotazione sempre sufficiente, poich
laltezza dellalbero coinvolto diminuisce di 1
21 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

delete(elem e)
1. Cancella il nodo 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
predecessore del nodo contenente e)
3. Ripercorrendo il cammino dal basso verso
lalto, esegui lopportuna rotazione semplice o
doppia sui nodi sbilanciati
N.B.: potrebbero essere necessarie O(log n) rotazioni

22 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Cancellazione con rotazioni a cascata

23 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

Classe AlberoAVL

24 da Demetrescu et al. McGraw Hill 2004


Algoritmi e strutture dati Luigi Laura

Costo delle operazioni

Tutte le operazioni hanno costo O(log n)


poch laltezza dellalbero O(log n) e
ciascuna rotazione richiede solo tempo
costante

25 da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Luigi Laura

Riepilogo
Mantenere bilanciamento sembra cruciale per ottenere
buone prestazioni
Esistono vari approcci per mantenere bilanciamento:
Tramite rotazioni (alberi AVL )
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)

26 da Demetrescu et al. McGraw Hill 2004