• Non ci sono risultati.

1Rotazioni Operazionisuglialberibinaridiricerca AzzoliniRiccardo2019-04-30

N/A
N/A
Protected

Academic year: 2021

Condividi "1Rotazioni Operazionisuglialberibinaridiricerca AzzoliniRiccardo2019-04-30"

Copied!
5
0
0

Testo completo

(1)

Azzolini Riccardo 2019-04-30

Operazioni sugli alberi binari di ricerca

1 Rotazioni

Procedura RDX(v) begin

u := sx(v);

sx(v) := dx(u);

dx(u) := v;

return u;

end

Procedura RSX(v) begin

u := dx(v);

dx(v) := sx(u);

sx(u) := v;

return u;

end

Le operazioni di rotazione scambiano il livello di due nodi, mantenendo le proprietà degli alberi binari di ricerca.

• Rotazione a destra:

y

x

1 2

3

x

1

y

2 3

In seguito alla rotazione:

– x e tutti i nodi del sottoalbero 1 salgono di un livello;

(2)

– i nodi del sottoalbero 2 non cambiano livello.

• Rotazione a sinistra:

x

1

y

2 3

y

x

1 2

3

In seguito alla rotazione:

– x e tutti i nodi del sottoalbero 1 scendono di un livello;

– y e i nodi del sottoalbero 3 salgono di un livello;

– i nodi del sottoalbero 2 non cambiano livello.

Le rotazioni sono utili per l’implementazione di altre operazioni.

2 Inserimento alla radice

Osservazione: Se ogni operazione lascia alla radice il nodo su cui agisce, i nodi usati più di frequente rimangono ai primi livelli, cioè nelle posizioni alle quali si accede più rapidamente.

Può quindi essere utile inserire un nodo alla radice:

Procedura InsertR(v, x) begin

if v = NULL then return CreaNodo(x);

if x≤ Key(v) then begin

sx(v) := InsertR(sx(v), x);

v := RDX(v);

end else

begin

dx(v) := InsertR(dx(v), x);

v := RSX(v);

end

2

(3)

end

Questa procedura è implementata in modo ricorsivo. Il caso base si ha quando l’albero è vuoto: viene creato un nuovo nodo, che diventa la radice. Altrimenti:

1. si inserisce ricorsivamente il nuovo nodo nel sottoalbero corretto (qui si è scelto di consentire valori duplicati, ponendoli nel sottoalbero sinistro);

2. si usano delle rotazioni per far risalire tale nodo fino alla radice, ripercorrendo al contrario il cammino effettuato al punto 1 per l’inserimento.

2.1 Esempio

A S

E

C R

H X

Si inserisce nell’albero il valore G:

(4)

A S

E

C R

H G

X

RDX

A S

E

C R

G H

X

RDX

A S

E

C G

R H

X

RSX

A S

G

E

C

R

H RDX X

A G

E

C

S R

H

X RSX

G

A E

C

S

R

H

X

3 Costo di costruzione

Ogni inserimento ha costo pari all’altezza dell’albero.

Di conseguenza, la costruzione di un albero mediante n inserimenti ha costo massimo quando tale albero è degenere (il che si verifica, per esempio, se la sequenza di dati inseriti è ordinata), perché allora l’i-esimo inserimento richiede i confronti:

n−1

i=1

i = n(n + 1) 2 n2

2 = Θ(n2)

Per l’analisi del caso medio, si ipotizza che i dati siano una permutazione casuale di lunghezza n. Il primo elemento di tale permutazione diventa quindi la radice (perché è il primo a essere inserito). Siccome la permutazione è casuale, ogni valore ha la stessa probabilità di essere la radice:

4

(5)

∀x, 1 ≤ x ≤ n, P (radice = x) = 1 n

Poi, dopo il primo inserimento, i restanti n− 1 dati si confrontano con la radice prima di essere inseriti nel sottoalbero sinistro o destro. Al termine, il sottoalbero sinistro conterrà k− 1 valori, e quello destro ne conterrà n − k, con 1 ≤ k ≤ n. Si può così ricavare l’equazione di ricorrenza per il numero di confronti nel caso medio:

Tn= n− 1 + 1 n

n k=1

(Tk−1+ Tn−k), T0= T1 = 0

dove

• n− 1 sono i confronti degli elementi successivi con la radice;

1nn

k=1(Tk−1+ Tn−k) è il numero di confronti necessario, in media, per costruire i due sottoalberi.

Quest’equazione è analoga a quella del Quicksort, e ha perciò la stessa soluzione: il numero medio di confronti necessari per costruire un BST con n dati è Θ(n log n). Si ricava quindi che il costo medio di ciascun inserimento è Θ(log n), che corrisponde anche all’altezza media dell’albero risultante.

Riferimenti

Documenti correlati

Un albero binario di ricerca (ABR) è un albero binario in cui per ogni nodo dell albero N tutti i nodi del sottoalbero sinistro di N hanno un valore minore o uguale di quello di N

Si ricordi che un albero binario di ricerca (ABR) è un albero binario in cui per ogni nodo dell albero tutti i nodi del suo sottoalbero sinistro hanno un valore minore (o

・contiene un nodo radice, un albero binario detto sottoalbero sinistro ed un albero binario detto sottoalbero destro.. Molti algoritmi su alberi binari possono essere descritti

nodo radice + due alberi binari disgiunti, detti rispettivamente sottoalbero sinistro e sottoalbero

Supponendo che l'albero T sia bilanciato (cioè tale per cui per ogni nodo r di T vale la proprietà che l'altezza del sottoalbero sinistro di r e quella del sottoalbero destro di

L’albero risultante dovr avere la seguente propriet` a: per ogni nodo u dell’albero, tutti i nodi nel sottoalbero sinistro hanno chiave maggiore della chiave di u e tutti i nodi

se il valore `e minore della chiave del nodo corrente, esso viene inserito ricorsivamente nel sottoalbero radicato nel figlio sinistro;. se il valore `e divisibile per la chiave

Ricorsivamente un nodo radice di sottoalbero deve essere minore del max del sottoalbero sinistro (predecessore) e maggiore del min del sottoalbero destro (successore)... Una