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