SlideShare une entreprise Scribd logo
1  sur  36
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 2010

Stanley B. Lippman, Barbara E. Moo, Josee Lajoie
“C++ Primer”, 5th Edition Addison-Wesley

Prof. Pier Luca Lanzi
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
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
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
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
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
9

Prof. Pier Luca Lanzi
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
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
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
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
Notazione Grafica

27

denota un sottoalbero con una radice nera
Tutti i

hanno la stessa altezza nera

Prof. Pier Luca Lanzi
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
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 Luca Lanzi

L7.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
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
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
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
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
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
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

Contenu connexe

Plus de Pier Luca Lanzi

Plus de Pier Luca Lanzi (20)

GGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaGGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di apertura
 
Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparation
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data exploration
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph mining
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text mining
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rules
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluation
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clustering
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clustering
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clustering
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 Clustering
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensembles
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethods
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rules
 
DMTM Lecture 07 Decision trees
DMTM Lecture 07 Decision treesDMTM Lecture 07 Decision trees
DMTM Lecture 07 Decision trees
 
DMTM Lecture 06 Classification evaluation
DMTM Lecture 06 Classification evaluationDMTM Lecture 06 Classification evaluation
DMTM Lecture 06 Classification evaluation
 
DMTM Lecture 05 Data representation
DMTM Lecture 05 Data representationDMTM Lecture 05 Data representation
DMTM Lecture 05 Data representation
 
DMTM Lecture 04 Classification
DMTM Lecture 04 ClassificationDMTM Lecture 04 Classification
DMTM Lecture 04 Classification
 
DMTM Lecture 03 Regression
DMTM Lecture 03 RegressionDMTM Lecture 03 Regression
DMTM Lecture 03 Regression
 

Dernier

Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 

Dernier (19)

Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 

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

  • 1. Alberi Red Black Algoritmi e Calcolo Parallelo Prof. Pier Luca Lanzi
  • 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. 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. 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. 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. 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. 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
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Notazione Grafica 27 denota un sottoalbero con una radice nera Tutti i hanno la stessa altezza nera Prof. Pier Luca Lanzi
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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