Ecco come aggiungerei elementi a b-tree.
Grazie a Steve314, per avermi dato l'avvio con la rappresentazione binaria,
Dato sono n elementi da aggiungere, in ordine. Dobbiamo aggiungerlo a m-order b-tree. Prendi i loro indici (1 ... n) e convertilo in radix m. L'idea principale di questo inserimento è di inserire il numero con il bit m-radix più alto al momento e tenerlo al di sopra dei numeri m-radix minori aggiunti nell'albero nonostante la divisione dei nodi.
1,2,3 .. sono indici in modo da inserire effettivamente i numeri a cui puntano.
For example, order-4 tree
4 8 12 highest radix bit numbers
1,2,3 5,6,7 9,10,11 13,14,15
Ora, a seconda dell'ordine mediana può essere:
- ordine è anche -> numero di chiavi sono strano -> mediana è di mezzo (metà mediana)
- ordine è strano -> numero di le chiavi sono pari -> mediana sinistra o mediana destra
La scelta della mediana (sinistra/destra) da promuovere deciderà l'ordine in cui inserire gli elementi. Questo deve essere corretto per l'albero b.
Aggiungo elementi agli alberi in secchi. Per prima cosa aggiungo gli elementi del secchio quindi al completamento del prossimo secchio in ordine. I secchi possono essere facilmente creati se si conosce la mediana, la dimensione del secchio è l'ordine m.
I take left median for promotion. Choosing bucket for insertion.
| 4 | 8 | 12 |
1,2,|3 5,6,|7 9,10,|11 13,14,|15
3 2 1 Order to insert buckets.
- Per la scelta a sinistra-mediana I inserire secchi per l'albero a partire dal lato destro, per la corretta scelta mediana inserisco secchi dal lato sinistro. Scegliendo la mediana a sinistra inseriamo prima la mediana, poi gli elementi a sinistra di essa prima il resto dei numeri nel secchio.
Esempio
Bucket median first
12,
Add elements to left
11,12,
Then after all elements inserted it looks like,
| 12 |
|11 13,14,|
Then I choose the bucket left to it. And repeat the same process.
Median
12
8,11 13,14,
Add elements to left first
12
7,8,11 13,14,
Adding rest
8 | 12
7 9,10,|11 13,14,
Similarly keep adding all the numbers,
4 | 8 | 12
3 5,6,|7 9,10,|11 13,14,
At the end add numbers left out from buckets.
| 4 | 8 | 12 |
1,2,|3 5,6,|7 9,10,|11 13,14,|15
per la metà di mediana (anche di ordine b-alberi) è sufficiente inserire la mediana e quindi tutti i numeri nel secchio.
Per la mediana di destra aggiungo i secchi da sinistra. Per gli elementi all'interno del bucket, prima inserisco elementi mediani, quindi elementi a destra e quindi elementi a sinistra.
Qui stiamo aggiungendo il numero più alto m-radix, e nel processo ho aggiunto i numeri con immediato minore bit m-radix, assicurandosi che il numero più alto m-radix a restare in cima. Qui ho solo due livelli, per più livelli ripeto lo stesso processo in ordine discendente di bit radix.
L'ultimo caso si verifica quando gli elementi rimanenti sono dello stesso bit-radice e non vi sono numeri con un bit-radix inferiore, quindi è sufficiente inserirli e completare la procedura.
Vorrei fare un esempio per 3 livelli, ma è troppo lungo per mostrare. Quindi, per favore prova con altri parametri e dire se funziona.
Penso che la questione non è tanto "possiamo sempre evitare il caso peggiore" tanto quanto "se so le chiavi in anticipo, posso trovare l'ordine di inserzione ideale? " – templatetypedef