Title: Alberi Rosso-Neri
1Alberi Rosso-Neri
- Algoritmi e Strutture Dati
- 20 aprile 2001
2Alberi Binari di Ricerca
Gli alberi di ricerca binari consentonolindividu
azione di un elemento al propriointerno in un
tempo mediamente proporzionaleallaltezza
dellalbero considerato
Costruiamo un albero a partire dalla sequenza4,
2, 6, 1, 3, 5, 7
3Alberi Binari di Ricerca
Inseriamo gli stessi elementi con un diverso
ordine
1, 2, 3, 4, 5, 6, 7
4Alberi Rosso-Neri
- Gli alberi Rosso-Neri sono alberi binari di
ricerca estesi - Ciascun nodo di tali alberi contiene uncampo
addizionale che riporta il suo colore - Le operazioni di inserimento e cancellazionevengo
no opportunamente integrate in modotale da
rendere lalbero binario bilanciato
5Un esempio di albero Rosso-Nero
6Caratterizzazione
La caratterizzazione degli alberi
Rosso-Neriavviene attraverso la formulazione
diquattro proprietà vincolanti
7Proprietà n. 1
Ogni nodo dellalbero è rosso o nero
8Proprietà n. 2
Ogni foglia dellalbero (NIL) è nera
NIL
NIL
9Proprietà n.3
Se un nodo è rosso entrambi i suoi figli sono neri
10Proprietà n.4
Dato un nodo, tutti i percorsi discendenti
che raggiungono una foglia contengono lo
stesso numero di nodi neri
11Proprietà
- Ogni nodo è rosso o nero
- Ogni foglia (NIL) è nera
- Se un nodo è rosso entrambi i suoi figli sono
neri - Dato un nodo, tutti i percorsi discendenti che
raggiungono una foglia contengono lo stesso
numero di nodi neri
12Osservazione
Proviamo a costruire un albero Rosso-Nero sbilanci
ato
13Osservazione
1
2
3
4
5
6
NIL
14Altezza-nero
- Definiamo altezza-nero di un nodo
x(black-height(x)) il numero di nodi neriche si
incontrano in un qualsiasi camminodiscendente da
x verso una foglia - Definiamo laltezza-nero di un alberoRosso-Nero
come laltezza-nero della suaradice
15Altezza-nero
black-height(32) 2
black-height(42) 2
black-height(T) black-height(65) 3
16Lemma 1
Un albero Rosso-Nero con n nodi interni
ha altezza al più 2lg(n1)
17Lemma 2
Dato un nodo x appartenente ad un
alberoRosso-Nero, il sottoalbero ivi radicato
contiene almeno 2bh(x)-1 nodi interni
18Dimostrazione Lemma 2
Dimostriamo il Lemma 2 per induzione sullaltezza
del nodo x. Se laltezza di x è 0, x è una
foglia questo implica che Il sottoalbero
radicato in x ha 0 20-1 nodi interni
19Dimostrazione Lemma 2
Consideriamo un nodo x che ha altezza gt 0, esso
avrà quindi due figli
Ciascuno dei due figli di x avrà altezza bh(x)
oppure bh(x)-1.
6
8
2
20Dimostrazione Lemma 2
Per lipotesi induttiva, poiché laltezza dei
figli di x è inferiore allaltezza di x possiamo
affermare che ciascun figlio ha almeno 2bh(x)-1-1
nodi interni Quindi, il sottoalbero radicato in
x ha almeno (2bh(x)-1-1) (2bh(x)-1-1) 1 nodi
interni (2bh(x)-1-1) (2bh(x)-1-1) 1
2bh(x)-1 2bh(x)-1 1
22bh(x)-1 1 2bh(x)
1
21Dimostrazione Lemma 1
Un albero Rosso-Nero con n nodi interni
ha altezza al più 2lg(n1)
Dim. Sia h laltezza dellalbero considerato. La
proprietà 3 degli alberi Rosso-Neri impone che
almeno la metà dei nodi che separano la radice
dalle foglie siano neri. Questo implica che
laltezza-nero dellalbero è perlomeno h/2.
22Dimostrazione Lemma 1
Dallapplicazione del Lemma 2 possiamo affermare
che il numero di nodi interni n è maggiore o
uguale di 2h/2 1
n 2h/2 1 n 1 2h/2 log(n1) h/2 h
2lg(n1)
23Alberi Rosso-Neri
Il mantenimento delle proprietà
caratterizzanti gli alberi Rosso-Neri deve essere
garantito in corrispondenza delle comuni
operazioni chevanno a modificare la struttura
dellalbero stesso Le operazioni di inserimento
e cancellazionegià viste per gli alberi binari
di ricerca vengonomantenute ed integrate con una
successiva operazione di ribilanciamento
24Rotazioni
Ai fini dellimplementazione delle proceduredi
ribilanciamento si rivela utile
lintroduzione delle operazioni di left-rotation
(rotazione sinistra) e right-rotation (rotazione
destra)
25Rotazione sinistra
26Left-Rotate
Left-Rotate(T,x) Y?rightx rightx? lefty If
lefty ? NIL then plefty ? x py?px If
px NIL then rootT ? y else if x
leftpx then leftpx ? y else rightpx
? y lefty ? x px ? y
27Inserimento
- Lalgoritmo di inserimento di un nodo x in
unalbero Rosso-Nero - Inserisce il nuovo nodo nellalbero secondoil
tradizionale algoritmo di inserimento per
alberibinari di ricerca - Verifica se lalbero risultante viola le
proprietàdegli alberi Rosso-Neri - In caso di violazione, si risale lalbero sino
allaradice operando opportunamente rotazioni
ecambiamenti di colore
28Inserimento
Lalgoritmo di inserimento che presenteremodistin
gue tre possibili casi di intervento
perripristinare le proprietà degli alberi
Rosso-Neripiù altri tre simmetrici
29RB-Insert(T,x)
RB-Insert(T,x) Tree-Insert(T,x) colorx?
RED While x ? rootT and colorpx RED do
if px leftppx then y ?
rightppx if colory RED then
colorpx BLACK colory
BLACK colorppx RED x ?ppx
30RB-Insert(T,x)
. else if x rightpx then x ?
px Left-Rotate(T,x) colorpx
BLACK colorppx RED
Right-Rotate(T,ppx) else . ColorrootT
? BLACK
31Un esempio 1/3
Inseriamo nellalbero corrente lelemento x 24
26
NIL
NIL
NIL
NIL
NIL
32Un esempio 2/3
Ci troviamo nel terzo caso della proceduradi
ribilanciamento
ppx
px
26
NIL
NIL
NIL
x
NIL
24
NIL
NIL
33Un esempio 3/3
34Cancellazione
- Lalgoritmo di cancellazione di un nodo x da
unalbero Rosso-Nero opera secondo la
stessafilosofia dellalgoritmo di inserimento - Cancella il nodo dallalbero secondo
iltradizionale algoritmo di cancellazione
peralberi binari di ricerca - Verifica se lalbero risultante viola le
proprietàdegli alberi Rosso-Neri - In caso di violazione, si risale lalbero sino
allaradice operando opportunamente rotazioni
ecambiamenti di colore
35Cancellazione
- Lalgoritmo di cancellazione prevede
quattropossibili casi di intervento più altri
quattrosimmetrici - La complessità di tale algoritmo è di ordineO(h)
36Un esempio
65
26
73
42
NIL
NIL
24
x
32
51
NIL
NIL
NIL
NIL
NIL
NIL