Algorithm B+中的批量删除;树

Algorithm B+中的批量删除;树,algorithm,tree,Algorithm,Tree,从B+树中删除单个元素是可以的。 但是,我想知道是否有某种方法可以在至少少于O(nlogn)的时间内删除树中的大量元素 如果链接列表中的大容量元素恰好是连续的,是否可以同时删除树中的大容量元素?通常,否。在某些情况下,是 非常具体地说,您可以从时间O(n)中排序的数据集构建大小为n的B+树。此外,使用大型数据集,您可以使用流式操作在磁盘上进行排序,比执行大量随机搜索要快得多 结果是针对大批量加载的旧数据库建议。“删除索引、加载数据、重建索引。”或者,在您的情况下,如果要删除的数据已排序,您可以构

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


如果链接列表中的大容量元素恰好是连续的,是否可以同时删除树中的大容量元素?

通常,否。在某些情况下,是

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

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

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


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

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

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

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

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


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

另一方面,如果从树中删除一个元素需要
O(nlogn)
时间,那么删除100个元素就需要
O(100*nlogn)
,这仍然是
O(nlogn)
)删除单个元素只需要O(logn)时间。。。。但是,要删除的元素的数量可以从1到n不等。因此,如果是
n
deletions,它将不再是
O(nlogn)
,很好!如果从树中删除单个元素需要
O(nlogn)
时间,那么删除,比如说,100个元素需要
O(100*nlogn)
,这仍然是
O(nlogn)
;)删除单个元素只需要O(logn)时间。。。。但是,要删除的元素的数量可以从1到n不等。因此,如果是
n
deletions,它将不再是
O(nlogn)
,很好!在最坏的情况下是O(log(阶乘(n)),然后是O(nlogn)