algorithm - 顺序构建完整的 B 树

标签 algorithm b-tree

如果我有一组排序的数据,我想以一种最适合顺序读取和随机查找的方式将其存储在磁盘上,那么似乎 B 树(或其中一个变体是不错的选择...假设该数据集并不全部适合 RAM)。

问题是可以从一组排序的数据构建完整的 B 树而不进行任何页面拆分吗?以便将排序后的数据按顺序写入磁盘。

最佳答案

根据这些规范构建“B+ 树”很简单。

  1. 选择分支因子 k。
  2. 将排序后的数据写入文件。这是叶子级别。
  3. 要构建下一个最高级别,请扫描当前级别并写出每第 k 项。
  4. 当当前级别有 k 个或更少的项目时停止。

k = 2 的示例:

0 1|2 3|4 5|6 7|8 9
0   2  |4   6  |8
0       4      |8
0               8

现在让我们寻找5。使用二分查找查找顶层中最后一个小于或等于 5 的数字,或 0。查看0对应的下一个最低层的区间:

0       4

现在4:

        4   6

现在再次4:

        4 5

找到了。一般来说,第 j 项对应于下一级的项 jk 至 (j+1)k-1。您还可以线性扫描叶子水平。

关于algorithm - 顺序构建完整的 B 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3401009/

相关文章:

database - Berkeley DB java 版本,Java 中的任何 LGPL 或 BSD 替代品?

algorithm - 通缉 : working Bose-Hibbard Sort implementation preferably in C-like language

c++ - 错误无效转换 C++

image - 查找相似字符串的索引策略

algorithm - 随机选择,按排名加权

mysql - MySQL 索引的 B 树节点中有多少个条目?

pagination - Rust:BTreeMap 相等性+不等性范围查询

algorithm - 获取 n! 行列式的有效方法xn! Maple 中的矩阵

algorithm - 找出绳子的最小长度

python - 滴答函数绘图器