Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
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 or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. © Alberto Montresor
2
Insieme dinamico che implementa le seguenti funzionalità
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 Ricerca/cancellazione O(n), inserimento O(1) © Alberto Montresor
3
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 © Alberto Montresor
4
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 Figlio sinistro Padre destro Key, Value © Alberto Montresor
5
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() Tree successorNode(Item T) Tree predecessorNode(Item T) Tree min() Tree max() © Alberto Montresor
6
4 sta nel sottoalbero sinistro di 6 T
Ricerca: esempio Ricerca del valore 4 4 < 6 4 sta nel sottoalbero sinistro di 6 T 6 2 8 1 4 3 © Alberto Montresor
7
4 sta nel sottoalbero destro di 2 T
Ricerca: esempio Ricerca del valore 4 4 > 2 4 sta nel sottoalbero destro di 2 T 6 2 8 1 4 3 © Alberto Montresor
8
Ricerca: esempio Ricerca del valore 4 4 = 4 trovato! T 6 2 8 1 4 3
© Alberto Montresor
9
Ricerca: Implementazione
Ricorsiva Iterativa © Alberto Montresor
10
Ricerca del minimo e del massimo: Esempi
Sottoalbero con radice 2: - minimo 1 - massimo 4 Sottoalbero con radice 8: - minimo 8 - massimo 15 T 6 2 8 1 4 4 12 3 9 15 © Alberto Montresor
11
Ricerca del minimo e del massimo: Pseudo-codice
© Alberto Montresor
12
Ricerca 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 minimo del sottoalbero destro di u Esempio: successore di 2 è 3 T 6 u 2 8 1 4 12 9 15 3 u' © Alberto Montresor
13
Ricerca 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 u' 6 2 8 1 3 12 4 9 15 u © Alberto Montresor
14
Ricerca del successore: Pseudo-codice (iterativo)
© Alberto Montresor
15
Ricerca: costo computazionale
In generale Le operazioni di ricerca sono confinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia Tempo di ricerca: O(h) Domanda Qual è il caso pessimo? Qual è il caso ottimo? h = altezza dell’albero Caso pessimo: l'albero è organizzato come una sequenza lineare di valori crescenti o decrescenti. il costo è lineare nella dimensione dell'albero (O(n)) Caso ottimo: l'albero è completo, o anche solo bilanciato (ovvero la differenza fra il livello del nodo minimo e il livello del nodo massimo differisce al più di una quantità costante. In questo caso, l'altezza dell'albero è O(log n) © Alberto Montresor
16
Inserimento 5 < 6 Inserimento valore 5 5 > 2 T 5 > 4 6 4 2 8
1 4 4 12 3 5 9 15 © Alberto Montresor
17
Inserimento: pseudo-codice (iterativo)
© Alberto Montresor
18
Inserimento: pseudo-codice (iterativo)
© Alberto Montresor
19
Caso 1: Il nodo u da eliminare non ha figli Semplicemente si elimina
Cancellazione Caso 1: Il nodo u da eliminare non ha figli Semplicemente si elimina Esempio: Eliminazione nodo 5 T 6 2 8 1 4 4 12 3 5 9 15 u © Alberto Montresor
20
Caso 2: Il nodo u da eliminare ha un unico figlio f Si elimina u
Cancellazione Caso 2: Il nodo u da eliminare ha un unico figlio f Si elimina u Si attacca f all'ex-padre p di u in sostituzione di u (short-cut) Esempio: Cancellazione di 4 T 6 2 p 8 1 4 12 u 3 9 15 f © Alberto Montresor
21
Caso 3: Il nodo u da eliminare ha due figli
Cancellazione Caso 3: Il nodo u da eliminare ha due figli Si individua il successore s del nodo u Il successore non ha figlio sinistro Si “stacca” il successore Si attacca l'eventuale figlio destro di s al padre di s (short-cut) Si copia s su u Si rimuove il nodo s T 7 2 u 8 3 1 5 12 s 3 6 9 15 4 © Alberto Montresor
22
Cancellazione: Pseudo-codice
© Alberto Montresor
23
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
24
Modifica: costo computazionale
In generale Le operazioni di modifica sono confinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia Tempo di ricerca: O(h) h = altezza dell’albero Caso pessimo: l'albero è organizzato come una sequenza lineare di valori crescenti o decrescenti. il costo è lineare nella dimensione dell'albero (O(n)) Caso ottimo: l'albero è completo, o anche solo bilanciato (ovvero la differenza fra il livello del nodo minimo e il livello del nodo massimo differisce al più di una quantità costante. In questo caso, l'altezza dell'albero è O(log n) © Alberto Montresor
25
Qual è l'altezza media di un albero di ricerca?
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
26
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) Bilanciamento ottenuto tramite merge/split, grado variabile B-alberi binari (Andersson, 1993) Alberi Red-Black (Bayer, 1972) © Alberto Montresor
27
Esempio di rotazione v u u T3 T1 v T2 T3 T1 T2 © Alberto Montresor
28
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: 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 © Alberto Montresor
29
parent puntatore al padre
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 © Alberto Montresor
30
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) L’altezza nera di un albero Red-Black è pari all’altezza nera della sua radice © Alberto Montresor
31
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 60 85 20 10 5 Nil Nil Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor
32
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 60 85 20 10 5 Nil Nil Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor
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 60 85 20 10 5 Nil Nil Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor
34
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 60 85 20 10 5 Nil Nil Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor
35
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 60 85 20 10 Nil Nil Nil Nil 50 65 80 90 Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor
36
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 60 85 20 10 Nil Nil Nil Nil 50 65 80 90 Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor
37
Alberi Red-Black: questo albero può essere un albero RB?
30 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor
38
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 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor
39
Alberi Red-Black: questo albero può essere un albero RB?
La radice è nera. Supponiamo che 60 e 70 siano entrambi neri. 30 15 70 60 85 20 10 Nil Nil Nil Nil Nil Nil Nil 50 Impossibile! Perché dovremmo violare vincolo 3 40 55 Nil Nil Nil Nil © Alberto Montresor
40
Alberi Red-Black: questo albero può essere un albero RB?
30 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 Quindi uno di questi due nodi deve essere rosso 40 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 60. Esiste un percorso con 2 nodi neri Esiste un percorso con 3 nodi neri 30 Impossibile per il vincolo sulla lunghezza 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor
42
Alberi Red-Black: questo albero può essere un albero RB?
Proviamo a colorare di rosso il nodo 70 30 15 70 60 85 20 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Esistono due percorsi con 2 soli nodi neri Nil Nil Nil Nil © Alberto Montresor
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 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor
44
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 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 Questa sarebbe l’unica possibilità! 40 55 Impossibile! Perché dovremmo violare vincolo 1 Nil Nil Nil Nil © Alberto Montresor
45
Alberi Red-Black: questo albero può essere un albero RB?
Questo albero NON può essere un albero Red-Black! 30 15 70 60 85 20 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor
46
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
47
Durante la modifica di un albero Red-Black:
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
48
far diventare B figlio destro di x
Rotazione a sinistra p x Operazioni far diventare B figlio destro di x far diventare x il figlio sinistro di y far diventare y figlio di p, il vecchio padre di x A y B C © Alberto Montresor
49
far diventare B figlio destro di x
Rotazione a sinistra p y Operazioni far diventare B figlio destro di x far diventare x il figlio sinistro di y far diventare y figlio di p, il vecchio padre di x x C A B © Alberto Montresor
50
far diventare B figlio destro di x
Rotazione a sinistra p y Operazioni far diventare B figlio destro di x far diventare x il figlio sinistro di y far diventare y figlio di p, il vecchio padre di x x C A B © Alberto Montresor
51
Inserimento in alberi Red-Black
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
52
Come modificare la insertNode()
balanceTree(n) © Alberto Montresor
53
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
54
balanceNode(Tree t) Nodi coinvolti n Il nodo inserito t Suo padre p
Suo nonno n Suo zio z n p z t © Alberto Montresor
55
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
56
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
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 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
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 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
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
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
63
All together, now! © Alberto Montresor
64
Inserimento in alberi Red-Black
16 30 Nil Nil 15 70 60 85 20 10 Nil Nil Nil Nil 50 65 80 90 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor
65
Inserimento in alberi Red-Black
p è nero, t è rosso 30 15 70 60 85 20 10 Nil Nil t 16 Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Caso 2: nessun cambiamento Non cambia l’altezza nera di nessun nodo! Nil Nil Nil Nil © Alberto Montresor
66
Inserimento in alberi Red-Black:
x 42 30 Nil Nil 15 70 60 85 20 10 Nil Nil Nil Nil 50 65 80 90 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor
67
Inserimento in alberi Red-Black
p è rosso, t è rosso T 30 15 70 60 85 20 10 n Nil Nil Nil Nil 50 65 80 90 p z Vincolo 3 è violato 40 55 Nil Nil Nil Nil Nil Nil t Caso 3: z è rosso Nil 42 Nil Nil Nil Nil © Alberto Montresor
68
Inserimento in alberi Red-Black
p è rosso, t è rosso 30 15 70 60 85 20 10 n Nil Nil Nil Nil 50 65 80 90 p z Coloriamo di nero p Coloriamo di nero z Coloriamo di rosso n 40 55 Nil Nil Nil Nil Nil Nil t Nil 42 Nil Nil Nil Nil © Alberto Montresor
69
Inserimento in alberi Red-Black
p è rosso, t è rosso 30 15 70 60 85 20 10 t Nil Nil Nil Nil 50 65 80 90 Vincolo 3 è ripristinato Altri vincoli mai stati violati 40 55 Nil Nil Nil Nil Nil Nil Nil 42 Nil Nil Il padre del padre di t è il nuovo t Nil Nil © Alberto Montresor
70
Inserimento in alberi Red-Black
p è rosso, t è rosso 30 Caso 5a: z è nero n 15 70 p z 60 85 20 10 t Nil Nil Nil Nil 50 65 80 90 40 55 Nil Nil Nil Nil Nil Nil Vincolo 3 è nuovamente violato tra il nuovo t e suo padre Nil 42 Nil Nil Nil Nil © Alberto Montresor
71
Inserimento in alberi Red-Black
p è rosso, t è rosso 30 Caso 5a: z è nero 15 70 60 85 20 10 x Nil Nil Nil Nil 50 65 80 90 Coloriamo di nero t Coloriamo di rosso n Rotazione sinistra 40 55 Nil Nil Nil Nil Nil Nil Nil 42 Nil Nil Nil Nil © Alberto Montresor
72
Inserimento in alberi Red-Black
p è rosso, t è rosso 30 Caso 5a: z è nero 15 60 t 70 20 50 10 85 65 Nil Nil Nil 40 Nil 55 Vincolo 3 è ripristinato Altri vincoli mai stati violati Nil 42 Nil Nil Nil Nil 80 90 Nil Nil Nil Nil Nil Nil Abbiamo finito © Alberto Montresor
73
Inserimento in alberi Red-Black
30 15 60 x 70 20 50 10 85 65 Nil Nil Nil 40 Nil 55 Nil 42 Nil Nil Nil Nil 80 90 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 Nil Nil Nil Nil Nil Nil © Alberto Montresor
74
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
75
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
76
Se il nodo “cancellato” è rosso altezza nera invariata
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
77
if u.color = BLACK then balanceDelete(T, t)
Cancellazione if u.color = BLACK then balanceDelete(T, t) © Alberto Montresor
78
Cancellazione - 8 casi possibili
© Alberto Montresor
79
Cancellazione - 8 casi possibili
© Alberto Montresor
80
Cancellazione in RB © Alberto Montresor
81
L’operazione di cancellazione è concettualmente complicata!
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
82
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.