Inserzione e Cancellazione

Slides:



Advertisements
Presentazioni simili
Prof.ssa Rossella Petreschi Lezione del 17 /10/2014 del Corso di Algoritmica Lezione n°5.
Advertisements

Prof.ssa Rossella Petreschi Lezione del 15 /10/2012 del Corso di Algoritmica B-alberi Lezione n°5.
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Prof.ssa Rossella Petreschi Lezione del 29 /10/2014 del Corso di Algoritmica Lezione n°8.
Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Dudo.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Esercitazioni di Prog. II (esercizi su alberi ennari)
Alberi di ricerca di altezza logaritmica
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Dizionari alberi bilanciati.
Alberi di ricerca di altezza logaritmica
Analisi di sequenze di operazioni Union-Find
Lezione n°9 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°7 Prof.ssa Rossella Petreschi
La funzione Path e le forme a cespuglio
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Lezione n°15 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Rappresentazione di alberi
Correzione 1° Esonero Lezione n°13
B-alberi e alberi autoaggiustanti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Complessità ammortizzata degli algoritmi Union Find
File hash.
La gestione degli insiemi disgiunti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Lezione n°4 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
UNION FIND Lezione n°8 Prof.ssa Rossella Petreschi
Dizionari alberi bilanciati.
ABBINAMENTO Lezione n°13
Rappresentazione di alberi
Lezione n°6 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Introduzione agli Algoritmi e alle Strutture Dati
Analisi ammortizzata Lezione n°3
Gestione dinamica di tabelle
Alberi n-ary Lezioni di C.
APPUNTI SUL LINGUAGGIO C
Progettare algoritmi veloci usando strutture dati efficienti
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
Algoritmi e Strutture Dati
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Alberi di ricerca Lezione n°4
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
Insiemi disgiunti.
Algoritmi e Strutture Dati
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Unione per ranghi compressi
Tabelle dinamiche Lezione n°3
Analisi ammortizzata Lezione n°2
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Inserzione e Cancellazione su B-alberi Lezione n°6 Prof.ssa Rossella Petreschi Lezione del 17 /10/2013 del Corso di Algoritmica

Inserimento in un B-albero L’operazione di inserimento in un B-albero è analoga a quella già vista per un albero binario di ricerca. Si controlla x (elemento da inserire) con i valori k1(y)<= k2(y)<=…<= kn(y)-1(y) del nodo che si sta analizzando(inizialmente y = r) Se k1(y)> x, si confronta x con il primo figlio di y Se ki(y)< x < ki+1(y) si confronta x con il figlio (i+1)-esimo di y Se kn(y)-1(y)< x, si confronta x con l’ultimo figlio di y Si prosegue ricorsivamente sul cammino fintanto che non si trova libera la posizione appropriata sull’albero. Tempo O(t h(T))

Dividere un nodo calcolare l’esatta posizione di x in y; Per garantire che l’altezza del B-albero rimanga logaritmica, bisogna controllare che il nodo y in cui vogliamo inserire x non sia già pieno, ovvero non abbia più di 2t-1 chiavi. In tal caso bisogna: calcolare l’esatta posizione di x in y; prendere la chiave mediana rispetto ai 2t elementi, sia ki(y); inserire ki(y) nel nodo padre di y, p(y); spezzare il nodo y in due nodi di t chiavi ciascuno: y1contenente tutte le chiavi (chiavi di y+ la chiave x) minori di ki(y) e y2 contenente tutte le chiavi (chiavi di y+ la chiave x) maggiori di ki(y); aggiornare i puntatori di p(y) rispetto a y1 e y2 ATTENZIONE!!

Incremento dell’altezza Nell’inserire ki(y) nel nodo padre di y potremmo ritrovarci ancora una volta nella necessità di dividere il nodo (questa volta p(x)). Questo processo può propagare verso l’alto fino ad arrivare alla radice. Lo spezzamento della radice comporta l’incremento dell’altezza dell’albero dato che bisogna creare un nuovo nodo radice con una sola chiave (la chiave mediana della vecchia radice) e con due figli (i due nodi di t chiavi generati dalla vecchia radice). La complessità dell’intera operazione di inserimento (comprensiva delle eventuali divisioni di nodi) rimane dell’ordine di O(t h(T))

Eliminazione di una chiave in un B-albero L’operazione di eliminazione in un B-albero è analoga a quella già vista per un albero binario di ricerca e richiede il controllo del numero di chiavi del nodo su cui si è operato (debbono rimanere almeno t-1 chiavi) Si cerca la chiave da cancellare; se la chiave è in una foglia, la si elimina; se la chiave è in un nodo interno la si sostituisce con il predecessore (o il successore), che è in una foglia, e ci si riconduce al caso precedente Ogni volta che da una foglia si elimina una chiave si deve controllare se il numero di chiavi rimane almeno pari a t-1. Se ciò non accade, bisogna opportunamente rimanipolare la struttura.

Il supporto di un fratello Un nodo y che rimane con meno di t-1 chiavi deve chiedere aiuto ad un fratello, f(y), per effettuare una opportuna ridistribuzione delle chiavi. La ridistribuzione mette in gioco le chiavi presenti nei nodi y e f(y) nonché la loro chiave di separazione presente nel nodo padre. Per effettuare la ridistribuzione, f(y) deve avere almeno t chiavi in modo che al termine della ridistribuzione y e f(y) abbiano almeno t-1 chiavi ciascuno. Se f(y) ha t-1 chiavi, prima di effettuare una ridistribuizione, bisogna fondere y e f(y) in un solo nodo. La fusione consiste nell’eliminare y e nel riportare in f(y) tutte le chiavi di y e la chiave di separazione che era presente nel nodo padre. f(y) avrà quindi 2t-2 nodi ATTENZIONE!!

Decremento dell’altezza L’operazione di fusione sposta da p(y) a f(y) la chiave di separazione fra y e f(y) che era presente nel nodo padre. Questo potrebbe causare la necessità di iterare la fusione fra due nodi. Questo processo può propagare verso l’alto fino ad arrivare alla radice. Se i nodi da fondere sono i due unici figli della radice, il risultato della fusione è una nuova radice mentre si decrementa l’altezza dell’albero La complessità dell’intera operazione di eliminazione (comprensiva delle eventuali fusioni di nodi) rimane dell’ordine di O(t h(T))

B+-tree chiavi solo nelle foglie; nodi interni contengono solo puntatori per indicare la strada verso le foglie; le foglie sono collegate fra loro orizzontalmente.