Algoritmi e Strutture Dati Alberi Binari di Ricerca.

99
Algoritmi e Strutture Dati Alberi Binari di Ricerca

Transcript of Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Page 1: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Algoritmi e Strutture Dati

Alberi Binari di Ricerca

Page 2: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca

Motivazioni • gestione e ricerche in grosse quantità di

dati• liste ed array non sono adeguati perché

inefficienti in tempo O(n) o in spazio

Esempi: • Mantenimento di archivi (DataBase) • In generale, mantenimento e gestione di

corpi di dati su cui si effettuano molte ricerche.

Page 3: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca

Definizione: Un albero binario di ricerca è un albero binario che soddisfa la seguente proprietà:

se X è un nodo e Y è un nodo nel sottoalbero si-nistro di X, allora key[Y] key[X]; se Y è un nodo nel sottoablero destro di X allora key[Y] key[X]

6

2

4

3

1

8

T

Page 4: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca

Proprietà degli ABR

Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X

Assumiamo che i valori nei nodi dell’alberosiano tutti distinti.

Assumiamo che i valori nei nodi (le chiavi) pos-sano essere ordinati.

6

2

4

3

1

8

T

Page 5: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca: esempio

Ricerca del valore 4 6

2

4

3

1

8

T

Proprietà degli ABR

Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X

Page 6: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca: esempio

Ricerca del valore 4 6

2

4

3

1

8

4 < 6T

Proprietà degli ABR

Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X

Page 7: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca: esempio

6

2

4

3

1

8

4 sta nel sottoalbero sinistro di 6

TRicerca del valore 4

Proprietà degli ABR

Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X

Page 8: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca: esempio

6

2

4

3

1

8

4 > 2T

Ricerca del valore 4

Proprietà degli ABR

Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X

Page 9: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca: esempio

6

2

4

3

1

8

4 sta nel sottoalbero destro di 2

TRicerca del valore 4

Proprietà degli ABR

Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X

Page 10: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi binari di ricerca: esempio

6

2

4

3

1

8

4 = 4 : Trovato!T

Ricerca del valore 4

Proprietà degli ABR

Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X

Page 11: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

In generale, la ricerca è confinata ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia

h = altezza dell’albero

Alberi binari di ricerca

Tempo di ricerca = O(h)

Page 12: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

L’ADT albero binario di ricerca

• È una specializzazione dell’ADT albero binario• Gli elementi statici sono essenzialmente gli

stessi, l’unica differenza è che si assume che i dati contenuti (le chiavi) siano ordinabili secondo qualche relazione d’ordine.

Figlio_sinistro

Padre

Figlio_destro

Key

typedef *nodo ARB;

struct {

ARB padre;

elemento key;

ARB figlio_destro, figlio_sinsitro;

} nodo;

Page 13: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

L’ADT albero binario di ricercaSelettori:• root(T)• figlio_destro(T)• figlio_sinistro(T)• key(T)

Costruttori/Distruttori:

• crea_albero()• ARB_inserisci(T,x)• ARB_cancella (T,x)

Proprietà:

• vuoto(T)

Operazioni di Ricerca

• ARB_ricerca(T,k)• ARB_minimo(T)• ARB_massimo(T)• ARB_successore(T,x) • ARB_predecessore(T,x)

Page 14: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Ricerca in Alberi binari di ricerca

ARB_ricerca(T,k) IF T = NIL OR k = Key[T] THEN return T IF k < Key[T] THEN ARB_ricerca(figlio_sinistro[T],k)

ELSE ARB_ricerca(figlio_destro[T],k)

Page 15: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Ricerca in Alberi binari di ricerca

In generale, la ricerca è confinata ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia

Tempo di ricerca = O(h) = O(log N)

h = altezza dell’albero = O(log N) dove N è il numero di nodi nell’alberoSolo se l’albero è balanciato,

cioè la lunghezza del percorso minimo è vicino a quella del percorso massimo

Page 16: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del minimo e massimo

6

2

4

3

1

8

12

159

TIl Minimo di 2 è 1

Il Massimo di 2 è 4

Page 17: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

15

ARB: ricerca del minimo e massimo

6

3

8

12

9

T

2

41

Il Minimo di 8 è 8

Il Massimo di 8 è 15

Page 18: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del minimo e massimo

6

2

4

3

1

8

12

159

T Il Minimo di T è 1

Il Massimo di T è 15

Page 19: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del minimo e massimo

6

2

4

3

1

8

12

159

T

Page 20: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del minimo e massimo

ARB ABR-Minimo(x:ARB) WHILE figlio-sinistro[x] NIL DO x = figlio-sinistro[x] return x

ARB ABR-Massimo(x: ARB) WHILE figlio-destro[x] NIL DO x = figlio-destro[x] return x

Page 21: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del minimo e massimo

ARB ABR-Minimo(x:ARB) WHILE figlio-sinistro[x] NIL DO x = figlio-sinistro[x] return x

ARB ABR-Massimo(x: ARB) WHILE figlio-destro[x] NIL DO x = figlio-destro[x] return x

ARB ARB_Minimo(x:ARB) IF vuoto(figlio_sinistro[x]) Then

return x Else ARB_Minimo(figlio_sinistro[x])

Page 22: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TIl successore di un nodo X è il più pic-colo nodo maggiore del nodo X

Page 23: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 2

Il successore di un nodo X è il più picco-lo nodo maggiore del nodo X

Page 24: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 2 = nodo 3

Il successore di un nodo X è il più picco-lo nodo maggiore del nodo X

Page 25: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 2 = nodo 3

Se x ha un figlio de-stro, il successore è il minimo nodo di quel sottoalbero

Page 26: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 1

Page 27: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 1 = nodo 2

Page 28: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 1 = nodo 2

Se x NON ha un figlio destro, e x è figlio si-nistro del padre, il suc-cessore è il padre.

Page 29: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 4

Page 30: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 4 = nodo 6

Page 31: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

6

2

4

3

1

8

12

159

TRicerca del successore del nodo 4 = nodo 6

Se x NON ha un figlio destro, ed è figlio destro del padre, il successore è il primo avo tale che x sta nel sottoalbero sinistro.

Page 32: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

ABR-Successore(x) IF figlio-destro[x] NIL THEN return ABR-Minimo(figlio-destro[x]) y = padre[x] WHILE y NIL AND x = figlio-destro[y] DO x = y y = padre[y] return y

Page 33: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

ABR-Successore(x) IF figlio-destro[x] NIL THEN return ABR-Minimo(figlio-destro[x]) y = padre[x] WHILE y NIL AND x = figlio-destro[y] DO x = y y = padre[y] return y

Questo algoritmo assume che ogni nodo abbia il puntatore al padre

Page 34: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

Tzy

NIL

Page 35: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

Ty

z

Page 36: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

T

y

z

Page 37: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

Tzy

NIL

Page 38: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

Ty

z

Page 39: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

Ty

z

Page 40: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

Tzy

NIL

Page 41: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

T

z

y

NIL

Page 42: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

T

z

y

NIL

Page 43: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

6

2

4

3

1

8

12

159

T

z

y

NIL

Page 44: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore II

• Inizializzo il successore a NIL

• Partendo dalla radice dell’albero:• ogni volta che seguo un ramo sinistro per rag-

giungere il nodo, aggiorno il successore al nodo padre;

• ogni volta che seguo un ramo destro per rag-giungere il nodo, NON aggiorno il successore al nodo padre;

Page 45: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore

ARB ABR-Successore’(x: ARB) IF figlio-destro[x] NIL THEN return ABR-Minimo(figlio-destro[x]) z = Root[T] y = NIL WHILE z x DO IF key[z] < key[x] THEN z = figlio-destro[z] ELSE y = z z = figlio-sinistro[z] return y

Page 46: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: ricerca del successore ricorsiva

ARB ABR-Successore(x: ARB) return ABR-Successore_ric(key[x],root[x],NIL)

ABR-Successore_ric(key,T,P_T) IF T NIL THEN IF key > key[T] THEN return ABR-Successore_ric(key,

figlio-destro[T],P_T) ELSE IF key < key[T] THEN return ABR-Successore_ric(key,

figlio-sinistro[T],T) ELSE IF figlio-destro[T] NIL THEN

return ABR-Minimo(figlio-destro[x]) return P_T

Page 47: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: costo delle operazioni

Teorema. Le operazioni di Ricerca, Minimo, Massimo, Successore e Predecessore sull’insieme dinamico Albero Binario di Ricerca possono essere eseguite in tempo O(h) dove h è l’altezza dell’albero

Page 48: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo (caso I)

6

2

4

3

1

8

12

159

5

zT

Page 49: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo (caso I)

6

2

4

3

1

8

12

159

5

zTy

5 < 6

Ricerca posizionedel nuovo nodo

Page 50: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo (caso I)

6

2

4

3

1

8

12

159

5

zT

y

5 > 2

Ricerca posizionedel nuovo nodo

Page 51: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo (caso I)

6

2

4

3

1

8

12

159

5

zT

y

5 > 4

Ricerca posizionedel nuovo nodoTrovata!

Page 52: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo (caso I)

6

2

4

3

1

8

12

1595

z

T

y

figlio-destro[y]=zoppure

figlio-sinistro[y]=z

Page 53: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo (caso II)

5

T

NIL

z

Albero è vuoto

Page 54: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo (caso II)

T Root[T] = z

5

z

Albero è vuotoIl nuovo nodo da inserire diviene la radice

Page 55: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo

ABR-inserisci(T,z) y = NIL x = Root[T] WHILE x NIL DO y = x IF key[z] < key[x] THEN x = figlio-sinistro[x] ELSE x = figlio-destro[x] padre[z] = y IF y = NIL THEN Root[T] = z ELSE IF key[z] < key[y] THEN figlio-sinistro[y] = z ELSE figlio-destro[y] = z

Page 56: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo

ABR-inserisci(T,z) y = NIL x = Root[T] WHILE x NIL DO y = x IF key[z] < key[x] THEN x = figlio-sinistro[x] ELSE x = figlio-destro[x] padre[z] = y IF y = NIL THEN Root[T] = z ELSE IF key[z] < key[y] THEN figlio-sinistro[y] = z ELSE figlio-destro[y] = z

(caso II)

Ricerca posizionedel nuovo nodo

(caso I)

Page 57: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Inserimento di un nodo

ABR-insert_ric(T,z) IF T NIL THEN IF key[z] < key[T] THEN sinistro[T]= ABR-insert_ric(sinistro[T],z) ELSE destro[T]= ABR-insert_ric(destro[T],z) ELSE T=z return T

Page 58: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso I)

6

2

4

3

1

8

12

159

T

5

z

Caso semplice: il nodo z non ha figli

Page 59: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso I)

6

2

4

3

1

8

12

159

T

5

z

Caso semplice: il nodo z non ha figli

Possiamo eliminarlo

y

Page 60: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso II)

6

2

4

3

1

8

12

159

T

z

Caso II: il nodo ha un solo figlio

Page 61: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso II)

6

2

4

3

1

8

12

159

T

z

Caso II: il nodo ha un figlio

Scartare il nodo e connettere il padre al figlio

x

y

Page 62: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso II)

6

2

4

3

1

8

12

159

T

z

Caso II: il nodo ha un figlio

Scartare il nodo e connettere il padre al figlio

x

y

Page 63: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso II)

6

2

1

8

12

159

T

3

Caso II: il nodo ha un figlio

Scartare il nodo e connettere il padre al figlio

x

4z

y

Page 64: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso III)

6

2

4

3

1

8

12

159

T

5

z

3

Caso III: il nodo ha due figli

Page 65: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso III)

6

2

4

3

1

8

12

159

T

5

z

y

3x

Caso III: il nodo ha due figli

Calcolare il succes-sore y

Page 66: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso III)

6

2

4

3

1

8

12

159

T

5

z

Caso III: il nodo ha due figli

Calcolare il succes-sore y

y

3x

NOTA: Il successore di un nodo con due figli non può avere un figlio sinistro

Page 67: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso III)

6

2

4

3

1

8

12

159

T

5

z

Caso III: il nodo ha due figli

Calcolare il succes-sore y

Scartare il succes-sore e connettere il padre al figlio destro

y

3x

Page 68: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso III)

6

2

43

1

8

12

159

T

5

z

y

3x

Caso III: il nodo ha due figli

Calcolare il succes-sore y

Scartare il succes-sore e connettere il padre al figlio destro

Copia il contenuto del successore nel nodo da cancellare

Page 69: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso III)

6

3

43

1

8

12

159

T

5

z

Caso III: il nodo ha due figli

Calcolare il succes-sore y

Scartare il succes-sore e connettere il padre al figlio destro

Copia il contenuto del successore nel nodo da cancellare

y

3x

Page 70: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo (caso III)

6

4

3

1

8

12

159

T

5

y

z3

3x

Caso III: il nodo ha due figli

Calcolare il succes-sore y

Scartare il succes-sore e connettere il padre al figlio destro

Copia il contenuto del successore nel nodo da cancellare

Page 71: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo

• Caso I: Il nodo non ha figli. Semplicemente si elimina.

• Caso II: Il nodo ha un solo figlio. Si collega il padre del nodo al figlio e si elimina il nodo.

• Caso III: Il nodo ha due figli. si cerca il suo successore (che ha un solo figlio

destro);si elimina il successore (come in Caso II); si copiano i campi valore del successore nel nodo

da eliminare.

Page 72: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo

ABR-Cancella(T,z) IF (figlio-sinistro[z] = NIL OR figlio-destro[z] = NIL) THEN y = z ELSE y = ARB-Successore(z) IF figlio-sinistro[y] NIL THEN x = figlio-sinistro[y] ELSE x = figlio-destro[y] IF x NIL THEN padre[x]=padre[y] IF padre[y] = NIL THEN Root[T] = x ELSE IF y = figlio-sinistro[padre[y]] THEN figlio-sinistro[padre[y]]=x ELSE figlio-destro[padre[y]]=x IF y z THEN “copia i campi di y in z” return y

Page 73: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo

ABR-Cancella(T,z) IF (figlio-sinistro[z] = NIL OR figlio-destro[z] = NIL) THEN y = z ELSE y = ARB-Successore(z) IF figlio-sinistro[y] NIL THEN x = figlio-sinistro[y] ELSE x = figlio-destro[y] IF x NIL THEN padre[x]=padre[y] IF padre[y] = NIL THEN Root[T] = x ELSE IF y = figlio-sinistro[padre[y]] THEN figlio-sinistro[padre[y]]=x ELSE figlio-destro[padre[y]]=x IF y z THEN “copia i campi di y in z” return y

caso III

casi I e II

y è il nodo da eli-minare

Page 74: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo

ABR-Cancella(T,z) IF (figlio-sinistro[z] = NIL OR figlio-destro[z] = NIL) THEN y = z ELSE y = ARB-Successore(z) IF figlio-sinistro[y] NIL THEN x = figlio-sinistro[y] ELSE x = figlio-destro[y] IF x NIL THEN padre[x]=padre[y] IF padre[y] = NIL THEN Root[T] = x ELSE IF y = figlio-sinistro[padre[y]] THEN figlio-sinistro[padre[y]]=x ELSE figlio-destro[padre[y]]=x IF y z THEN “copia i campi di y in z” return y

caso III

casi I e II

y è il nodo da eli-minare e x è il suo sostituto

Page 75: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo

ABR-Cancella(T,z) IF (figlio-sinistro[z] = NIL OR figlio-destro[z] = NIL) THEN y = z ELSE y = ARB-Successore(z) IF figlio-sinistro[y] NIL THEN x = figlio-sinistro[y] ELSE x = figlio-destro[y] IF x NIL THEN padre[x]=padre[y] IF padre[y] = NIL THEN Root[T] = x ELSE IF y = figlio-sinistro[padre[y]] THEN figlio-sinistro[padre[y]]=x ELSE figlio-destro[padre[y]]=x IF y z THEN “copia i campi di y in z” return y

caso III

casi I e II

y è il nodo da eli-minare e x è il suo sostituto

y è sostituito da x

Page 76: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione di un nodo

ABR-Cancella(T,z) IF (figlio-sinistro[z] = NIL OR figlio-destro[z] = NIL) THEN y = z ELSE y = ARB-Successore(z) IF figlio-sinistro[y] NIL THEN x = figlio-sinistro[y] ELSE x = figlio-destro[y] IF x NIL THEN padre[x]=padre[y] IF padre[y] = NIL THEN Root[T] = x ELSE IF y = figlio-sinistro[padre[y]] THEN figlio-sinistro[padre[y]]=x ELSE figlio-destro[padre[y]]=x IF y z THEN “copia i campi di y in z” return y

caso III

casi I e II

y è il nodo da eli-minare e x è il suo sostituto

y è sostituito da x

il nodo eliminato y è ritornato per deallocazione

Page 77: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione ricorsova

ABR-Cancella-ric(k,T) IF T NIL THEN IF k < key[T] THEN sin[T]=ARB-Cancella-ric(k,sin[T]) ELSE IF k > key[T] THEN des[T]=ARB-Cancella-ric(k,des[T]) ELSE IF (sin[T] = NIL OR des[T] = NIL) THEN nodo = T IF sin[nodo] NIL THEN

T = sin[nodo] ELSE

T= des[nodo] ELSE nodo = ARB-Stacca-Succ(des[T],T)

“copia nodo in T” dealloca(nodo) return T

casi I e II

caso III

Page 78: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: Cancellazione ricorsova

ABR-Stacca-Succ(T,P) IF T NIL THEN IF sin[T] NIL THEN return ARB-Stacca-Succ(sin[T], T) ELSE /* successore trovato */ IF T = sin[P] sin[P] = des[T] ELSE /* il succ è il primo nodo passato */ des[P] = des[T] return T

Il parametro P serve a ricordarsi il padre di un nodo durante la discesa

NOTA. Questo algoritmo stacca il successore dell’albero T e ne ritorna il puntatore. Può anche ritornare NIL in caso non esista un successore. Il valore di ritorno dovrebbe

essere quindi verificato al prima dell’uso del chiamante. Nel caso della cancellazione ricorsiva però siamo sicuri

che il successore esista sempre e quindi non è necessario eseguire alcun controllo!

Page 79: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

ARB: costo di Inserimento e Cancellazione

Teorema. Le operazioni di Inserimento e Cancel- lazione sull’insieme dinamico Albero Binario di Ricerca possono essere ese- guite in tempo O(h) dove h è l’altezza dell’albero

Page 80: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

L’algortimo di inserimento NON garantisce che l’albero risultante sia bilaciato. Nel caso peggiorel’altezza h può essere pari ad N (numero dei nodi)

6

8

12

15

9

T

Page 81: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

6

8

12

15

9

T

Quindi tutte le operazioni vistehanno costo O(N) nel caso peg-giore

L’algortimo di inserimento NON garantisce che l’albero risultante sia bilaciato. Nel caso peggiorel’altezza h può essere pari ad N (numero dei nodi)

Page 82: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo medio delle operazioni su ABR

Dobbiamo calcolare la lunghezza media an del percorso di ricerca.

• Assumiamo che le chiavi arrivino in ordine casuale (e che tutte abbiano uguale probabilità di presentarsi)

• La probabilità che la chiave i sia la radice è allora 1/n

pi è la lunghezza del

percorso al nodo i

n

iin p

na

1

1

Page 83: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

n

iin p

na

1

1Se i è la radice, allora

• il sottoalbero sinistro avrà i - 1 nodi e

• il sottoalbero destro avrà n - i nodi i

i - 1 n - i

Page 84: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

i

i - 1 n - i

Se i è la radice, allora

• il sottoalbero sinistro avrà i - 1 nodi e

• il sottoalbero destro avrà n - i nodi

gli i - 1 nodi a sinistra hanno lungezza del percorso ai -1+1

la radice ha lunghezza del percorso pari ad 1

gli n - i nodi a sinistra hanno lungezza del percorso an-i+1

n

iin p

na

1

1

Page 85: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

n

ina

nn

iaa ini

in

)1(

11

1)1( 1

)(

an(i) è la lunghezza media del percorso di ricerca con n chiavi quando la radice è la chiave i

Page 86: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

n

ina

nn

iaa ini

in

)1(

11

1)1( 1

)(

n

iinin n

ina

nn

ia

na

11 )1(

11)1(

1

an(i) è la lunghezza media del percorso di ricerca con n chiavi quando la radice è la chiave i

an è la media degli an(i), dove ciascun an(i) a probabilità 1/n

Page 87: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

n

iinin n

ina

nn

ia

na

11 )1(

11)1(

1

n

iini inaia

n 112

)()1(1

1

n

ii ia

n 112

)1(2

1

1

12

21

n

iiia

n

Page 88: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

1

12

21

n

iin ia

na

2

1212

2)1(

21

n

iin ia

nan

n

Page 89: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

2

121)1(

21

n

iin ia

na

1

12

21

n

iin ia

na

2

1212

2)1(

21

n

iin ia

nan

n

Page 90: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

1

12

21

n

iin ia

na

2

1212

2)1(

21

n

iin ia

nan

n

2

121)1(

21

n

iin ia

na

)1()1(2

12

22

12

n

n

ii a

n

nia

n

Page 91: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

2

1212

2)1(

21

n

iinn ia

nan

na

)1()1(2

12

22

12

n

n

ii a

n

nia

n

)12)1((1

12

2 nan

na nn

Page 92: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

)12)1((1

12

2 nan

na nn

31

2

nn Hn

na

nH n

1...

3

1

2

11 Funzione armonica

Page 93: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

)12)1((1

12

2 nan

na nn

31

2

nn Hn

na

nH n

1...

3

1

2

11 Funzione armonica

Dimostrare per induzione

Page 94: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Costo delle operazioni su ABR

31

2

nn Hn

na

...12

1

2

1ln

2

nnnH n dove 0.577

Formula di Eulero

cnnan ln23)(ln2

Page 95: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi perfettamente bilanciati

Definizione: Un albero binario si dice Perfetta-mente Bilanciato se, per ogni nodo i, il numero dei nodi nel suo sottoalbero sinistro e il nu-mero dei nodi del suo sottoalbero destro dif-feriscono al più di 1

Page 96: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi perfettamente bilanciati

Definizione: Un albero binario si dice Perfetta-mente Bilanciato se, per ogni nodo i, il numero dei nodi nel suo sottoalbero sinistro e il nu-mero dei nodi del suo sottoalbero destro dif-feriscono al più di 1

6

2

41

8

12

T

6

2 8

T

6

2

T

6

T

6

8

1

T

2

Page 97: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Alberi perfettamente bilanciati

Definizione: Un albero binario si dice Perfetta-mente Bilanciato se, per ogni nodo i, il numero dei nodi nel suo sottoalbero sinistro e il nu-mero dei nodi del suo sottoalbero destro dif-feriscono al più di 1

La lunghezza media del percorso in un albero perfettamente bilanciato (APB) è approssima-tivamente

1log' na n

Page 98: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Confronto tra ABR e APB

Trascurando i tremini costanti, otteniamo quindi che il rapporto tra la lughezza media del percorso in un albero di ricerca e quella nell’albero perfettamente bilanciato è (per n grande)

386.12ln2log

ln2

1log

ln2

'

n

n

n

cn

a

a

n

n

Page 99: Algoritmi e Strutture Dati Alberi Binari di Ricerca.

Confronto tra ABR e APB

Ciò significa che, se anche bilanciassimo perfettamente l’albero dopo ogni inserimento il guadagno sul percorso medio che otter-remmo NON supererebbe il 39%.

Sconsigliabile nella maggior parte dei casi, a meno che il numero dei nodi e il rapporto tra ricerche e inserimenti siano molto grandi.

386.12ln2log

ln2

1log

ln2

'

n

n

n

cn

a

a

n

n