我给了m个位置(x,y坐标)。
我要求找到距离给定点P(x,y)最近的位置; (最小欧几里德距离)
如何解决O(n * m)以下的问题,其中n是请求数量,m是位数?我可以使用平方欧几里德距离,但它仍然是n * m。
答案 0 :(得分:1)
注意:我指的是一个近似的最近邻搜索,它针对高维进行了优化。对于您的应用程序而言,这可能有些过度。
修改强>
对于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。