Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmi e Strutture Dati
Capitolo 6
Il problema del dizionario
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
ordinamento totale
 La complessità della procedura considerata è
T(n) = O(h), ove h è l’altezza del BST
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.
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Interrogazioni ausiliarie su un BST
• max(nodo u) – dato un nodo u di un BST, restituisce il nodo del
BST che discende da u avente chiave più grande
• min(nodo u) – dato un nodo u di un BST, restituisce il nodo del
BST che discende da u avente chiave più piccola
• successor(nodo u) – dato un nodo u di un BST, restituisce il
nodo del BST con chiave immediatamente più grande di quella
associata ad u (o NULL se u contiene l’elemento massimo del
BST).
• predecessor(nodo u) – dato un nodo u di un BST, restituisce
il nodo del BST con chiave immediatamente più piccola di quella
associata ad u (o NULL se u contiene l’elemento minimo del
BST).
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Ricerca del massimo/minimo
• La procedura min(nodo u) si definisce in maniera del
tutto analoga cambiando “destro” con “sinistro”
 La complessità della procedura considerata è T(n) = O(h),
ove h è l’altezza del BST
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
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Ricerca del predecessore
Complessità: O(h)
max del sottoalbero
sinistro
Antenato più
prossimo di u il cui
figlio destro è 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
Ricerca del successore
La ricerca del successore di un nodo è simmetrica: cambio
“sinistro” con “destro” e “max” con “min”
Complessità: O(h)
15
suc(u)
6
3
18
Cerco il min del
sottoalbero destro
8
17
20
suc(u)
2
4
7
13
9
Cerco l’antenato più
prossimo di u il cui
figlio sinistro è la
radice del
sottoalbero che
contiene u
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;
ci sono 3 possibilità:
1) u è una foglia: rimuovila
2) u ha un solo figlio:
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 indifferentemente, il successore), e rimuovi
fisicamente il predecessore (o il successore), che
per definizione ha al più un solo figlio
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
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Costo dell’operazione di cancellazione
• In tutt’e tre i casi, costa T(n)=O(h)
• Ricapitolando, le operazioni di ricerca,
inserimento e cancellazione hanno costo O(h)
dove h è l’altezza dell’albero
 Per alberi molto “sbilanciati”, h=(n)
 …ma per alberi molto “bilanciati”, h=O(log n)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…un albero binario di ricerca molto “sbilanciato”…
30
22
27
20
19
17
16
15
...
2
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…un albero binario di ricerca molto “bilanciato”…
15
6
3
2
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
Analisi critica dei BST
• Le operazioni di inserimento e cancellazione descritte possono
“linearizzare” un BST.
• Es. - Supponiamo di introdurre un elemento con chiave minore della
chiave minima dell’ABR, poi un altro elemento con chiave ancora
minore, e cosi via …
• Dobbiamo definire un modo per mantenere l’albero “bilanciato”
(vogliamo cioè che per ogni nodo interno, le “dimensioni” dei
sottoalberi sinistro e destro associati rimangano approssimativamente
uguali)
 Innanzitutto dobbiamo formalizzare il concetto di bilanciamento
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, 1962)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Formalizzazione del bilanciamento
Fattore di bilanciamento (v) 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
Generalmente (v) mantenuto come informazione
addizionale nel record relativo a v
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…qualche esempio…
è il seguente albero AVL?
15
6
3
2
20
8
4
7
17
13
16
27
19
22
30
Sì: tutti i nodi hanno fattore di bilanciamento = 0
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…qualche esempio…
è il seguente albero AVL?
5
4
3
2
1
0
19
20
22
27
30
Convenzione:
altezza di un
albero vuoto= -1
17
NO! Non vale la proprietà sui fattori di bilanciamento!
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…qualche esempio…
è il seguente albero AVL?
+1
15
-1
-1
6
0
2
18
0
-1
3
8
0
4
0
7
-1
0
17
20
0
0
10
0
9
25
0
13
Sì: proprietà sui fattori di bilanciamento rispettata
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 per gli alberi di Fibonacci di
altezza h vale h=O(log nh), allora per tutti gli
alberi AVL di altezza h con n≥nh nodi varrà
h=O(log n)
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…
Th (albero di Fibonacci di altezza h): albero AVL di altezza h con il
minimo numero di nodi  devo massimizzare ad 1 il fattore di
bilanciamento di ogni nodo interno
T0
T1
T2
T3
T4
Nota: se a Th tolgo una qualsiasi foglia (esclusa quella che ne
caratterizza l’altezza), diventa sbilanciato!
intravedete uno schema per generare l’i-esimo
albero di Fibonacci a partire dai precedenti?
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
T0
T1
Lo schema
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
T2
T3
T4
Lemma Sia nh il numero di nodi di
Th. Risulta nh=Fh+3-1.
Dim.: Per induzione su h:
• h=0: n0=1 Fh+3-1=F3-1=2-1=1
• h generico:
nh=1+nh-1+nh-2=1+(Fh+2-1)+(Fh+11)=Fh+3-1.
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Teorema:
Un albero AVL con n nodi ha altezza O(log n).
Dim.: Sia h l’altezza dell’AVL, e si consideri Th:
n ≥ nh =Fh+3 -1 = ( h)
Ricorda che vale:
Fk = ( k)
 =1.618… sezione aurea
h=(log nh) = (log nh) = O(log n).
Copyright © 2004 - The McGraw - Hill Companies, srl