Transcript Clicca qui.

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Algoritmi e Strutture Dati

Capitolo 6 Il problema del dizionario: gli alberi AVL

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Riepilogo

Tipo dato Dizionario:

Insieme di coppie

(

elemento, chiave), in cui la chiave appartiene ad un dominio totalmente ordinato, sul quale eseguire operazioni di search, insert e delete .

• • Implementazioni elementari : inefficienti (costo O(n) )!

Albero binario di ricerca

: implementazione del dizionario mediante un albero in cui ogni nodo v contiene una coppia

(

elemento, chiave) del dizionario, con la proprietà (che induce un ordinamento totale ) che: – le chiavi nel sottoalbero sinistro di v sono < chiave(v) – le chiavi nel sottoalbero destro di v sono > chiave(v) • Operazioni di

search

l’altezza dell’albero.

ed

insert

sull’ABR costano O(h) , ove h è Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Interrogazioni ausiliarie su un ABR

• max (nodo u) – dato un nodo u di un ABR, restituisce il nodo del sottoalbero dell’ABR radicato in u avente chiave più grande (si noti che potrebbe essere u stesso, se u non ha un sottoalbero destro) • min (nodo u) – dato un nodo u di un ABR, restituisce il nodo del sottoalbero dell’ABR radicato in u avente chiave più piccola (si noti che potrebbe essere sinistro) u stesso, se u non ha un sottoalbero • successor (nodo u) associata ad u dell’ABR). • predecessor quella associata ad dell’ABR). u – dato un nodo u nodo dell’ABR con chiave (o NULL se u (nodo u) (o NULL se u di un ABR, restituisce il immediatamente più grande – dato un nodo u di quella contiene l’elemento massimo di un ABR, restituisce il nodo dell’ABR con chiave immediatamente più piccola di contiene l’elemento minimo Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Ricerca del massimo/minimo

• • La procedura min (nodo

u

) si definisce in maniera del tutto analoga cambiando “destro” con “sinistro”  La complessità della procedura considerata è h è l’altezza dell’ABR (e n T(n) = O(h), è il numero di nodi dell’ABR) ove Se l’argomento allora min e

nodo u

max coincide con la radice dell’albero, restituiscono il nodo con chiave minima massima dell’intero dizionario, rispettivamente e Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Esempio di esecuzione

2 3 6 max (u) 15 min (nodo radice del ABR) 18 8 17 20 4 7 13 9 Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Ricerca del predecessore

Complessità: O(h) Caso 1:

sinistro u

ha un sottoalbero sinistro: max del sottoalbero Caso 2:

u

non ha un sottoalbero sinistro: Antenato più prossimo di

u

il cui figlio destro è la radice del sottoalbero che contiene

u

(si noti infatti che tra gli elementi più grandi di

pred(u) u

, e quindi

u

è il minimo è il successore

pred(u)

è il di

pred(u)

, ovvero predecessore di

u

) Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Ricerca del successore

La ricerca del

successore

di un nodo è simmetrica: cambio “sinistro” con “destro” e “max” con “min” 2 succ (u) 6 3 4 7 15 Complessità: O(h) Cerco il min del sottoalbero destro 8 17 18 9 13 succ (u) Cerco l’antenato più prossimo di radice del contiene

u u

il cui figlio sinistro è la sottoalbero che 20 Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

delete(elem e)

Sia u il nodo contenente l’elemento e ci sono 3 possibilità: da cancellare; 1) u è una foglia: rimuovila 2) u ha un solo figlio: aggiralo Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

delete(elem e)

3) u ha due figli: sostituiscilo con il il predecessore; tale predecessore sarà il massimo del sottoalbero sinistro (caso 1 dell’algoritmo pred predecessore ), in quanto , e rimuovi fisicamente u ha un sottoalbero sinistro; quindi, tale predecessore deve avere al più un solo figlio, e ricadremo quindi in uno dei 2 casi precedenti. Si noti che si può analogamente usare allo stesso scopo il successore di u .

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

1 Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano delete (

u

) 15

u

3 4 5

v

7 pred. di

u

9 10 13 17 18 20 Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Costo dell’operazione di cancellazione

• Nei casi 1) e 2) T(n)=O(1) , mentre nel caso 3) T(n)=O(h) • Ricapitolando, le operazioni di ricerca,

inserimento e dove h cancellazione è l’altezza dell’albero hanno costo Per alberi molto “sbilanciati”, h=

(n) O(h)

 …ma p

er alberi molto “bilanciati”, h=O(log n)

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …un albero binario di ricerca molto “sbilanciato”… 30 27 22 20 19 17 16 15 ...

2 Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …un albero binario di ricerca molto “bilanciato”… 2 15 6 20 3 4 7 8 13 16 17 19 22 27 30 Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Analisi critica degli ABR

• Le operazioni di inserimento e cancellazione descritte possono “linearizzare” un ABR.

• Es.

- Supponiamo di introdurre un elemento con chiave minore della chiave minima dell’ABR, poi un altro elemento con chiave ancora minore, e cosi via … • Dobbiamo definire un modo per

mantenere

l’albero “ bilanciato ” (vogliamo cioè che per ogni nodo interno, le “dimensioni” dei sottoalberi sinistro e destro associati rimangano approssimativamente uguali )  Innanzitutto dobbiamo formalizzare il concetto di

bilanciamento

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

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

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Formalizzazione del bilanciamento

Fattore di bilanciamento  (v) di un nodo v = altezza del sottoalbero sinistro di v – altezza del sottoalbero destro di v (  (v) viene mantenuto come informazione addizionale nel record associato a v , assieme alle altezze del sottoalbero sinistro e destro di v )

Def.

: Un albero si dice bilanciato in altezza v se ogni nodo ha fattore di bilanciamento in valore assoluto ≤ 1 Alberi AVL = alberi binari di ricerca bilanciati in altezza Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …qualche esempio… È il seguente un albero AVL?

0 2 0 3 4 0 0 7 0 6 0 8 0 15 13 0 0 16 0 17 0 20 Convenzione : 19 0 0 22 0 27 altezza di un albero vuoto= -1 0 30 Sì: tutti i nodi hanno fattore di bilanciamento = 0 Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …qualche esempio… È il seguente un albero AVL?

+1 19 +2 20 +3 22 +4 27 +5 30 0 17 NO! Non vale la proprietà sui fattori di bilanciamento!

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

È il seguente un albero AVL?

+1 15 -1 6 0 3 -1 8 0 17 Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …qualche esempio… -1 18 -1 20 0 2 4 0 0 7 10 0 0 25 0 9 0 13 Sì: proprietà sui fattori di bilanciamento rispettata Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Delimitazione superiore all’altezza di alberi AVL

Vogliamo dimostrare che un albero AVL con n nodi ha altezza O(log n) Idea della dimostrazione: considerare, tra tutti gli AVL di altezza h , quelli con il minimo numero di nodi n h Fibonacci ) (che vengono detti alberi di Intuizione: se per gli alberi di Fibonacci di altezza h vale h=Θ(log n h ) , allora per tutti gli alberi AVL di altezza h con n≥n h nodi varrà h=O(log n) Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …Alberi di Fibonacci per piccoli valori di altezza… T h (albero di Fibonacci di altezza h): albero AVL di altezza h minimo numero di nodi  devo massimizzare ad 1 con il il fattore di bilanciamento di ogni nodo interno T 0 T 1 T 2 T 3 T 4 Nota: se a T h tolgo una qualsiasi foglia (esclusa quella che ne caratterizza l’altezza), diventa sbilanciato!

intravedete uno schema per generare l’i-esimo albero di Fibonacci a partire dai precedenti?

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

T 0 T 1 T 2 T 3 Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano T 4 Lo schema Lemma Sia n h T h . Risulta il numero di nodi di n h =F h+3 -1.

Dim.: Per induzione su h: • h=0: n 0 =1 F h+3 -1=F 3 -1=2-1=1 • h generico: n h =1+ n h-1 + n h-2 =1+( F (h-1)+3 -1 )+( F (h-2)+3 -1 ) = 1+( F h+2 -1 )+ ( F h+1 -1 ) = F h+3 -1.

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Teorema: Un albero AVL con n nodi ha altezza h=O(log n) .

Dim.: Si consideri T h : n ≥ n h =F h+3 -1=  (  h+3 )=  (  h ) Ricorda che vale: F h  =  (  h ) =1.618… sezione aurea h=  (log  n h ) =  (log n h ) = O(log n).

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Delimitazione inferiore all’altezza di alberi AVL

Si può anche dimostrare che un albero AVL con n nodi ha altezza Ω(log n) Idea della dimostrazione: considerare, tra tutti gli AVL di altezza h , quelli con il massimo numero di nodi N h ( alberi binari completi ) Ma per tali alberi, N h =2 h+1 -1 , cioè h=Θ(log N h ) , e quindi per tutti gli alberi AVL di altezza h con n nodi, poiché N h ≥n , varrà h=Θ(log N h )=Ω(log n) Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano

Altezza di alberi AVL

Conclusione : Poiché un albero AVL con n nodi ha altezza h=O(log n) e h=Ω(log n), ne consegue che h=Θ(log n).

Copyright © 2004 - The McGraw - Hill Companies, srl