Algoritmi e Strutture Dati
Alberi binari di ricerca
Alberto Montresor
Università di Trento
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a
copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative
Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
© Alberto Montresor
1
Dizionari
Dizionario
✦
Insieme dinamico che implementa le seguenti funzionalità
✦
Item lookup(Item k)
insert(Item k, Item v)
remove(Item k)
Esempi di implementazione
✦
Array ordinato
✦
✦
Ricerca O(log n), inserimento/cancellazione O(n)
Lista non ordinata
✦
✦
© Alberto Montresor
Ricerca/cancellazione O(n), inserimento O(1)
2
Alberi binari di ricerca (ABR)
Idea “ispiratrice”
✦
Portare l'idea di ricerca binaria in un albero
✦
Definizione
✦
Ogni nodo u contiene una chiave u.key associata ad un valore u.value
✦
Le chiavi appartengono ad un insieme totalmente ordinato
✦
10
Proprietà
✦
1. Le chiavi dei nodi del sottoalbero sinistro di u
sono minori di u.key
2. Le chiavi dei nodi del sottoalbero destro di u
sono maggiori di u.key
© Alberto Montresor
15
6
4
8
12
18
3
Alberi binari di ricerca (ABR)
Proprietà di ricerca
✦
Le proprietà 1. e 2. permettono di realizzare un algoritmo di ricerca dicotomica
✦
Domanda – Proprietà di ordine
✦
Come devo visitare l'albero per ottenere la lista ordinata dei valori?
✦
Dettagli implementativi
✦
Ogni nodo deve mantenere
✦Figlio sinistro, destro
✦
Padre
✦
Chiave
Padre
Key, Value
✦
Valore
✦
© Alberto Montresor
Figlio
sinistro
Figlio
destro
4
Alberi binari di ricerca: Specifica
Operazioni ammesse su ABR
✦
Tree key()
Tree value()
Tree left()
Tree right()
Tree parent()
Tree lookup(Item k)
Tree insert(Item k, Item d)
Tree delete()
© Alberto Montresor
5
Ricerca: esempio
Ricerca del valore 4
4 < 6
4 sta nel sottoalbero
sinistro di 6
T
6
2
1
8
4
3
© Alberto Montresor
6
Ricerca: esempio
Ricerca del valore 4
4 > 2
4 sta nel sottoalbero
destro di 2
T
6
2
1
8
4
3
© Alberto Montresor
7
Ricerca: esempio
Ricerca del valore 4
4 = 4
trovato!
T
6
2
1
8
4
3
© Alberto Montresor
8
Ricerca: Implementazione
Ricorsiva
Iterativa
© Alberto Montresor
9
Ricerca del minimo e del massimo: Esempi
Sottoalbero con
radice 2:
Sottoalbero con
radice 8:
T
- minimo 1
- massimo 4
- massimo 15
6
2
8
44
1
3
© Alberto Montresor
- minimo 8
12
9
15
10
Ricerca del minimo e del massimo: Pseudo-codice
© Alberto Montresor
11
Ricerca del successore/predecessore
Definizione
✦
T
Il successore di un nodo u è il
più piccolo nodo maggiore di u
✦
6
u
Due casi
✦
2
u ha un figlio destro
✦
8
Il successore u' è il minimo
del sottoalbero destro di u
✦
Esempio:
successore di 2 è 3
1
12
4
✦
3
9
15
u'
© Alberto Montresor
12
Ricerca del successore/predecessore
Definizione
✦
Il successore di un nodo u è il
più piccolo nodo maggiore di u
T
u'
6
✦
Due casi
✦
2
u non ha un figlio destro
✦
Il successore è il primo avo
u' tale per cui u sta nel
sottoalbero sinistro di u'
8
✦
Esempio:
successore di 4 è 6
1
12
3
✦
4
9
15
u
© Alberto Montresor
13
Ricerca del successore: Pseudo-codice (iterativo)
© Alberto Montresor
14
Ricerca: costo computazionale
In generale
✦
Le operazioni di ricerca sono
confinate ai nodi posizionati
lungo un singolo percorso
(path) dalla radice ad una foglia
✦
h = altezza dell’albero
Tempo di ricerca: O(h)
✦
Domanda
✦
Qual è il caso pessimo?
✦
Domanda
✦
Qual è il caso ottimo?
✦
© Alberto Montresor
15
Inserimento
5 < 6
Inserimento valore 5
5 > 2
T
5 > 4
6
2
44
1
3
© Alberto Montresor
8
12
5
9
15
16
Inserimento: pseudo-codice (iterativo)
© Alberto Montresor
17
Inserimento: pseudo-codice (iterativo)
© Alberto Montresor
18
Cancellazione
Caso 1: Il nodo u da eliminare non ha figli
T
✦
Semplicemente si elimina
✦
6
Esempio:
✦
Eliminazione nodo 5
2
✦
8
44
1
3
12
5
9
15
u
© Alberto Montresor
19
Cancellazione
Caso 2: Il nodo u da eliminare ha un unico figlio f
T
✦
Si elimina u
✦
6
Si attacca f all'ex-padre p di u
in sostituzione di u (short-cut)
✦
2
p
8
Esempio:
✦
Cancellazione di 4
✦
1
4
3
© Alberto Montresor
f
12
u
9
15
20
Cancellazione
Caso 3: Il nodo u da eliminare ha due figli
T
✦
Si individua il successore s del nodo u
Il successore non ha figlio sinistro
✦
7
Si “stacca” il successore
✦
23
Si attacca l'eventuale
figlio destro di s al
padre di s (short-cut)
✦
Si copia s su u
✦
u
8
5
1
12
Si rimuove il nodo s
✦
s
6
3
9
15
4
© Alberto Montresor
21
Cancellazione: Pseudo-codice
© Alberto Montresor
22
Cancellazione – Dimostrazione di correttezza
Caso 1 - nessun figlio
✦
Eliminare foglie non cambia la proprietà di ordine dei nodi rimanenti
✦
Caso 2 - solo un figlio (destro o sinistro)
✦
Se u è il figlio destro (sinistro) di p,
tutti i i valori nel sottoalbero di f sono maggiori (minori) di p
✦
Quindi f può essere attaccato come figlio destro (sinistro) di p al posto di u
✦
Caso 3 - due figli
✦
Il successore s
✦
è sicuramente maggiore di tutti i nodi del sottoalbero sinistro di u
✦
è sicuramente minore di tutti i nodi del sottoalbero destro di u
✦
Quindi può essere sostituito a u
✦
© Alberto Montresor
23
Modifica: costo computazionale
In generale
✦
Le operazioni di modifica sono
confinate ai nodi posizionati
lungo un singolo percorso
(path) dalla radice ad una foglia
✦
h = altezza dell’albero
Tempo di ricerca: O(h)
✦
© Alberto Montresor
24
Complessità media
Qual è l'altezza media di un albero di ricerca?
✦
Caso generale (inserimenti + cancellazione)
✦
Difficile da trattare
✦
Caso “semplice”: inserimenti in ordine casuale
✦
E' possibile dimostrare che l'altezza media è O(log n)
✦
Fattore di bilanciamento
✦
Il fattore di bilanciamento β(v) di un nodo v è la massima differenza di altezza fra i
sottoalberi di v
✦
Esempio: albero perfetto:
✦
β(v)=0 per ogni nodo v
✦
In generale:
✦
Sono necessarie tecniche per mantenere bilanciato l'albero
✦
© Alberto Montresor
25
Algoritmi di bilanciamento
Alberi AVL (Adel'son-Vel'skii e Landis, 1962)
✦
β(v) ≤ 1 per ogni nodo v
✦
Bilanciamento ottenuto tramite rotazioni
✦
B-Alberi (Bayer, McCreight, 1972)
✦
β(v) = 0 per ogni nodo v
✦
Specializzati per strutture in memoria secondaria
✦
Alberi 2-3 (Hopcroft, 1983)
✦
β(v) = 0 per ogni nodo v
✦
Bilanciamento ottenuto tramite merge/split, grado variabile
✦
B-alberi binari (Andersson, 1993)
✦
Alberi Red-Black (Bayer, 1972)
✦
© Alberto Montresor
26
Esempio di rotazione
v
u
u
v
T3
T1
T2
T3
T2
T1
© Alberto Montresor
27
Alberi Rosso-Nero (Red-Black Treee, RB-Tree)
Un albero Red-Black è un albero binario di ricerca in cui:
✦
Ogni nodo è colorato di rosso o di nero
✦
Le chiavi vengono mantenute solo nei nodi interni dell’albero
✦
Le foglie sono costituite da nodi nil
✦
Un albero Red-Black deve soddisfare i seguenti vincoli:
✦
1. La radice è nera
2. Tutte le foglie sono nere
3. Entrambi i figli di un nodo rosso sono neri
4. Tutti i cammini semplici da ogni nodo u ad una delle foglie contenute nel
sottoalbero radicato in u hanno lo stesso numero di nodi neri
© Alberto Montresor
28
Alberi Red-Black
Ogni nodo mantiene
✦
parent
puntatore al padre
left, right
puntatori ai figli sinistro/destro
✦
✦
color
✦
key, data
✦
colore
chiave e dati
Nodo Nil
✦
nodo sentinella il cui scopo è evitare di trattare diversamente
i puntatori ai nodi dai puntatori nil
✦
al posto di un puntatore nil, si usa un puntatore ad un nodo Nil
✦
ne esiste solo uno, per risparmiare memoria
✦
nodo con figli Nil → foglia nell'ABR corrispondente
✦
© Alberto Montresor
29
Alberi Red-Black
Definizione:
✦
Il numero di nodi neri lungo ogni percorso da un nodo v (escluso) ad ogni foglia
(inclusa) del suo sottoalbero è detto altezza nera di v, indicato b(v)
✦
Ben definito perché tutti i percorsi hanno lo stesso numero di nodi neri (regola 4)
✦
Definizione:
✦
L’altezza nera di un albero Red-Black è pari all’altezza nera della sua radice
✦
© Alberto Montresor
30
Alberi Red-Black: esempio I
3. Entrambi i figli di un nodo rosso sono neri.
Ma un nodo nero può avere figli neri!
30
15
70
Nil
5
Nil
60
20
10
Nil
Nil
Nil
40
Nil
© Alberto Montresor
50
Nil
85
80
65
55
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
31
Alberi Red-Black: esempio I
4. Ogni percorso da un nodo interno ad un nodo Nil ha lo stesso numero di nodi neri.
Altezza nera di questo albero: 3
30
15
70
Nil
5
Nil
60
20
10
Nil
Nil
Nil
40
Nil
© Alberto Montresor
50
Nil
85
80
65
55
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
32
Alberi Red-Black: più colorazioni sono possibili
Albero Red-Black con 3 nodi neri lungo ogni percorso dalla
radice ai nodi Nil
30
15
70
Nil
5
Nil
60
20
10
Nil
Nil
Nil
40
Nil
© Alberto Montresor
50
Nil
85
80
65
55
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
33
Alberi Red-Black: più colorazioni sono possibili
Albero Red-Black con 3 nodi neri lungo ogni percorso dalla
radice ai nodi Nil
30
15
70
Nil
5
Nil
60
20
10
Nil
Nil
Nil
40
Nil
© Alberto Montresor
50
Nil
85
80
65
55
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
34
Alberi Red-Black: colorazione diversa, altezza nera diversa
Albero RB con 3 nodi neri
lungo ogni percorso dalla radice ai nodi Nil
30
15
70
Nil
60
20
10
Nil
Nil
Nil
50
Nil
© Alberto Montresor
85
80
65
Nil
Nil
Nil
Nil
90
Nil Nil Nil
35
Alberi Red-Black: colorazione diversa, altezza nera diversa
Stesso albero con 2 nodi neri
lungo ogni percorso dalla radice ai nodi Nil
30
15
70
Nil
60
20
10
Nil
Nil
Nil
50
Nil
© Alberto Montresor
85
80
65
Nil
Nil
Nil
Nil
90
Nil Nil Nil
36
Alberi Red-Black: questo albero può essere un albero RB?
30
15
70
Nil
60
20
10
Nil
Nil
Nil
Nil
© Alberto Montresor
Nil
50
40
Nil
85
Nil Nil
55
Nil Nil
37
Alberi Red-Black: questo albero può essere un albero RB?
Per vincolo sull'altezza nera
ci possono essere al più 3 nodi neri lungo un percorso!
30
15
70
Nil
60
20
10
Nil
Nil
Nil
Nil
© Alberto Montresor
Nil
50
40
Nil
85
Nil Nil
55
Nil Nil
38
Alberi Red-Black: questo albero può essere un albero RB?
La radice è nera.
Supponiamo che 60 e 70 siano entrambi neri.
30
15
70
Nil
Nil
Impossibile!
Perché dovremmo
violare vincolo 3
© Alberto Montresor
60
20
10
Nil
Nil
Nil
Nil
50
40
Nil
85
Nil Nil
55
Nil Nil
39
Alberi Red-Black: questo albero può essere un albero RB?
30
15
Nil
Quindi uno di questi
due nodi deve essere
rosso
© Alberto Montresor
60
20
10
Nil
70
Nil
Nil
40
85
Nil
50
Nil Nil
55
Nil Nil Nil Nil
40
Alberi Red-Black: questo albero può essere un albero RB?
Proviamo a colorare di rosso il nodo 60.
Esiste un percorso con 2 nodi neri
Esiste un percorso con 3 nodi neri
30
Impossibile per il
vincolo sulla lunghezza
15
60
20
10
Nil
70
Nil
Nil
Nil
40
85
Nil
50
Nil Nil
55
Nil Nil Nil Nil
© Alberto Montresor
41
Alberi Red-Black: questo albero può essere un albero RB?
Proviamo a colorare di rosso il nodo 70
30
15
60
20
10
Nil
70
Nil
Nil
Nil
40
Esistono due percorsi
con 2 soli nodi neri
© Alberto Montresor
85
Nil
50
Nil Nil
55
Nil Nil Nil Nil
42
Alberi Red-Black: questo albero può essere un albero RB?
Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi
neri lungo un percorso!
30
15
70
Nil
60
20
10
Nil
Nil
Nil
Nil
© Alberto Montresor
Nil
50
40
Nil
85
Nil Nil
55
Nil Nil
43
Alberi Red-Black: questo albero può essere un albero RB?
Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi
neri lungo un percorso!
30
15
70
Nil
60
20
10
Nil
Nil
Nil
Nil
© Alberto Montresor
Nil
50
40
Questa sarebbe
l’unica possibilità!
Nil
85
55
Nil Nil
Nil Nil
Impossibile!
Perché dovremmo
violare vincolo 1
44
Alberi Red-Black: questo albero può essere un albero RB?
Questo albero NON può essere un albero Red-Black!
30
15
70
Nil
60
20
10
Nil
Nil
Nil
Nil
© Alberto Montresor
Nil
50
40
Nil
85
Nil Nil
55
Nil Nil
45
Alberi Red-Black: Proprietà
Da cui segue:
✦
Le operazioni di ricerca hanno costo O(log n)
✦
Cosa succede per le operazioni di modifica?
✦
© Alberto Montresor
46
Inserimenti
Durante la modifica di un albero Red-Black:
✦
è possibile che le condizioni di bilanciamento risultino violate.
✦
Quando le proprietà Red-Black vengono violate si può agire:
✦
modificando i colori nella zona della violazione;
✦
operando dei ribilanciamenti dell’albero tramite rotazioni:
✦
Rotazione destra
✦
Rotazione sinistra
✦
© Alberto Montresor
47
Rotazione a sinistra
p
Operazioni
x
✦
(1) far diventare B figlio destro di x
(2) far diventare x il figlio sinistro di y
y
A
(3) far diventare y figlio di p, il vecchio padre di x
B
© Alberto Montresor
C
48
Rotazione a sinistra
p
Operazioni
y
✦
(1) far diventare B figlio destro di x
x
(2) far diventare x il figlio sinistro di y
C
(3) far diventare y figlio di p, il vecchio padre di x
A
© Alberto Montresor
B
49
Rotazione a sinistra
p
Operazioni
y
✦
(1) far diventare B figlio destro di x
x
(2) far diventare x il figlio sinistro di y
C
(3) far diventare y figlio di p, il vecchio padre di x
A
© Alberto Montresor
B
50
Inserimento in alberi Red-Black
Inserimento
✦
Ricerca della posizione usando la stessa procedura usata per gli alberi binari di
ricerca
✦
Coloriamo il nuovo nodo di rosso
✦
Quale delle quattro proprietà può essere violata?
✦
Ripasso:
✦
la radice è nera
✦
i nodi Nil sono neri;
✦
se un nodo è rosso, allora entrambi i suoi figli sono neri;
✦
ogni percorso da un nodo interno ad una foglia ha lo stesso numero di nodi neri
✦
© Alberto Montresor
51
Come modificare la insertNode()
balanceTree(n)
© Alberto Montresor
52
Inserimento in alberi Red-Black
Come sistemare:
✦
Ci spostiamo verso l’alto lungo il percorso di inserimento
✦
per ripristinare la proprietà 3 (red-black)
✦
spostando le violazioni verso l’alto rispettando il vincolo 4 (mantenendo
l’altezza nera dell’albero)
✦
Al termine, coloriamo la radice di nero
✦
Nota
✦
Le operazioni di ripristino sono necessarie solo quando due nodi consecutivi sono
rossi!
✦
© Alberto Montresor
53
balanceNode(Tree t)
Nodi coinvolti
n
✦
Il nodo inserito t
✦
Suo padre p
✦
p
z
Suo nonno n
✦
Suo zio z
✦
© Alberto Montresor
t
54
Inserimento - 7 casi possibili
Caso 1:
✦
Nuovo nodo t non ha padre
✦
Primo nodo ad essere inserito o
siamo risaliti fino alla radice
✦
Si colora t di nero
✦
Caso 2
✦
Padre p di t è nero
✦
Nessun vincolo violato
✦
© Alberto Montresor
55
Inserimento - 7 casi possibili
Caso 1:
✦
Nuovo nodo t non ha padre
✦
Primo nodo ad essere inserito
✦
Si colora t di nero
✦
Caso 2
✦
Padre p di t è nero
✦
Nessun vincolo violato
✦
© Alberto Montresor
56
Inserimento - 7 casi possibili
Caso 3
✦
t rosso
✦
p rosso
✦
z rosso
✦
Se z è rosso, è possibile colorare di nero p, z, e di rosso n.
✦
Poiché tutti i cammini che passano per z e p passano per n,
la lunghezza dei cammini neri non è cambiata.
✦
Il problema può essere ora sul nonno:
✦
violato vincolo (1), ovvero n può essere una radice rossa
✦
violato vincolo (3), ovvero n rosso può avere un padre rosso.
✦
Poniamo t = n, e il ciclo continua.
✦
© Alberto Montresor
57
Inserimento - 7 casi possibili
Caso 3
✦
t rosso
✦
p rosso
✦
z rosso
✦
Se z è rosso, è possibile colorare di nero p, z, e di rosso n.
✦
Poiché tutti i cammini che passano per z e p passano per n,
la lunghezza dei cammini neri non è cambiata.
✦
Il problema può essere ora sul nonno:
✦
violato vincolo (1), ovvero n può essere una radice rossa
✦
violato vincolo (3), ovvero n rosso può avere un padre rosso.
✦
Poniamo t = n, e il ciclo continua.
✦
© Alberto Montresor
58
Inserimento - 7 casi possibili
Caso 4a,4b
✦
t rosso
✦
p rosso
✦
z nero
✦
Si assuma che t sia figlio destro di p e che p sia figlio sinistro di n
✦
Una rotazione a sinistra a partire dal nodo p scambia i ruoli di t e p ottenendo il
caso (5a), dove i nodi rossi in conflitto sul vincolo (3) sono entrambi figli sinistri dei
loro padri
✦
I nodi coinvolti nel cambiamento sono p e t, entrambi rossi, quindi la lunghezza dei
cammini neri non cambia
✦
© Alberto Montresor
59
Inserimento - 7 casi possibili
Caso 4a,4b
✦
t rosso
✦
p rosso
✦
z nero
✦
Si assuma che t sia figlio destro di p e che p sia figlio sinistro di n
✦
Una rotazione a sinistra a partire dal nodo p scambia i ruoli di t e p ottenendo il
caso (5a), dove i nodi rossi in conflitto sul vincolo (3) sono entrambi figli sinistri dei
loro padri
✦
I nodi coinvolti nel cambiamento sono p e t, entrambi rossi, quindi la lunghezza dei
cammini neri non cambia
✦
© Alberto Montresor
60
Inserimento - 7 casi possibili
Caso 5a,5b
✦
t rosso
✦
p rosso
✦
z nero
✦
Si assuma che t sia figlio sinistro di p e p sia figlio sinistro di n
✦
Una rotazione a destra a partire da n ci porta ad una situazione in cui t e n sono figli
di p
✦
Colorando n di rosso e p di nero ci troviamo in una situazione in cui tutti i vincoli
Red-Black sono rispettati
✦
in particolare, la lunghezza dei cammini neri che passano per la radice è uguale alla
situazione iniziale
✦
© Alberto Montresor
61
Inserimento - 7 casi possibili
Caso 5a,5b
✦
t rosso
✦
p rosso
✦
z nero
✦
Si assuma che t sia figlio sinistro di p e p sia figlio sinistro di n
✦
Una rotazione a destra a partire da n ci porta ad una situazione in cui t e n sono figli
di p
✦
Colorando n di rosso e p di nero ci troviamo in una situazione in cui tutti i vincoli
Red-Black sono rispettati
✦
in particolare, la lunghezza dei cammini neri che passano per la radice è uguale alla
situazione iniziale
✦
© Alberto Montresor
62
All together, now!
© Alberto Montresor
63
Inserimento in alberi Red-Black
T
t
30
15
10
Nil
Nil
60
Nil
Nil
50
40
Nil
© Alberto Montresor
Nil
70
20
Nil
Nil
85
80
65
55
16
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
64
Inserimento in alberi Red-Black
T
p è nero, t è rosso
30
15
70
10
Nil
Nil
t 16
Nil
Caso 2: nessun cambiamento
Non cambia l’altezza nera
di nessun nodo!
© Alberto Montresor
60
20
Nil
50
40
Nil
Nil
Nil
85
80
65
55
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
65
Inserimento in alberi Red-Black:
T
x 42
30
15
70
60
20
10
Nil
Nil
Nil
Nil
50
40
Nil
© Alberto Montresor
Nil
Nil
85
80
65
55
Nil
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
66
Inserimento in alberi Red-Black
p è rosso, t è rosso
30
T
15
70
10
Nil
60
20
Nil
Nil
85
n
Nil
50
90
z
p
Vincolo 3 è violato
80
65
40
55
Nil
Nil
Nil
Nil Nil Nil
t
Caso 3: z è rosso
Nil
Nil
© Alberto Montresor
42
Nil Nil
Nil
67
Inserimento in alberi Red-Black
T
p è rosso, t è rosso
30
15
70
10
Nil
60
20
Nil
Nil
n
Nil
50
80
65
90
z
p
Coloriamo di nero p
Coloriamo di nero z
Coloriamo di rosso n
40
55
Nil
Nil
Nil
Nil Nil Nil
t
Nil
Nil
© Alberto Montresor
85
42
Nil Nil
Nil
68
Inserimento in alberi Red-Black
T
p è rosso, t è rosso
30
15
70
10
Nil
60
20
t
Nil
Nil
Nil
Vincolo 3 è ripristinato
Altri vincoli mai stati
violati
50
40
Nil
Il padre del padre
di t è il nuovo t
© Alberto Montresor
85
Nil
55
42
80
65
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
Nil
69
Inserimento in alberi Red-Black
T
p è rosso, t è rosso
30
Caso 5a: z è nero
15
70
n
p
Nil
60
20
10
85
t
Nil
Nil
Nil
50
40
Vincolo 3 è nuovamente violato
tra il nuovo t e suo padre
Nil
Nil
© Alberto Montresor
z
55
42
80
65
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
Nil
70
Inserimento in alberi Red-Black
T
p è rosso, t è rosso
30
Caso 5a: z è nero
15
70
10
Nil
Nil
Coloriamo di nero t
Coloriamo di rosso n
Rotazione sinistra
Nil
Nil
50
40
Nil
Nil
© Alberto Montresor
60
x
20
80
65
55
42
85
Nil
Nil
Nil
90
Nil Nil Nil
Nil Nil
Nil
71
Inserimento in alberi Red-Black
T
p è rosso, t è rosso
30
Caso 5a: z è nero
15
60
t
10
Nil
Nil
Vincolo 3 è ripristinato
Altri vincoli mai stati
violati
Abbiamo finito
© Alberto Montresor
Nil
70
50
20
40
Nil
Nil
Nil
55
42
Nil
85
65
Nil Nil Nil Nil
Nil
80
90
Nil Nil Nil
72
Inserimento in alberi Red-Black
T
30
15
60
x
10
Nil
Nil
Nil
L’unico caso un cui si procede a
ripristinare verso l’alto è il caso
3. Negli altri casi, si esce dal
while e si termina
© Alberto Montresor
70
50
20
40
Nil
Nil
Nil
55
42
Nil
85
65
Nil Nil Nil Nil
Nil
80
90
Nil Nil Nil
73
Inserimento: complessità
Totale: O(log n)
✦
O(log n) per scendere fino al punto di inserimento
✦
O(1) per effettuare l'inserimento
✦
O(log n) per risalire e “aggiustare”
(caso pessimo – solo nel caso 3)
✦
Esiste anche la possibilità di effettuare una “top-down” insertion
✦
Scendere fino al punto di inserimento, “aggiustando” l'albero mano a mano
✦
Effettuare l'inserimento in una foglia
✦
© Alberto Montresor
74
Cancellazione in RB
L’algoritmo di cancellazione per alberi RB è costruito sull’algoritmo di
cancellazione per alberi binari di ricerca
✦
Dopo la cancellazione si deve decidere se è necessario ribilanciare o meno
✦
Le operazioni di ripristino del bilanciamento sono necessarie solo quando il nodo
cancellato è nero! (perché?)
✦
© Alberto Montresor
75
Cancellazione in RB
Se il nodo “cancellato” è rosso
✦
altezza nera invariata
✦
non sono stati creati nodi rossi consecutivi
✦
la radice resta nera
✦
Se il nodo “cancellato” è nero
✦
possiamo violare il vincolo 1: la radice può essere un nodo rosso
✦
possiamo violare il vincolo 3: se il padre e uno dei figli del nodo
cancellato erano rossi
✦
abbiamo violato il vincolo 4: altezza nera cambiata
✦
L’algoritmo balanceDelete(T,t) ripristina la proprietà Red-Black con rotazioni e
cambiamenti di colore:
✦
ci sono 4 casi possibili (e 4 simmetrici)!
✦
© Alberto Montresor
76
Cancellazione
if u.color = BLACK then balanceDelete(T, t)
© Alberto Montresor
77
Cancellazione - 8 casi possibili
© Alberto Montresor
78
Cancellazione - 8 casi possibili
© Alberto Montresor
79
Cancellazione in RB
© Alberto Montresor
80
Cancellazione in RB
L’operazione di cancellazione è concettualmente complicata!
✦
Ma efficiente:
✦
Dal caso (1) si passa ad uno dei casi (2), (3), (4)
✦
Dal caso (2) si torna ad uno degli altri casi, ma risalendo di un livello l’albero
✦
Dal caso (3) si passa al caso (4)
✦
Nel caso (4) si termina
✦
Quindi
✦
In altre parole, è possibile visitare al massimo un numero O(log n) di casi,
ognuno dei quali è gestito in tempo O(1)
✦
© Alberto Montresor
81
Esercizi
Esercizio - visita non ricorsiva
✦
Scrivere l’algoritmo non ricorsivo che effettua un attraversamento in ordine di un
ABR
✦
Qual è la sua complessità
✦
Esercizio - limite inferiore
✦
Dimostrare: poiché l'ordinamento basato su confronti di n elementi è Ω(n log n),
allora qualunque algoritmo basato su confronti per costruire un ABR è Ω(n log n)
✦
Esercizio - proprietà albero
✦
Dimostrate che se un nodo in un ABR ha due figli, allora il suo successore non ha
un figlio sinistro e il suo predecessore non ha un figlio destro
✦
Esercizio
✦
L'operazione di cancellazione è commutativa? Nel senso che cancellare x e y
oppure cancellare y e x produce lo stesso ABR?
✦
© Alberto Montresor
82
Scarica

ppt - Disi