c ++中2点之间的最小距离

时间:2011-05-28 14:07:12

标签: c++ complexity-theory time-complexity euclidean-distance

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

我要求找到距离给定点P(x,y)最近的位置; (最小欧几里德距离)

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

3 个答案:

答案 0 :(得分:1)

尝试kd-tree。可以找到高性能库实现here

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

修改

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

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

如果您想要推广到高维度极快的查询,请查看locality sensitive hashing

答案 1 :(得分:0)

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

答案 2 :(得分:0)

Nearest-Neighbor-Problem,是吗?我发现Robert Sedgewick Std Book在这些情况下非常有用。他也描述了Nearest Neighbour Search