1 © alberto montresor algoritmi e strutture dati alberi binari di ricerca alberto montresor...
TRANSCRIPT
1© Alberto Montresor
Algoritmi e Strutture DatiAlberi binari di ricerca
Alberto MontresorUniversità 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.
2© Alberto Montresor
DizionariDizionari
✦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✦ Ricerca/cancellazione O(n), inserimento O(1)
3© Alberto Montresor
Alberi binari di ricerca (ABR)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
✦Proprietà
✦ Le chiavi dei nodi del sottoalbero sinistro di u sono minori di u.key
✦ Le chiavi dei nodi del sottoalbero destro di u sono maggiori di u.key
10
6 15
4 8 12 18
4© Alberto Montresor
Alberi binari di ricerca (ABR)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✦Valore
Figliosinistro
Padre
Figliodestro
Key, Value
5© Alberto Montresor
Alberi binari di ricerca: SpecificaAlberi 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()
Tree successorNode(Item T)
Tree predecessorNode(Item T)
Tree min()
Tree max()
6© Alberto Montresor
4 < 64 sta nel sottoalbero sinistro di 6
4 < 64 sta nel sottoalbero sinistro di 6
Ricerca: esempioRicerca: esempio
Ricerca del valore 4Ricerca del valore 4
66
22 88
11 44
33
T
7© Alberto Montresor
4 > 24 sta nel sottoalbero destro di 2
4 > 24 sta nel sottoalbero destro di 2
Ricerca: esempioRicerca: esempio
T
66
22 88
11 44
33
Ricerca del valore 4Ricerca del valore 4
8© Alberto Montresor
4 = 4trovato!
4 = 4trovato!
Ricerca: esempioRicerca: esempio
T
66
22 88
11 44
33
Ricerca del valore 4Ricerca del valore 4
9© Alberto Montresor
Ricerca: ImplementazioneRicerca: Implementazione
Ricorsiva
Iterativa
10
© Alberto Montresor
Ricerca del minimo e del massimo: EsempiRicerca del minimo e del massimo: Esempi
Sottoalbero conradice 2:
- minimo 1
- massimo 4 66
22
11
33
4
T
Sottoalbero conradice 8:
- minimo 8
- massimo 15
88
44 1212
151599
11
© Alberto Montresor
Ricerca del minimo e del massimo: Pseudo-codiceRicerca del minimo e del massimo: Pseudo-codice
12
© Alberto Montresor
Ricerca del successore/predecessoreRicerca del successore/predecessore
✦Definizione
✦Il successore di un nodo u è il più piccolo nodo maggiore di u
✦Due casi
✦u ha un figlio destro
✦Il successore u' è il minimodel sottoalbero destro di u
✦Esempio: successore di 2 è 3
T
6
1 4
8
3
12
159
2
u
u'
13
© Alberto Montresor
Ricerca del successore/predecessoreRicerca del successore/predecessore
✦Definizione
✦Il successore di un nodo u è il più piccolo nodo maggiore di u
✦Due casi
✦u non ha un figlio destro
✦Il successore è il primo avo u' tale per cui u sta nel sottoalbero sinistro di u'
✦Esempio: successore di 4 è 6
T
66
11 33
88
44
1212
151599
22
u
u'
14
© Alberto Montresor
Ricerca del successore: Pseudo-codice (iterativo)Ricerca del successore: Pseudo-codice (iterativo)
15
© Alberto Montresor
Ricerca: costo computazionaleRicerca: costo computazionale
✦In generale
✦Le operazioni di ricerca sonoconfinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia
✦Tempo di ricerca: O(h)
✦Domanda
✦Qual è il caso pessimo?
✦Domanda
✦Qual è il caso ottimo?
h = altezza dell’albero
16
© Alberto Montresor
InserimentoInserimento
T
5 < 6Inserimento valore 5
66
22
11
33
4
88
44 1212
151599
5 > 2
55
5 > 4
17
© Alberto Montresor
Inserimento: pseudo-codice (iterativo)Inserimento: pseudo-codice (iterativo)
18
© Alberto Montresor
Inserimento: pseudo-codice (iterativo)
19
© Alberto Montresor
CancellazioneCancellazione
✦Caso 1: Il nodo u da eliminare non ha figli
✦Semplicemente si elimina
✦Esempio:
✦Eliminazione nodo 5
T
66
22
11
33
4
88
44 1212
15159955
u
20
© Alberto Montresor
CancellazioneCancellazione
✦Caso 2: Il nodo u da eliminare ha un unico figlio f
✦Si elimina u
✦Si attacca f all'ex-padre p di uin sostituzione di u (short-cut)
✦Esempio:
✦Cancellazione di 4
T
66
22
11
33
88
44 1212
151599
u
f
p
21
© Alberto Montresor
CancellazioneCancellazione
✦Caso 3: Il nodo u da eliminare ha due figli
✦Si individua il successore s del nodo uIl successore non ha figlio sinistro
✦Si “stacca” il successore
✦Si attacca l'eventualefiglio destro di s alpadre di s (short-cut)
✦Si copia s su u
✦Si rimuove il nodo s
T
77
22
11
33
88
55 1212
151599s
u
44
66
33
22
© Alberto Montresor
Cancellazione: Pseudo-codiceCancellazione: Pseudo-codice
23
© Alberto Montresor
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
24
© Alberto Montresor
Modifica: costo computazionaleModifica: costo computazionale
✦In generale
✦Le operazioni di modifica sonoconfinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia
✦Tempo di ricerca: O(h)
h = altezza dell’albero
25
© Alberto Montresor
Complessità mediaComplessità 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
26
© Alberto Montresor
Algoritmi di bilanciamentoAlgoritmi 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)
27
© Alberto Montresor
T3
T3
T1
T2
Esempio di rotazione
v
u
T1T2
v
u
28
© Alberto Montresor
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
✦ Tutte le foglie sono nere
✦ Entrambi i figli di un nodo rosso sono neri
✦ 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
29
© Alberto Montresor
Alberi Red-Black
✦Ogni nodo mantiene
✦parent puntatore al padre
✦left, right puntatori ai figli sinistro/destro
✦color colore
✦key, data 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
30
© Alberto Montresor
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
31
© Alberto Montresor
Alberi Red-Black: esempio IAlberi Red-Black: esempio I
3. Entrambi i figli di un nodo rosso sono neri.Ma un nodo nero può avere figli neri!
30
70
85
5
60
80
10
90
15
20
50
40 55
65
NilNil
Nil Nil Nil
Nil Nil NilNil
Nil Nil Nil Nil NilNil
32
© Alberto Montresor
Alberi Red-Black: esempio IAlberi 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
70
85
5
60
80
10
90
15
20
50
40 55
65
NilNil
Nil Nil Nil
Nil Nil NilNil
Nil Nil Nil Nil NilNil
33
© Alberto Montresor
Alberi Red-Black: più colorazioni sono possibiliAlberi Red-Black: più colorazioni sono possibili
30
70
85
5
60
80
10
90
15
20
50
40 55
65
NilNil
Nil Nil Nil
Nil Nil NilNil
Nil Nil Nil Nil NilNil
Albero Red-Black con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil
34
© Alberto Montresor
Alberi Red-Black: più colorazioni sono possibiliAlberi Red-Black: più colorazioni sono possibili
30
70
85
5
60
80
10
90
15
20
50
40 55
65
NilNil
Nil Nil Nil
Nil Nil NilNil
Nil Nil Nil Nil NilNil
Albero Red-Black con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil
35
© Alberto Montresor
Alberi Red-Black: colorazione diversa, altezza nera diversaAlberi Red-Black: colorazione diversa, altezza nera diversa
30
70
8560
80
10
90
15
20
50 65Nil Nil Nil Nil
Nil Nil Nil Nil Nil Nil NilNil
Albero RB con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil
36
© Alberto Montresor
Alberi Red-Black: colorazione diversa, altezza nera diversaAlberi Red-Black: colorazione diversa, altezza nera diversa
30
70
8560
80
10
90
15
20
50 65Nil Nil Nil Nil
Nil Nil Nil Nil Nil Nil NilNil
Stesso albero con 2 nodi neri lungo ogni percorso dalla radice ai nodi Nil
37
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
38
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
Per vincolo sull'altezza nera ci possono essere al più 3 nodi neri lungo un percorso!
39
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
Impossibile!Perché dovremmo violare vincolo 3
La radice è nera. Supponiamo che 60 e 70 siano entrambi neri.
40
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
Quindi uno di questidue nodi deve essererosso
41
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
Impossibile per ilvincolo sulla lunghezza
Proviamo a colorare di rosso il nodo 60.Esiste un percorso con 2 nodi neriEsiste un percorso con 3 nodi neri
42
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
Esistono due percorsicon 2 soli nodi neri
Proviamo a colorare di rosso il nodo 70
43
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi neri lungo un percorso!
44
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
Questa sarebbel’unica possibilità!
Impossibile!Perché dovremmo violare vincolo 1
Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi neri lungo un percorso!
45
© Alberto Montresor
Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?
30
70
6010
15
20
50Nil Nil Nil Nil Nil Nil
40 55
Nil Nil NilNil
85
Nil
Questo albero NON può essere un albero Red-Black!
46
© Alberto Montresor
Alberi Red-Black: ProprietàAlberi Red-Black: Proprietà
✦Da cui segue:
✦Le operazioni di ricerca hanno costo O(log n)
✦Cosa succede per le operazioni di modifica?
47
© Alberto Montresor
InserimentiInserimenti
✦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
48
© Alberto Montresor
Rotazione a sinistraRotazione a sinistra
A
B C
y
x
p
✦Operazioni
(1) far diventare B figlio destro di x
(2) far diventare x il figlio sinistro di y
(3) far diventare y figlio di p, il vecchio padre di x
49
© Alberto Montresor
Rotazione a sinistraRotazione a sinistra
A B
C
y
x
p
✦Operazioni
(1) far diventare B figlio destro di x
(2) far diventare x il figlio sinistro di y
(3) far diventare y figlio di p, il vecchio padre di x
50
© Alberto Montresor
Rotazione a sinistraRotazione a sinistra
A B
C
y
x
p
✦Operazioni
(1) far diventare B figlio destro di x
(2) far diventare x il figlio sinistro di y
(3) far diventare y figlio di p, il vecchio padre di x
51
© Alberto Montresor
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
52
© Alberto Montresor
Come modificare la insertNode()
balanceTree(n)
53
© Alberto Montresor
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!
54
© Alberto Montresor
balanceNode(Tree t)
✦Nodi coinvolti
✦Il nodo inserito t
✦Suo padre p
✦Suo nonno n
✦Suo zio z
p
t
n
z
55
© Alberto Montresor
Inserimento - 7 casi possibili
✦Caso 1:
✦Nuovo nodo t non ha padre
✦Primo nodo ad essere inserito osiamo risaliti fino alla radice
✦Si colora t di nero
✦Caso 2
✦Padre p di t è nero
✦Nessun vincolo violato
56
© Alberto Montresor
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
57
© Alberto Montresor
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.
58
© Alberto Montresor
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.
59
© Alberto Montresor
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
60
© Alberto Montresor
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
61
© Alberto Montresor
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
62
© Alberto Montresor
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
63
© Alberto Montresor
All together, now!
64
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
8560
80
10
90
15
20
50
40 55
65Nil Nil Nil Nil
Nil Nil NilNil
Nil Nil Nil Nil NilNil
16T
t
Nil Nil
65
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
8560
80
10
90
15
20
50
40 55
65Nil Nil Nil
Nil Nil NilNil
Nil Nil Nil Nil NilNil
16
T
t
Caso 2: nessun cambiamentoNon cambia l’altezza neradi nessun nodo!
Nil Nil
p è nero, t è rosso
66
© Alberto Montresor
Inserimento in alberi Red-Black: Inserimento in alberi Red-Black:
30
70
8560
80
10
90
15
20
50
40 55
65Nil Nil Nil
Nil Nil NilNil
Nil Nil Nil Nil NilNil
T42x
Nil Nil
Nil
67
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
8560
80
10
90
15
20
50
40 55
65Nil Nil Nil
Nil NilNil
Nil Nil Nil Nil NilNil
T
Nil
42
Vincolo 3 è violato
Caso 3: z è rosso
Nil Nil
t
p è rosso, t è rosso
p
n
z
68
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
8560
80
10
90
15
20
50
40 55
65Nil Nil Nil
Nil NilNil
Nil Nil Nil Nil NilNil
T
Nil
42
Nil Nil
Coloriamo di nero p Coloriamo di nero zColoriamo di rosso n t
p
n
z
p è rosso, t è rosso
69
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
8560
80
10
90
15
20
50
40 55
65Nil Nil Nil
Nil NilNil
Nil Nil Nil Nil NilNil
T
Nil
42
t
Nil Nil
Il padre del padre di t è il nuovo t
p è rosso, t è rosso
Vincolo 3 è ripristinatoAltri vincoli mai stativiolati
70
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
8560
80
10
90
15
20
50
40 55
65Nil Nil Nil
Nil NilNil
Nil Nil Nil Nil NilNil
T
Nil
42
t
Nil Nil
Vincolo 3 è nuovamente violato tra il nuovo t e suo padre
Caso 5a: z è nero
p è rosso, t è rosso
p
n
z
71
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
8560
80
10
90
15
20
50
40 55
65Nil Nil Nil
Nil NilNil
Nil Nil Nil Nil NilNil
T
Nil
42
x
Nil Nil
Coloriamo di nero tColoriamo di rosso nRotazione sinistra
Caso 5a: z è nero
p è rosso, t è rosso
72
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
85
60
80
10
90
15
20 50
40 55 65Nil Nil Nil
Nil NilNil Nil
Nil Nil Nil Nil
Nil
T
Nil
42
t
Nil Nil
Caso 5a: z è nero
p è rosso, t è rosso
Vincolo 3 è ripristinatoAltri vincoli mai stativiolati
Abbiamo finito
73
© Alberto Montresor
Inserimento in alberi Red-BlackInserimento in alberi Red-Black
30
70
85
60
80
10
90
15
20 50
40 55 65Nil Nil Nil
Nil NilNil Nil
Nil Nil Nil Nil
Nil
T
Nil
42
x
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
74
© Alberto Montresor
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
75
© Alberto Montresor
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é?)
76
© Alberto Montresor
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 nodocancellato 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)!
77
© Alberto Montresor
Cancellazione
if u.color = BLACK then balanceDelete(T, t)
78
© Alberto Montresor
Cancellazione - 8 casi possibili
79
© Alberto Montresor
Cancellazione - 8 casi possibiliCancellazione - 8 casi possibili
80
© Alberto Montresor
Cancellazione in RBCancellazione in RB
81
© Alberto Montresor
Cancellazione in RBCancellazione 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)
82
© Alberto Montresor
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?