Albero B nella struttura dati: ricerca, inserimento, eliminazione

โšก Riepilogo intelligente

L'albero B nelle strutture dati รจ un albero autobilanciante che mantiene i dati ordinati per velocizzare le operazioni di ricerca, inserimento ed eliminazione su disco. Questo testo illustra le regole dell'albero B, la sua storia e gli algoritmi di ricerca, inserimento ed eliminazione con esempi.

  • ๐ŸŒฒ Autobilanciamento: Un albero B mantiene tutte le foglie allo stesso livello e rimane in equilibrio durante ogni operazione.
  • ๐Ÿ”ข Ordine (m): Il grado m definisce il numero massimo di figli (m) e chiavi (m โˆ’ 1) per nodo.
  • ๐Ÿ” Ricerca: La ricerca inizia dalla radice e si sposta a sinistra o a destra confrontando la chiave.
  • โž• Inserisci: L'inserimento individua il punto corretto e separa un nodo completo dalla sua chiave centrale.
  • โž– Elimina: La cancellazione gestisce i casi foglia, interni e radice utilizzando prestiti e unioni.

B ALBERO nella struttura dati: Cerca, Inserisci, Elimina Operazione Esempio

Cos'รจ un albero B?

B Albero รˆ una struttura dati autobilanciante basata su un insieme specifico di regole per la ricerca, l'inserimento e la cancellazione dei dati in modo piรน rapido ed efficiente in termini di memoria. Per raggiungere questo obiettivo, vengono seguite le seguenti regole per creare un albero B.

Un albero B รจ un tipo speciale di albero in una struttura dati. Questo metodo fu introdotto per la prima volta nel 1972 da McCreight e Bayer, che lo chiamarono Albero di ricerca m-way bilanciato in altezza. Consente di mantenere i dati ordinati e permette di eseguire diverse operazioni come inserimento, ricerca ed eliminazione in tempi ridotti.

Regole per B-Tree

Ecco le regole importanti per la creazione di un albero B:

  • Tutte le foglie verranno create allo stesso livello.
  • Un albero B รจ determinato da un numero di grado, che รจ anche chiamato โ€œordineโ€ (specificato da un attore esterno, come un programmatore), indicato come m in poi. Il valore di m dipende dalla dimensione del blocco sul disco su cui si trovano principalmente i dati.
  • Il sottoalbero sinistro del nodo avrร  valori inferiori rispetto al lato destro del sottoalbero. Ciรฒ significa che anche i nodi vengono ordinati in ordine crescente da sinistra a destra.
  • Il numero massimo di chiavi che un nodo radice, cosรฌ come i suoi nodi figli, possono contenere viene calcolato con la seguente formula: m โˆ’ 1. Per esempio:
    m = 4
    max keys: 4 โˆ’ 1 = 3

Regole per B-Tree

  • Ogni nodo, eccetto la radice, deve contenere un numero minimo di chiavi di [m/2] โˆ’ 1. Per esempio:
    m = 4
    min keys: 4/2 โˆ’ 1 = 1
  • Il numero massimo di nodi figli che un nodo puรฒ avere รจ uguale al suo grado, ovvero m.
  • Il numero minimo di figli che un nodo puรฒ avere รจ la metร  dell'ordine, ovvero m/2 (viene preso il valore massimo).
  • Tutte le chiavi in โ€‹โ€‹un nodo sono ordinate in ordine crescente.

Perchรฉ utilizzare B-Tree

Ecco i motivi per utilizzare un albero B:

  • Riduce il numero di operazioni di lettura effettuate sul disco.
  • Gli alberi B possono essere facilmente ottimizzati per adattare le loro dimensioni (ovvero il numero di nodi figli) in base alle dimensioni del disco.
  • Si tratta di una tecnica appositamente progettata per gestire una grande quantitร  di dati.
  • รˆ un algoritmo utile per database e file system.
  • Un'ottima scelta quando si tratta di leggere e scrivere grandi quantitร  di dati.

Storia di B-Tree

  • I dati vengono memorizzati sul disco in blocchi. Questi dati, quando vengono trasferiti nella memoria principale (o RAM), costituiscono una struttura dati.
  • Nel caso di grandi quantitร  di dati, la ricerca di un singolo record sul disco richiede la lettura dell'intero disco; ciรฒ aumenta i tempi di elaborazione e il consumo di memoria principale a causa dell'elevata frequenza di accesso al disco e delle dimensioni dei dati.
  • Per ovviare a questo problema, vengono create tabelle indice che salvano il riferimento ai record in base ai blocchi in cui risiedono. Ciรฒ riduce drasticamente il tempo e il consumo di memoria.
  • Poichรฉ disponiamo di dati enormi, possiamo creare tabelle indice multilivello.
  • รˆ possibile progettare un indice multilivello utilizzando un albero B per la chiaveping I dati sono stati ordinati in modo autobilanciante.

Cerca Operaproduzione

L'operazione di ricerca รจ l'operazione piรน semplice su un albero B. Viene applicato il seguente algoritmo:

  • Sia "k" la chiave (il valore) da cercare.
  • Inizia la ricerca dalla radice e procedi ricorsivamente verso il basso.
  • Se k รจ minore del valore della radice, cerca nel sottoalbero sinistro; se k รจ maggiore del valore della radice, cerca nel sottoalbero destro.
  • Se il nodo ha il k trovato, restituisci semplicemente il nodo.
  • Se la k non si trova nel nodo, attraversa fino al bambino con una chiave maggiore.
  • Se k non si trova nell'albero, restituiamo NULL.

inserire Operaproduzione

Poichรฉ un albero B รจ un albero autobilanciante, non รจ possibile inserire forzatamente una chiave in un nodo qualsiasi. Si applica il seguente algoritmo:

  • Esegui l'operazione di ricerca e trova il luogo di inserimento appropriato.
  • Inserisci la nuova chiave nella posizione corretta, ma se il nodo ha giร  un numero massimo di chiavi:
  • Il nodo, insieme alla chiave appena inserita, si dividerร  dall'elemento centrale.
  • L'elemento centrale diventerร  il genitore per gli altri due nodi figli.
  • I nodi devono riorganizzare le chiavi in โ€‹โ€‹ordine crescente.

๐Ÿ’ก SUGGERIMENTO: Quello che segue รจ non รจ un Vero riguardo all'algoritmo di inserimento: "Poichรฉ il nodo รจ pieno, verrร  suddiviso e quindi verrร  inserito un nuovo valore". La chiave viene inserita per prima, e solo successivamente il nodo viene suddiviso se supera il numero massimo di chiavi.

inserire Operaproduzione

Nell'esempio sopra:

  • Cerca la posizione appropriata nel nodo per la chiave.
  • Inserisci la chiave nel nodo di destinazione e verifica le regole.
  • Dopo l'inserimento, il nodo ha un numero di chiavi maggiore o uguale al numero minimo, ovvero 1? In questo caso, sรฌ. Controlla la regola successiva.
  • Dopo l'inserimento, il nodo ha piรน del numero massimo di chiavi, ovvero 3? In questo caso, no. Ciรฒ significa che l'albero B non viola alcuna regola e l'inserimento รจ completo.

inserire Operaproduzione

Nell'esempio sopra:

  • Il nodo ha raggiunto il numero massimo di chiavi.
  • Il nodo si dividerร  e la chiave centrale diventerร  il nodo radice degli altri due nodi.
  • Nel caso di un numero pari di chiavi, il nodo centrale verrร  selezionato in base alla preferenza a sinistra o a destra.

inserire Operaproduzione

Nell'esempio sopra:

  • Il nodo ha meno del numero massimo di chiavi.
  • Il numero 1 viene inserito accanto al 3, ma la regola dell'ordine crescente viene violata.
  • Per risolvere questo problema, le chiavi vengono ordinate.

Allo stesso modo, 13 e 2 possono essere inseriti facilmente nel nodo poichรฉ soddisfano la regola "meno di chiavi massime" per i nodi.

inserire Operaproduzione

Nell'esempio sopra:

  • Il nodo ha chiavi uguali a max keys.
  • La chiave viene inserita nel nodo di destinazione, ma viola la regola del numero massimo di chiavi.
  • Il nodo di destinazione รจ diviso e la chiave centrale per polarizzazione a sinistra รจ ora il genitore dei nuovi nodi figli.
  • I nuovi nodi sono disposti in ordine crescente.

Allo stesso modo, in base alle regole e ai casi sopra indicati, il resto dei valori puรฒ essere inserito facilmente nel B Tree.

inserire Operaproduzione

Elimina Operaproduzione

L'operazione di eliminazione prevede piรน regole rispetto alle operazioni di inserimento e ricerca. Si applica il seguente algoritmo:

  • Esegui l'operazione di ricerca e trova la chiave di destinazione nei nodi.
  • Vengono applicate tre condizioni in base alla posizione della chiave di destinazione, come spiegato nelle sezioni seguenti.

Se la chiave di destinazione si trova nel nodo foglia

  • Target รจ nel nodo foglia, piรน di chiavi minime. Eliminando questo non violerร  la proprietร  dell'albero B.
  • Target si trova nel nodo foglia e ha un numero minimo di nodi chiave. Eliminandolo si violerebbe la proprietร  dell'albero B.
  • Il nodo di destinazione puรฒ prendere in prestito una chiave dal nodo immediatamente a sinistra o dal nodo immediatamente a destra (fratello).
  • Il fratello dirร  sรฌ se ha piรน del numero minimo di chiavi.
  • La chiave verrร  presa in prestito dal nodo padre, il valore massimo verrร  trasferito al padre, il valore massimo del nodo padre verrร  trasferito al nodo di destinazione e il valore di destinazione verrร  rimosso.
  • Target รจ nel nodo foglia, ma nessun fratello ha piรน del numero minimo di chiavi: cerca la chiave, unisci con i fratelli e il minimo dei nodi padre, il numero totale di chiavi sarร  ora maggiore del minimo e la chiave di destinazione verrร  sostituita con il minimo di un nodo padre.

Se la chiave di destinazione si trova in un nodo interno

  • Scegliere un predecessore in ordine o un successore in ordine.
  • Nel caso di un predecessore in ordine, verrร  selezionata la chiave massima dal suo sottoalbero sinistro.
  • Nel caso di un successore in ordine, verrร  selezionata la chiave minima dal suo sottoalbero destro.
  • Se il predecessore in ordine della chiave di destinazione ha piรน chiavi del numero minimo, solo allora puรฒ sostituire la chiave di destinazione con il numero massimo del predecessore in ordine.
  • Se il predecessore in ordine della chiave di destinazione non ha piรน di min chiavi, cerca la chiave minima del successore in ordine.
  • Se il predecessore e il successore in ordine della chiave di destinazione hanno entrambi meno di chiavi minime, unire il predecessore e il successore.

Se la chiave di destinazione si trova in un nodo radice

  • Sostituire con l'elemento massimo del sottoalbero predecessore in ordine.
  • Se, dopo la cancellazione, il nodo di destinazione ha meno di min chiavi, allora il nodo di destinazione prenderร  in prestito il valore massimo dal suo fratello tramite il genitore di quest'ultimo.
  • Il valore massimo del genitore verrร  preso dal target, ma con i nodi del valore massimo del fratello.

Ora comprendiamo l'operazione di eliminazione con un esempio.

Elimina Operaproduzione

Il diagramma sopra riportato mostra diversi casi dell'operazione di cancellazione in un albero B. Questo albero B รจ di ordine 5, il che significa che il numero minimo di nodi figli che un nodo puรฒ avere รจ 3, e il numero massimo di nodi figli che un nodo puรฒ avere รจ 5. Il numero minimo e massimo di chiavi che un nodo puรฒ avere รจ rispettivamente 2 e 4.

Elimina Operaproduzione

Nell'esempio sopra:

  • Il nodo di destinazione possiede la chiave di destinazione da eliminare.
  • Il nodo di destinazione ha piรน chiavi del numero minimo di chiavi.
  • รˆ sufficiente eliminare la chiave.

Elimina Operaproduzione

Nell'esempio sopra:

  • Il nodo di destinazione ha chiavi pari al numero minimo di chiavi, quindi non possiamo eliminarlo direttamente poichรฉ ciรฒ violerebbe le condizioni.

Ora, il diagramma seguente spiega come eliminare questa chiave:

Elimina Operaproduzione

  • Il nodo di destinazione prenderร  in prestito una chiave da un fratello immediato, in questo caso il predecessore in ordine (fratello sinistro), poichรฉ non ha alcun successore in ordine (fratello destro).
  • Il valore massimo del predecessore in ordine verrร  trasferito al genitore, e il genitore trasferirร  il valore massimo al nodo di destinazione (vedere il diagramma sottostante).

L'esempio seguente illustra come eliminare una chiave che necessita di un valore dal suo successore ordinato.

Elimina Operaproduzione

  • Il nodo di destinazione prenderร  in prestito una chiave da un fratello immediato, in questo caso il successore in ordine (fratello destro), perchรฉ il suo predecessore in ordine (fratello sinistro) ha chiavi uguali alle chiavi minime.
  • Il valore minimo del successore in ordine verrร  trasferito al genitore e il genitore trasferirร  il valore massimo al nodo di destinazione.

Nell'esempio seguente, il nodo di destinazione non ha alcun nodo fratello che possa cedergli la propria chiave. Pertanto, รจ necessaria l'unione. Consultare la procedura per eliminare tale chiave:

Elimina Operaproduzione

  • Unisci il nodo di destinazione con uno qualsiasi dei suoi fratelli diretti, insieme alla chiave del nodo padre.
  • Viene selezionata la chiave del nodo padre che si trova tra i due nodi da unire.
  • Elimina la chiave di destinazione dal nodo unito.

Elimina Operazione Pseudo Code

private int removeBiggestElement()
{
    if (root has no child)
        remove and return the last element
    else {
        answer = subset[childCount-1].removeBiggestElement()
        if (subset[childCount-1].dataCount < MINIMUM)
            fixShort (childCount-1)
        return answer
    }
}

Produzione: L'elemento piรน grande viene eliminato dal B-Tree.

DOMANDE FREQUENTI

Sรฌ. Gli strumenti di intelligenza artificiale possono generare diagrammi o animazioni passo passo di inserimenti, divisioni ed eliminazioni per un dato ordine. Questo aiuta gli studenti a capire come si ribilancia l'albero, anche se รจ necessario verificare ogni passaggio rispetto alle regole dell'albero B.

Gli alberi B e le loro varianti indicizzano i grandi dataset e gli archivi vettoriali su cui si basano i sistemi di intelligenza artificiale, garantendo cosรฌ velocitร  nelle ricerche sui dati di addestramento o sugli embedding. รˆ il database, e non il modello, a utilizzare l'albero B per ridurre le letture su disco.

Un nodo di un albero di ricerca binario ha al massimo due figli e una chiave. Un nodo di un albero B puรฒ contenere molte chiavi e molti figli, mantenitoriping L'albero รจ corto e riduce le letture del disco, il che lo rende ideale per database e file system.

La ricerca, l'inserimento e la cancellazione di ogni sequenza richiedono un tempo O(log n), dove n รจ il numero di chiavi. Poichรฉ ogni nodo contiene molte chiavi, l'albero rimane poco profondo, quindi il numero di accessi al disco รจ molto ridotto.

Riassumi questo post con: