La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Alberi di ricerca di altezza logaritmica

Presentazioni simili


Presentazione sul tema: "Alberi di ricerca di altezza logaritmica"— Transcript della presentazione:

1 Alberi di ricerca di altezza logaritmica
Lezione n°6 Prof.ssa Rossella Petreschi Lezione del 27/10/2011 del Corso di Algoritmi e Strutture Dati Riferimenti: Paragrafi del testo Demetrescu, Finocchi, Italiano “Algoritmi e Strutture Dati” Edizioni: McGraw-Hill Capitolo 14 del testo Cormen, Leiserson, Rivest “Introduzione agli Algoritmi” Edizioni: Jackson Libri Paragraf 7.5 del testo Kingston “Algorithms and data structures” Edizioni: Addison-Wesley ASD 2011/2012

2 Alberi AVL Si associ ad ogni nodo u di AR un valore intero fb(u) dato dalla differenza fra le altezze dei suoi sottoalberi. Albero AVL è un albero di ricerca 1-bilanciato, ovvero -1≤ fb(u) ≤1 per ogni u Vale: l’altezza di una albero AVL è logaritmica nel numero dei suoi nodi ASD 2011/2012

3 Altezza di un AVL Alberi di Fibonacci: alberi AVL con il minor numero di nodi a parità di altezza n0 = 1; n1 = 2; nh = 1+ nh-1+ nh-2 (n(h):minimo numero di nodi di un albero AVL di altezza h) Vale: nh = Fh si dimostra per induzione Passo base n0 = 1= F3-1=2-1 Ipotesi induttiva nk = Fk+3-1, per ogni k < h Prova nh = 1+ nh-1+ nh-2 = 1 + Fh+2-1+ Fh+1-1 = Fh+3-1 Th: Un albero AVL con n nodi ha altezza O(logn) Prova: n ≥ nh = Fh+3-1 ≥ h+1-1 ASD 2011/2012 3

4 Alberi Red/Black Albero Red/Black: albero RB tale che
ad ogni nodo u è associato un colore (rosso o nero); ogni foglia ha colore nero; se un nodo ha colore rosso, entrambi i suoi figli hanno colore nero; ogni cammino semplice da un nodo x(non incluso) ad una foglia contiene lo stesso numero di nodi neri, bh(x) Vale: l’altezza di un albero RB è logaritmica nel numero dei suoi nodi ASD 2011/2012 4

5 Altezza di un albero Red/Black
Il sottoalbero radicato in x,SA(x), contiene almeno 2bh(x)-1 nodi Prova (per induzione su h) Passo base: se h=0, x è una foglia 2bh(x)-1 =1-1 = 0 Ipotesi induttiva 2bh(y)-1 per ogni y con h(y) < h(x) Prova: SA(x) = x+ SA(fs(x))+ SA(fd(x)) Nodi interni di SA(x) ≤ (2bh(x)-1-1)+ (2bh(x)-1-1)+1≤ 2bh(x)-1 Th: Un albero Red/Black con n nodi ha altezza O(logn) Prova: per (*) almeno metà dei nodi su un qualunque cammino dalla radice ad una foglia (esclusa la radice)devono essere neri (bh(x) ≥ h/2) e quindi n ≥ 2bh(x)-1≥ 2h/2-1 (*) se un nodo ha colore rosso, entrambi i suoi figli hanno colore nero. ASD 2011/2012 5

6 Rotazioni Rotazione destra Rotazione sinistra/destra ASD 2011/2012 6

7 Inserzione Si inserisce x come in un qualunque albero di ricerca e poi
AVL : si ricalcolano i fattori di bilanciamento dei nodi nel cammino da x a r. Sia v il nodo più profondo con fb = +/-2. Con perno nei nodi con fb = +/-2, a partire da v e risalendo alla radice, si eseguano opportune rotazioni. R/B: x si colora di rosso e si vede se si viola (*) quando si viola (*) si tende a spostare la violazione verso l’alto iterando i seguenti passi: lo zio di x, z(x), è rosso allora commuta i colori di p(x), z(x),p(p(x)) lo zio di x, z(x), è nero allora esegui una rotazione la radice si mantiene sempre nera (*) se un nodo ha colore rosso, entrambi i suoi figli hanno colore nero. ASD 2011/2012 7

8 Cancellazione Si cancella x come in un qualunque albero di ricerca e poi AVL : si ricalcolano i fattori di bilanciamento dei nodi nel cammino da x a r. Sia v il nodo più profondo con fb = +-2. Con perno nei nodi con fb = +-2, a partire da v e risalendo alla radice, si eseguano opportune rotazioni. R/B: se x era nero la (*) è stata violata. Si assegni nero ad y,figlio di x eliminato. y era rosso o y è la radice. Fine. y era già nero allora sposto il nero di x verso la radice a seconda che il fratello di y,w, sia rosso(r) o nero(n): se (r), lo riconduco al caso (n) scambiando i colore fra w e p(x) e ruoto a sx; se (n), ho ancora 3 casi a seconda del colore di figli di w: nn,rn (nr),rr (ogni caso si effettua tramite scambi di colore e rotazioni) (*) ogni cammino semplice da un nodo x(non incluso) ad una foglia contiene lo stesso numero di nodi neri, bh(x) ASD 2011/2012 8

9 Alberi autoaggiustanti
Un albero bilanciato mantiene esplicitamente una condizione di bilanciamento (basata sul fattore di bilanciamento dei nodi) in modo da ottenere un tempo di esecuzione logaritmico nel caso peggiore per tutte le operazioni. Un albero autoaggiustante garantisce tempo di esecuzione AMMORTIZZATO logaritmico su una sequenza di operazioni senza mantenere alcuna condizione esplicita di bilanciamento ASD 2011/2012 9

10 L’operazione di SPLAY Operazione splay(u): consiste nel partire da u e risalire alla radice dell’albero tramite una sequenza di rotazioni. A meno di simmetrie si ha se p(u) = r e u è fs, u diviene nuova radice e r fd (rotazione destra) se u è fs di p(u) e p(u) è fs di p(p(u)) allora u prende il posto di p(p(u)) con fd p(u) che a sua volta ha p(p(u)) come fd (doppia rotazione destra) se u è fs di p(u) e p(u) è fd di p(p(u)) allora u prende il posto di p(p(u)) che diviene suo fs mentre p(u) diviene suo fd (rotazione destra/sinistra) Ovviamente ad ogni passo si debbono mantenere le proprietà di un albero di ricerca. ASD 2011/2012 10

11 L’euristica Per rendere un albero binario di ricerca auto-aggiustante,si itera splay(u) in corrispondenza di ogni operazione di accesso o di modifica dell’albero (da cui splay tree) . Quindi u inizialmente sarà: chiave trovata o foglia su cui ci si ferma (operazione di ricerca) elemento inserito (operazione di inserimento) padre dell’elemento v eliminato (operazione di cancellazione) L’euristica prosegue fino alla radice e pertanto in ogni caso è proporzionale alla lunghezza del cammino su cui lo splay procede ASD 2011/2012 11

12 La funzione potenziale
(T) =  r(x) =  log size(x), per ogni x nello splay tree. Il valore del potenziale è tanto più piccolo quanto più l’albero è bilanciato (T)= log5+ log3+ 3log1≈ 3.9 (T)= log5+ log4+ …+log1≈ 5.9 ASD 2011/2012 12

13 Analisi ammortizzata su splay tree
Il tempo totale ammortizzato di una sequenza di  operazioni (di ricerca, di inserimento e di cancellazione) su uno splay-tree è data da ( logn), con n massimo numero di nodi che l’albero raggiunge durante la sequenza. Il tempo ammortizzato di una singola operazione di splay è pari (logm), con m numero di nodi dell’albero su cui si effettua l’operazione. ASD 2011/2012 13


Scaricare ppt "Alberi di ricerca di altezza logaritmica"

Presentazioni simili


Annunci Google