Multi-way search trees GT. 10.4 1 Argomenti Multi-way search trees Multi-way searching 9 (2,4) Trees 2 5 7 10 14 2 1
Alberi Binari di Ricerca Bilanciati n numero di chiavi (entry(key,elem)) AVL tree log( n+ 1) h( n) 2log( n) + 2 Red-Black tree log( n+ 1) h( n) 2log( n+ 1) 2-4-tree log( n+ 1) / 2 h( n) log( n+ 1) 3 Multi-Way Search Tree Un multi-way search tree è un albero ordinato tale che: ciascun nodo interno ha almeno due figli (d-node), dove d è il numero di figli memorizza d 1 entry (k i, o i ), in un nodo con figli v 1 v 2 v d e contenente le chiavi k 1 k 2 k d 1 le chiavi nel sottoalbero v 1 sono minori di k 1 le chiavi nel sottoalbero v i sono comprese tra k i 1 e k i (i = 2,, d 1) le chiavi nel sottoalbero v d sono maggiori di k d 1 I nodi esterni non contengono informazione 11 24 2 6 8 15 27 32 30 4 2
Attraversamento in_order I Binary Search Tree sono un caso speciale di multi-way search tree, con d =2 Attraversamento in-order dei multi-way search trees si visita entry (k i, o i ) del nodo v tra l attraversamento ricorsivo dei sottoalberi di v aventi come radice i figli v i and v i + 1 Attraversamento in-order: sequenza ordinata 11 24 8 12 2 6 8 15 27 32 2 4 6 10 14 18 30 1 3 5 7 9 11 13 16 19 5 Ricerca nei multi-way search trees nel Binary Search Tree (BST) Se la chiave cercata s = k chiave del nodo trovato Se la chiave cercata s < k cerca nel sottalbero sinistro Se s > k, cerca nel sottalbero destro nel Multi-way Search Tree: ( d > 2 ) Trova le chiavi k i-1 and k i tra cui cade s, e cerca nel sottoalbero con radice il figlio v i se si arriva ad un nodo esterno insuccesso Searching for s = 8 22 Searching 5 10 for s = 12 25 3 4 6 8 14 23 24 27 11 13 Not found! 17 18 19 20 21 6 3
Multi-way Searching O(h logd max ) < search time < O(h d max ) dipende dalla struttura dati secondaria usata nei nodi di T If d max è costante, il tempo di esecuzione è O(h), indipendentemente dalla struttura dati secondaria Searching for s = 8 22 Searching 5 10 for s = 12 25 3 4 6 8 14 23 24 27 11 13 Not found! 17 18 19 20 21 7 (2-4) trees G.T. 10.4 8 4
(2,4) Tree Un albero (2,4) (2-4 tree or 2-3-4 tree) è un multi-way search tree con le seguenti proprietà: Node-Size Property: ciascun nodo interno ha al più 4 figli Depth Property: tutti i nodi esterni hanno la stessa profondità Un nodo interno è chiamato: 2-node 2 figli 3-node 3 figli 4-node 4 figli 10 15 24 2 8 12 18 27 32 9 Altezza di un (2,4) Tree Proposizione: Un (2,4) tree con n items ha altezza Θ(log n) Sia h l altezza di un albero (2,4) tree con n items Per la depth property, ci sono al più 4 nodi alla profondità 1, al più 4 2 alla profondità 2, etc. Numero di nodi esterni, al più 4 h ci sono almeno 2 nodi alla profondità 1, 2 2 nodi alla profondità 2, etc. Numero di nodi esterni, almeno 2 h Ma: un multiway search tree con n items ha n+1 nodi esterni (esercizio: C-9.14) 2 h n+1 e n+1 4 h h log(n+1) e log(n+1) 2h h = Θ(log n) 10 5
Altezza di un (2,4) Tree Complessità della ricerca in un (2,4) tree con n items è : O( h ) = O(log n) depth 0 nodes at least at most 1 1 1 2 4 h-1 2 h 1 4 h 1 h 2 h 4 h n+1 2 h n+1 4 h log( n+ 1) / 2 h( n) log( n+ 1) 11 Inserzione in un (2,4) Tree Inserisci la nuova chiave nel nodo interno piu basso raggiunto nella ricerca (bottom-up insertion) 2-node diventa 3-node: g d d g 3-node diventa 4-node: f d g d f g e un 4-node? non c è posto overflow 12 6
Esempio di overflow in inserzione overflow (un 4-node v diventa un 5-node) Esempio: l inserzione della chiave 30 causa un overflow 10 15 24 2 8 12 18 v 27 32 35 10 15 24 2 8 12 18 27 30 32 35 v 13 Overflow e Split Risolviamo un overflow in un 5-node v con una operazione di split: siano v 1 v 5 i figli di v and k 1 k 4 le chiavi di v il nodo v è sostituito da v' and v" v' è un 3-node con chiavi k 1 k 2 e figli v 1 v 2 v 3 v" è un 2-node con chiave k 4 e figli v 4 v 5 la chiave k 3 è inserita nel padre u di v (eventualmente creando una nuova radice) Lo overflow si può propagare al nodo padre u u 15 24 v 12 18 27 30 32 35 15 24 32 v' 12 18 27 30 v" 35 v 1 v 2 v 3 v 4 v 5 v 1 v 2 v 3 v 4 v 5 14 7
2-4 tree insert con split U h1 h2 U h1 h2 u1 u2 u3 V k1 k2 k3 k4 u1 u2 k3 u3 V k1 k2 k4 v1 v2 v3 v4 v5 v1 v2 v3 v4 v5 15 2-4 tree insert con split U h1 k3 h2 u1 u3 V' k1 k2 V'' k4 v1 v2 v3 v4 v5 16 8
Top Down Insertion Strategia alternativa: top down insertion e d f g n e d f n g Si parte dalla radice nella ricerca della posizione di inserimento Quando scendendo nell albero, troviamo un 4-node, lo dividiamo in due 2-node, e inseriamo il nodo di mezzo nel padre Il padre è un 2-node o 3-node d e f n g il nodo di inserimento non è 4-node 17 Esempio g n c t a f i l p r x n g c t a f i l p r x 18 9
Esempio (cont.) n g c i t a f l p r x n c i t a f g l p r x 19 Complessità dell inserzione in (2,4) Trees Complessità temporale: La ricerca visita O(log n) nodi Ciascun split impiega tempo, O(1) Una inserzione richiede O(log n) splits (al più fino alla radice) le operazioni di Search e Insert richiedono tempo O(log n) 20 10
Rimozione Si riduce la rimozione di un item al caso della rimozione di un nodo con figli esterni Eventualmente, si rimpiazza lo item con il suo successore nel inorder (o con il predecessore inorder) e si rimuove quest ultimo Esempio: per rimuovere la chiave 24, la scambiamo con 27 (successore inorder) delete 10 15 24 2 8 12 18 27 32 35 10 15 27 delete 2 8 12 18 24 32 35 21 Rimozione rimozione da un 3-node o un 4-node rimuovi la entry e un nodo esterno 10 15 27 delete 2 8 12 18 24 32 35 10 15 27 2 8 12 18 32 35 22 11
Underflow e Fusione La rimozione di un item da un nodo v (2-node) può causare underflow, quando un nodo v diventa un 1-node con un figlio e senza chiavi Per gestire un underflow al nodo v con padre u, consideriamo due casi Caso 1: i fratelli adiacenti di v sono 2-nodes Fusione: si fonde v con un fratello adiacente w si muove un item da u al nodo risultante v' Dopo una fusione, lo underflow si può propagare al padre u u 9 14 w 2 5 7 10 v 2 5 7 u 9 10 14 v' 23 Underflow e Transfer Caso 2: un fratello adiacente w di v è un 3-node o un 4-node Transfer operation: (ridistribuzione) 1. si muove un figlio di w a v 2. si muove un item da u a v 3. si muove un item da w a u u 4 9 w v 2 6 8 2 u 4 8 w v 6 9 24 12
Esempio: 2-4 tree remove remove 4 12 elimineremo: 4, 12, 13, 14 5 10 15 4 6 8 11 13 14 17 25 2-4 tree remove remove 4 12 10 ridistribuzione 15 5 6 8 11 13 14 17 26 13
2-4 tree remove 12 remove 12 11 6 10 15 5 8 13 14 17 predecesore nel inordine 27 2-4 tree remove remove 12 11 6 10 15 5 8 13 14 17 fusione 28 14
2-4 tree remove remove 12 11 6 15 5 8 10 13 14 17 risultato della fusione 29 2-4 tree remove 11 6 remove 13 13 15 5 8 10 14 17 30 15
2-4 tree remove 11 6 remove 14 14 15 5 8 10 17 31 2-4 tree remove 11 6 remove 14 15 u 5 8 10 v 17 32 16
2-4 tree remove remove 14 11 6 u 5 8 10 15 17 33 2-4 tree remove remove 14 6 11 5 8 10 15 17 la radice (vuota) può essere rimossa l'albero è diminuito di un livello 34 17
Analisi della rimozione Sia T un albero (2,4) con n items l albero T ha altezza h = O(log n) Nella operazione di rimozione si visitano O(log n) nodi per localizzare il nodo con l item da rimuovere si gestisce lo underflow con una serie di O(log n) fusioni, seguite da al più un transfer Ciascuna fusione e transfer richiedono tempo O(1) Pertanto la rimozione di un item da un albero (2,4) richiede tempo O(log n) 35 (2,4) Conclusioni L altezza di un albero (2,4) è O(log n) Split, transfer, e fusione richiedono O(1) Search, insertion e deletion richiedono O(log n) 36 18