这就是我将元素添加到 b-tree 的方式。
感谢 Steve314,让我开始使用二进制表示,
给定 n 个要按顺序添加的元素。我们必须将它添加到 m-order b-tree 中。取它们的索引 (1...n) 并将其转换为基数 m。这种插入的主要思想是插入当前具有最高 m-radix 位的数字,并将其保持在树中添加的较小 m-radix 数字之上,尽管节点分裂。
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
现在取决于订单中位数可以是:
- 顺序为偶数 -> 键数为奇数 -> 中位数为中间(中位数)
- 顺序为奇数 -> 键数为偶数 -> 左中位数或右中位数
要提升的中位数(左/右)的选择将决定我应该插入元素的顺序。这必须为 b-tree 修复。
我向桶中的树添加元素。首先,我添加存储桶元素,然后按顺序添加下一个存储桶。如果中值已知,则可以轻松创建存储桶,存储桶大小为 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 基数保持在顶部。这里我只有两个级别,对于更多级别,我按照基数的降序重复相同的过程。
最后一种情况是当剩余元素具有相同的基位并且没有具有较小基位的数字时,只需将它们插入并完成该过程。
我会举一个 3 个级别的例子,但是太长了,无法展示。所以请尝试使用其他参数并判断它是否有效。