gpt4 book ai didi

c++ - 从二维平衡 KD 树中删除元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:01:12 24 4
gpt4 key购买 nike

我想从平衡的 KD 树中删除一个元素,并且树在不重建整棵树的情况下保持平衡。这有可能在不重建整棵树的情况下平衡树吗?如果是那么怎么办?

最佳答案

对于标准的 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 .

关于c++ - 从二维平衡 KD 树中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20187085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com