我有一个有趣的挑战,其中B +树是数据文件的索引。该索引必须保存在索引文件中,稍后我们必须从该索引文件将索引加载到内存中。
这是我所拥有的B +树结构,来自http://www.amittai.com/prose/bpt.c
typedef struct node
{
void ** pointers;
int * keys;
struct node * parent;
bool is_leaf;
int num_keys;
} node;
正如您所看到的,树的代码非常整洁且工作正常,所以现在我有一个b +树作为索引。但是,我不能简单地将树中的每个节点写入文件......在那里写的指针不适用于新的执行。如何实现我甚至开始使用B +树创建索引文件?提醒一下,创建索引后,必须使用索引文件将索引加载到内存中。
答案 0 :(得分:1)
将指针转换为id(应该是节点的内存地址与唯一ID之间的一对一对应关系)。然后以后缀顺序遍历你的树或写一些id而不是指针。
要重建树,您只需从文件中读取数据,并查看您看到的每个新ID,为其提供一些内存。 (如果你的id从零开始是连续的,那么你可以使用固定大小的数组快速简单地为哈希表做到这一点。)
如果你想快速加载索引,可能有很多聪明的方法。