从二维平衡KD树中移除元素

时间:2013-11-25 07:41:39

标签: c++ algorithm data-structures tree kdtree

我想从平衡的KD树中删除一个元素,树保持平衡而不重建整个树。这可以平衡树而不重建整棵树吗?如果是,那怎么样?

1 个答案:

答案 0 :(得分:2)

对于标准k-d树,您可以删除项目,但没有重新平衡,因此如果您删除几乎所有项目,您可能最终会得到一个细长的不平衡树。你关心?树实际上并没有更深入:它是不平衡的,但是因为它在创建时是平衡的,所以它永远不会非常深刻。

如果您只关心删除,那么当您删除了一半项目时,您可以从头开始重建树 - 这意味着它永远不会失去平衡。此外,您可以考虑将项目标记为已删除而不是实际删除它们,这可以使一些事情变得更容易。

这是使数据结构动态化或动态化的特殊情况。以log n因子为代价,您可以使数据结构知道如何重建,但不能平衡,动态,以应对插入和删除。基本思想是将动态数据结构构建为具有各种大小的非动态结构的集合,例如2的幂:大多数更改导致您只重建一个或两个较小的非动态结构,但是您需要花费更长的时间来重建较大的间隔。一个非常宽松的例子就是将每日记录保存在活页笔记本中并使用它们在一夜之间更新文件柜。例如,请参阅http://wwwisg.cs.uni-magdeburg.de/ag/lehre/SS2009/GDS/slides/S12.pdfhttp://www.mpi-inf.mpg.de/~mehlhorn/ftp/mehlhorn27.pdf