1 © Alberto Montresor Algoritmi e Strutture Dati Alberi binari di ricerca Alberto Montresor...

Post on 01-May-2015

221 views 0 download

Transcript of 1 © Alberto Montresor Algoritmi e Strutture Dati Alberi binari di ricerca Alberto Montresor...

1© Alberto Montresor

Algoritmi e Strutture DatiAlberi binari di ricerca

Alberto MontresorUniversità di Trento

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

2© Alberto Montresor

DizionariDizionari

✦Dizionario

✦Insieme dinamico che implementa le seguenti funzionalità

Item lookup(Item k)

insert(Item k, Item v)

remove(Item k)

✦Esempi di implementazione

✦Array ordinato✦ Ricerca O(log n), inserimento/cancellazione O(n)

✦Lista non ordinata✦ Ricerca/cancellazione O(n), inserimento O(1)

3© Alberto Montresor

Alberi binari di ricerca (ABR)Alberi binari di ricerca (ABR)

✦Idea “ispiratrice”

✦Portare l'idea di ricerca binaria in un albero

✦Definizione

✦Ogni nodo u contiene una chiave u.key associata ad un valore u.value

✦Le chiavi appartengono ad un insieme totalmente ordinato

✦Proprietà

✦ Le chiavi dei nodi del sottoalbero sinistro di u sono minori di u.key

✦ Le chiavi dei nodi del sottoalbero destro di u sono maggiori di u.key

10

6 15

4 8 12 18

4© Alberto Montresor

Alberi binari di ricerca (ABR)Alberi binari di ricerca (ABR)

✦Proprietà di ricerca

✦Le proprietà 1. e 2. permettono di realizzare un algoritmo di ricerca dicotomica

✦Domanda – Proprietà di ordine

✦Come devo visitare l'albero per ottenere la lista ordinata dei valori?

✦Dettagli implementativi

✦Ogni nodo deve mantenere✦Figlio sinistro, destro✦Padre✦Chiave✦Valore

Figliosinistro

Padre

Figliodestro

Key, Value

5© Alberto Montresor

Alberi binari di ricerca: SpecificaAlberi binari di ricerca: Specifica

✦Operazioni ammesse su ABR

Tree key()

Tree value()

Tree left()

Tree right()

Tree parent()

Tree lookup(Item k)

Tree insert(Item k, Item d)

Tree delete()

Tree successorNode(Item T)

Tree predecessorNode(Item T)

Tree min()

Tree max()

6© Alberto Montresor

4 < 64 sta nel sottoalbero sinistro di 6

4 < 64 sta nel sottoalbero sinistro di 6

Ricerca: esempioRicerca: esempio

Ricerca del valore 4Ricerca del valore 4

66

22 88

11 44

33

T

7© Alberto Montresor

4 > 24 sta nel sottoalbero destro di 2

4 > 24 sta nel sottoalbero destro di 2

Ricerca: esempioRicerca: esempio

T

66

22 88

11 44

33

Ricerca del valore 4Ricerca del valore 4

8© Alberto Montresor

4 = 4trovato!

4 = 4trovato!

Ricerca: esempioRicerca: esempio

T

66

22 88

11 44

33

Ricerca del valore 4Ricerca del valore 4

9© Alberto Montresor

Ricerca: ImplementazioneRicerca: Implementazione

Ricorsiva

Iterativa

10

© Alberto Montresor

Ricerca del minimo e del massimo: EsempiRicerca del minimo e del massimo: Esempi

Sottoalbero conradice 2:

- minimo 1

- massimo 4 66

22

11

33

4

T

Sottoalbero conradice 8:

- minimo 8

- massimo 15

88

44 1212

151599

11

© Alberto Montresor

Ricerca del minimo e del massimo: Pseudo-codiceRicerca del minimo e del massimo: Pseudo-codice

12

© Alberto Montresor

Ricerca del successore/predecessoreRicerca del successore/predecessore

✦Definizione

✦Il successore di un nodo u è il più piccolo nodo maggiore di u

✦Due casi

✦u ha un figlio destro

✦Il successore u' è il minimodel sottoalbero destro di u

✦Esempio: successore di 2 è 3

T

6

1 4

8

3

12

159

2

u

u'

13

© Alberto Montresor

Ricerca del successore/predecessoreRicerca del successore/predecessore

✦Definizione

✦Il successore di un nodo u è il più piccolo nodo maggiore di u

✦Due casi

✦u non ha un figlio destro

✦Il successore è il primo avo u' tale per cui u sta nel sottoalbero sinistro di u'

✦Esempio: successore di 4 è 6

T

66

11 33

88

44

1212

151599

22

u

u'

14

© Alberto Montresor

Ricerca del successore: Pseudo-codice (iterativo)Ricerca del successore: Pseudo-codice (iterativo)

15

© Alberto Montresor

Ricerca: costo computazionaleRicerca: costo computazionale

✦In generale

✦Le operazioni di ricerca sonoconfinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia

✦Tempo di ricerca: O(h)

✦Domanda

✦Qual è il caso pessimo?

✦Domanda

✦Qual è il caso ottimo?

h = altezza dell’albero

16

© Alberto Montresor

InserimentoInserimento

T

5 < 6Inserimento valore 5

66

22

11

33

4

88

44 1212

151599

5 > 2

55

5 > 4

17

© Alberto Montresor

Inserimento: pseudo-codice (iterativo)Inserimento: pseudo-codice (iterativo)

18

© Alberto Montresor

Inserimento: pseudo-codice (iterativo)

19

© Alberto Montresor

CancellazioneCancellazione

✦Caso 1: Il nodo u da eliminare non ha figli

✦Semplicemente si elimina

✦Esempio:

✦Eliminazione nodo 5

T

66

22

11

33

4

88

44 1212

15159955

u

20

© Alberto Montresor

CancellazioneCancellazione

✦Caso 2: Il nodo u da eliminare ha un unico figlio f

✦Si elimina u

✦Si attacca f all'ex-padre p di uin sostituzione di u (short-cut)

✦Esempio:

✦Cancellazione di 4

T

66

22

11

33

88

44 1212

151599

u

f

p

21

© Alberto Montresor

CancellazioneCancellazione

✦Caso 3: Il nodo u da eliminare ha due figli

✦Si individua il successore s del nodo uIl successore non ha figlio sinistro

✦Si “stacca” il successore

✦Si attacca l'eventualefiglio destro di s alpadre di s (short-cut)

✦Si copia s su u

✦Si rimuove il nodo s

T

77

22

11

33

88

55 1212

151599s

u

44

66

33

22

© Alberto Montresor

Cancellazione: Pseudo-codiceCancellazione: Pseudo-codice

23

© Alberto Montresor

Cancellazione – Dimostrazione di correttezza

✦Caso 1 - nessun figlio

✦Eliminare foglie non cambia la proprietà di ordine dei nodi rimanenti

✦Caso 2 - solo un figlio (destro o sinistro)

✦Se u è il figlio destro (sinistro) di p, tutti i i valori nel sottoalbero di f sono maggiori (minori) di p

✦Quindi f può essere attaccato come figlio destro (sinistro) di p al posto di u

✦Caso 3 - due figli

✦Il successore s ✦è sicuramente maggiore di tutti i nodi del sottoalbero sinistro di u✦è sicuramente minore di tutti i nodi del sottoalbero destro di u

✦Quindi può essere sostituito a u

24

© Alberto Montresor

Modifica: costo computazionaleModifica: costo computazionale

✦In generale

✦Le operazioni di modifica sonoconfinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia

✦Tempo di ricerca: O(h)

h = altezza dell’albero

25

© Alberto Montresor

Complessità mediaComplessità media

✦Qual è l'altezza media di un albero di ricerca?

✦Caso generale (inserimenti + cancellazione)✦Difficile da trattare

✦Caso “semplice”: inserimenti in ordine casuale✦E' possibile dimostrare che l'altezza media è O(log n)

✦Fattore di bilanciamento

✦Il fattore di bilanciamento β(v) di un nodo v è la massima differenza di altezza fra i sottoalberi di v

✦Esempio: albero perfetto:

✦β(v)=0 per ogni nodo v

✦In generale:

✦Sono necessarie tecniche per mantenere bilanciato l'albero

26

© Alberto Montresor

Algoritmi di bilanciamentoAlgoritmi di bilanciamento

✦Alberi AVL (Adel'son-Vel'skii e Landis, 1962)

✦β(v) ≤ 1 per ogni nodo v

✦Bilanciamento ottenuto tramite rotazioni

✦B-Alberi (Bayer, McCreight, 1972)

✦β(v) = 0 per ogni nodo v

✦Specializzati per strutture in memoria secondaria

✦Alberi 2-3 (Hopcroft, 1983)

✦β(v) = 0 per ogni nodo v

✦Bilanciamento ottenuto tramite merge/split, grado variabile

✦B-alberi binari (Andersson, 1993)

✦Alberi Red-Black (Bayer, 1972)

27

© Alberto Montresor

T3

T3

T1

T2

Esempio di rotazione

v

u

T1T2

v

u

28

© Alberto Montresor

Alberi Rosso-Nero (Red-Black Treee, RB-Tree)

✦Un albero Red-Black è un albero binario di ricerca in cui:

✦Ogni nodo è colorato di rosso o di nero

✦Le chiavi vengono mantenute solo nei nodi interni dell’albero

✦Le foglie sono costituite da nodi nil

✦Un albero Red-Black deve soddisfare i seguenti vincoli:

1. La radice è nera

✦ Tutte le foglie sono nere

✦ Entrambi i figli di un nodo rosso sono neri

✦ Tutti i cammini semplici da ogni nodo u ad una delle foglie contenute nel sottoalbero radicato in u hanno lo stesso numero di nodi neri

29

© Alberto Montresor

Alberi Red-Black

✦Ogni nodo mantiene

✦parent puntatore al padre

✦left, right puntatori ai figli sinistro/destro

✦color colore

✦key, data chiave e dati

✦Nodo Nil

✦nodo sentinella il cui scopo è evitare di trattare diversamente i puntatori ai nodi dai puntatori nil

✦al posto di un puntatore nil, si usa un puntatore ad un nodo Nil

✦ne esiste solo uno, per risparmiare memoria

✦nodo con figli Nil → foglia nell'ABR corrispondente

30

© Alberto Montresor

Alberi Red-Black

✦Definizione:

✦Il numero di nodi neri lungo ogni percorso da un nodo v (escluso) ad ogni foglia (inclusa) del suo sottoalbero è detto altezza nera di v, indicato b(v)

✦Ben definito perché tutti i percorsi hanno lo stesso numero di nodi neri (regola 4)

✦Definizione:

✦L’altezza nera di un albero Red-Black è pari all’altezza nera della sua radice

31

© Alberto Montresor

Alberi Red-Black: esempio IAlberi Red-Black: esempio I

3. Entrambi i figli di un nodo rosso sono neri.Ma un nodo nero può avere figli neri!

30

70

85

5

60

80

10

90

15

20

50

40 55

65

NilNil

Nil Nil Nil

Nil Nil NilNil

Nil Nil Nil Nil NilNil

32

© Alberto Montresor

Alberi Red-Black: esempio IAlberi Red-Black: esempio I

4. Ogni percorso da un nodo interno ad un nodo Nil ha lo stesso numero di nodi neri.Altezza nera di questo albero: 3

30

70

85

5

60

80

10

90

15

20

50

40 55

65

NilNil

Nil Nil Nil

Nil Nil NilNil

Nil Nil Nil Nil NilNil

33

© Alberto Montresor

Alberi Red-Black: più colorazioni sono possibiliAlberi Red-Black: più colorazioni sono possibili

30

70

85

5

60

80

10

90

15

20

50

40 55

65

NilNil

Nil Nil Nil

Nil Nil NilNil

Nil Nil Nil Nil NilNil

Albero Red-Black con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil

34

© Alberto Montresor

Alberi Red-Black: più colorazioni sono possibiliAlberi Red-Black: più colorazioni sono possibili

30

70

85

5

60

80

10

90

15

20

50

40 55

65

NilNil

Nil Nil Nil

Nil Nil NilNil

Nil Nil Nil Nil NilNil

Albero Red-Black con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil

35

© Alberto Montresor

Alberi Red-Black: colorazione diversa, altezza nera diversaAlberi Red-Black: colorazione diversa, altezza nera diversa

30

70

8560

80

10

90

15

20

50 65Nil Nil Nil Nil

Nil Nil Nil Nil Nil Nil NilNil

Albero RB con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil

36

© Alberto Montresor

Alberi Red-Black: colorazione diversa, altezza nera diversaAlberi Red-Black: colorazione diversa, altezza nera diversa

30

70

8560

80

10

90

15

20

50 65Nil Nil Nil Nil

Nil Nil Nil Nil Nil Nil NilNil

Stesso albero con 2 nodi neri lungo ogni percorso dalla radice ai nodi Nil

37

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

38

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

Per vincolo sull'altezza nera ci possono essere al più 3 nodi neri lungo un percorso!

39

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

Impossibile!Perché dovremmo violare vincolo 3

La radice è nera. Supponiamo che 60 e 70 siano entrambi neri.

40

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

Quindi uno di questidue nodi deve essererosso

41

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

Impossibile per ilvincolo sulla lunghezza

Proviamo a colorare di rosso il nodo 60.Esiste un percorso con 2 nodi neriEsiste un percorso con 3 nodi neri

42

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

Esistono due percorsicon 2 soli nodi neri

Proviamo a colorare di rosso il nodo 70

43

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi neri lungo un percorso!

44

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

Questa sarebbel’unica possibilità!

Impossibile!Perché dovremmo violare vincolo 1

Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi neri lungo un percorso!

45

© Alberto Montresor

Alberi Red-Black: questo albero può essere un albero RB?Alberi Red-Black: questo albero può essere un albero RB?

30

70

6010

15

20

50Nil Nil Nil Nil Nil Nil

40 55

Nil Nil NilNil

85

Nil

Questo albero NON può essere un albero Red-Black!

46

© Alberto Montresor

Alberi Red-Black: ProprietàAlberi Red-Black: Proprietà

✦Da cui segue:

✦Le operazioni di ricerca hanno costo O(log n)

✦Cosa succede per le operazioni di modifica?

47

© Alberto Montresor

InserimentiInserimenti

✦Durante la modifica di un albero Red-Black:

✦è possibile che le condizioni di bilanciamento risultino violate.

✦Quando le proprietà Red-Black vengono violate si può agire:

✦modificando i colori nella zona della violazione;

✦operando dei ribilanciamenti dell’albero tramite rotazioni:✦Rotazione destra✦Rotazione sinistra

48

© Alberto Montresor

Rotazione a sinistraRotazione a sinistra

A

B C

y

x

p

✦Operazioni

(1) far diventare B figlio destro di x

(2) far diventare x il figlio sinistro di y

(3) far diventare y figlio di p, il vecchio padre di x

49

© Alberto Montresor

Rotazione a sinistraRotazione a sinistra

A B

C

y

x

p

✦Operazioni

(1) far diventare B figlio destro di x

(2) far diventare x il figlio sinistro di y

(3) far diventare y figlio di p, il vecchio padre di x

50

© Alberto Montresor

Rotazione a sinistraRotazione a sinistra

A B

C

y

x

p

✦Operazioni

(1) far diventare B figlio destro di x

(2) far diventare x il figlio sinistro di y

(3) far diventare y figlio di p, il vecchio padre di x

51

© Alberto Montresor

Inserimento in alberi Red-Black

✦Inserimento

✦Ricerca della posizione usando la stessa procedura usata per gli alberi binari di ricerca

✦Coloriamo il nuovo nodo di rosso

✦Quale delle quattro proprietà può essere violata?

✦Ripasso:

✦la radice è nera

✦i nodi Nil sono neri;

✦se un nodo è rosso, allora entrambi i suoi figli sono neri;

✦ogni percorso da un nodo interno ad una foglia ha lo stesso numero di nodi neri

52

© Alberto Montresor

Come modificare la insertNode()

balanceTree(n)

53

© Alberto Montresor

Inserimento in alberi Red-Black

✦Come sistemare:

✦Ci spostiamo verso l’alto lungo il percorso di inserimento ✦per ripristinare la proprietà 3 (red-black)✦spostando le violazioni verso l’alto rispettando il vincolo 4 (mantenendo l’altezza nera dell’albero)

✦Al termine, coloriamo la radice di nero

✦Nota

✦Le operazioni di ripristino sono necessarie solo quando due nodi consecutivi sono rossi!

54

© Alberto Montresor

balanceNode(Tree t)

✦Nodi coinvolti

✦Il nodo inserito t

✦Suo padre p

✦Suo nonno n

✦Suo zio z

p

t

n

z

55

© Alberto Montresor

Inserimento - 7 casi possibili

✦Caso 1:

✦Nuovo nodo t non ha padre

✦Primo nodo ad essere inserito osiamo risaliti fino alla radice

✦Si colora t di nero

✦Caso 2

✦Padre p di t è nero

✦Nessun vincolo violato

56

© Alberto Montresor

Inserimento - 7 casi possibili

✦Caso 1:

✦Nuovo nodo t non ha padre

✦Primo nodo ad essere inserito

✦Si colora t di nero

✦Caso 2

✦Padre p di t è nero

✦Nessun vincolo violato

57

© Alberto Montresor

Inserimento - 7 casi possibili

✦Caso 3

✦t rosso

✦p rosso

✦z rosso✦Se z è rosso, è possibile colorare di nero p, z, e di rosso n. ✦Poiché tutti i cammini che passano per z e p passano per n, la lunghezza dei cammini neri non è cambiata. ✦Il problema può essere ora sul nonno:

✦violato vincolo (1), ovvero n può essere una radice rossa ✦violato vincolo (3), ovvero n rosso può avere un padre rosso.

✦Poniamo t = n, e il ciclo continua.

58

© Alberto Montresor

Inserimento - 7 casi possibili

✦Caso 3

✦t rosso

✦p rosso

✦z rosso

✦Se z è rosso, è possibile colorare di nero p, z, e di rosso n.

✦Poiché tutti i cammini che passano per z e p passano per n, la lunghezza dei cammini neri non è cambiata.

✦Il problema può essere ora sul nonno: ✦violato vincolo (1), ovvero n può essere una radice rossa ✦violato vincolo (3), ovvero n rosso può avere un padre rosso.

✦Poniamo t = n, e il ciclo continua.

59

© Alberto Montresor

Inserimento - 7 casi possibili

✦Caso 4a,4b

✦t rosso

✦p rosso

✦z nero

✦Si assuma che t sia figlio destro di p e che p sia figlio sinistro di n

✦Una rotazione a sinistra a partire dal nodo p scambia i ruoli di t e p ottenendo il caso (5a), dove i nodi rossi in conflitto sul vincolo (3) sono entrambi figli sinistri dei loro padri

✦I nodi coinvolti nel cambiamento sono p e t, entrambi rossi, quindi la lunghezza dei cammini neri non cambia

60

© Alberto Montresor

Inserimento - 7 casi possibili

✦Caso 4a,4b

✦t rosso

✦p rosso

✦z nero

✦Si assuma che t sia figlio destro di p e che p sia figlio sinistro di n

✦Una rotazione a sinistra a partire dal nodo p scambia i ruoli di t e p ottenendo il caso (5a), dove i nodi rossi in conflitto sul vincolo (3) sono entrambi figli sinistri dei loro padri

✦I nodi coinvolti nel cambiamento sono p e t, entrambi rossi, quindi la lunghezza dei cammini neri non cambia

61

© Alberto Montresor

Inserimento - 7 casi possibili

✦Caso 5a,5b

✦t rosso

✦p rosso

✦z nero

✦Si assuma che t sia figlio sinistro di p e p sia figlio sinistro di n

✦Una rotazione a destra a partire da n ci porta ad una situazione in cui t e n sono figli di p

✦Colorando n di rosso e p di nero ci troviamo in una situazione in cui tutti i vincoli Red-Black sono rispettati

✦in particolare, la lunghezza dei cammini neri che passano per la radice è uguale alla situazione iniziale

62

© Alberto Montresor

Inserimento - 7 casi possibili

✦Caso 5a,5b

✦t rosso

✦p rosso

✦z nero

✦Si assuma che t sia figlio sinistro di p e p sia figlio sinistro di n

✦Una rotazione a destra a partire da n ci porta ad una situazione in cui t e n sono figli di p

✦Colorando n di rosso e p di nero ci troviamo in una situazione in cui tutti i vincoli Red-Black sono rispettati

✦in particolare, la lunghezza dei cammini neri che passano per la radice è uguale alla situazione iniziale

63

© Alberto Montresor

All together, now!

64

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

8560

80

10

90

15

20

50

40 55

65Nil Nil Nil Nil

Nil Nil NilNil

Nil Nil Nil Nil NilNil

16T

t

Nil Nil

65

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

8560

80

10

90

15

20

50

40 55

65Nil Nil Nil

Nil Nil NilNil

Nil Nil Nil Nil NilNil

16

T

t

Caso 2: nessun cambiamentoNon cambia l’altezza neradi nessun nodo!

Nil Nil

p è nero, t è rosso

66

© Alberto Montresor

Inserimento in alberi Red-Black: Inserimento in alberi Red-Black:

30

70

8560

80

10

90

15

20

50

40 55

65Nil Nil Nil

Nil Nil NilNil

Nil Nil Nil Nil NilNil

T42x

Nil Nil

Nil

67

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

8560

80

10

90

15

20

50

40 55

65Nil Nil Nil

Nil NilNil

Nil Nil Nil Nil NilNil

T

Nil

42

Vincolo 3 è violato

Caso 3: z è rosso

Nil Nil

t

p è rosso, t è rosso

p

n

z

68

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

8560

80

10

90

15

20

50

40 55

65Nil Nil Nil

Nil NilNil

Nil Nil Nil Nil NilNil

T

Nil

42

Nil Nil

Coloriamo di nero p Coloriamo di nero zColoriamo di rosso n t

p

n

z

p è rosso, t è rosso

69

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

8560

80

10

90

15

20

50

40 55

65Nil Nil Nil

Nil NilNil

Nil Nil Nil Nil NilNil

T

Nil

42

t

Nil Nil

Il padre del padre di t è il nuovo t

p è rosso, t è rosso

Vincolo 3 è ripristinatoAltri vincoli mai stativiolati

70

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

8560

80

10

90

15

20

50

40 55

65Nil Nil Nil

Nil NilNil

Nil Nil Nil Nil NilNil

T

Nil

42

t

Nil Nil

Vincolo 3 è nuovamente violato tra il nuovo t e suo padre

Caso 5a: z è nero

p è rosso, t è rosso

p

n

z

71

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

8560

80

10

90

15

20

50

40 55

65Nil Nil Nil

Nil NilNil

Nil Nil Nil Nil NilNil

T

Nil

42

x

Nil Nil

Coloriamo di nero tColoriamo di rosso nRotazione sinistra

Caso 5a: z è nero

p è rosso, t è rosso

72

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

85

60

80

10

90

15

20 50

40 55 65Nil Nil Nil

Nil NilNil Nil

Nil Nil Nil Nil

Nil

T

Nil

42

t

Nil Nil

Caso 5a: z è nero

p è rosso, t è rosso

Vincolo 3 è ripristinatoAltri vincoli mai stativiolati

Abbiamo finito

73

© Alberto Montresor

Inserimento in alberi Red-BlackInserimento in alberi Red-Black

30

70

85

60

80

10

90

15

20 50

40 55 65Nil Nil Nil

Nil NilNil Nil

Nil Nil Nil Nil

Nil

T

Nil

42

x

Nil Nil

L’unico caso un cui si procede a ripristinare verso l’alto è il caso 3. Negli altri casi, si esce dal while e si termina

74

© Alberto Montresor

Inserimento: complessità

✦Totale: O(log n)

✦O(log n) per scendere fino al punto di inserimento

✦O(1) per effettuare l'inserimento

✦O(log n) per risalire e “aggiustare”(caso pessimo – solo nel caso 3)

✦Esiste anche la possibilità di effettuare una “top-down” insertion

✦Scendere fino al punto di inserimento, “aggiustando” l'albero mano a mano

✦Effettuare l'inserimento in una foglia

75

© Alberto Montresor

Cancellazione in RB

✦L’algoritmo di cancellazione per alberi RB è costruito sull’algoritmo di cancellazione per alberi binari di ricerca

✦Dopo la cancellazione si deve decidere se è necessario ribilanciare o meno

✦Le operazioni di ripristino del bilanciamento sono necessarie solo quando il nodo cancellato è nero! (perché?)

76

© Alberto Montresor

Cancellazione in RB

✦Se il nodo “cancellato” è rosso

✦altezza nera invariata

✦non sono stati creati nodi rossi consecutivi

✦la radice resta nera

✦Se il nodo “cancellato” è nero

✦possiamo violare il vincolo 1: la radice può essere un nodo rosso

✦possiamo violare il vincolo 3: se il padre e uno dei figli del nodocancellato erano rossi

✦abbiamo violato il vincolo 4: altezza nera cambiata

✦L’algoritmo balanceDelete(T,t) ripristina la proprietà Red-Black con rotazioni e cambiamenti di colore:

✦ci sono 4 casi possibili (e 4 simmetrici)!

77

© Alberto Montresor

Cancellazione

if u.color = BLACK then balanceDelete(T, t)

78

© Alberto Montresor

Cancellazione - 8 casi possibili

79

© Alberto Montresor

Cancellazione - 8 casi possibiliCancellazione - 8 casi possibili

80

© Alberto Montresor

Cancellazione in RBCancellazione in RB

81

© Alberto Montresor

Cancellazione in RBCancellazione in RB

✦L’operazione di cancellazione è concettualmente complicata!

✦Ma efficiente:

✦Dal caso (1) si passa ad uno dei casi (2), (3), (4)

✦Dal caso (2) si torna ad uno degli altri casi, ma risalendo di un livello l’albero

✦Dal caso (3) si passa al caso (4)

✦Nel caso (4) si termina

✦Quindi

✦In altre parole, è possibile visitare al massimo un numero O(log n) di casi, ognuno dei quali è gestito in tempo O(1)

82

© Alberto Montresor

Esercizi

✦Esercizio - visita non ricorsiva

✦Scrivere l’algoritmo non ricorsivo che effettua un attraversamento in ordine di un ABR

✦Qual è la sua complessità

✦Esercizio - limite inferiore

✦Dimostrare: poiché l'ordinamento basato su confronti di n elementi è Ω(n log n), allora qualunque algoritmo basato su confronti per costruire un ABR è Ω(n log n)

✦Esercizio - proprietà albero

✦Dimostrate che se un nodo in un ABR ha due figli, allora il suo successore non ha un figlio sinistro e il suo predecessore non ha un figlio destro

✦Esercizio

✦L'operazione di cancellazione è commutativa? Nel senso che cancellare x e y oppure cancellare y e x produce lo stesso ABR?