Algoritmi e Strutture Dati Capitolo 6 Alberi di ricerca Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Dizionari • Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato dizionario 2 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Alberi binari di ricerca (BST = binary search tree) 3 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione Albero binario che soddisfa le seguenti proprietà – ogni nodo v contiene un elemento elem(v) cui è associata una chiave chiave(v) presa da un dominio totalmente ordinato – le chiavi nel sottoalbero sinistro di v sono ≤ chiave(v) – le chiavi nel sottoalbero destro di v sono ≥ chiave(v) 4 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempi Albero binario di ricerca 5 Albero binario non di ricerca Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …ancora un esempio… Ordinamento decrescente 15 Ordinamento crescente 6 3 18 7 17 20 massimo 2 13 4 minimo 9 6 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Visita simmetrica di un BST • Che succede se eseguo una visita in ordine simmetrico di un BST? • Visita in ordine simmetrico – dato un nodo x, elenco prima il sotto-albero sinistro di x, poi il nodo x, poi il sotto-albero destro • visito i nodi dell’ABR in ordine crescente rispetto alla chiave! 7 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Verifica di correttezza – Supponiamo,per semplicità, che l’albero sia completo. Indichiamo con h l’altezza dell’albero. Vogliamo mostrare che la visita in ordine simmetrico restituisce la sequenza ordinata Per induzione sull’altezza dell’ABR: h=1 r u NIL v NIL NIL NIL chiave(u) ≤ chiave(r) ≤ chiave(v) 8 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Verifica correttezza (continua …) h = generico (ipotizzo che la procedura sia corretta per h-1) r Albero di altezza h-1. Tutti i suoi elementi sono minori o uguali della radice 9 Albero di altezza h-1. Tutti i suoi elementi sono maggiori o uguali della radice Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano search(chiave k) -> elem Traccia un cammino nell’albero partendo dalla radice: su ogni nodo, usa la proprietà di ricerca per decidere se proseguire nel sottoalbero sinistro o destro 10 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano search(7) 15 6 3 2 11 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 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 ricerca 12 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. 13 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Ricerca del massimo Nota: è possibile definire una procedura min(nodo u) in maniera del tutto analoga 14 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 15 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano predecessore e successore • il predecessore di un nodo u in un BST è il nodo v nell’albero avente massima chiave chiave(u) • il successore di un nodo u in un BST è il nodo v nell’albero avente minima chiave chiave(u) • Come trovo il predecessore/successore di un nodo in un BST? 16 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Ricerca del predecessore 17 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Nota: la ricerca del successore di un nodo è simmetrica 15 suc(u) 6 3 18 Cerco il min del sottoalbero destro 8 17 20 suc(v) 2 4 7 13 9 18 Cerco l’antenato più prossimo di v il cui figlio sinistro è 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 delete(elem e) Sia u il nodo contenente l’elemento e da cancellare: 1) u è una foglia: rimuovila 2) u ha un solo figlio: 19 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 successore) (v) e rimuovi fisicamente il predecessore (o successore) (che ha un solo figlio) 20 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 21 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Costo delle operazioni • Tutte le operazioni hanno costo O(h) dove h è l’altezza dell’albero • O(n) nel caso peggiore (alberi molto sbilanciati e profondi) 22 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …un albero binario di ricerca bilanciato… h=O(log n) 15 6 3 2 23 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 30 Ma anche questo è un BST 22 27 20 19 17 16 15 ... 2 24 Notare: Tsearch(n) = O(h) in entrambi i casi Però: BST completo h = (log(n)) BST “linearizzato” h = (n) 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) 25 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizioni Fattore di bilanciamento 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 26 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 gli alberi di Fibonacci hanno altezza O(log n), allora gli alberi AVL hanno altezza O(log n) 27 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… Ti: albero di Fibonacci di altezza i (albero AVL di altezza i con il minimo numero di nodi) T0 T1 T2 T3 T4 Nota che: se a Ti tolgo un nodo, o diventa sbilanciato, o cambia la sua altezza Inoltre: ogni nodo ha fattore di bilanciamento pari a 1 intravedete uno schema per generare l’i-esimo albero di Fibonacci a partire dai precedenti? 28 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati T0 T1 Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano T2 T3 T4 Lo schema Lemma Sia nh il numero di nodi di Th. Risulta nh=1+nh-1+nh-2=Fh+3-1 dim per induzione su h 29 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Corollario Un albero AVL con n nodi ha altezza h=O(log n) dim nh =Fh+3 -1 = ( h) Ricorda che vale: Fk = ( k) =1.618… sezione aurea h=(log nh) corollario segue da n nh 30 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Implementazione delle operazioni • L’operazione search procede come in un BST • Ma inserimenti e cancellazioni potrebbero sbilanciare l’albero • Manteniamo il bilanciamento tramite opportune rotazioni 31 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Rotazione di base • Mantiene la proprietà di ricerca • Richiede tempo O(1) 32 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Ribilanciamento tramite rotazioni • • • • Le rotazioni sono effettuate su nodi sbilanciati Sia v un nodo con fattore di bilanciamento ≥ 2 Esiste un sottoalbero T di v che lo sbilancia A seconda della posizione di T si hanno 4 casi: • I quattro casi sono simmetrici a coppie 33 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Rotazione SS • Applicare una rotazione semplice verso destra su v • L’altezza dell’albero coinvolto nella rotazione passa da h+3 a h+2 +1 34 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Rotazione SD • Applicare due rotazioni semplici: una verso sinistra sul figlio del nodo critico (nodo z), l’altra verso destra sul nodo critico (nodo v) • L’altezza dell’albero coinvolto nella rotazione passa da h+3 a h+2 35 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …stesso caso, ma con fattore di bilanciamento di w diverso… +1 36 0 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. Inserisci u come in un BST 3. Ricalcola i fattori di bilanciamento dei nodi nel cammino dalla radice a u: sia v il più profondo nodo con fattore di bilanciamento pari a ±2 (nodo critico) 4. Esegui una rotazione opportuna su v • 37 Oss.: una sola rotazione è sufficiente, poiché l’altezza dell’albero coinvolto diminuisce di 1 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert (10,e) +2 +1 15 -2 -1 6 0 2 18 -2 3 0 -1 0 4 -1 8 +1 +2 13 0 7 -1 0 -1 0 17 20 0 caso SD 25 9 0 10 38 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert (10,e) +2 +1 15 -2 -1 6 0 2 18 -2 3 0 -1 0 4 -1 0 17 8 +1 +2 13 0 7 -1 0 -1 20 0 25 10 0 9 39 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert (10,e) +2 +1 15 -2 -1 6 0 2 18 -2 3 0 -1 0 4 -1 8 0 7 -1 0 9 40 -1 0 17 20 0 0 10 25 +1 0 +2 13 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano delete(elem e) 1. Cancella il nodo come in un BST 2. Ricalcola i fattori di bilanciamento dei nodi nel cammino dalla radice al padre del nodo eliminato fisicamente (che potrebbe essere il predecessore del nodo contenente e) 3. Ripercorrendo il cammino dal basso verso l’alto, esegui l’opportuna rotazione semplice o doppia sui nodi sbilanciati • 41 Oss.: potrebbero essere necessarie O(log n) rotazioni Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano delete (18) +1 +2 15 caso SD -1 0 -1 6 0 2 18 20 0 -1 3 8 0 4 -1 0 17 +1 13 0 7 20 0 successore di 18 25 0 9 42 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano delete (18) +1 +2 15 +1 -1 0 8 20 +1 +1 13 6 0 7 0 3 0 2 43 0 17 0 0 9 25 0 4 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano delete (18) 0 8 +1 0 6 15 0 7 0 3 0 2 44 0 4 +1 13 0 9 0 20 0 17 0 25 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Cancellazione con rotazioni a cascata 45 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Classe AlberoAVL 46 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Costo delle operazioni • Tutte le operazioni hanno costo O(log n) poché l’altezza dell’albero è O(log n) e ciascuna rotazione richiede solo tempo costante 47 Copyright © 2004 - The McGraw - Hill Companies, srl