Algoritmi e Strutture Dati
Capitolo 6
Alberi di ricerca
Camil Demetrescu, Irene Finocchi,
Giuseppe F. Italiano
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Dizionari
• Gli alberi di ricerca sono usati per realizzare in
modo efficiente il tipo di dato dizionario
2
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Alberi binari di ricerca
(BST = binary search tree)
3
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
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 ≤
chiave(v)
– le chiavi nel sottoalbero destro di v sono ≥
chiave(v)
4
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi
Albero binario
di ricerca
5
Albero binario
non di ricerca
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…ancora un esempio…
Ordinamento
decrescente
15
Ordinamento
crescente
6
3
18
7
17
20
massimo
2
13
4
minimo
9
6
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Visita simmetrica di un BST
• Che succede se eseguo una visita in ordine
simmetrico di un BST?
• Visita in ordine simmetrico – dato un nodo
x, elenco prima il sotto-albero sinistro di x,
poi il nodo x, poi il sotto-albero destro
• visito i nodi dell’ABR in ordine crescente
rispetto alla chiave!
7
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Verifica di correttezza – Supponiamo,per semplicità, che l’albero sia completo.
Indichiamo con h l’altezza dell’albero.
Vogliamo mostrare che la visita in ordine simmetrico restituisce la sequenza ordinata
Per induzione sull’altezza dell’ABR: h=1
r
u
NIL
v
NIL
NIL
NIL
chiave(u) ≤ chiave(r) ≤ chiave(v)
8
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Verifica correttezza (continua …)
h = generico (ipotizzo che la procedura sia corretta per h-1)
r
Albero di altezza h-1.
Tutti i suoi elementi sono
minori o uguali della
radice
9
Albero di altezza h-1.
Tutti i suoi elementi sono
maggiori o uguali della
radice
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
search(chiave k) -> elem
Traccia un cammino nell’albero partendo dalla
radice: su ogni nodo, usa la proprietà di ricerca
per decidere se proseguire nel sottoalbero
sinistro o destro
10
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
search(7)
15
6
3
2
11
20
8
4
7
17
13
16
27
19
22
30
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert(elem e, chiave k)
1. Crea un nuovo nodo u con elem=e e chiave=k
2. Cerca la chiave k nell’albero, identificando
così il nodo v che diventerà padre di u
3. Appendi u come figlio sinistro/destro di v in
modo che sia mantenuta la proprietà di ricerca
12
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert(e,8)
15
6
18
3
2
9
4
17
7
20
13
8
10
Se seguo questo schema l’elemento e viene posizionato nella
posizione giusta. Infatti, per costruzione, ogni antenato di e si ritrova e
nel giusto sottoalbero.
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Ricerca del massimo
Nota: è possibile definire una procedura min(nodo u) in
maniera del tutto analoga
14
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
15
6
3
2
18
max (u)
8
4
min (r)
17
7
20
13
9
15
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
predecessore e successore
• il predecessore di un nodo u in un BST è il
nodo v nell’albero avente massima chiave 
chiave(u)
• il successore di un nodo u in un BST è il
nodo v nell’albero avente minima chiave 
chiave(u)
• Come trovo il predecessore/successore di un
nodo in un BST?
16
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Ricerca del predecessore
17
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Nota: la ricerca del successore di un nodo è simmetrica
15
suc(u)
6
3
18
Cerco il min del
sottoalbero destro
8
17
20
suc(v)
2
4
7
13
9
18
Cerco l’antenato più
prossimo di v il cui
figlio sinistro è la
radice del
sottoalbero che
contiene v
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
delete(elem e)
Sia u il nodo contenente l’elemento e da cancellare:
1) u è una foglia: rimuovila
2) u ha un solo figlio:
19
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
delete(elem e)
3) u ha due figli: sostituiscilo con il predecessore
(o successore) (v) e rimuovi fisicamente il
predecessore (o successore) (che ha un solo
figlio)
20
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
delete (u)
15
6
u
4
3
9
v
2
18
4
17
7
20
13
10
successore di u
5
21
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Costo delle operazioni
• Tutte le operazioni hanno costo O(h)
dove h è l’altezza dell’albero
• O(n) nel caso peggiore (alberi molto
sbilanciati e profondi)
22
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…un albero binario di ricerca bilanciato…
h=O(log n)
15
6
3
2
23
20
8
4
7
17
13
16
27
19
22
30
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
30
Ma anche questo è un BST
22
27
20
19
17
16
15
...
2
24
Notare: Tsearch(n) = O(h) in entrambi i casi
Però:
BST completo  h = (log(n))
BST “linearizzato”  h = (n)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Alberi AVL
(Adel’son-Vel’skii e Landis)
25
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Definizioni
Fattore di bilanciamento di un nodo v = altezza
del sottoalbero sinistro di v - altezza del
sottoalbero destro di v
Un albero si dice bilanciato in altezza se ogni
nodo v ha fattore di bilanciamento in valore
assoluto ≤ 1
Alberi AVL = alberi binari di ricerca bilanciati in
altezza
26
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Altezza di alberi AVL
Si può dimostrare che un albero AVL con n nodi
ha altezza O(log n)
Idea della dimostrazione: considerare, tra tutti
gli AVL di altezza h, quelli con il minimo
numero di nodi nh (alberi di Fibonacci)
Intuizione: se gli alberi di Fibonacci hanno
altezza O(log n), allora gli alberi AVL hanno
altezza O(log n)
27
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…Alberi di Fibonacci per piccoli valori di altezza…
Ti: albero di Fibonacci di altezza i
(albero AVL di altezza i con il minimo numero di nodi)
T0
T1
T2
T3
T4
Nota che: se a Ti tolgo un nodo, o diventa sbilanciato, o cambia la sua altezza
Inoltre: ogni nodo ha fattore di bilanciamento pari a 1
intravedete uno schema per generare l’i-esimo
albero di Fibonacci a partire dai precedenti?
28
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
T0
T1
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
T2
T3
T4
Lo schema
Lemma
Sia nh il numero di nodi di Th.
Risulta nh=1+nh-1+nh-2=Fh+3-1
dim
per induzione su h
29
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Corollario
Un albero AVL con n nodi ha altezza h=O(log n)
dim
nh =Fh+3 -1 = ( h)
Ricorda che vale:
Fk = ( k)
 =1.618… sezione aurea
h=(log nh)
corollario segue da n  nh
30
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Implementazione delle operazioni
• L’operazione search procede come in un BST
• Ma inserimenti e cancellazioni potrebbero
sbilanciare l’albero
• Manteniamo il bilanciamento tramite
opportune rotazioni
31
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Rotazione di base
• Mantiene la proprietà di ricerca
• Richiede tempo O(1)
32
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
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
33
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Rotazione SS
• Applicare una rotazione semplice verso destra
su v
• L’altezza dell’albero coinvolto nella rotazione
passa da h+3 a h+2
+1
34
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Rotazione SD
• Applicare due rotazioni semplici: una verso sinistra
sul figlio del nodo critico (nodo z), l’altra verso
destra sul nodo critico (nodo v)
• L’altezza dell’albero coinvolto nella rotazione passa
da h+3 a h+2
35
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…stesso caso, ma con fattore di bilanciamento di w diverso…
+1
36
0
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
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
•
37
Oss.: una sola rotazione è sufficiente, poiché l’altezza
dell’albero coinvolto diminuisce di 1
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert (10,e)
+2 +1
15
-2
-1
6
0
2
18
-2
3
0
-1
0
4
-1
8
+1
+2
13
0
7
-1 0
-1
0
17
20
0
caso SD
25
9
0
10
38
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert (10,e)
+2 +1
15
-2
-1
6
0
2
18
-2
3
0
-1
0
4
-1
0
17
8
+1
+2
13
0
7
-1 0
-1
20
0
25
10
0
9
39
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert (10,e)
+2 +1
15
-2
-1
6
0
2
18
-2
3
0
-1
0
4
-1
8
0
7
-1
0
9
40
-1
0
17
20
0
0
10
25
+1
0 +2
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
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
l’alto, esegui l’opportuna rotazione semplice o
doppia sui nodi sbilanciati
•
41
Oss.: potrebbero essere necessarie O(log n) rotazioni
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
delete (18)
+1 +2
15
caso SD
-1 0
-1
6
0
2
18
20
0
-1
3
8
0
4
-1
0
17
+1
13
0
7
20
0
successore di 18
25
0
9
42
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
delete (18)
+1 +2
15
+1
-1 0
8
20
+1
+1
13
6
0
7
0
3
0
2
43
0
17
0
0
9
25
0
4
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
delete (18)
0
8
+1
0
6
15
0
7
0
3
0
2
44
0
4
+1
13
0
9
0
20
0
17
0
25
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Cancellazione con rotazioni a cascata
45
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Classe AlberoAVL
46
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Costo delle operazioni
• Tutte le operazioni hanno costo O(log n)
poché l’altezza dell’albero è O(log n) e
ciascuna rotazione richiede solo tempo
costante
47
Copyright © 2004 - The McGraw - Hill Companies, srl