复杂性理论-c++中两点之间的最小距离

complexity theory - minimum distance between 2 points in c++

本文关键字:之间 两点 距离 -c++ 理论 复杂性      更新时间:2023-10-16

我有m个位置(x,y坐标)。

我有n个寻找离给定点p(x,y)最近的地方的请求;(最小欧氏距离)

如何解决O(n*m)以下的问题,其中n是请求数,m是位置数?我可以使用欧几里得距离的平方,但它仍然是n*m。

尝试kd树。高性能库实现可以在这里找到。

注意:我指的是一个近似近邻搜索,它针对高维进行了优化。对于您的应用程序来说,这可能有些过头了。

编辑:

对于2d-kd树,构建时间将为O(m*log(m)),查询时间将为0(n*sqrt(m)。如果您的查询数n超过log(m),那么这最终应该是对天真解决方案的净胜利。

库意味着您不必实现它,因此复杂性不应该成为问题。

如果您想推广到高维极快的查询,请查看位置敏感哈希。

有趣。为了减少n的影响,我想知道在遇到和处理每个请求时保存结果是否会有所帮助。一个聪明的结果表可能会在解决后续请求时缩短计算sqrt(x2+y2)的需要。

最近邻问题,嗯?我发现Robert Sedgewick标准书在这些情况下非常有用。他还描述了"最近的邻居搜索"。