SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Alberi Binari di Ricerca
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

Strutture dati che supportano operazioni di ricerca,
minimo, massimo, prev, next, inserimento, e
cancellazione
Applicazioni: dizionari, code di priorità
L'idea è portare la ricerca binaria
in un albero binario

Prof. Pier Luca Lanzi
Alberi Binari di Ricerca

•
•
•

4

Definizione: albero binario in cui ogni nodo x contiene un
insieme di dati data[x] associati ad una chiave key[x] da
un dominio totalmente ordinato
Le chiavi dei nodi del sottoalbero
sinistro left[x] sono ≤ key[x]
Le chiavi dei nodi del sottoalbero
destro right[x] sono ≥ key[x]

Prof. Pier Luca Lanzi
Alberi Binari di Ricerca:
Ricerca di un Elemento

•
•

•
•

Ricerca dell’elemento 32
Considera la radice x=37,
confronta key[x] con 32
Considera la radice x=24,
confronta key[x] con 32
Trova la chiave
24≤32
Passa al sotto
albero destro

Prof. Pier Luca Lanzi

5

32≤37
Passa al sotto
albero sinistro
Alberi Binari di Ricerca:
Ricerca di un Elemento

•
•
•

6

Ricerca dell’elemento 41
La ricerca si ferma nel sottoalbero destro di 40
Il sottoalbero è vuoto, l’elemento
non è presente nell’albero

?
Prof. Pier Luca Lanzi
Alberi binari di ricerca:
Operazioni Ammesse

•
•
•
•
•

Tree key()
Tree value()
Tree left()
Tree right()
Tree parent()

•
•
•

Tree lookup(Item k)
Tree insert(Item k, Item d)
Tree delete()

7

•
•
•
•
•

Prof. Pier Luca Lanzi

Ogni nodo deve mantenere
Figlio sinistro, destro
Padre
Chiave
Valore

Padre
Chiave, Valore
Figlio Figlio
sinistro destro
9

Ricerca

TREE-SEARCH (x, k)
if x= NIL or k = key[x]
then return x
if k < key[x]
then return
TREE-SEARCH(left[x], k)
else return
TREE-SEARCH(right[x], k)

Prof. Pier Luca Lanzi
Ricerca

10

TREE-SEARCH (x, k)
if x= NIL or k = key[x]
then return x
if k < key[x]
then return
TREE-SEARCH(left[x], k)
else return
TREE-SEARCH(right[x], k)

Prof. Pier Luca Lanzi
Ricerca Iterativa

12

La ricerca può essere riscritta in forma iterativa
ITERATIVE-TREE-SEARCH(x, k)
1 while x ≠ NIL and k ≠ key[x]
2
do if k < key[x]
3
then x ← left[x]
4
else x ← right[x]
5 return x

Prof. Pier Luca Lanzi
Ricerca Ricorsiva/Iterativa

13

Ricorsiva

Iterativa

Prof. Pier Luca Lanzi
Costo Computazionale della Ricerca

•

•
•
•

14

Le operazioni di ricerca sono confinate ai nodi posizionati
lungo un singolo percorso (path) dalla radice ad una foglia
Il tempo di ricerca è Θ(h)
Qual è il caso pessimo?
E il caso ottimo?
h = altezza dell’albero

Prof. Pier Luca Lanzi
Minimo, Massimo,
Elemento Successivo e Precedente

Prof. Pier Luca Lanzi

15
16

Minimo & Massimo

Minimo

Massimo

TREE-MINIMUM (x)
1 while left[x] ≠ NIL
2
do x ← left[x]
3 return x

TREE-MAXIMUM(x)
1 while right[x] ≠ NIL
2
do x ← right[x]
3 return x

Prof. Pier Luca Lanzi
Elemento Successivo

17

TREE-SUCCESSOR(x)
if right[x] ≠ NIL
then return TREE-MINIMUM (right[x])
y ← p[x]
while y≠NIL and x=right[y]
do x ← y
y ← p[y]
return y

Prof. Pier Luca Lanzi
Successore/Predecessore

•

•
•
•

18

Definizione: il successore di un nodo u è il più piccolo
nodo maggiore di u
Due casi
Caso 1: u ha un figlio destro
Il successore u' è il minimo del sottoalbero destro di u
Caso 2: u non ha un figlio destro
Il successore è il primo avo u' tale per cui u sta nel
sottoalbero sinistro di u’





Prof. Pier Luca Lanzi
Successore/Predecessore

Prof. Pier Luca Lanzi

19
Inserimento

20

•

•
35

•

Supponiamo di dover
inserire l’elemento 35

Dove dovrebbe essere
inserito affinché l’albero
rimanga un albero binario
di ricerca ?
Devo cercare la chiave!

Inserimento di una nuova chiave
Ricerca Posizione + Inserimento della foglia
Prof. Pier Luca Lanzi
Inserimento

21

TREE-INSERT(T, z)
T albero di ricerca binaria
1 y ← NIL
2 x ← root[T]
3 while x ≠ NIL
z nodo da inserire
4
do y ← x
key[z] = v
5
if key[z] < key[x]
left[z] = NIL
6
then x ← left[x]
right[z] = NIL
7
else x ← right[x]
8 p[z] ← y
9 if y = NIL
11
then root[T] ← z // Tree T was empty
11
else if key[z] < key[y]
12
then left[y] ← z
13
else right[y] ← z

Prof. Pier Luca Lanzi
Cancellazione: Tre Casi Possibili

Prof. Pier Luca Lanzi

22
Cancellazione: Pseudocodice
TREE-DELETE(T, z)
1 if left[z] = NIL or right[z] = NIL
2
then y ← z
3
else y ← TREE-SUCCESSOR(z)
4 if left[y] ≠ NIL
5
then x ← left[y]
6
else x ← right[y]
7 if x ≠ NIL
8
then p[x] ← p[y]
9 if p[y] = NIL
10
then root[T] ← x
11
else if y = left[p[y]]
12
then left[p[y]] ← x
13
else right[p[y]] ← x
14 if y ≠ z
15
then key[z] ← key[y]
16
copy y's satellite data into z
17 return y
Prof. Pier Luca Lanzi

23
Qual è la complessità delle operazioni di
ricerca, cancellazione, inserimento?
Le operazioni di ricerca, inserimento,
cancellazione sono O(h) per un albero
binario di ricerca di altezza h
Qual è il caso peggiore? Il caso migliore?
L’altezza attesa di un albero binario
di ricerca con n nodi è O(lg n)

Prof. Pier Luca Lanzi
Alberi Bilanciati?

•
•
•

25

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

Prof. Pier Luca Lanzi
Esempio di Operazione di Bilanciamento

v

26

u

u

v
T3
T1
T2

T1

Prof. Pier Luca Lanzi

T2

T3
Alberi Bilanciati

•
•
•

•
•

27

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)




Prof. Pier Luca Lanzi
Sommario

•

28

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

Weitere ähnliche Inhalte

Mehr von Pier Luca Lanzi

11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i VideogiochiPier Luca Lanzi
 
Breve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiBreve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiPier Luca Lanzi
 
Global Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomeGlobal Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomePier Luca Lanzi
 
Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Pier Luca Lanzi
 
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...Pier Luca Lanzi
 
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 aperturaPier Luca Lanzi
 
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, 2018Pier Luca Lanzi
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationPier Luca Lanzi
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationPier Luca Lanzi
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningPier Luca Lanzi
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningPier Luca Lanzi
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesPier Luca Lanzi
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationPier Luca Lanzi
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringPier Luca Lanzi
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringPier Luca Lanzi
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringPier Luca Lanzi
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringPier Luca Lanzi
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesPier Luca Lanzi
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsPier Luca Lanzi
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesPier Luca Lanzi
 

Mehr von Pier Luca Lanzi (20)

11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi
 
Breve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiBreve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei Videogiochi
 
Global Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomeGlobal Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning Welcome
 
Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018
 
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
 
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
 

Kürzlich hochgeladen

Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 

Kürzlich hochgeladen (8)

Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 

Algoritmi e Calcolo Parallelo 2012/2013 - Alberi Binari di Ricerca

  • 1. Alberi Binari di Ricerca 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 Strutture dati che supportano operazioni di ricerca, minimo, massimo, prev, next, inserimento, e cancellazione Applicazioni: dizionari, code di priorità L'idea è portare la ricerca binaria in un albero binario Prof. Pier Luca Lanzi
  • 4. Alberi Binari di Ricerca • • • 4 Definizione: albero binario in cui ogni nodo x contiene un insieme di dati data[x] associati ad una chiave key[x] da un dominio totalmente ordinato Le chiavi dei nodi del sottoalbero sinistro left[x] sono ≤ key[x] Le chiavi dei nodi del sottoalbero destro right[x] sono ≥ key[x] Prof. Pier Luca Lanzi
  • 5. Alberi Binari di Ricerca: Ricerca di un Elemento • • • • Ricerca dell’elemento 32 Considera la radice x=37, confronta key[x] con 32 Considera la radice x=24, confronta key[x] con 32 Trova la chiave 24≤32 Passa al sotto albero destro Prof. Pier Luca Lanzi 5 32≤37 Passa al sotto albero sinistro
  • 6. Alberi Binari di Ricerca: Ricerca di un Elemento • • • 6 Ricerca dell’elemento 41 La ricerca si ferma nel sottoalbero destro di 40 Il sottoalbero è vuoto, l’elemento non è presente nell’albero ? Prof. Pier Luca Lanzi
  • 7. Alberi binari di ricerca: Operazioni Ammesse • • • • • Tree key() Tree value() Tree left() Tree right() Tree parent() • • • Tree lookup(Item k) Tree insert(Item k, Item d) Tree delete() 7 • • • • • Prof. Pier Luca Lanzi Ogni nodo deve mantenere Figlio sinistro, destro Padre Chiave Valore Padre Chiave, Valore Figlio Figlio sinistro destro
  • 8. 9 Ricerca TREE-SEARCH (x, k) if x= NIL or k = key[x] then return x if k < key[x] then return TREE-SEARCH(left[x], k) else return TREE-SEARCH(right[x], k) Prof. Pier Luca Lanzi
  • 9. Ricerca 10 TREE-SEARCH (x, k) if x= NIL or k = key[x] then return x if k < key[x] then return TREE-SEARCH(left[x], k) else return TREE-SEARCH(right[x], k) Prof. Pier Luca Lanzi
  • 10. Ricerca Iterativa 12 La ricerca può essere riscritta in forma iterativa ITERATIVE-TREE-SEARCH(x, k) 1 while x ≠ NIL and k ≠ key[x] 2 do if k < key[x] 3 then x ← left[x] 4 else x ← right[x] 5 return x Prof. Pier Luca Lanzi
  • 12. Costo Computazionale della Ricerca • • • • 14 Le operazioni di ricerca sono confinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia Il tempo di ricerca è Θ(h) Qual è il caso pessimo? E il caso ottimo? h = altezza dell’albero Prof. Pier Luca Lanzi
  • 13. Minimo, Massimo, Elemento Successivo e Precedente Prof. Pier Luca Lanzi 15
  • 14. 16 Minimo & Massimo Minimo Massimo TREE-MINIMUM (x) 1 while left[x] ≠ NIL 2 do x ← left[x] 3 return x TREE-MAXIMUM(x) 1 while right[x] ≠ NIL 2 do x ← right[x] 3 return x Prof. Pier Luca Lanzi
  • 15. Elemento Successivo 17 TREE-SUCCESSOR(x) if right[x] ≠ NIL then return TREE-MINIMUM (right[x]) y ← p[x] while y≠NIL and x=right[y] do x ← y y ← p[y] return y Prof. Pier Luca Lanzi
  • 16. Successore/Predecessore • • • • 18 Definizione: il successore di un nodo u è il più piccolo nodo maggiore di u Due casi Caso 1: u ha un figlio destro Il successore u' è il minimo del sottoalbero destro di u Caso 2: u non ha un figlio destro Il successore è il primo avo u' tale per cui u sta nel sottoalbero sinistro di u’   Prof. Pier Luca Lanzi
  • 18. Inserimento 20 • • 35 • Supponiamo di dover inserire l’elemento 35 Dove dovrebbe essere inserito affinché l’albero rimanga un albero binario di ricerca ? Devo cercare la chiave! Inserimento di una nuova chiave Ricerca Posizione + Inserimento della foglia Prof. Pier Luca Lanzi
  • 19. Inserimento 21 TREE-INSERT(T, z) T albero di ricerca binaria 1 y ← NIL 2 x ← root[T] 3 while x ≠ NIL z nodo da inserire 4 do y ← x key[z] = v 5 if key[z] < key[x] left[z] = NIL 6 then x ← left[x] right[z] = NIL 7 else x ← right[x] 8 p[z] ← y 9 if y = NIL 11 then root[T] ← z // Tree T was empty 11 else if key[z] < key[y] 12 then left[y] ← z 13 else right[y] ← z Prof. Pier Luca Lanzi
  • 20. Cancellazione: Tre Casi Possibili Prof. Pier Luca Lanzi 22
  • 21. Cancellazione: Pseudocodice TREE-DELETE(T, z) 1 if left[z] = NIL or right[z] = NIL 2 then y ← z 3 else y ← TREE-SUCCESSOR(z) 4 if left[y] ≠ NIL 5 then x ← left[y] 6 else x ← right[y] 7 if x ≠ NIL 8 then p[x] ← p[y] 9 if p[y] = NIL 10 then root[T] ← x 11 else if y = left[p[y]] 12 then left[p[y]] ← x 13 else right[p[y]] ← x 14 if y ≠ z 15 then key[z] ← key[y] 16 copy y's satellite data into z 17 return y Prof. Pier Luca Lanzi 23
  • 22. Qual è la complessità delle operazioni di ricerca, cancellazione, inserimento? Le operazioni di ricerca, inserimento, cancellazione sono O(h) per un albero binario di ricerca di altezza h Qual è il caso peggiore? Il caso migliore? L’altezza attesa di un albero binario di ricerca con n nodi è O(lg n) Prof. Pier Luca Lanzi
  • 23. Alberi Bilanciati? • • • 25 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 Prof. Pier Luca Lanzi
  • 24. Esempio di Operazione di Bilanciamento v 26 u u v T3 T1 T2 T1 Prof. Pier Luca Lanzi T2 T3
  • 25. Alberi Bilanciati • • • • • 27 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)   Prof. Pier Luca Lanzi
  • 26. Sommario • 28 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