B +树中的批量删除

时间:2016-05-12 12:49:50

标签: algorithm tree

从B +树中删除单个元素很好。 但是我想知道是否有一些方法可以删除树中大量的元素,至少少于O(nlogn)时间。

如果它们恰好在链表中是连续的,可以同时删除树的批量元素吗?

1 个答案:

答案 0 :(得分:0)

一般来说,没有。在某些情况下,是的。

非常具体地说,您可以在时间n中从排序的数据集构建大小为O(n)的B +树。此外,对于大型数据集,您可以使用流式操作对磁盘进行排序,这样您就可以进行大量随机搜索。

结果是针对大量批量加载的旧数据库建议。 "删除索引,加载数据,重建索引。"或者在您的情况下,如果要删除的数据排序,您可以构建我们想要的数据的排序列表,然后从中构建一个新的B +树。

这种方法的一个变体是有一个B +树,可以记录旧数据被删除一段时间。然后,您可以通过遍历树并快速标记删除内容来进行批量删除。并且只是偶尔通过遍历整个事物来压缩树并重写它。

但总的来说,我建议一次操作数据结构一个元素。因为,我喜欢开玩笑, log(n)是一个常数。对于Google来说,这是一个稍微大一点的常数。