これは、要素を b ツリーに追加する方法です。
Steve314 に感謝します。バイナリ表現から始めてくれました。
順番に追加する n 個の要素が与えられます。これを m 次の b ツリーに追加する必要があります。それらのインデックス (1...n) を基数 m に変換します。この挿入の主なアイデアは、現在最高の m 基数ビットを持つ数値を挿入し、ノードの分割にもかかわらず、ツリーに追加されたより小さい m 基数より上に保持することです。
1,2,3.. はインデックスなので、それらが指す数字を実際に挿入します。
For example, order-4 tree
4 8 12 highest radix bit numbers
1,2,3 5,6,7 9,10,11 13,14,15
注文の中央値に応じて、次のようになります。
- 順序が偶数 -> キーの数が奇数 -> 中央値が中間 (mid median)
- 順序が奇数 -> キーの数が偶数 -> 左中央値または右中央値
プロモートする中央値 (左/右) の選択によって、要素を挿入する順序が決まります。これは、b ツリーで修正する必要があります。
バケット内のツリーに要素を追加します。最初にバケット要素を追加し、完了したら次のバケットを順番に追加します。メジアンがわかっている場合、バケットは簡単に作成できます。バケット サイズは次数 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.
- 左中央値を選択した場合は、右側からツリーにバケットを挿入し、右中央値を選択した場合は、左側からバケットを挿入します。左中央値を選択すると、最初に中央値が挿入され、次にその左側の要素が最初に挿入され、次にバケット内の残りの数値が挿入されます。
例
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
ここでは、最大の m 基数を追加しています。その過程で、m 基数のすぐ下のビットで数値を追加し、最大の m 基数が一番上にくるようにしました。ここでは 2 つのレベルしかありません。それ以上のレベルについては、基数ビットの降順で同じプロセスを繰り返します。
最後のケースは、残りの要素が同じ基数ビットであり、基数ビットが小さい数字がない場合です。単純にそれらを挿入して手順を終了します。
3 つのレベルの例を示しますが、長すぎて表示できません。したがって、他のパラメーターを試して、それが機能するかどうかを確認してください。