【问题标题】:What datastructure to use for a rapidly changing nearest neighbor search?快速变化的最近邻搜索使用什么数据结构?
【发布时间】:2012-12-18 15:02:44
【问题描述】:

我想在 3 到 20 维中存储 50 到 10 000 个向量。我想知道将向量存储在哪个结构中,以便能够快速解决最近邻或近似最近邻问题。我将使用 Euclidean、Manhattan、Max 和加权曼哈顿度量。

我开始研究这个问题并发现(如果我错了,请纠正我)当维数远小于向量数时,kd-trees 会做到这一点。性能可以是深度次线性的 (O(log(n)))。

问题是结构会发生非常迅速的变化。每个向量在程序过程中可以改变数千次。 此外,向量不需要保持它们的大致位置或比例。整个结构可以“穿越”R^n。

问题在于,为了保持 kd-tree 的高性能,需要不时进行重新平衡。此操作可能与重建整棵树一样昂贵。

如何解决kd-tree快速变化的问题?

【问题讨论】:

  • 我无法说出确切的结构,但您应该看看 fpp 游戏引擎。游戏必须解决碰撞和可见物体的问题。他们通过寻找最近的邻居来限制他们的搜索空间。当然场景变化很大

标签: algorithm data-structures computer-science nearest-neighbor


【解决方案1】:

您应该对在不同数据结构上运行的算法进行amortized analysis。结果将根据您正在使用的特定数据结构上的操作顺序而有所不同。

我建议也看看R-tree。查看静态网格可能也是一个好主意,因为如果对数据结构的更新比查询更频繁,更新该结构可能会执行得相当好。

如果对数据结构的更新如此频繁,那么最好不要总是在每次更改时都更新数据结构,而是先使用过时的数据结构,然后搜索所有更改的元素。这样您就可以对数据结构进行批量更改,这可能会更有效率。这是摊销分析也可以回答的一件事。

您还应该查看可用于多维树的文献。他们肯定会找到更高效的数据结构操作的建议或您尚未考虑过的建议。不过我还不能推荐文学作品。

【讨论】:

  • 谢谢!我喜欢批量更改的想法
猜你喜欢
  • 1970-01-01
  • 2015-11-16
  • 2020-05-21
  • 1970-01-01
  • 2020-12-27
  • 2011-05-11
  • 2011-04-26
  • 2011-06-29
  • 2017-12-16
相关资源
最近更新 更多