Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e Strutture Dati Capitolo 6 Il problema del dizionario Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e, chiave k) 1. Crea un nuovo nodo u con elem=e e chiave=k 2. Cerca la chiave k nell’albero, identificando così il nodo v che diventerà padre di u 3. Appendi u come figlio sinistro/destro di v in modo che sia mantenuta la proprietà di ordinamento totale La complessità della procedura considerata è T(n) = O(h), ove h è l’altezza del BST Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(e,8) 15 6 18 3 2 9 4 17 7 20 13 8 10 Se seguo questo schema l’elemento e viene posizionato nella posizione giusta. Infatti, per costruzione, ogni antenato di e si ritrova e nel giusto sottoalbero. Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Interrogazioni ausiliarie su un BST • max(nodo u) – dato un nodo u di un BST, restituisce il nodo del BST che discende da u avente chiave più grande • min(nodo u) – dato un nodo u di un BST, restituisce il nodo del BST che discende da u avente chiave più piccola • successor(nodo u) – dato un nodo u di un BST, restituisce il nodo del BST con chiave immediatamente più grande di quella associata ad u (o NULL se u contiene l’elemento massimo del BST). • predecessor(nodo u) – dato un nodo u di un BST, restituisce il nodo del BST con chiave immediatamente più piccola di quella associata ad u (o NULL se u contiene l’elemento minimo del BST). 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 è T(n) = O(h), ove h è l’altezza del BST Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano 15 6 3 2 18 max (u) 8 4 min (r) 17 7 20 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) max del sottoalbero sinistro Antenato più prossimo di u il cui figlio destro è la radice del sottoalbero che contiene v 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” Complessità: O(h) 15 suc(u) 6 3 18 Cerco il min del sottoalbero destro 8 17 20 suc(u) 2 4 7 13 9 Cerco l’antenato più prossimo di u il cui figlio sinistro è la radice del sottoalbero che contiene u 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 da cancellare; ci sono 3 possibilità: 1) u è una foglia: rimuovila 2) u ha un solo figlio: 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 predecessore (o indifferentemente, il successore), e rimuovi fisicamente il predecessore (o il successore), che per definizione ha al più un solo figlio Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano delete (u) 15 6 u 4 3 9 v 2 18 4 17 7 20 13 10 successore di u 5 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Costo dell’operazione di cancellazione • In tutt’e tre i casi, costa T(n)=O(h) • Ricapitolando, le operazioni di ricerca, inserimento e cancellazione hanno costo O(h) dove h è l’altezza dell’albero Per alberi molto “sbilanciati”, h=(n) …ma per 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 22 27 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”… 15 6 3 2 20 8 4 7 17 13 16 27 19 22 30 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Analisi critica dei BST • Le operazioni di inserimento e cancellazione descritte possono “linearizzare” un BST. • 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 Un albero si dice bilanciato in altezza se ogni nodo v ha fattore di bilanciamento in valore assoluto ≤ 1 Alberi AVL = alberi binari di ricerca bilanciati in altezza Generalmente (v) mantenuto come informazione addizionale nel record relativo a v Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …qualche esempio… è il seguente albero AVL? 15 6 3 2 20 8 4 7 17 13 16 27 19 22 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 albero AVL? 5 4 3 2 1 0 19 20 22 27 30 Convenzione: altezza di un albero vuoto= -1 17 NO! Non vale la proprietà sui fattori di bilanciamento! Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …qualche esempio… è il seguente albero AVL? +1 15 -1 -1 6 0 2 18 0 -1 3 8 0 4 0 7 -1 0 17 20 0 0 10 0 9 25 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 Altezza di alberi AVL Si può 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 nh (alberi di Fibonacci) Intuizione: se per gli alberi di Fibonacci di altezza h vale h=O(log nh), allora per tutti gli alberi AVL di altezza h con n≥nh 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… Th (albero di Fibonacci di altezza h): albero AVL di altezza h con il minimo numero di nodi devo massimizzare ad 1 il fattore di bilanciamento di ogni nodo interno T0 T1 T2 T3 T4 Nota: se a Th 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 T0 T1 Lo schema Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano T2 T3 T4 Lemma Sia nh il numero di nodi di Th. Risulta nh=Fh+3-1. Dim.: Per induzione su h: • h=0: n0=1 Fh+3-1=F3-1=2-1=1 • h generico: nh=1+nh-1+nh-2=1+(Fh+2-1)+(Fh+11)=Fh+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 O(log n). Dim.: Sia h l’altezza dell’AVL, e si consideri Th: n ≥ nh =Fh+3 -1 = ( h) Ricorda che vale: Fk = ( k) =1.618… sezione aurea h=(log nh) = (log nh) = O(log n). Copyright © 2004 - The McGraw - Hill Companies, srl