Alberi Red Black
Algoritmi e Calcolo Parallelo

Prof. Pier Luca Lanzi
Riferimenti

•

•

2

Bertossi Alan A., Montresor Alberto. “Algoritmi e
strutture di dati” (seconda edizione), CittàStudi ...
Alberi Binari di Ricerca

•

•
•

4

Alberi Binari di Ricerca
Struttura dati ispirata alla ricerca binaria
Le chiavi dei n...
Alberi di Ricerca Bilanciati

•
•
•

5

Alberi di ricerca
Permettono di trovare un elemento in tempo O(h)
Nel caso peggior...
Cosa Significa Bilanciato?

•
•

6

Fattore di bilanciamento
Il fattore di bilanciamento β(v) di un nodo v è la
massima di...
Algoritmi di Bilanciamento

•

•
•
•

Alberi AVL (Adel'son-Vel'skii e Landis, 1962)
β(v) ≤ 1 per ogni nodo v
Bilanciamento...
Alberi Red-Black
(Red-Black Trees, RB-Tree)

•

•

•

8

Un albero rosso-nero è un albero binario di ricerca in cui:
Ogni ...
9

Prof. Pier Luca Lanzi
Alberi Rosso-Nero
(Red-Black Trees, RB-Tree)

•

10

Nodo nil
nodo sentinella che evita di trattare diversamente i puntato...
Esempio di Albero Red-Black

11

7

3
NIL

18
NIL

10
8

22
11

NIL NIL NIL NIL

Prof. Pier Luca Lanzi

h=4

NIL

26
NIL

...
Esempio di Albero Red-Black

12

7

3
NIL

18
NIL

10
8

22
11

NIL

NIL NIL NIL NIL

26
NIL

1. Ogni nodo è colorato di r...
Esempio di Albero Red-Black

13

7

3
NIL

18
NIL

10
8

22
11

NIL NIL NIL NIL

NIL

26
NIL

2. La radice e i nodi nil so...
Esempio di Albero Red-Black

14

7

3
NIL

18
NIL

10
8

22
11

NIL NIL NIL NIL

NIL

26
NIL

3. Se un nodo è rosso, allor...
Esempio di Albero Red-Black

7

bh = 2

3
NIL

15

18 bh = 2
NIL

bh = 1 10
bh = 1 8

22
11

bh = 0 NIL NIL NIL NIL

NIL

...
Altezza di Albero Red-Black

•
•

16

Teorema
Un albero red-black con n chiavi ha un’altezza h,
h ≤ 2 lg(n + 1).



Corol...
Alberi Red-Black

Le operazioni di INSERT e DELETE
modificano in un albero red-black
È possibile che le condizioni di bila...
Rotazioni

18

RIGHT-ROTATE(B)
B

A

LEFT-ROTATE (A)

A

•

Le rotazioni mantengono l’ordinamento inordine delle
chiavi
a
...
Alberi Red-Black: Inserimento

•

•

19

Qual è l’idea?
Inserire x nell’albero. Colorare il nodo x rosso.
Solo la propriet...
Alberi red-black: Inserimento

•

•

20

Qual è l’idea?
Inserire x nell’albero. Colorare il nodo x rosso.
Solo la propriet...
Alberi red-black: Inserimento

•

•

21

Qual è l’idea?
Inserire x nell’albero. Colorare il nodo x rosso.
Solo la propriet...
Alberi red-black: Inserimento

•

•

22

Qual è l’idea?
Inserire x nell’albero. Colorare il nodo x rosso.
Solo la propriet...
Alberi red-black: Inserimento

•

•

23

Qual è l’idea?
Inserire x nell’albero. Colorare il nodo x rosso.
Solo la propriet...
Alberi red-black: Inserimento

•

•

24

Qual è l’idea?
Inserire x nell’albero. Colorare il nodo x rosso.
Solo la propriet...
Alberi red-black: Inserimento

•

•

25

Qual è l’idea?
Inserire x nell’albero. Colorare il nodo x rosso.
Solo la propriet...
Pseudo-Codice

26

RB-INSERT(T, x)
TREE-INSERT(T, x)
color[x] ← RED
⊳ only RB property 3 can be violated
while x<>root[T] ...
Notazione Grafica

27

denota un sottoalbero con una radice nera
Tutti i

hanno la stessa altezza nera

Prof. Pier Luca La...
Inserimento: Caso 1

28

Ricolora

C
A

C
D

y

x B

new x

D

A

B

oppure con i figli di A
scambiati

Prof. Pier Luca La...
Inserimento: Caso 2

C

29

Left-Rotate(A)

C

y

A

y

B

x B

x A

Transforma nel Caso 3

Prof. Pier Luca Lanzi

L7.29
Inserimento: Caso 3

30

Right-Rotate(C)

C

B

y

B

C

A

x A

Finito! Nessuna
violazione delle
proprietà RB

Prof. Pier...
Analisi

•

31

Sommario dell’algoritmo di inserimento
Inserisce l’elemento e lo colora di rosso
Risalisce l’albero applic...
Sommario

•
•

•

•

32

Alberi di ricerca bilanciati
Alberi di ricerca per i quali un’altezza di O(lg n) è garantita quan...
Alberi Red-Black e Mappe C++

•

•
•

33

Le STL del C++ non hanno implementazioni di alberi di
ricerca

Gli alberi red-bl...
map C++

•

•
•

•

34

Funzioni
operator=
Iteratori
begin(), end(), rbegin(), rend()
Modificatori
clear, insert, erase, s...
Esempio: Conta la frequenza delle
parole
#include <iostream>
#include <string>
#include <map>
int main()
{
std::map<std::s...
Iteratori delle map

36

std::map<std::string, int>::iterator it;
for(it=wordcounts.begin(); it!=wordcounts.end(); it++)
{...
Esempio: Iteratori

37

#include <iostream>
#include <string>
#include <map>
int main()
{
std::map<std::string, int> wordc...
Upcoming SlideShare
Loading in …5
×

Algoritmi e Calcolo Parallelo 2012/2013 - Alberi Red-Black

642 views

Published on

Slide del corso di Algoritmi e Calcolo Parallelo per il corso di laurea magistrale in Ingegneria Matematica 2012/2013 - Politecnico di Milano

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
642
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Algoritmi e Calcolo Parallelo 2012/2013 - Alberi Red-Black

  1. 1. Alberi Red Black Algoritmi e Calcolo Parallelo Prof. Pier Luca Lanzi
  2. 2. Riferimenti • • 2 Bertossi Alan A., Montresor Alberto. “Algoritmi e strutture di dati” (seconda edizione), CittàStudi 2010 Stanley B. Lippman, Barbara E. Moo, Josee Lajoie “C++ Primer”, 5th Edition Addison-Wesley Prof. Pier Luca Lanzi
  3. 3. Alberi Binari di Ricerca • • • 4 Alberi Binari di Ricerca Struttura dati ispirata alla ricerca binaria Le chiavi dei nodi del sottoalbero sinistro left[x] sono ≤ key[x] Le chiavi dei nodi del sottoalbero destro right[x] sono ≥ key[x]    Operazioni Ricerca, minimo, massimo, prev, next, inserimento, e cancellazione  Complessità Ricerca, inserimento, cancellazione sono O(h) per un albero di altezza h Un albero binario di ricerca con n nodi generato in maniera casuale ha un’altezza O(lg n)   Prof. Pier Luca Lanzi
  4. 4. Alberi di Ricerca Bilanciati • • • 5 Alberi di ricerca Permettono di trovare un elemento in tempo O(h) Nel caso peggiore, h = O(n) Ma se l'albero è bilanciato, h=O(log n)    Sono alberi di ricerca per i quali un’altezza di O(lg n) è garantita quando sono implementate le funzioni di inserimento/cancellazione dinamica Esempi di alberi bilanciati Alberi AVL Alberi 2-3 Alberi 2-3-4 B-alberi Alberi Red-black      Prof. Pier Luca Lanzi
  5. 5. Cosa Significa Bilanciato? • • 6 Fattore di bilanciamento Il fattore di bilanciamento β(v) di un nodo v è la massima differenza di altezza fra i sottoalberi di v  Esempio Un albero perfettamente bilanciato ha β(v)=0 per ogni nodo v  Prof. Pier Luca Lanzi
  6. 6. Algoritmi di Bilanciamento • • • • Alberi AVL (Adel'son-Vel'skii e Landis, 1962) β(v) ≤ 1 per ogni nodo v Bilanciamento ottenuto tramite rotazioni Alberi 2-3 (Hopcroft, 1983) β(v) = 0 per ogni nodo v Bilanciamento ottenuto tramite merge/split, grado variabile B-Alberi (Bayer, McCreight, 1972) β(v) = 0 per ogni nodo v Specializzati per strutture in memoria secondaria Alberi Red-Black (Bayer, 1972)       Prof. Pier Luca Lanzi 7
  7. 7. Alberi Red-Black (Red-Black Trees, RB-Tree) • • • 8 Un albero rosso-nero è 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 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     Ogni nodo mantiene: puntatore al genitore (parent); puntatori ai figli sinistro/destro (left, right); colore (color); chiave e dati (key, data) Prof. Pier Luca Lanzi
  8. 8. 9 Prof. Pier Luca Lanzi
  9. 9. Alberi Rosso-Nero (Red-Black Trees, RB-Tree) • 10 Nodo nil nodo sentinella che evita 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'ARB corrispondente     • Definizione Il numero di nodi neri lungo ogni percorso da un nodo v (escluso) ad una foglia è detto altezza nera di v, indicato bh(v) Ben definito perché tutti i percorsi hanno lo stesso numero di nodi (regola 4)   • Definizione L’altezza nera di un albero RB è l’altezza nera della sua radice  Prof. Pier Luca Lanzi
  10. 10. Esempio di Albero Red-Black 11 7 3 NIL 18 NIL 10 8 22 11 NIL NIL NIL NIL Prof. Pier Luca Lanzi h=4 NIL 26 NIL L7.11 NIL
  11. 11. Esempio di Albero Red-Black 12 7 3 NIL 18 NIL 10 8 22 11 NIL NIL NIL NIL NIL 26 NIL 1. Ogni nodo è colorato di rosso o di nero Prof. Pier Luca Lanzi L7.12 NIL
  12. 12. Esempio di Albero Red-Black 13 7 3 NIL 18 NIL 10 8 22 11 NIL NIL NIL NIL NIL 26 NIL 2. La radice e i nodi nil sono neri Prof. Pier Luca Lanzi L7.13 NIL
  13. 13. Esempio di Albero Red-Black 14 7 3 NIL 18 NIL 10 8 22 11 NIL NIL NIL NIL NIL 26 NIL 3. Se un nodo è rosso, allora entrambi i suoi figli sono neri. Se un nodo è rosso, allora il nodo parente è nero Prof. Pier Luca Lanzi NIL
  14. 14. Esempio di Albero Red-Black 7 bh = 2 3 NIL 15 18 bh = 2 NIL bh = 1 10 bh = 1 8 22 11 bh = 0 NIL NIL NIL NIL NIL 26 NIL NIL 4. Ogni percorso da un nodo interno ad una foglia ha lo stesso numero di nodi neri Prof. Pier Luca Lanzi L7.15
  15. 15. Altezza di Albero Red-Black • • 16 Teorema Un albero red-black con n chiavi ha un’altezza h, h ≤ 2 lg(n + 1).  Corollario Le funzioni di SEARCH, MIN, MAX, SUCCESSOR, and PREDECESSOR sono eseguite con un tempo che è O(lg n) per un albero red-black con n chiavi  Prof. Pier Luca Lanzi
  16. 16. Alberi Red-Black Le operazioni di INSERT e DELETE modificano in un albero red-black È possibile che le condizioni di bilanciamento risultino violate Se le proprietà red-black vengono violate si può, modificare i colori nella zona della violazione; ribilanciare l’albero con opportune rotazioni Prof. Pier Luca Lanzi
  17. 17. Rotazioni 18 RIGHT-ROTATE(B) B A LEFT-ROTATE (A) A • Le rotazioni mantengono l’ordinamento inordine delle chiavi a • B ,b ,c a≤A≤b≤B≤c Prof. Pier Luca Lanzi Una rotazione può essere eseguita in O(1)
  18. 18. Alberi Red-Black: Inserimento • • 19 Qual è l’idea? Inserire x nell’albero. Colorare il nodo x rosso. Solo la proprietà 3 potrebbe essere violata Muovere la violazione verso l’alto ricolorando fino a quando è aggiustata attraverso rotazioni e ricolorazioni 7 Esempio:     Inserire 15 3 18 10 8 Prof. Pier Luca Lanzi 22 11 26
  19. 19. Alberi red-black: Inserimento • • 20 Qual è l’idea? Inserire x nell’albero. Colorare il nodo x rosso. Solo la proprietà 3 potrebbe essere violata Muovere la violazione verso l’alto ricolorando fino a quando è aggiustata attraverso rotazioni e ricolorazioni 7 Esempio:     Inserire 15  Ricolorare 3 18 10 muovendo su la violazione 8 22 11 26 15 Prof. Pier Luca Lanzi
  20. 20. Alberi red-black: Inserimento • • 21 Qual è l’idea? Inserire x nell’albero. Colorare il nodo x rosso. Solo la proprietà 3 potrebbe essere violata Muovere la violazione verso l’alto ricolorando fino a quando è aggiustata attraverso rotazioni e ricolorazioni 7 Esempio:     Inserire 15  Ricolorare 3 18 10 muovendo su la violazione 8 22 11 26 15 Prof. Pier Luca Lanzi
  21. 21. Alberi red-black: Inserimento • • 22 Qual è l’idea? Inserire x nell’albero. Colorare il nodo x rosso. Solo la proprietà 3 potrebbe essere violata Muovere la violazione verso l’alto ricolorando fino a quando è aggiustata attraverso rotazioni e ricolorazioni 7 Esempio:     Inserire 15  Ricolorare  3 18 10 muovendo su la violazione Rotate(18) 8 22 11 26 15 Prof. Pier Luca Lanzi
  22. 22. Alberi red-black: Inserimento • • 23 Qual è l’idea? Inserire x nell’albero. Colorare il nodo x rosso. Solo la proprietà 3 potrebbe essere violata Muovere la violazione verso l’alto ricolorando fino a quando è aggiustata attraverso rotazioni e ricolorazioni 7 Esempio:     Inserire 15  Ricolorare  3 10 8 muovendo su la violazione Rotate(18) 18 11 15 Prof. Pier Luca Lanzi 22 26
  23. 23. Alberi red-black: Inserimento • • 24 Qual è l’idea? Inserire x nell’albero. Colorare il nodo x rosso. Solo la proprietà 3 potrebbe essere violata Muovere la violazione verso l’alto ricolorando fino a quando è aggiustata attraverso rotazioni e ricolorazioni 7 Esempio:     Inserire 15  Ricolorare   3 muovendo su la violazione Rotate(18) Left-Rotate(7) e ricolorare Prof. Pier Luca Lanzi 10 8 18 11 15 22 26
  24. 24. Alberi red-black: Inserimento • • 25 Qual è l’idea? Inserire x nell’albero. Colorare il nodo x rosso. Solo la proprietà 3 potrebbe essere violata Muovere la violazione verso l’alto ricolorando fino a quando è aggiustata attraverso rotazioni e ricolorazioni Esempio: 10 Inserire 15 18 7 Ricolorare muovendo su 11 22 3 8 la violazione 15 26 Rotate(18) Left-Rotate(7) e ricolorare        Prof. Pier Luca Lanzi
  25. 25. Pseudo-Codice 26 RB-INSERT(T, x) TREE-INSERT(T, x) color[x] ← RED ⊳ only RB property 3 can be violated while x<>root[T] and color[p[x]] = RED do if p[x] = left[p[p[x]] then y ← right[p[p[x]] ⊳ y = aunt/uncle of x if color[y] = RED then <Case 1> else if x = right[p[x]] then <Case 2> ⊳ Case 2 falls into Case 3 <Case 3> else <“then” clause with “left” and “right” swapped> color[root[T]] ← BLACK Prof. Pier Luca Lanzi
  26. 26. Notazione Grafica 27 denota un sottoalbero con una radice nera Tutti i hanno la stessa altezza nera Prof. Pier Luca Lanzi
  27. 27. Inserimento: Caso 1 28 Ricolora C A C D y x B new x D A B oppure con i figli di A scambiati Prof. Pier Luca Lanzi Spinge il nero di C su A e D, e continua ricorsivamente, dato che I parenti di C potrebbero essere rossi
  28. 28. Inserimento: Caso 2 C 29 Left-Rotate(A) C y A y B x B x A Transforma nel Caso 3 Prof. Pier Luca Lanzi L7.29
  29. 29. Inserimento: Caso 3 30 Right-Rotate(C) C B y B C A x A Finito! Nessuna violazione delle proprietà RB Prof. Pier Luca Lanzi L7.30
  30. 30. Analisi • 31 Sommario dell’algoritmo di inserimento Inserisce l’elemento e lo colora di rosso Risalisce l’albero applicando il caso 1, che ricolora i nodi Se il caso 2 e 3 si verificano, applicare una o due rotazioni    • • Esecuzione: O(lg n) con rotazioni che sono O(1) Cancellazione: stessa complessità e stesso numero di rotazioni dell’inserimento (dal libro di testo) Prof. Pier Luca Lanzi
  31. 31. Sommario • • • • 32 Alberi di ricerca bilanciati Alberi di ricerca per i quali un’altezza di O(lg n) è garantita quando sono implementate le funzioni di inserimento/cancellazione dinamica Un albero rosso-nero è 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 quattro vincoli: 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 Inserimento e cancellazione devono mantenere le proprietà RB, hanno complessità O(lg n)         Prof. Pier Luca Lanzi
  32. 32. Alberi Red-Black e Mappe C++ • • • 33 Le STL del C++ non hanno implementazioni di alberi di ricerca Gli alberi red-black sono utilizzati nelle map e nelle multimap Le mappe sono container associativi che memorizzano delle combinazioni di chiave e valore mappato Prof. Pier Luca Lanzi
  33. 33. map C++ • • • • 34 Funzioni operator= Iteratori begin(), end(), rbegin(), rend() Modificatori clear, insert, erase, swap Ricerca count, find, lower_bound, upper_bound     Prof. Pier Luca Lanzi
  34. 34. Esempio: Conta la frequenza delle parole #include <iostream> #include <string> #include <map> int main() { std::map<std::string, int> wordcounts; std::string s; while (std::cin >> s && s != "end") ++wordcounts[s]; while (std::cin >> s && s != "end") std::cout << s << ' ' << wordcounts[s] << 'n'; } Prof. Pier Luca Lanzi 35
  35. 35. Iteratori delle map 36 std::map<std::string, int>::iterator it; for(it=wordcounts.begin(); it!=wordcounts.end(); it++) { // cosa indica *it? } • • • • Le mappe memorizzano un tipo speciale chiamato “pair” Una mappa “map<std::string, int>” memorizza elementi di tipo pair<std::string,int> “pair” e’ raggruppa due elementi accessibili attraverso il campo first e il campo second Le funzioni di insert ed erase lavorano su oggetti di tipo pair Prof. Pier Luca Lanzi
  36. 36. Esempio: Iteratori 37 #include <iostream> #include <string> #include <map> int main() { std::map<std::string, int> wordcounts; std::string s; // legge tutte le parole dall'input fino a quando finisce l'input // o trova end while (std::cin >> s) ++wordcounts[s]; std::map<std::string, int>::iterator it; for(it=wordcounts.begin(); it!=wordcounts.end(); it++) std::cout << it->first << " => " << it->second << std::endl; } Prof. Pier Luca Lanzi

×