Prof.ssa Rossella Petreschi Lezione del 15 /10/2012 del Corso di Algoritmica B-alberi Lezione n°5
Analisi del caso medio della costruzione di un AR (soluzione dell’equazione di ricorrenza.1) A(0) = 0 A(n) = n-1+(2/n)Σ A(j-1), per j = 1,…,n Passo1: si elimina la sommatoria 1. si moltiplica per n nA(n) = n(n-1) + 2Σ A(j-1), per j = 1,…,n 2. si calcola per n-1 (n-1)A(n-1) = (n-1)(n-2)+ 2Σ A(j-1), per j = 1,…,n-1 3. si sottrae la eq 2 dalla eq1 nA(n) - (n-1)A(n-1) = n (n-1) - (n-1)(n-2) + 2A(n-1) nA(n) = 2 (n-1) + (n+1)A(n-1) Passo 2: si divide per 2n(n+1) nA(n) = 2 (n-1) + (n+1)A(n-1) A(n)/ 2(n+1) = (n-1)/n (n+1) + A(n-1)/2n A(n)/ 2(n+1) = 2/ (n+1) -1/n + A(n-1)/2n
Analisi del caso medio della costruzione di un AR (soluzione dell’equazione di ricorrenza.2) Passo3: si applicano ripetute sostituzioni A(n)/ 2(n+1) = 2/ (n+1) -1/n + A(n-1)/2n = = 2/ (n+1) -1/n + [2/n - 1/(n-1) +A(n-2)/2(n-1)]= = 2/ (n+1) -1/n + [2/n - 1/(n-1) + [2/n-1 - 1/n-2 + A(n-3)/2(n-2)]]= = 2/ (n+1) + 2/n +…+ 2/n-(i-2) -1/n - 1/(n-1)-…- 1/n-(i-1) + A(n-i)/2(n- (i-1)) Passo4: si pone i=n A(n)/ 2(n+1) = 2/(n+1) + 2/n +…+ 1 -1/n - 1/(n-1)-… = = 2/n +…+ 1 -1/n - 1/(n-1)-…- 1 + (2/1-2/1) + 2/(n+1) = = (2/n +…+ 2/2 + 2/1) - (1/n +…+ 1/1) + 2/(n+1) - 2/1 = Σ1/i -2n/n+1, i=1,..n Passo5: si moltiplica per 2(n+1) 2(n+1)A(n)/ 2(n+1) =2(n+1)(Σ1/i -2n/n+1) A(n) =2(n+1)Σ1/i - (2(n+1))(2n/n+1) A(n) =2(n+1)Σ1/i - 4n
Analisi dell’operazione di cancellazione Non esiste per la cancellazione un risultato analogo a quello della complessità media per l’inserimento, quindi rimane valida solo la complessità asintotica nel caso peggiore: O(h(AR))≤O(n) Per essere sicuri di mantenere al più logaritmica l’altezza dell’albero, sia per inserzioni che per cancellazioni, si introducono gli alberi di ricerca bilanciati, il cui bilanciamento è mantenuto tramite rotazioni.
Rotazioni (a meno di simmetrie) Rotazione destra Rotazione sinistra/destra
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
Altezza di un AVL Alberi di Fibonacci: alberi AVL con il minor numero di nodi a parità di altezza n 0 = 1; n 1 = 2; n h = 1+ n h-1 + n h-2 (n(h):minimo numero di nodi di un albero AVL di altezza h) Vale: n h = F h+3 -1 si dimostra per induzione Passo base n 0 = 1= F 3 -1=2-1 Ipotesi induttiva n k = F k+3 -1, per ogni k < h Prova n h = 1+ n h-1 + n h-2 = 1 + F h F h+1 -1 = F h+3 -1 Th: Un albero AVL con n nodi ha altezza O(logn) Prova: n ≥ n h = F h+3 -1 ≥ h+1 -1
Alberi Red/Black Albero Red/Black: albero RB tale che 1.ad ogni nodo u è associato un colore (rosso o nero); 2.ogni foglia ha colore nero; 3.se un nodo ha colore rosso, entrambi i suoi figli hanno colore nero; 4. 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
Altezza di un albero Red/Black Il sottoalbero radicato in x,SA(x), contiene almeno 2 bh(x) -1 nodi Prova (per induzione su h) Passo base: se h=0, x è una foglia 2 bh(x) -1 =1-1 = 0 Ipotesi induttiva 2 bh(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) ≤ (2 bh(x)-1 -1)+ (2 bh(x)-1 -1)+1≤ 2 bh(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 ≥ 2 bh(x) -1≥ 2 h/2 -1 (*) se un nodo ha colore rosso, entrambi i suoi figli hanno colore nero.
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: 1.lo zio di x, z(x), è rosso allora commuta i colori di p(x), z(x),p(p(x)) 2.lo zio di x, z(x), è nero allora esegui una rotazione 3.la radice si mantiene sempre nera (*) se un nodo ha colore rosso, entrambi i suoi figli hanno colore nero.
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. 1.y era rosso o y è la radice. Fine. 2.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)
B-alberi B-alberi : sono progettati per operazioni su dischi magnetici o atri dispositivi di memoria secondaria ad accesso diretto;sono particolarmente efficienti nelle operazioni di Input/Output. I B-alberi sono una naturale generalizzazione degli alberi binari di ricerca bilanciati: un nodo con k chiavi ha k+1 figli; l’intervallo di chiavi gestito da un nodo è diviso in k+1 intervalli ciascuno di quali è gestito da un figlio; l’altezza cresce in modo logaritmico con il numero dei nodi dell’albero.
Esempio di B-albero
Perché i B-alberi? La memoria primaria (RAM) si basa su una tecnologia costosa ma che permette di eseguire le operazioni di scrittura e lettura in modo veloce (chip di memoria: dispositivi elettronici). La memoria secondaria (dischi) è più economica, ma richiede per accedere ai dati dei tempi relativamente lunghi (si debbono muovere delle componenti meccaniche per posizionare la testina).
Il Disco la superficie del disco è ricoperta di materiale magnetico; le informazioni su un disco sono organizzate in blocchi e il blocco minimo accessibile in lettura e scrittura è detto pagina; la testina di lettura/scrittura è in grado di operare mentre il disco è in movimento; la porzione di superficie che passa sotto la testina, in una posizione stabile, si dice traccia; il tempo di accesso è il tempo necessario per aspettare che una determinata pagina passi sotto la testina; la lettura e la scrittura su un disco magnetico sono completamente elettroniche.
Immagine di un disco tutti i blocchi hanno la stessa dimensione e sono definiti da: traccia, settore, faccia settoretraccia faccia
Accesso alla memoria secondaria Per trattare quantità estremamente grandi di dati si devono pertanto sviluppare algoritmi che lavorino con dati memorizzati in memoria secondaria. Questi algoritmi richiedono per garantire l’efficienza computazionale: che siano minimizzati gli accessi alla memoria secondaria; che la memoria principale contenga in ogni istante un numero costante di pagine; che siano copiate le pagine selezionate dal disco nella memoria principale; Disk-Read(x) che siano riscritte sul disco le pagine modificate in memoria principale; Disk-Write(x)
Definizione di B-albero B-albero, T : albero di ricerca m-ario tale che: ogni nodo interno,x, ha un numero n(x) di figli (t =2 è il grado minimo del B-albero; gli n(x) figli di x, radici dei sottoalberi A 1 (x), A 2 (x),…, A n(x) (x), sono ordinatamente raggiungibili da x tramite i puntatori c 1 (x), c 2 (x),…, c n(x) (x); ad ogni nodo x con n(x) figli sono associate n(x) -1 chiavi ordinate (k 1 (x) <= k 2 (x) <=…<= k n(x)-1 (x)); tutte le chiavi del sottoalbero A i (x) sono maggiori della chiave k i-1 (x) e minori della chiave k i (x); un nodo si dice pieno se contiene 2t-1 chiavi; tutti le foglie hanno la stessa profondità, che è l’altezza h(T) dell’albero.
Calcolo di h(T) Un B-albero T di n>=1 chiavi e di grado minimo t>=2 ha altezza h(T)<= log t ((n+1)/2) Prova: n>= 1+ (t-1) Σ 2t i-1 = la radice ha almeno 2 figli (1 chiave) e tutti gli altri nodi hanno i=1,…,halmeno t figli (t-1 chiavi), ovvero 2 nodi a profondità 1, 2t a profondità 2… = 1 + 2(t-1) Σ t i-1 = serie geometrica = 1 + 2(t-1) ((t h -1)/(t-1))= = 2t h -1